Skip to content

Commit c9a16d8

Browse files
authored
Merge pull request #175 from GoToBILL/docs/swagger-nullable-specification
docs: ActivityAlertResponseDTO에 Swagger nullable 명시했습니다.
2 parents b5d0227 + 9e39315 commit c9a16d8

10 files changed

+116
-48
lines changed

src/main/java/com/example/cherrydan/activity/dto/ActivityAlertResponseDTO.java

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,40 +15,41 @@
1515
@Builder
1616
@Schema(description = "활동 알림 응답 DTO")
1717
public class ActivityAlertResponseDTO {
18-
19-
@Schema(description = "알림 ID", example = "1")
18+
19+
@Schema(description = "알림 ID", example = "1", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2020
private Long id;
21-
22-
@Schema(description = "캠페인 ID", example = "123")
21+
22+
@Schema(description = "캠페인 ID", example = "123", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2323
private Long campaignId;
24-
25-
@Schema(description = "캠페인 제목", example = "[양주] 리치마트 양주점_피드&릴스")
24+
25+
@Schema(description = "알림 타이틀", example = "방문 알림", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
26+
private String alertTitle;
27+
28+
@Schema(description = "dDay 알림 타이틀", example = "D-3", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
29+
private String dayTitle;
30+
31+
@Schema(description = "캠페인 타이틀", example = "[양주] 리치마트 양주점_피드&릴스", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2632
private String campaignTitle;
27-
28-
@Schema(description = "신청 마감일", example = "2024-07-24")
29-
private LocalDate applyEndDate;
30-
31-
@Schema(description = "알림 날짜", example = "2024-07-21")
33+
34+
@Schema(description = "며칠 남았는 지", example = "피드&릴스 방문일이 3일 남았습니다.", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
35+
private String alertBody;
36+
37+
@Schema(description = "알림 날짜", example = "2024-07-21", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
3238
private LocalDate alertDate;
33-
34-
@Schema(description = "읽음 여부", example = "false")
39+
40+
@Schema(description = "읽음 여부", example = "false", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
3541
private Boolean isRead;
36-
37-
@Schema(description = "D-day (마감까지 남은 일수)", example = "3")
38-
private Integer dDay;
3942

4043
public static ActivityAlertResponseDTO fromEntity(ActivityAlert activityAlert) {
41-
final int FIXED_D_DAY = 3;
42-
LocalDate applyEndDate = activityAlert.getCampaign().getApplyEnd();
43-
4444
return ActivityAlertResponseDTO.builder()
4545
.id(activityAlert.getId())
4646
.campaignId(activityAlert.getCampaign().getId())
47+
.alertTitle(activityAlert.getAlertType().getTitle())
48+
.dayTitle(activityAlert.getAlertType().getDDayLabel())
4749
.campaignTitle(activityAlert.getCampaign().getTitle())
48-
.applyEndDate(applyEndDate)
50+
.alertBody(activityAlert.getAlertType().getMessageTemplate())
4951
.alertDate(activityAlert.getAlertDate())
5052
.isRead(activityAlert.getIsRead())
51-
.dDay(FIXED_D_DAY)
5253
.build();
5354
}
5455
}

src/main/java/com/example/cherrydan/campaign/controller/CampaignStatusController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.example.cherrydan.campaign.dto.CampaignStatusRequestDTO;
44
import com.example.cherrydan.campaign.dto.CampaignStatusResponseDTO;
5-
import com.example.cherrydan.campaign.dto.CampaignStatusListResponseDTO;
65
import com.example.cherrydan.campaign.dto.CampaignStatusCountResponseDTO;
76
import com.example.cherrydan.campaign.domain.CampaignStatusType;
87
import com.example.cherrydan.common.response.EmptyResponse;

src/main/java/com/example/cherrydan/campaign/dto/CampaignResponseDTO.java

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,35 @@
1717
@Getter
1818
@Builder
1919
public class CampaignResponseDTO {
20+
@Schema(description = "캠페인 ID", example = "1", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2021
private Long id;
22+
23+
@Schema(description = "캠페인 제목", example = "[양주] 리치마트 양주점_피드&릴스", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2124
private String title;
25+
26+
@Schema(description = "캠페인 상세 URL", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2227
private String detailUrl;
28+
29+
@Schema(description = "혜택 정보", example = "5만원 상당 체험권 제공", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
2330
private String benefit;
31+
32+
@Schema(description = "마감 상태 메시지", example = "신청 마감 3일 전", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
2433
private String reviewerAnnouncementStatus;
34+
35+
@Schema(description = "신청자 수", example = "150", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
2536
private Integer applicantCount;
37+
38+
@Schema(description = "모집 인원", example = "10", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
2639
private Integer recruitCount;
2740

2841
@Deprecated
29-
@Schema(description = "플랫폼 이름(deprecated(v1.0.2까지))", deprecated = true)
42+
@Schema(description = "플랫폼 이름(deprecated)", deprecated = true, nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
3043
@JsonProperty("campaignSite")
3144
private String sourceSite;
45+
46+
@Schema(description = "캠페인 이미지 URL", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
3247
private String imageUrl;
48+
3349
@JsonIgnore private Boolean youtube;
3450
@JsonIgnore private Boolean shorts;
3551
@JsonIgnore private Boolean insta;
@@ -39,16 +55,27 @@ public class CampaignResponseDTO {
3955
@JsonIgnore private Boolean tiktok;
4056
@JsonIgnore private Boolean thread;
4157
@JsonIgnore private Boolean etc;
58+
59+
@Schema(description = "북마크 여부", example = "false", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
4260
private Boolean isBookmarked;
4361

4462
@Deprecated
45-
@Schema(description = "기존 플랫폼 이미지 URL(deprecated(v1.0.2까지))", deprecated = true)
63+
@Schema(description = "기존 플랫폼 이미지 URL(deprecated)", deprecated = true, nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
4664
private String campaignPlatformImageUrl;
47-
65+
66+
@Schema(description = "캠페인 플랫폼 이미지 URL", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
4867
private String campaignSiteUrl;
68+
69+
@Schema(description = "캠페인 플랫폼 한글명", example = "레뷰", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
4970
private String campaignSiteKr;
71+
72+
@Schema(description = "캠페인 플랫폼 영문 코드", example = "revu", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
5073
private String campaignSiteEn;
74+
75+
@Schema(description = "캠페인 타입", example = "DELIVERY", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
5176
private CampaignType campaignType;
77+
78+
@Schema(description = "경쟁률", example = "15.0", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
5279
private Float competitionRate;
5380

5481
@JsonProperty("snsPlatforms")

src/main/java/com/example/cherrydan/campaign/dto/CampaignSiteResponseDTO.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,23 @@
1515
public class CampaignSiteResponseDTO {
1616

1717
@Deprecated
18-
@Schema(description = "기존 플랫폼 한글명(deprecated(v1.0.2까지))", deprecated = true)
18+
@Schema(description = "기존 플랫폼 한글명(deprecated)", deprecated = true, nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
1919
private String siteNameKr;
2020

2121
@Deprecated
22-
@Schema(description = "기존 플랫폼 영문명(deprecated(v1.0.2까지))", deprecated = true)
22+
@Schema(description = "기존 플랫폼 영문명(deprecated)", deprecated = true, nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
2323
private String siteNameEn;
2424

2525
@Deprecated
26-
@Schema(description = "기존 플랫폼 CDN URL(deprecated(v1.0.2까지))", deprecated = true)
26+
@Schema(description = "기존 플랫폼 CDN URL(deprecated)", deprecated = true, nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
2727
private String cdnUrl;
2828

29+
@Schema(description = "캠페인 플랫폼 이미지 URL", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2930
private String campaignSiteUrl;
31+
32+
@Schema(description = "캠페인 플랫폼 한글명", example = "레뷰", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
3033
private String campaignSiteKr;
34+
35+
@Schema(description = "캠페인 플랫폼 영문 코드", example = "revu", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
3136
private String campaignSiteEn;
3237
}

src/main/java/com/example/cherrydan/campaign/dto/CampaignStatusBatchRequestDTO.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
public class CampaignStatusBatchRequestDTO {
1717

1818
@NotEmpty(message = "캠페인 ID 목록은 필수입니다.")
19-
@Schema(description = "업데이트할 캠페인 ID 목록", example = "[1, 2, 3]", required = true)
19+
@Schema(description = "업데이트할 캠페인 ID 목록", example = "[1, 2, 3]", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2020
private List<Long> campaignIds;
21-
22-
@Schema(description = "변경할 캠페인 상태", example = "SELECTED", allowableValues = {"APPLY", "SELECTED", "NOT_SELECTED", "REVIEWING", "ENDED"})
21+
22+
@Schema(description = "변경할 캠페인 상태", example = "SELECTED", allowableValues = {"APPLY", "SELECTED", "NOT_SELECTED", "REVIEWING", "ENDED"}, nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2323
private CampaignStatusType status;
24-
25-
@Schema(description = "활성 상태 여부", example = "true")
24+
25+
@Schema(description = "활성 상태 여부", example = "true", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
2626
private Boolean isActive;
2727
}

src/main/java/com/example/cherrydan/campaign/dto/CampaignStatusPopupByTypeResponseDTO.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
@Builder
1111
@Schema(description = "특정 상태의 내 체험단 팝업용 응답 DTO")
1212
public class CampaignStatusPopupByTypeResponseDTO {
13-
@Schema(description = "상태 타입", example = "APPLY")
13+
@Schema(description = "상태 타입", example = "APPLY", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
1414
private CampaignStatusType statusType;
15-
16-
@Schema(description = "총 개수", example = "4")
15+
16+
@Schema(description = "총 개수", example = "4", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
1717
private long totalCount;
18-
19-
@Schema(description = "팝업 아이템 리스트 (최대 4개)")
18+
19+
@Schema(description = "팝업 아이템 리스트 (최대 4개)", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2020
private List<CampaignStatusPopupItemDTO> items;
2121
}

src/main/java/com/example/cherrydan/campaign/dto/CampaignStatusRequestDTO.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,13 @@
1010
@Setter
1111
public class CampaignStatusRequestDTO {
1212
@NotNull(message = "캠페인 ID는 필수입니다.")
13+
@Schema(description = "캠페인 ID", example = "123", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
1314
private Long campaignId;
15+
1416
@NotNull(message = "상태는 필수입니다.")
15-
@Schema(description = "캠페인 상태 타입 (APPLY: 지원한 공고, SELECTED: 선정 결과, NOT_SELECTED: 미선정 결과, REVIEWING: 리뷰 작성 중, ENDED: 작성 완료)", example = "APPLY", allowableValues = {"APPLY", "SELECTED", "NOT_SELECTED", "REVIEWING", "ENDED"})
17+
@Schema(description = "캠페인 상태 타입 (APPLY: 지원한 공고, SELECTED: 선정 결과, NOT_SELECTED: 미선정 결과, REVIEWING: 리뷰 작성 중, ENDED: 작성 완료)", example = "APPLY", allowableValues = {"APPLY", "SELECTED", "NOT_SELECTED", "REVIEWING", "ENDED"}, nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
1618
private CampaignStatusType status;
19+
20+
@Schema(description = "활성 상태 여부", example = "true", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
1721
private Boolean isActive;
1822
}

src/main/java/com/example/cherrydan/campaign/dto/CampaignStatusResponseDTO.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,48 @@
1818
@Builder
1919
@Schema(description = "캠페인 상태 응답 DTO")
2020
public class CampaignStatusResponseDTO {
21+
@Schema(description = "캠페인 상태 ID", example = "1", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2122
private Long id;
23+
24+
@Schema(description = "캠페인 ID", example = "123", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2225
private Long campaignId;
26+
27+
@Schema(description = "사용자 ID", example = "456", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2328
private Long userId;
29+
30+
@Schema(description = "마감 상태 메시지", example = "발표 3일 전", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
2431
private String reviewerAnnouncementStatus;
25-
@Schema(description = "상태 보조 라벨 (예: APPLY의 경우 waiting/completed)")
32+
33+
@Schema(description = "상태 보조 라벨 (예: APPLY의 경우 waiting/completed)", example = "waiting", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
2634
private String subStatusLabel;
35+
36+
@Schema(description = "캠페인 제목", example = "[양주] 리치마트 양주점_피드&릴스", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2737
private String campaignTitle;
38+
39+
@Schema(description = "혜택 정보", example = "5만원 상당 체험권 제공", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
2840
private String benefit;
41+
42+
@Schema(description = "캠페인 상세 URL", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2943
private String campaignDetailUrl;
44+
45+
@Schema(description = "캠페인 이미지 URL", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
3046
private String campaignImageUrl;
47+
48+
@Schema(description = "캠페인 플랫폼 이미지 URL", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
3149
private String campaignPlatformImageUrl;
50+
51+
@Schema(description = "신청자 수", example = "150", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
3252
private int applicantCount;
53+
54+
@Schema(description = "모집 인원", example = "10", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
3355
private int recruitCount;
56+
57+
@Schema(description = "SNS 플랫폼 목록", example = "[\"인스타그램\", \"블로그\"]", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
3458
private List<String> snsPlatforms;
59+
60+
@Schema(description = "캠페인 사이트명", example = "레뷰", nullable = true, requiredMode = Schema.RequiredMode.NOT_REQUIRED)
3561
private String campaignSite;
62+
3663
@JsonIgnore private LocalDate reviewerAnnouncement;
3764
@JsonIgnore private LocalDate contentSubmissionEnd;
3865
@JsonIgnore private LocalDate resultAnnouncement;

src/main/java/com/example/cherrydan/user/dto/KeywordCampaignAlertResponseDTO.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@
1515
@Builder
1616
@Schema(description = "키워드 캠페인 알림 응답 DTO")
1717
public class KeywordCampaignAlertResponseDTO {
18-
19-
@Schema(description = "알림 ID", example = "1")
18+
19+
@Schema(description = "알림 ID", example = "1", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2020
private Long id;
21-
22-
@Schema(description = "매칭된 키워드", example = "뷰티")
21+
22+
@Schema(description = "매칭된 키워드", example = "뷰티", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2323
private String keyword;
24-
25-
@Schema(description = "읽음 상태", example = "false")
24+
25+
@Schema(description = "읽음 상태", example = "false", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2626
private Boolean isRead;
2727

28-
@Schema(description = "매칭된 캠페인 수", example = "10")
28+
@Schema(description = "매칭된 캠페인 수", example = "10", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
2929
private Integer campaignCount;
3030

31-
@Schema(description = "알림 날짜", example = "2024-07-21")
31+
@Schema(description = "알림 날짜", example = "2024-07-21", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
3232
private LocalDate alertDate;
3333

3434
/**

src/main/java/com/example/cherrydan/user/dto/UserKeywordResponseDTO.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.example.cherrydan.user.dto;
22

33
import com.example.cherrydan.user.domain.UserKeyword;
4+
import io.swagger.v3.oas.annotations.media.Schema;
45
import lombok.AllArgsConstructor;
56
import lombok.Builder;
67
import lombok.Data;
@@ -10,8 +11,12 @@
1011
@NoArgsConstructor
1112
@AllArgsConstructor
1213
@Builder
14+
@Schema(description = "사용자 키워드 응답")
1315
public class UserKeywordResponseDTO {
16+
@Schema(description = "키워드 ID", example = "1", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
1417
private Long id;
18+
19+
@Schema(description = "키워드", example = "뷰티", nullable = false, requiredMode = Schema.RequiredMode.REQUIRED)
1520
private String keyword;
1621

1722
public static UserKeywordResponseDTO fromKeyword(UserKeyword keyword) {

0 commit comments

Comments
 (0)