Skip to content

Commit

Permalink
Merge pull request #189 from tipi-tapi/feature/188
Browse files Browse the repository at this point in the history
์ผ๊ธฐ ์ƒ์„ฑ์‹œ, ๊ด‘๊ณ  ๋ฆฌ์›Œ๋“œ๊ฐ€ ์•„๋‹Œ ํ‹ฐ์ผ“์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐœ์„ 
  • Loading branch information
akalswl14 authored Aug 14, 2023
2 parents 7d47fad + a355109 commit f7523a9
Show file tree
Hide file tree
Showing 10 changed files with 85 additions and 114 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,10 @@ public enum ErrorCode {
GENERATE_KEY_FAILED(500, "O003", "ํ‚ค ์ƒ์„ฑ์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค."),

// REST
REST_CLIENT_FAILED(500, "R001", "์™ธ๋ถ€๋กœ์˜ REST ํ†ต์‹ ์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค.");
REST_CLIENT_FAILED(500, "R001", "์™ธ๋ถ€๋กœ์˜ REST ํ†ต์‹ ์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค."),

// Ticket
VALID_TICKET_NOT_EXISTS(404, "T001", "์œ ํšจํ•œ ํ‹ฐ์ผ“์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");


private final int status;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,14 @@ public ResponseEntity<SuccessResponse<GetLastCreationResponse>> getLastCreation(
responseCode = "404",
description = "E001 : ๊ฐ์ •์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.",
content = @Content(schema = @Schema(hidden = true))),
@ApiResponse(
responseCode = "409",
description = "D001 : ์ด๋ฏธ ์ผ๊ธฐ๋ฅผ ๊ทธ๋ฆฐ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค.",
content = @Content(schema = @Schema(hidden = true))),
@ApiResponse(
responseCode = "404",
description = "T001 : ์œ ํšจํ•œ ํ‹ฐ์ผ“์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.",
content = @Content(schema = @Schema(hidden = true))),
@ApiResponse(
responseCode = "500",
description = "DE001 : DALL-E ์ด๋ฏธ์ง€ ์ƒ์„ฑ์— ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค.",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import tipitapi.drawmytoday.diary.repository.DiaryRepository;
import tipitapi.drawmytoday.emotion.domain.Emotion;
import tipitapi.drawmytoday.emotion.service.ValidateEmotionService;
import tipitapi.drawmytoday.ticket.service.ValidateTicketService;
import tipitapi.drawmytoday.user.domain.User;
import tipitapi.drawmytoday.user.service.ValidateUserService;

Expand All @@ -28,6 +29,7 @@ public class CreateDiaryService {
private final ValidateUserService validateUserService;
private final ValidateEmotionService validateEmotionService;
private final ValidateDiaryService validateDiaryService;
private final ValidateTicketService validateTicketService;
private final DallEService dallEService;
private final PromptService promptService;
private final PromptTextService promptTextService;
Expand All @@ -41,8 +43,9 @@ public CreateDiaryResponse createDiary(Long userId, Long emotionId, String keywo
String notes, LocalDate diaryDate, LocalTime userTime)
throws DallERequestFailException, ImageInputStreamFailException {
// TODO: ์ด๋ฏธ์ง€ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ์š”์ฒญํ•  ๊ฒฝ์šฐ์˜ ํ•ธ๋“ค๋ง ํ•„์š”
User user = validateUserService.validateUserWithDrawLimit(userId);
User user = validateUserService.validateUserById(userId);
validateDiaryService.validateExistsByDate(userId, diaryDate);
validateTicketService.findAndUseTicket(userId);
Emotion emotion = validateEmotionService.validateEmotionById(emotionId);
String prompt = promptTextService.createPromptText(emotion, keyword);
LocalDateTime diaryDateTime = diaryDate.atTime(userTime);
Expand All @@ -61,10 +64,11 @@ public CreateDiaryResponse createDiary(Long userId, Long emotionId, String keywo
}
}

@Transactional(readOnly = false)
@Transactional
public CreateDiaryResponse createTestDiary(Long userId, Long emotionId, String keyword,
String notes, LocalDate diaryDate, LocalTime userTime) {
User user = validateUserService.validateUserWithDrawLimit(userId);
User user = validateUserService.validateAdminUserById(userId);
validateDiaryService.validateExistsByDate(userId, diaryDate);
Emotion emotion = validateEmotionService.validateEmotionById(emotionId);
LocalDateTime diaryDateTime = diaryDate.atTime(userTime);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package tipitapi.drawmytoday.ticket.exception;

import tipitapi.drawmytoday.common.exception.BusinessException;
import tipitapi.drawmytoday.common.exception.ErrorCode;

public class ValidTicketNotExistsException extends BusinessException {

public ValidTicketNotExistsException() {
super(ErrorCode.VALID_TICKET_NOT_EXISTS);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tipitapi.drawmytoday.ticket.domain.Ticket;
import tipitapi.drawmytoday.ticket.exception.ValidTicketNotExistsException;
import tipitapi.drawmytoday.ticket.repository.TicketRepository;

@Service
Expand All @@ -17,4 +18,11 @@ public class ValidateTicketService {
public Optional<Ticket> findValidTicket(Long userId) {
return ticketRepository.findValidTicket(userId);
}

@Transactional
public void findAndUseTicket(Long userId) {
ticketRepository.findValidTicket(userId)
.orElseThrow(ValidTicketNotExistsException::new)
.use();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tipitapi.drawmytoday.adreward.service.UseAdRewardService;
import tipitapi.drawmytoday.common.exception.BusinessException;
import tipitapi.drawmytoday.common.exception.ErrorCode;
import tipitapi.drawmytoday.user.domain.SocialCode;
import tipitapi.drawmytoday.user.domain.User;
import tipitapi.drawmytoday.user.exception.UserAccessDeniedException;
Expand All @@ -18,7 +15,6 @@
public class ValidateUserService {

private final UserRepository userRepository;
private final UseAdRewardService useAdRewardService;

public User validateUserById(Long userId) {
return userRepository.findByUserId(userId)
Expand All @@ -32,18 +28,6 @@ public User validateRegisteredUserByEmail(String email, SocialCode socialCode) {
.orElse(null);
}

public User validateUserWithDrawLimit(Long userId) {
User user = validateUserById(userId);
if (user.checkDrawLimit()) {
return user;
} else {
if (useAdRewardService.useReward(userId)) {
return user;
}
throw new BusinessException(ErrorCode.USER_ALREADY_DRAW_DIARY);
}
}

public User validateAdminUserById(Long userId) {
User user = validateUserById(userId);
if (user.isAdmin()) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import tipitapi.drawmytoday.diary.repository.DiaryRepository;
import tipitapi.drawmytoday.emotion.domain.Emotion;
import tipitapi.drawmytoday.emotion.service.ValidateEmotionService;
import tipitapi.drawmytoday.ticket.service.ValidateTicketService;
import tipitapi.drawmytoday.user.domain.User;
import tipitapi.drawmytoday.user.service.ValidateUserService;

Expand All @@ -49,6 +50,10 @@ class CreateDiaryServiceTest {
@Mock
private ValidateEmotionService validateEmotionService;
@Mock
private ValidateDiaryService validateDiaryService;
@Mock
private ValidateTicketService validateTicketService;
@Mock
private DallEService dallEService;
@Mock
private PromptService promptService;
Expand Down Expand Up @@ -85,7 +90,7 @@ void exception_throw_then_create_fail_prompt(Class<? extends Throwable> exceptio
Emotion emotion = TestEmotion.createEmotionWithId(EMOTION_ID);
String prompt = "test prompt";

given(validateUserService.validateUserWithDrawLimit(USER_ID)).willReturn(user);
given(validateUserService.validateUserById(USER_ID)).willReturn(user);
given(validateEmotionService.validateEmotionById(EMOTION_ID)).willReturn(emotion);
given(promptTextService.createPromptText(emotion, KEYWORD)).willReturn(prompt);
given(dallEService.getImageAsUrl(eq(prompt))).willThrow(exceptionClass);
Expand Down Expand Up @@ -115,7 +120,7 @@ void success_then_create_diary() throws Exception {
Emotion emotion = TestEmotion.createEmotionWithId(EMOTION_ID);
Diary diary = TestDiary.createDiaryWithId(diaryId, user, emotion);

given(validateUserService.validateUserWithDrawLimit(USER_ID)).willReturn(user);
given(validateUserService.validateUserById(USER_ID)).willReturn(user);
given(validateEmotionService.validateEmotionById(EMOTION_ID)).willReturn(emotion);
given(promptTextService.createPromptText(emotion, KEYWORD)).willReturn(prompt);
given(dallEService.getImageAsUrl(prompt)).willReturn(image);
Expand Down Expand Up @@ -160,7 +165,7 @@ void not_draw_image() throws Exception {
Emotion emotion = TestEmotion.createEmotionWithId(emotionId);
Diary diary = TestDiary.createDiaryWithId(diaryId, user, emotion);

given(validateUserService.validateUserWithDrawLimit(userId)).willReturn(user);
given(validateUserService.validateAdminUserById(userId)).willReturn(user);
given(validateEmotionService.validateEmotionById(emotionId)).willReturn(emotion);
given(encryptor.encrypt(notes)).willReturn("์•”ํ˜ธํ™”๋œ ๋…ธํŠธ");
given(diaryRepository.save(any(Diary.class))).willReturn(diary);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package tipitapi.drawmytoday.ticket.service;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.BDDMockito.given;
import static tipitapi.drawmytoday.common.testdata.TestUser.createUserWithId;
Expand All @@ -15,6 +16,7 @@
import org.mockito.junit.jupiter.MockitoExtension;
import tipitapi.drawmytoday.ticket.domain.Ticket;
import tipitapi.drawmytoday.ticket.domain.TicketType;
import tipitapi.drawmytoday.ticket.exception.ValidTicketNotExistsException;
import tipitapi.drawmytoday.ticket.repository.TicketRepository;
import tipitapi.drawmytoday.user.domain.User;

Expand Down Expand Up @@ -63,4 +65,41 @@ void return_ticket() {
}
}
}

@Nested
@DisplayName("findAndUseTicket ๋ฉ”์†Œ๋“œ ํ…Œ์ŠคํŠธ")
class FindAndUseTicketTest {

@Nested

@DisplayName("์œ ํšจํ•œ ํ‹ฐ์ผ“์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ")
class If_no_valid_ticket_exists {

@Test
@DisplayName("null๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.")
void throws_ValidTicketNotExistsException() {
given(ticketRepository.findValidTicket(anyLong())).willReturn(Optional.empty());

assertThatThrownBy(() -> validateTicketService.findAndUseTicket(1L))
.isInstanceOf(ValidTicketNotExistsException.class);
}
}

@Nested
@DisplayName("์œ ํšจํ•œ ํ‹ฐ์ผ“์ด ์กด์žฌํ•  ๊ฒฝ์šฐ")
class If_valid_ticket_exists {

@Test
@DisplayName("ํ‹ฐ์ผ“์„ ์‚ฌ์šฉํ•œ๋‹ค.")
void use_ticket() {
User user = createUserWithId(1L);
Ticket ticket = Ticket.of(user, TicketType.JOIN);
given(ticketRepository.findValidTicket(anyLong())).willReturn(Optional.of(ticket));

validateTicketService.findAndUseTicket(user.getUserId());

assertThat(ticket.getUsedAt()).isNotNull();
}
}
}
}

0 comments on commit f7523a9

Please sign in to comment.