Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@

@Configuration
public class SwaggerConfig {
@Value("${server.url}")
private String serverUrl;
@Value("${swagger.server.url}")
private String swaggerServerUrl;

@Bean
public OpenAPI openAPI() {
String jwt = "JWT";
Expand All @@ -28,8 +29,11 @@ public OpenAPI openAPI() {
);

ArrayList<Server> servers = new ArrayList<>();
servers.add(new Server().url("https://"+serverUrl).description("AdoongE Server"));
servers.add(new Server().url("http://localhost:8080").description("Local Server"));
if(swaggerServerUrl.contains("localhost")){
servers.add(new Server().url(swaggerServerUrl).description("Local Server"));
}else{
servers.add(new Server().url("https://"+swaggerServerUrl).description("AdoongE Server"));
Comment on lines +32 to +35
Copy link

Copilot AI Jul 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using a substring check to detect localhost URLs is brittle; consider relying on an explicit environment/profile flag or parsing the URL scheme so you can handle various formats and avoid accidental mismatches.

Suggested change
if(swaggerServerUrl.contains("localhost")){
servers.add(new Server().url(swaggerServerUrl).description("Local Server"));
}else{
servers.add(new Server().url("https://"+swaggerServerUrl).description("AdoongE Server"));
try {
java.net.URI uri = new java.net.URI(swaggerServerUrl);
String host = uri.getHost();
if ("localhost".equals(host) || "127.0.0.1".equals(host) || "[::1]".equals(host)) {
servers.add(new Server().url(swaggerServerUrl).description("Local Server"));
} else {
servers.add(new Server().url("https://" + swaggerServerUrl).description("AdoongE Server"));
}
} catch (java.net.URISyntaxException e) {
throw new IllegalArgumentException("Invalid URL format for swaggerServerUrl: " + swaggerServerUrl, e);

Copilot uses AI. Check for mistakes.
}

return new OpenAPI()
.components(new Components())
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/com/adoonge/seedzip/seed/dto/SeedDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,21 @@

@Builder
public record SeedDTO(
@NotNull SeedType seedType,
@NotNull String seedName,
@NotNull SeedType type,
@NotNull String name,
Long thumbnailImage, // ์—†์œผ๋ฉด null
LocalDate dDay, // ์—†์œผ๋ฉด null
String seedDetail, // ์—†์œผ๋ฉด null
String detail, // ์—†์œผ๋ฉด null
Member member
) {

public Seed toEntity() {
return Seed.builder()
.seedName(seedName)
.seedName(name)
.dDay(dDay)
.seedDetail(seedDetail)
.seedDetail(detail)
.thumbnailIdx(thumbnailImage)
.seedType(seedType)
.seedType(type)
.member(member)
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
import java.util.List;

public record SeedDeleteListRequest (
List<Long> seedIdList
List<Long> ids
){
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import java.util.List;

public record SeedFilteringRequest(
List<String> tags,
List<String> tagNames,
String keyword
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
import jakarta.validation.constraints.Size;

public record SeedRequest(
@NotNull SeedType seedType,
String seedName, // ์—†์œผ๋ฉด null
String[] boardCategories,
@NotNull SeedType type,
String name, // ์—†์œผ๋ฉด null
String[] categoryNames, // ์—†์œผ๋ฉด null
Long thumbnailImage, // ์—†์œผ๋ฉด null
String seedLink, // link๋งŒ ํ•ด๋‹น, ๋‚˜๋จธ์ง€ null
@NotNull @Size(min = 2, message = "ํƒœ๊ทธ๋Š” 2๊ฐœ ์ด์ƒ ์„ ํƒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.") String[] tags,
String link, // link๋งŒ ํ•ด๋‹น, ๋‚˜๋จธ์ง€ null
@NotNull @Size(min = 2, message = "ํƒœ๊ทธ๋Š” 2๊ฐœ ์ด์ƒ ์„ ํƒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.") String[] tagNames,
LocalDate dDay, // ์—†์œผ๋ฉด null
String seedDetail // ์—†์œผ๋ฉด null
String detail // ์—†์œผ๋ฉด null
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
import jakarta.validation.constraints.Size;

public record SeedUpdateRequest(
@NotNull SeedType seedType,
String seedName, // ์—†์œผ๋ฉด null
@NotNull String[] boardCategories,
@NotNull SeedType type,
String name, // ์—†์œผ๋ฉด null
@NotNull String[] categoryNames, // ์—†์œผ๋ฉด null
Long thumbnailImage, // ์—†์œผ๋ฉด null
String seedLink, // link๋งŒ ํ•ด๋‹น, ๋‚˜๋จธ์ง€ null
@NotNull @Size(min = 2, message = "ํƒœ๊ทธ๋Š” ์ตœ์†Œ 2๊ฐœ ์ด์ƒ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.") String[] tags,
String link, // link๋งŒ ํ•ด๋‹น, ๋‚˜๋จธ์ง€ null
@NotNull @Size(min = 2, message = "ํƒœ๊ทธ๋Š” ์ตœ์†Œ 2๊ฐœ ์ด์ƒ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.") String[] tagNames,
LocalDate dDay, // ์—†์œผ๋ฉด null
String seedDetail // ์—†์œผ๋ฉด null
String detail // ์—†์œผ๋ฉด null
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,34 +11,34 @@ public class SeedResponse {
public record PageInfo(int page, int size, int totalPages, long totalElements, boolean isLast) {}

@Builder
public record SeedInfo(Long seedId, String seedName, List<Long> categoryId, List<String> categoryName,
SeedType seedType, String thumbnailImage, LocalDateTime updatedDt,
List<Long> tagId, List<String> tagName, int dDay, Boolean isSaved) {}
public record SeedInfo(Long id, String name, List<Long> categoryIds, List<String> categoryNames,
SeedType type, String thumbnailImage, LocalDateTime updatedDt,
List<Long> tagIds, List<String> tagNames, int dDay, Boolean isSaved) {}

@Builder
public record GetAllSeeds(String nickname, List<SeedInfo> seedInfoList, PageInfo pageInfo) {}

@Builder
public record SeedInfoSimple(Long seedId, String seedName){}
public record SeedInfoSimple(Long id, String name){}

@Builder
public record SeedDetail(Long seedId,
SeedType seedType,
String seedName,
String seedLink,
public record SeedDetail(Long id,
SeedType type,
String name,
String link,
List<String> fileLinks,
List<String> titles,
List<String> fileTitles,
Long thumbnailImage,
List<String> categoryNames,
List<String> tagNames,
LocalDate dDay,
String seedDetail){}
String detail){}

@Builder
public record SeedInfoWithSeedDetail(
Long seedId, String seedName, List<Long> categoryId, List<String> categoryName,
SeedType seedType, String thumbnailImage, LocalDateTime updatedDt,
List<Long> tagId, List<String> tagName, int dDay, String seedDetail, Boolean isSaved
Long id, String name, List<Long> categoryIds, List<String> categoryNames,
SeedType type, String thumbnailImage, LocalDateTime updatedDt,
List<Long> tagIds, List<String> tagNames, int dDay, String detail, Boolean isSaved
){}

@Builder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public SeedStatisticsDTO getSeedStatistics(Member member) {
@Override
public Page<Seed> findSeedsByFiltering(Member member, Pageable pageable, SeedType seedType,
SeedFilteringRequest request) {
List<String> tagNames = request.tags();
List<String> tagNames = request.tagNames();
String keyword = request.keyword();

BooleanExpression condition = seed.member.eq(member);
Expand Down Expand Up @@ -108,7 +108,7 @@ public Page<Seed> findSeedsByFiltering(Member member, Pageable pageable, SeedTyp
@Override
public Page<Seed> findCategorySeedsByFiltering(Member member, Pageable pageable, SeedType seedType, Long categoryId,
SeedFilteringRequest request) {
List<String> tagNames = request.tags();
List<String> tagNames = request.tagNames();
String keyword = request.keyword();

BooleanExpression condition = seed.member.eq(member);
Expand Down
60 changes: 30 additions & 30 deletions src/main/java/com/adoonge/seedzip/seed/service/SeedService.java
Original file line number Diff line number Diff line change
Expand Up @@ -138,28 +138,28 @@ public SeedResponse.GetAllSeeds getCategorySeeds(Member member, int page, int si

@Transactional
public SeedResponse.SeedInfoSimple uploadSeed(SeedRequest seedRequest, Member member) {
if(seedRequest.seedType() == SeedType.LINK && seedRequest.seedLink() == null) {
if(seedRequest.type() == SeedType.LINK && seedRequest.link() == null) {
throw SeedzipException.from(ErrorCode.EMPTY_LINK);
}

Seed seed = saveSeed(seedRequest, member);

// ํƒœ๊ทธ ๋ฐ ์นดํ…Œ๊ณ ๋ฆฌ ์ €์žฅ
saveSeedTags(seedRequest.tags(), member, seed);
if(seedRequest.boardCategories() == null) {
saveSeedTags(seedRequest.tagNames(), member, seed);
if(seedRequest.categoryNames() == null) {
saveSeedDefaultCategory(member, seed);
} else {
saveSeedCategories(seedRequest.boardCategories(), member, seed);
saveSeedCategories(seedRequest.categoryNames(), member, seed);
}

if (seedRequest.seedType() == SeedType.LINK) {
fileService.saveLink(seedRequest.seedLink(), seed);
if (seedRequest.type() == SeedType.LINK) {
fileService.saveLink(seedRequest.link(), seed);
}

return SeedResponse.SeedInfoSimple
.builder()
.seedId(seed.getId())
.seedName(seed.getSeedName())
.id(seed.getId())
.name(seed.getSeedName())
.build();
}

Expand Down Expand Up @@ -208,17 +208,17 @@ public SeedResponse.SeedDetail getSeedDetail(Long seedId) {
List<String> tagNames = seedTagRepository.findTagNamesBySeed(seed);

return SeedResponse.SeedDetail.builder()
.seedId(seed.getId())
.seedType(seed.getSeedType())
.seedName(seed.getSeedName())
.seedLink(seedLink)
.id(seed.getId())
.type(seed.getSeedType())
.name(seed.getSeedName())
.link(seedLink)
.fileLinks(fileLinks)
.titles(titles)
.fileTitles(titles)
.thumbnailImage(thumbnailImage)
.categoryNames(categoryNames)
.tagNames(tagNames)
.dDay(seed.getDDay())
.seedDetail(seed.getSeedDetail())
.detail(seed.getSeedDetail())
.build();
}

Expand Down Expand Up @@ -344,12 +344,12 @@ public void deleteSeed(Long id, Member member) {
@Transactional
public SeedResponse.SeedInfoSimple updateSeed(SeedUpdateRequest request,
Long seedId, Member member) {
if(request.seedType() == SeedType.LINK && request.seedLink() == null) {
if(request.type() == SeedType.LINK && request.link() == null) {
throw SeedzipException.from(ErrorCode.EMPTY_LINK);
}

Seed seed = getSeedOrThrow(seedId);
if(!request.seedType().equals(seed.getSeedType())) {
if(!request.type().equals(seed.getSeedType())) {
throw SeedzipException.from(ErrorCode.SEED_TYPE_NOT_SUPPORTED);
}

Expand All @@ -359,33 +359,33 @@ public SeedResponse.SeedInfoSimple updateSeed(SeedUpdateRequest request,
}

// ๊ธฐ๋ณธ ํ•„๋“œ ์ˆ˜์ •
if (!Objects.equals(seed.getSeedName(), request.seedName())) {
seed.updateSeedName(request.seedName());
if (!Objects.equals(seed.getSeedName(), request.name())) {
seed.updateSeedName(request.name());
}
if (!Objects.equals(seed.getDDay(), request.dDay())) {
seed.updateDDay(request.dDay());
}
if (!Objects.equals(seed.getSeedDetail(), request.seedDetail())) {
seed.updateSeedDetail(request.seedDetail());
if (!Objects.equals(seed.getSeedDetail(), request.detail())) {
seed.updateSeedDetail(request.detail());
}
if (!Objects.equals(seed.getThumbnailIdx(), request.thumbnailImage())) {
seed.updateThumbnailIdx(request.thumbnailImage());
}

// ํƒœ๊ทธ
seedTagRepository.deleteAllBySeedId(seedId);
saveSeedTags(request.tags(), member, seed);
saveSeedTags(request.tagNames(), member, seed);

// ์นดํ…Œ๊ณ ๋ฆฌ
categorySeedRepository.deleteAllBySeedId(seedId);
saveSeedCategories(request.boardCategories(), member, seed);
saveSeedCategories(request.categoryNames(), member, seed);

if (seed.getSeedType().equals(SeedType.LINK)) {
File file = fileRepository.findBySeed(seed).orElseThrow(
() -> SeedzipException.from(ErrorCode.FILE_NOT_FOUND)
);
if (!Objects.equals(file.getLink(), request.seedLink())) {
file.updateLink(request.seedLink());
if (!Objects.equals(file.getLink(), request.link())) {
file.updateLink(request.link());
}
} else { // ์ด๋ฏธ์ง€, PDF
deleteFileFromS3(seedId, seed);
Expand All @@ -394,8 +394,8 @@ public SeedResponse.SeedInfoSimple updateSeed(SeedUpdateRequest request,

Seed updatedSeed = seedRepository.save(seed);
return SeedResponse.SeedInfoSimple.builder()
.seedId(updatedSeed.getId())
.seedName(updatedSeed.getSeedName())
.id(updatedSeed.getId())
.name(updatedSeed.getSeedName())
.build();
}

Expand Down Expand Up @@ -450,7 +450,7 @@ public SeedResponse.GetAllSeeds getUnreadSeeds(Member member, int page, int size

@Transactional
public void deleteSeedList(SeedDeleteListRequest request, Member member) {
List<Long> seedIds = request.seedIdList();
List<Long> seedIds = request.ids();
if (seedIds.isEmpty()) return;

List<Seed> seeds = seedRepository.findAllByIdIn(seedIds);
Expand Down Expand Up @@ -554,11 +554,11 @@ private SeedProjectionResult getSeedProjectionResult(List<Long> seedIds) {

private Seed saveSeed(SeedRequest seedRequest, Member member) {
SeedDTO seedDTO = SeedDTO.builder()
.seedName(seedRequest.seedName() == null ? LocalDate.now().toString() : seedRequest.seedName())
.seedDetail(seedRequest.seedDetail())
.name(seedRequest.name() == null ? LocalDate.now().toString() : seedRequest.name())
.detail(seedRequest.detail())
.thumbnailImage(seedRequest.thumbnailImage() == null ? 0 : seedRequest.thumbnailImage())
.dDay(seedRequest.dDay())
.seedType(seedRequest.seedType())
.type(seedRequest.type())
.member(member)
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;

@RestController
@RequestMapping("/api/v2/simplification")
//@RestController
//@RequestMapping("/api/v2/simplification")
@RequiredArgsConstructor
@Tag(name = "SimplificationController V2", description = "์ œ๋ชฉ, ์š”์•ฝ, ํƒœ๊ทธ ๊ฐ„๋žตํ™” ๊ด€๋ จ API V2")
//@Tag(name = "SimplificationController V2", description = "์ œ๋ชฉ, ์š”์•ฝ, ํƒœ๊ทธ ๊ฐ„๋žตํ™” ๊ด€๋ จ API V2")
public class SimplificationControllerV2 {

private final SimplificationService simplificationService;
Expand Down
7 changes: 7 additions & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,16 @@ springdoc:
show-login-endpoint: true
swagger-ui:
path: /swagger-ui.html
groups-order: desc
tags_sorter: alpha
operations_sorter: method # delete - get - patch - post - put ์ •๋ ฌ
api-docs:
path: /v1/api-docs

swagger:
server:
url: ${SWAGGER_URL}

kakao:
api:
key: ${KAKAO_API_KEY}
Expand Down