-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(ticketOption) : 티켓상품 옵션 생성하기 (#195)
- Loading branch information
1 parent
7eee9f4
commit ebd923b
Showing
11 changed files
with
258 additions
and
1 deletion.
There are no files selected for viewing
30 changes: 30 additions & 0 deletions
30
DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketOptionController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package band.gosrock.api.ticketItem.controller; | ||
|
||
|
||
import band.gosrock.api.ticketItem.dto.request.CreateTicketOptionRequest; | ||
import band.gosrock.api.ticketItem.dto.response.CreateTicketOptionResponse; | ||
import band.gosrock.api.ticketItem.service.CreateTicketOptionUseCase; | ||
import io.swagger.v3.oas.annotations.Operation; | ||
import io.swagger.v3.oas.annotations.security.SecurityRequirement; | ||
import io.swagger.v3.oas.annotations.tags.Tag; | ||
import javax.validation.Valid; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
@SecurityRequirement(name = "access-token") | ||
@Tag(name = "티켓상품 옵션 관련 컨트롤러") | ||
@RestController | ||
@RequestMapping("/v1/{eventId}/ticketOptions") | ||
@RequiredArgsConstructor | ||
public class TicketOptionController { | ||
|
||
private final CreateTicketOptionUseCase createTicketOptionUseCase; | ||
|
||
@Operation(summary = "특정 이벤트에 속하는 티켓옵션을 생성합니다.") | ||
@PostMapping | ||
public CreateTicketOptionResponse createTicketOption( | ||
@RequestBody @Valid CreateTicketOptionRequest createTicketOptionRequest, | ||
@PathVariable Long eventId) { | ||
return createTicketOptionUseCase.execute(createTicketOptionRequest, eventId); | ||
} | ||
} |
32 changes: 32 additions & 0 deletions
32
...-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketOptionRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package band.gosrock.api.ticketItem.dto.request; | ||
|
||
|
||
import band.gosrock.common.annotation.Enum; | ||
import band.gosrock.domain.domains.ticket_item.domain.OptionGroupType; | ||
import io.swagger.v3.oas.annotations.media.Schema; | ||
import javax.validation.constraints.NotNull; | ||
import lombok.Getter; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.lang.Nullable; | ||
|
||
@Getter | ||
@RequiredArgsConstructor | ||
public class CreateTicketOptionRequest { | ||
|
||
@NotNull | ||
@Schema(nullable = false, defaultValue = "Y/N") | ||
@Enum(message = "Y/N, 주관식, 객관식만 허용됩니다") | ||
private OptionGroupType type; | ||
|
||
@NotNull | ||
@Schema(nullable = false, example = "뒷풀이 참여 여부") | ||
private String name; | ||
|
||
@Nullable | ||
@Schema(nullable = true, example = "공연이 끝난 후 오케이포차에서 진행하는 뒷풀이에 참여할 것인가요?") | ||
private String description; | ||
|
||
@NotNull | ||
@Schema(nullable = false, example = "10000") | ||
private Long additionalPrice; | ||
} |
38 changes: 38 additions & 0 deletions
38
...pi/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketOptionResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package band.gosrock.api.ticketItem.dto.response; | ||
|
||
|
||
import band.gosrock.domain.domains.ticket_item.domain.OptionGroup; | ||
import band.gosrock.domain.domains.ticket_item.domain.OptionGroupType; | ||
import io.swagger.v3.oas.annotations.media.Schema; | ||
import java.util.List; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
@Builder | ||
public class CreateTicketOptionResponse { | ||
@Schema(description = "옵션그룹 id") | ||
private final Long optionGroupId; | ||
|
||
@Schema(description = "티켓 타입") | ||
private final OptionGroupType type; | ||
|
||
@Schema(description = "이름") | ||
private final String name; | ||
|
||
@Schema(description = "설명") | ||
private final String description; | ||
|
||
private final List<OptionResponse> options; | ||
|
||
public static CreateTicketOptionResponse from(OptionGroup optionGroup) { | ||
|
||
return CreateTicketOptionResponse.builder() | ||
.optionGroupId(optionGroup.getId()) | ||
.type(optionGroup.getType()) | ||
.name(optionGroup.getName()) | ||
.description(optionGroup.getDescription()) | ||
.options(optionGroup.getOptions().stream().map(OptionResponse::from).toList()) | ||
.build(); | ||
} | ||
} |
30 changes: 30 additions & 0 deletions
30
DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/OptionResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package band.gosrock.api.ticketItem.dto.response; | ||
|
||
|
||
import band.gosrock.domain.common.vo.Money; | ||
import band.gosrock.domain.domains.ticket_item.domain.Option; | ||
import io.swagger.v3.oas.annotations.media.Schema; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
@Builder | ||
public class OptionResponse { | ||
@Schema(description = "옵션 id") | ||
private final Long optionId; | ||
|
||
@Schema(description = "응답") | ||
private final String answer; | ||
|
||
@Schema(description = "추가 금액") | ||
private final Money additionalPrice; | ||
|
||
public static OptionResponse from(Option option) { | ||
|
||
return OptionResponse.builder() | ||
.optionId(option.getId()) | ||
.answer(option.getAnswer()) | ||
.additionalPrice(option.getAdditionalPrice()) | ||
.build(); | ||
} | ||
} |
3 changes: 3 additions & 0 deletions
3
DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/mapper/TicketItemMapper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
package band.gosrock.api.ticketItem.mapper; | ||
|
||
public class TicketItemMapper {} |
26 changes: 26 additions & 0 deletions
26
DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/mapper/TicketOptionMapper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package band.gosrock.api.ticketItem.mapper; | ||
|
||
|
||
import band.gosrock.api.ticketItem.dto.request.CreateTicketOptionRequest; | ||
import band.gosrock.common.annotation.Mapper; | ||
import band.gosrock.domain.domains.event.domain.Event; | ||
import band.gosrock.domain.domains.ticket_item.domain.OptionGroup; | ||
import java.util.ArrayList; | ||
import lombok.RequiredArgsConstructor; | ||
|
||
@Mapper | ||
@RequiredArgsConstructor | ||
public class TicketOptionMapper { | ||
|
||
public OptionGroup toOptionGroup( | ||
CreateTicketOptionRequest createTicketOptionRequest, Event event) { | ||
return OptionGroup.builder() | ||
.event(event) | ||
.type(createTicketOptionRequest.getType()) | ||
.name(createTicketOptionRequest.getName()) | ||
.description(createTicketOptionRequest.getDescription()) | ||
.isEssential(true) | ||
.options(new ArrayList<>()) | ||
.build(); | ||
} | ||
} |
47 changes: 47 additions & 0 deletions
47
DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketOptionUseCase.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package band.gosrock.api.ticketItem.service; | ||
|
||
|
||
import band.gosrock.api.common.UserUtils; | ||
import band.gosrock.api.ticketItem.dto.request.CreateTicketOptionRequest; | ||
import band.gosrock.api.ticketItem.dto.response.CreateTicketOptionResponse; | ||
import band.gosrock.api.ticketItem.mapper.TicketOptionMapper; | ||
import band.gosrock.common.annotation.UseCase; | ||
import band.gosrock.domain.common.vo.Money; | ||
import band.gosrock.domain.domains.event.adaptor.EventAdaptor; | ||
import band.gosrock.domain.domains.event.domain.Event; | ||
import band.gosrock.domain.domains.host.adaptor.HostAdaptor; | ||
import band.gosrock.domain.domains.host.domain.Host; | ||
import band.gosrock.domain.domains.ticket_item.domain.OptionGroup; | ||
import band.gosrock.domain.domains.ticket_item.service.TicketOptionService; | ||
import band.gosrock.domain.domains.user.domain.User; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@UseCase | ||
@RequiredArgsConstructor | ||
public class CreateTicketOptionUseCase { | ||
|
||
private final UserUtils userUtils; | ||
private final EventAdaptor eventAdaptor; | ||
private final HostAdaptor hostAdaptor; | ||
private final TicketOptionMapper ticketOptionMapper; | ||
private final TicketOptionService ticketOptionService; | ||
|
||
@Transactional | ||
public CreateTicketOptionResponse execute( | ||
CreateTicketOptionRequest createTicketOptionRequest, Long eventId) { | ||
User user = userUtils.getCurrentUser(); | ||
Event event = eventAdaptor.findById(eventId); | ||
|
||
Host host = hostAdaptor.findById(event.getHostId()); | ||
// 권한 체크 ( 해당 이벤트의 호스트인지 ) | ||
host.hasHostUserId(user.getId()); | ||
OptionGroup ticketOption = | ||
ticketOptionMapper | ||
.toOptionGroup(createTicketOptionRequest, event) | ||
.createTicketOption( | ||
Money.wons(createTicketOptionRequest.getAdditionalPrice())); | ||
OptionGroup ticketOptionResult = ticketOptionService.createTicketOption(ticketOption); | ||
return CreateTicketOptionResponse.from(ticketOptionResult); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
...in/src/main/java/band/gosrock/domain/domains/ticket_item/service/TicketOptionService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package band.gosrock.domain.domains.ticket_item.service; | ||
|
||
|
||
import band.gosrock.common.annotation.DomainService; | ||
import band.gosrock.domain.domains.ticket_item.adaptor.OptionAdaptor; | ||
import band.gosrock.domain.domains.ticket_item.domain.OptionGroup; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@DomainService | ||
@Transactional(readOnly = true) | ||
@RequiredArgsConstructor | ||
public class TicketOptionService { | ||
|
||
private final OptionAdaptor optionAdaptor; | ||
|
||
@Transactional | ||
public OptionGroup createTicketOption(OptionGroup optionGroup) { | ||
return optionAdaptor.save(optionGroup); | ||
} | ||
} |