Skip to content

Commit fc04df9

Browse files
authored
merge: admin 행사 티켓 라운드+타입 수정 API - #143
feat: admin 행사 티켓 라운드+타입 수정 API - #143
2 parents fc5eb28 + 257ba45 commit fc04df9

File tree

23 files changed

+252
-16
lines changed

23 files changed

+252
-16
lines changed

src/main/java/com/permitseoul/permitserver/domain/admin/event/api/controller/AdminEventController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public ResponseEntity<BaseResponse<?>> createEvent(
3838
@RequestBody @Valid final AdminEventWithTicketCreateRequest adminEventWithTicketCreateRequest
3939
) {
4040
adminEventService.createEventWithTickets(adminEventWithTicketCreateRequest);
41-
return ApiResponseUtil.success(SuccessCode.OK);
41+
return ApiResponseUtil.success(SuccessCode.CREATED);
4242
}
4343

4444
//어드민 행사 수정 API

src/main/java/com/permitseoul/permitserver/domain/admin/event/api/dto/res/AdminEventDetailResponse.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.permitseoul.permitserver.domain.admin.event.api.dto.res;
22

3+
import com.permitseoul.permitserver.domain.event.core.domain.EventType;
4+
35
import java.util.List;
46

57
public record AdminEventDetailResponse(
@@ -10,6 +12,7 @@ public record AdminEventDetailResponse(
1012
String eventExposureEndTime,
1113
String verificationCode,
1214
String name,
15+
EventType eventType,
1316
String startDate,
1417
String startTime,
1518
String endDate,
@@ -28,6 +31,7 @@ public static AdminEventDetailResponse of(final long eventId,
2831
final String eventExposureEndTime,
2932
final String verificationCode,
3033
final String name,
34+
final EventType eventType,
3135
final String startDate,
3236
final String startTime,
3337
final String endDate,
@@ -45,6 +49,7 @@ public static AdminEventDetailResponse of(final long eventId,
4549
eventExposureEndTime,
4650
verificationCode,
4751
name,
52+
eventType,
4853
startDate,
4954
startTime,
5055
endDate,

src/main/java/com/permitseoul/permitserver/domain/admin/event/api/service/AdminEventService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,11 @@
1212
import com.permitseoul.permitserver.domain.admin.eventimage.core.component.AdminEventImageRemover;
1313
import com.permitseoul.permitserver.domain.admin.eventimage.core.component.AdminEventImageRetriever;
1414
import com.permitseoul.permitserver.domain.admin.eventimage.core.component.AdminEventImageSaver;
15-
import com.permitseoul.permitserver.domain.admin.ticketround.core.AdminTicketRoundRetriever;
16-
import com.permitseoul.permitserver.domain.admin.ticketround.core.AdminTicketRoundSaver;
15+
import com.permitseoul.permitserver.domain.admin.ticketround.core.component.AdminTicketRoundRetriever;
16+
import com.permitseoul.permitserver.domain.admin.ticketround.core.component.AdminTicketRoundSaver;
1717
import com.permitseoul.permitserver.domain.admin.tickettype.core.component.AdminTicketTypeRetriever;
1818
import com.permitseoul.permitserver.domain.admin.tickettype.core.component.AdminTicketTypeSaver;
1919
import com.permitseoul.permitserver.domain.event.core.domain.Event;
20-
import com.permitseoul.permitserver.domain.event.core.domain.EventType;
2120
import com.permitseoul.permitserver.domain.event.core.domain.entity.EventEntity;
2221
import com.permitseoul.permitserver.domain.event.core.exception.EventIllegalArgumentException;
2322
import com.permitseoul.permitserver.domain.eventimage.core.domain.EventImage;
@@ -95,6 +94,7 @@ public AdminEventDetailResponse getEventDetail(final long eventId) {
9594
DateFormatterUtil.formatHHmm(event.getVisibleEndAt()),
9695
event.getTicketCheckCode(),
9796
event.getName(),
97+
event.getEventType(),
9898
DateFormatterUtil.formatyyyyMMdd(event.getStartAt()),
9999
DateFormatterUtil.formatHHmm(event.getStartAt()),
100100
DateFormatterUtil.formatyyyyMMdd(event.getEndAt()),

src/main/java/com/permitseoul/permitserver/domain/admin/guest/api/controller/AdminGuestController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@ public ResponseEntity<BaseResponse<?>> addGuest(
3434
guestAddRequest.phoneNumber(),
3535
guestAddRequest.email()
3636
);
37-
return ApiResponseUtil.success(SuccessCode.OK);
37+
return ApiResponseUtil.success(SuccessCode.CREATED);
3838
}
3939
}

src/main/java/com/permitseoul/permitserver/domain/admin/guestticket/api/controller/AdminGuestTicketController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public ResponseEntity<BaseResponse<?>> issueGuestTickets(
2626
@RequestBody @Valid GuestTicketIssueRequest guestTicketIssueRequest
2727
) {
2828
adminGuestTicketService.issueGuestTickets(guestTicketIssueRequest.eventId(), guestTicketIssueRequest.guestTicketList());
29-
return ApiResponseUtil.success(SuccessCode.OK);
29+
return ApiResponseUtil.success(SuccessCode.CREATED);
3030
}
3131

3232
}

src/main/java/com/permitseoul/permitserver/domain/admin/ticket/api/controller/AdminTicketController.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.permitseoul.permitserver.domain.admin.ticket.api.controller;
22

33
import com.permitseoul.permitserver.domain.admin.ticket.api.dto.req.TicketRoundWithTypeCreateRequest;
4+
import com.permitseoul.permitserver.domain.admin.ticket.api.dto.req.TicketRoundWithTypeUpdateRequest;
45
import com.permitseoul.permitserver.domain.admin.ticket.api.service.AdminTicketService;
56
import com.permitseoul.permitserver.global.response.ApiResponseUtil;
67
import com.permitseoul.permitserver.global.response.BaseResponse;
@@ -45,6 +46,15 @@ public ResponseEntity<BaseResponse<?>> createTicketRoundWithType(
4546
ticketRoundWithTypeCreateRequest.ticketRoundSalesEndDate(),
4647
ticketRoundWithTypeCreateRequest.ticketTypes()
4748
);
49+
return ApiResponseUtil.success(SuccessCode.CREATED);
50+
}
51+
52+
//admin 행사 티켓 라운드+타입 수정 API
53+
@PatchMapping
54+
public ResponseEntity<BaseResponse<?>> updateTicketRoundWithType(
55+
@RequestBody @Valid final TicketRoundWithTypeUpdateRequest ticketRoundWithTypeUpdateRequest
56+
) {
57+
adminTicketService.updateTicketRoundWithType(ticketRoundWithTypeUpdateRequest);
4858
return ApiResponseUtil.success(SuccessCode.OK);
4959
}
5060
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.permitseoul.permitserver.domain.admin.ticket.api.dto.req;
2+
3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import jakarta.validation.constraints.NotBlank;
5+
import jakarta.validation.constraints.NotNull;
6+
import jakarta.validation.constraints.Positive;
7+
8+
import java.math.BigDecimal;
9+
import java.time.LocalDateTime;
10+
import java.util.List;
11+
12+
public record TicketRoundWithTypeUpdateRequest(
13+
@NotNull(message = "티켓라운드 ID는 필수입니다.")
14+
Long ticketRoundId,
15+
16+
@NotBlank(message = "티켓라운드 이름은 필수입니다.")
17+
String ticketRoundName,
18+
19+
@NotNull(message = "티켓라운드 판매 시작일은 필수입니다.")
20+
@JsonFormat(pattern = "yyyy.MM.dd HH:mm")
21+
LocalDateTime ticketRoundSalesStartDate,
22+
23+
@NotNull(message = "티켓라운드 판매 종료일은 필수입니다.")
24+
@JsonFormat(pattern = "yyyy.MM.dd HH:mm")
25+
LocalDateTime ticketRoundSalesEndDate,
26+
27+
@NotNull(message = "티켓타입 리스트는 필수입니다.")
28+
List<TicketTypeUpdateRequest> ticketTypes
29+
) {
30+
public record TicketTypeUpdateRequest(
31+
32+
//새로 추가된 타입일 경우 null
33+
Long id,
34+
35+
@NotBlank(message = "티켓타입 이름은 필수입니다.")
36+
String name,
37+
38+
@NotNull(message = "티켓타입 가격은 필수입니다.")
39+
@Positive(message = "티켓타입 가격은 0보다 커야 합니다.")
40+
BigDecimal price,
41+
42+
@NotNull(message = "티켓타입 총 개수는 필수입니다.")
43+
@Positive(message = "티켓타입 총 개수는 0보다 커야 합니다.")
44+
Integer totalCount,
45+
46+
@NotNull(message = "티켓타입 시작일은 필수입니다.")
47+
@JsonFormat(pattern = "yyyy.MM.dd HH:mm")
48+
LocalDateTime startDate,
49+
50+
@NotNull(message = "티켓타입 종료일은 필수입니다.")
51+
@JsonFormat(pattern = "yyyy.MM.dd HH:mm")
52+
LocalDateTime endDate
53+
) {}
54+
}

src/main/java/com/permitseoul/permitserver/domain/admin/ticket/api/service/AdminTicketService.java

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,24 @@
22

33
import com.permitseoul.permitserver.domain.admin.base.api.exception.AdminApiException;
44
import com.permitseoul.permitserver.domain.admin.ticket.api.dto.req.TicketRoundWithTypeCreateRequest;
5+
import com.permitseoul.permitserver.domain.admin.ticket.api.dto.req.TicketRoundWithTypeUpdateRequest;
56
import com.permitseoul.permitserver.domain.admin.ticket.api.dto.res.TicketRoundAndTicketTypeRes;
67
import com.permitseoul.permitserver.domain.admin.ticket.api.dto.res.TicketRoundAndTypeDetailRes;
78
import com.permitseoul.permitserver.domain.admin.ticket.core.component.AdminTicketRetriever;
8-
import com.permitseoul.permitserver.domain.admin.ticketround.core.AdminTicketRoundRetriever;
9-
import com.permitseoul.permitserver.domain.admin.ticketround.core.AdminTicketRoundSaver;
9+
import com.permitseoul.permitserver.domain.admin.ticketround.core.component.AdminTicketRoundRetriever;
10+
import com.permitseoul.permitserver.domain.admin.ticketround.core.component.AdminTicketRoundSaver;
11+
import com.permitseoul.permitserver.domain.admin.ticketround.core.component.AdminTicketRoundUpdater;
1012
import com.permitseoul.permitserver.domain.admin.ticketround.exception.AdminTicketRoundNotFoundException;
1113
import com.permitseoul.permitserver.domain.admin.tickettype.core.component.AdminTicketTypeRetriever;
1214
import com.permitseoul.permitserver.domain.admin.tickettype.core.component.AdminTicketTypeSaver;
15+
import com.permitseoul.permitserver.domain.admin.tickettype.core.component.AdminTicketTypeUpdater;
16+
import com.permitseoul.permitserver.domain.admin.tickettype.core.exception.AdminTicketTypeNotFoundException;
1317
import com.permitseoul.permitserver.domain.ticket.core.domain.TicketStatus;
18+
import com.permitseoul.permitserver.domain.ticketround.core.component.TicketRoundRetriever;
1419
import com.permitseoul.permitserver.domain.ticketround.core.domain.TicketRound;
20+
import com.permitseoul.permitserver.domain.ticketround.core.domain.entity.TicketRoundEntity;
1521
import com.permitseoul.permitserver.domain.ticketround.core.exception.TicketRoundIllegalArgumentException;
22+
import com.permitseoul.permitserver.domain.ticketround.core.exception.TicketRoundNotFoundException;
1623
import com.permitseoul.permitserver.domain.tickettype.core.domain.TicketType;
1724
import com.permitseoul.permitserver.domain.tickettype.core.domain.entity.TicketTypeEntity;
1825
import com.permitseoul.permitserver.domain.tickettype.core.exception.TicketTypeIllegalException;
@@ -26,6 +33,7 @@
2633
import java.time.LocalDateTime;
2734
import java.util.Comparator;
2835
import java.util.List;
36+
import java.util.Objects;
2937

3038
@Service
3139
@RequiredArgsConstructor
@@ -35,9 +43,12 @@ public class AdminTicketService {
3543
private final AdminTicketRetriever adminTicketRetriever;
3644
private final AdminTicketRoundSaver adminTicketRoundSaver;
3745
private final AdminTicketTypeSaver adminTicketTypeSaver;
46+
private final AdminTicketRoundUpdater adminTicketRoundUpdater;
3847

3948
private static final int EMPTY_TICKET_COUNT_ZERO = 0;
4049
private static final List<TicketStatus> SOLD_STATUSES = List.of(TicketStatus.RESERVED, TicketStatus.USED);
50+
private final TicketRoundRetriever ticketRoundRetriever;
51+
private final AdminTicketTypeUpdater adminTicketTypeUpdater;
4152

4253
@Transactional(readOnly = true)
4354
public TicketRoundAndTypeDetailRes getTicketRoundAndTypeDetails(final long ticketRoundId) {
@@ -114,6 +125,51 @@ public void createTicketRoundWithType(final long eventId,
114125
}
115126
}
116127

128+
@Transactional
129+
public void updateTicketRoundWithType(final TicketRoundWithTypeUpdateRequest updateRequest) {
130+
try {
131+
final TicketRoundEntity ticketRoundEntity = ticketRoundRetriever.findTicketRoundEntityById(updateRequest.ticketRoundId());
132+
adminTicketRoundUpdater.updateTicketRound(
133+
ticketRoundEntity,
134+
updateRequest.ticketRoundName(),
135+
updateRequest.ticketRoundSalesStartDate(),
136+
updateRequest.ticketRoundSalesEndDate()
137+
);
138+
139+
for(TicketRoundWithTypeUpdateRequest.TicketTypeUpdateRequest ticketTypeUpdateRequest: updateRequest.ticketTypes()) {
140+
if(ticketTypeUpdateRequest.id() == null) {
141+
adminTicketTypeSaver.saveTicketType(
142+
ticketRoundEntity.getTicketRoundId(),
143+
ticketTypeUpdateRequest.name(),
144+
ticketTypeUpdateRequest.price(),
145+
ticketTypeUpdateRequest.totalCount(),
146+
ticketTypeUpdateRequest.startDate(),
147+
ticketTypeUpdateRequest.endDate()
148+
);
149+
} else {
150+
final TicketTypeEntity ticketTypeEntity = adminTicketTypeRetriever.getTicketTypeEntityById(ticketTypeUpdateRequest.id());
151+
if(!Objects.equals(ticketTypeEntity.getTicketRoundId(), ticketRoundEntity.getTicketRoundId())) {
152+
throw new AdminApiException(ErrorCode.BAD_REQUEST_MISMATCH_TICKET_TYPE_ROUND);
153+
}
154+
adminTicketTypeUpdater.updateTicketType(
155+
ticketTypeEntity,
156+
ticketTypeUpdateRequest.name(),
157+
ticketTypeUpdateRequest.price(),
158+
ticketTypeUpdateRequest.totalCount(),
159+
ticketTypeUpdateRequest.startDate(),
160+
ticketTypeUpdateRequest.endDate()
161+
);
162+
}
163+
}
164+
} catch (TicketRoundNotFoundException e) {
165+
throw new AdminApiException(ErrorCode.NOT_FOUND_TICKET_ROUND);
166+
} catch (TicketRoundIllegalArgumentException | TicketTypeIllegalException e) {
167+
throw new AdminApiException(ErrorCode.BAD_REQUEST_DATE_TIME_ERROR);
168+
} catch (AdminTicketTypeNotFoundException e) {
169+
throw new AdminApiException(ErrorCode.NOT_FOUND_TICKET_TYPE);
170+
}
171+
}
172+
117173
private void saveTicketTypes(final List<TicketRoundWithTypeCreateRequest.TicketTypeRequest> ticketTypes,
118174
final long ticketRoundId) {
119175
final List<TicketTypeEntity> ticketTypeEntityList = ticketTypes.stream()

src/main/java/com/permitseoul/permitserver/domain/admin/ticketround/core/AdminTicketRoundRetriever.java renamed to src/main/java/com/permitseoul/permitserver/domain/admin/ticketround/core/component/AdminTicketRoundRetriever.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.permitseoul.permitserver.domain.admin.ticketround.core;
1+
package com.permitseoul.permitserver.domain.admin.ticketround.core.component;
22

33
import com.permitseoul.permitserver.domain.admin.ticketround.exception.AdminTicketRoundNotFoundException;
44
import com.permitseoul.permitserver.domain.ticketround.core.domain.TicketRound;

src/main/java/com/permitseoul/permitserver/domain/admin/ticketround/core/AdminTicketRoundSaver.java renamed to src/main/java/com/permitseoul/permitserver/domain/admin/ticketround/core/component/AdminTicketRoundSaver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.permitseoul.permitserver.domain.admin.ticketround.core;
1+
package com.permitseoul.permitserver.domain.admin.ticketround.core.component;
22

33
import com.permitseoul.permitserver.domain.ticketround.core.domain.TicketRound;
44
import com.permitseoul.permitserver.domain.ticketround.core.domain.entity.TicketRoundEntity;

0 commit comments

Comments
 (0)