From 83f95e3be4960c155500753b93ad8efb18810ef0 Mon Sep 17 00:00:00 2001 From: eunsol-an Date: Sat, 15 Jul 2023 17:41:00 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[TEST]=20Theme=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ThemeControllerTest.java | 58 ++++++++++++++ .../com/todayescape/domain/ThemeTest.java | 16 ++++ .../repository/ThemeRepositoryTest.java | 68 ++++++++++++++++ .../todayescape/service/ThemeServiceTest.java | 80 +++++++++++++++++++ 4 files changed, 222 insertions(+) create mode 100644 src/test/java/com/todayescape/controller/ThemeControllerTest.java create mode 100644 src/test/java/com/todayescape/domain/ThemeTest.java create mode 100644 src/test/java/com/todayescape/repository/ThemeRepositoryTest.java create mode 100644 src/test/java/com/todayescape/service/ThemeServiceTest.java diff --git a/src/test/java/com/todayescape/controller/ThemeControllerTest.java b/src/test/java/com/todayescape/controller/ThemeControllerTest.java new file mode 100644 index 0000000..b7d9120 --- /dev/null +++ b/src/test/java/com/todayescape/controller/ThemeControllerTest.java @@ -0,0 +1,58 @@ +package com.todayescape.controller; + +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import com.google.gson.Gson; +import com.todayescape.dto.ThemeDto; + +@ExtendWith(MockitoExtension.class) +class ThemeControllerTest { + + @InjectMocks + private ThemeController themeController; + + private MockMvc mockMvc; + private Gson gson; + + @BeforeEach + void init() { + gson = new Gson(); + mockMvc = MockMvcBuilders.standaloneSetup(themeController).build(); + } + + @Test + @DisplayName("테마 등록 실패_사용자 식별값 헤더에 없음") + void failAddTheme() throws Exception { + //given + String url = "/api/v1/theme"; + + //when + ResultActions resultActions = mockMvc.perform( + MockMvcRequestBuilders.post(url) + .content(gson.toJson(addThemeRequest("테마 이름", 70))) + .contentType(MediaType.APPLICATION_JSON) + ); + + //then + resultActions.andExpect(status().isBadRequest()); + } + + private ThemeDto.AddThemeRequest addThemeRequest(String title, int timeLimit) { + return ThemeDto.AddThemeRequest.builder() + .title(title) + .timeLimit(timeLimit) + .build(); + } +} \ No newline at end of file diff --git a/src/test/java/com/todayescape/domain/ThemeTest.java b/src/test/java/com/todayescape/domain/ThemeTest.java new file mode 100644 index 0000000..dd57902 --- /dev/null +++ b/src/test/java/com/todayescape/domain/ThemeTest.java @@ -0,0 +1,16 @@ +package com.todayescape.domain; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class ThemeTest { + + @Test + @DisplayName("테마 생성") + void createTheme() { + Theme theme = new Theme(); + assertNotNull(theme); + } +} \ No newline at end of file diff --git a/src/test/java/com/todayescape/repository/ThemeRepositoryTest.java b/src/test/java/com/todayescape/repository/ThemeRepositoryTest.java new file mode 100644 index 0000000..f2546e0 --- /dev/null +++ b/src/test/java/com/todayescape/repository/ThemeRepositoryTest.java @@ -0,0 +1,68 @@ +package com.todayescape.repository; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; + +import com.todayescape.domain.Shop; +import com.todayescape.domain.Theme; +import com.todayescape.exceptions.CustomException; +import com.todayescape.exceptions.StatusCode; + +@DataJpaTest +public class ThemeRepositoryTest { + + @Autowired + private ThemeRepository themeRepository; + + @Test + @DisplayName("테마 생성") + void save() { + //given + Shop shop = new Shop(); + + Theme theme = Theme.builder() + .shop(shop) + .title("테마 이름") + .timeLimit(70) + .build(); + + //when + Theme result = themeRepository.save(theme); + + //then + assertThat(result.getId()).isNotNull(); + assertThat(result.getShop()).isEqualTo(shop); + assertThat(result.getTitle()).isEqualTo("테마 이름"); + assertThat(result.getTimeLimit()).isEqualTo(70); + } + + @Test + @DisplayName("테마 제목으로 조회") + void findByTitle() { + //given + Shop shop = new Shop(); + + Theme theme = Theme.builder() + .shop(shop) + .title("테마 이름") + .timeLimit(70) + .build(); + + //when + themeRepository.save(theme); + Theme result = themeRepository.findByTitle("테마 이름").orElseThrow( + () -> new CustomException(StatusCode.BAD_REQUEST) + ); + + //then + assertThat(result).isNotNull(); + assertThat(result.getId()).isNotNull(); + assertThat(result.getShop()).isEqualTo(shop); + assertThat(result.getTitle()).isEqualTo("테마 이름"); + assertThat(result.getTimeLimit()).isEqualTo(70); + } +} diff --git a/src/test/java/com/todayescape/service/ThemeServiceTest.java b/src/test/java/com/todayescape/service/ThemeServiceTest.java new file mode 100644 index 0000000..808f769 --- /dev/null +++ b/src/test/java/com/todayescape/service/ThemeServiceTest.java @@ -0,0 +1,80 @@ +package com.todayescape.service; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import com.todayescape.domain.Theme; +import com.todayescape.dto.ThemeDto; +import com.todayescape.exceptions.CustomException; +import com.todayescape.exceptions.StatusCode; +import com.todayescape.repository.ThemeRepository; + +@ExtendWith(MockitoExtension.class) +class ThemeServiceTest { + + @InjectMocks + private ThemeService themeService; + @Mock + private ThemeRepository themeRepository; + + private final String title = "테마 이름"; + private final Integer timeLimit = 70; + + @Test + @DisplayName("테마 등록 성공") + void addTheme() { + //given + doReturn(null).when(themeRepository).findByTitle(title); + doReturn(theme()).when(themeRepository).save(any(Theme.class)); + + //when + ThemeDto.AddThemeResponse result = themeService.addTheme( + ThemeDto.AddThemeRequest + .builder() + .title(title) + .timeLimit(timeLimit) + .build()); + + //then + assertThat(result.getTitle()).isEqualTo(title); + assertThat(result.getTimeLimit()).isEqualTo(timeLimit); + + //verify + verify(themeRepository, times(1)).findByTitle(title); + verify(themeRepository, times(1)).save(any(Theme.class)); + } + + private Theme theme() { + return Theme.builder() + .title(title) + .timeLimit(timeLimit) + .build(); + } + + @Test + @DisplayName("테마 이름 중복") + void duplicateTheme() { + //given + doReturn(Theme.builder().build()).when(themeRepository).findByTitle(title); + + //when + CustomException result = assertThrows(CustomException.class, () -> themeService.addTheme( + ThemeDto.AddThemeRequest + .builder() + .title(title) + .timeLimit(timeLimit) + .build())); + + //then + assertThat(result.getStatusCode()).isEqualTo(StatusCode.BAD_REQUEST); + } +} \ No newline at end of file From 604264de906b2ce03c2514fa42ab97f1892ce86e Mon Sep 17 00:00:00 2001 From: eunsol-an Date: Sat, 15 Jul 2023 17:42:59 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[FEAT]=20Theme=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ThemeController.java | 52 +++++++++++++ .../java/com/todayescape/dto/ThemeDto.java | 48 ++++++++++++ .../repository/ThemeRepository.java | 15 ++++ .../com/todayescape/service/ThemeService.java | 75 +++++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 src/main/java/com/todayescape/controller/ThemeController.java create mode 100644 src/main/java/com/todayescape/dto/ThemeDto.java create mode 100644 src/main/java/com/todayescape/repository/ThemeRepository.java create mode 100644 src/main/java/com/todayescape/service/ThemeService.java diff --git a/src/main/java/com/todayescape/controller/ThemeController.java b/src/main/java/com/todayescape/controller/ThemeController.java new file mode 100644 index 0000000..3785c8c --- /dev/null +++ b/src/main/java/com/todayescape/controller/ThemeController.java @@ -0,0 +1,52 @@ +package com.todayescape.controller; + +import static com.todayescape.exceptions.StatusCode.*; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.todayescape.dto.BaseResponse; +import com.todayescape.dto.DataResponse; +import com.todayescape.dto.ThemeDto; +import com.todayescape.service.ThemeService; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequestMapping("/api/v1/theme") +@RequiredArgsConstructor +public class ThemeController { + private final ThemeService themeService; + + @PostMapping + public ResponseEntity addTheme( + @RequestBody ThemeDto.AddThemeRequest request) { + themeService.addTheme(request); + return ResponseEntity.ok(new BaseResponse(OK)); + } + + @GetMapping + public ResponseEntity getThemeList() { + return ResponseEntity.ok(new DataResponse<>(OK, themeService.getThemeList())); + } + + @PutMapping + public ResponseEntity editTheme( + @RequestBody ThemeDto.EditThemeRequest request) { + themeService.editTheme(request); + return ResponseEntity.ok(new BaseResponse(OK)); + } + + @DeleteMapping + public ResponseEntity removeTheme( + @RequestBody ThemeDto.RemoveRequest request) { + themeService.removeTheme(request); + return ResponseEntity.ok(new BaseResponse(OK)); + } +} diff --git a/src/main/java/com/todayescape/dto/ThemeDto.java b/src/main/java/com/todayescape/dto/ThemeDto.java new file mode 100644 index 0000000..c389f49 --- /dev/null +++ b/src/main/java/com/todayescape/dto/ThemeDto.java @@ -0,0 +1,48 @@ +package com.todayescape.dto; + +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.RequiredArgsConstructor; + +public class ThemeDto { + + @Getter + @Builder + @RequiredArgsConstructor + @NoArgsConstructor(force = true) + public static class AddThemeRequest { + private final String title; + private final Integer timeLimit; + } + + @Getter + @Builder + public static class AddThemeResponse { + private final Long id; + private final String title; + private final Integer timeLimit; + } + + @Getter + @Builder + public static class ThemeListResponse { + private final Long id; + private final String title; + private final Integer timeLimit; + } + + @Getter + @RequiredArgsConstructor + public static class EditThemeRequest { + private final Long id; + private final String title; + private final Integer timeLimit; + } + + @Getter + @RequiredArgsConstructor + public static class RemoveRequest { + private final Long id; + } +} diff --git a/src/main/java/com/todayescape/repository/ThemeRepository.java b/src/main/java/com/todayescape/repository/ThemeRepository.java new file mode 100644 index 0000000..a4f0baf --- /dev/null +++ b/src/main/java/com/todayescape/repository/ThemeRepository.java @@ -0,0 +1,15 @@ +package com.todayescape.repository; + +import java.util.List; +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.todayescape.domain.Shop; +import com.todayescape.domain.Theme; + +public interface ThemeRepository extends JpaRepository { + Optional findByTitle(String title); + + List findAllByShop(Shop shop); +} diff --git a/src/main/java/com/todayescape/service/ThemeService.java b/src/main/java/com/todayescape/service/ThemeService.java new file mode 100644 index 0000000..56e5e77 --- /dev/null +++ b/src/main/java/com/todayescape/service/ThemeService.java @@ -0,0 +1,75 @@ +package com.todayescape.service; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.todayescape.domain.Shop; +import com.todayescape.domain.Theme; +import com.todayescape.dto.ThemeDto; +import com.todayescape.exceptions.CustomException; +import com.todayescape.exceptions.StatusCode; +import com.todayescape.repository.ThemeRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class ThemeService { + private final ThemeRepository themeRepository; + + public ThemeDto.AddThemeResponse addTheme(ThemeDto.AddThemeRequest request) { + Theme result = themeRepository.findByTitle(request.getTitle()).orElseThrow( + () -> new CustomException(StatusCode.BAD_REQUEST) + ); + + Theme theme = Theme.builder() + .title(request.getTitle()) + .timeLimit(request.getTimeLimit()) + .build(); + + Theme savedTheme = themeRepository.save(theme); + + return ThemeDto.AddThemeResponse.builder() + .id(savedTheme.getId()) + .title(savedTheme.getTitle()) + .timeLimit(savedTheme.getTimeLimit()) + .build(); + } + + public List getThemeList() { + //TODO 회원 검증 로직 + + List themeList = themeRepository.findAllByShop(new Shop()); + List themeListResponses = new ArrayList<>(); + for (Theme theme : themeList) { + themeListResponses.add(ThemeDto.ThemeListResponse + .builder() + .id(theme.getId()) + .title(theme.getTitle()) + .timeLimit(theme.getTimeLimit()) + .build()); + } + return themeListResponses; + } + + public void editTheme(ThemeDto.EditThemeRequest request) { + //TODO 테마 사용자 조회 + + //TODO 테마 조회 + Theme theme = themeRepository.findById(request.getId()).orElseThrow( + () -> new CustomException(StatusCode.BAD_REQUEST) + ); + + //TODO 테마 수정 + } + + public void removeTheme(ThemeDto.RemoveRequest request) { + //TODO 테마 사용자 조회 + + //TODO 테마 조회 + + //TODO 테마 삭제 + } +} From 41baaf31771594212106666c481149f30f0ee529 Mon Sep 17 00:00:00 2001 From: eunsol-an Date: Mon, 17 Jul 2023 00:44:52 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[REFACTOR]=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8/=ED=8C=A8=ED=82=A4=EC=A7=80=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- build.gradle | 1 + settings.gradle | 2 +- .../nextroom/oescape/OEscapeApplication.java | 13 +++++++ .../oescape/config/SwaggerConfig.java | 29 +++++++++++++++ .../oescape/controller/TestController.java | 27 ++++++++++++++ .../oescape}/controller/ThemeController.java | 12 +++---- .../com/nextroom/oescape/domain/Hint.java | 23 ++++++++++++ .../oescape}/domain/Shop.java | 16 ++++----- .../com/nextroom/oescape/domain/Theme.java | 36 +++++++++++++++++++ .../nextroom/oescape/dto/BaseResponse.java | 16 +++++++++ .../nextroom/oescape/dto/DataResponse.java | 15 ++++++++ .../oescape}/dto/ThemeDto.java | 2 +- .../oescape}/exceptions/CustomException.java | 4 +-- .../oescape/exceptions/ErrorResponse.java | 22 ++++++++++++ .../exceptions/GlobalExceptionHandler.java | 14 ++++++++ .../oescape/exceptions/StatusCode.java | 24 +++++++++++++ .../oescape}/repository/ThemeRepository.java | 6 ++-- .../oescape}/service/ThemeService.java | 14 ++++---- .../todayescape/TodayEscapeApplication.java | 13 ------- .../com/todayescape/config/SwaggerConfig.java | 29 --------------- .../controller/TestController.java | 27 -------------- .../java/com/todayescape/domain/Hint.java | 23 ------------ .../java/com/todayescape/domain/Theme.java | 29 --------------- .../com/todayescape/dto/BaseResponse.java | 16 --------- .../com/todayescape/dto/DataResponse.java | 15 -------- .../todayescape/exceptions/ErrorResponse.java | 22 ------------ .../exceptions/GlobalExceptionHandler.java | 14 -------- .../todayescape/exceptions/StatusCode.java | 19 ---------- .../oescape/OEscapeApplicationTests.java} | 10 +++--- .../controller/ThemeControllerTest.java | 4 +-- .../oescape}/domain/ThemeTest.java | 2 +- .../repository/ThemeRepositoryTest.java | 10 +++--- .../oescape}/service/ThemeServiceTest.java | 15 ++++---- 34 files changed, 270 insertions(+), 256 deletions(-) create mode 100644 src/main/java/com/nextroom/oescape/OEscapeApplication.java create mode 100644 src/main/java/com/nextroom/oescape/config/SwaggerConfig.java create mode 100644 src/main/java/com/nextroom/oescape/controller/TestController.java rename src/main/java/com/{todayescape => nextroom/oescape}/controller/ThemeController.java (83%) create mode 100644 src/main/java/com/nextroom/oescape/domain/Hint.java rename src/main/java/com/{todayescape => nextroom/oescape}/domain/Shop.java (52%) create mode 100644 src/main/java/com/nextroom/oescape/domain/Theme.java create mode 100644 src/main/java/com/nextroom/oescape/dto/BaseResponse.java create mode 100644 src/main/java/com/nextroom/oescape/dto/DataResponse.java rename src/main/java/com/{todayescape => nextroom/oescape}/dto/ThemeDto.java (96%) rename src/main/java/com/{todayescape => nextroom/oescape}/exceptions/CustomException.java (64%) create mode 100644 src/main/java/com/nextroom/oescape/exceptions/ErrorResponse.java create mode 100644 src/main/java/com/nextroom/oescape/exceptions/GlobalExceptionHandler.java create mode 100644 src/main/java/com/nextroom/oescape/exceptions/StatusCode.java rename src/main/java/com/{todayescape => nextroom/oescape}/repository/ThemeRepository.java (68%) rename src/main/java/com/{todayescape => nextroom/oescape}/service/ThemeService.java (83%) delete mode 100644 src/main/java/com/todayescape/TodayEscapeApplication.java delete mode 100644 src/main/java/com/todayescape/config/SwaggerConfig.java delete mode 100644 src/main/java/com/todayescape/controller/TestController.java delete mode 100644 src/main/java/com/todayescape/domain/Hint.java delete mode 100644 src/main/java/com/todayescape/domain/Theme.java delete mode 100644 src/main/java/com/todayescape/dto/BaseResponse.java delete mode 100644 src/main/java/com/todayescape/dto/DataResponse.java delete mode 100644 src/main/java/com/todayescape/exceptions/ErrorResponse.java delete mode 100644 src/main/java/com/todayescape/exceptions/GlobalExceptionHandler.java delete mode 100644 src/main/java/com/todayescape/exceptions/StatusCode.java rename src/test/java/com/{todayescape/TodayEscapeApplicationTests.java => nextroom/oescape/OEscapeApplicationTests.java} (53%) rename src/test/java/com/{todayescape => nextroom/oescape}/controller/ThemeControllerTest.java (95%) rename src/test/java/com/{todayescape => nextroom/oescape}/domain/ThemeTest.java (87%) rename src/test/java/com/{todayescape => nextroom/oescape}/repository/ThemeRepositoryTest.java (86%) rename src/test/java/com/{todayescape => nextroom/oescape}/service/ThemeServiceTest.java (82%) diff --git a/README.md b/README.md index d628b10..1f0ed99 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# today-escape-server +# o-escape-server diff --git a/build.gradle b/build.gradle index 38a4a60..3feb30e 100644 --- a/build.gradle +++ b/build.gradle @@ -26,6 +26,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0' + implementation 'com.google.code.gson:gson:2.10.1' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.mysql:mysql-connector-j' diff --git a/settings.gradle b/settings.gradle index 74894e9..05a29cb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1 @@ -rootProject.name = 'today-escape' +rootProject.name = 'o-escape' diff --git a/src/main/java/com/nextroom/oescape/OEscapeApplication.java b/src/main/java/com/nextroom/oescape/OEscapeApplication.java new file mode 100644 index 0000000..70d3a52 --- /dev/null +++ b/src/main/java/com/nextroom/oescape/OEscapeApplication.java @@ -0,0 +1,13 @@ +package com.nextroom.oescape; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class OEscapeApplication { + + public static void main(String[] args) { + SpringApplication.run(com.nextroom.oescape.OEscapeApplication.class, args); + } + +} \ No newline at end of file diff --git a/src/main/java/com/nextroom/oescape/config/SwaggerConfig.java b/src/main/java/com/nextroom/oescape/config/SwaggerConfig.java new file mode 100644 index 0000000..83bd995 --- /dev/null +++ b/src/main/java/com/nextroom/oescape/config/SwaggerConfig.java @@ -0,0 +1,29 @@ +package com.nextroom.oescape.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Contact; +import io.swagger.v3.oas.models.info.Info; + +@Configuration +public class SwaggerConfig implements WebMvcConfigurer { + + @Bean + public OpenAPI api() { + return new OpenAPI() + .info(this.apiInfo()); + } + + private Info apiInfo() { + return new Info() + .title("O Escape Api Server") + .description("Nexters 23th 오늘의 방탈출 -NextRoom") + .version("1.0") + .contact(new Contact() + .name("O Escape Server Github Repository") + .url("https://github.com/Nexters/o-escape-be")); + } +} \ No newline at end of file diff --git a/src/main/java/com/nextroom/oescape/controller/TestController.java b/src/main/java/com/nextroom/oescape/controller/TestController.java new file mode 100644 index 0000000..4c9241c --- /dev/null +++ b/src/main/java/com/nextroom/oescape/controller/TestController.java @@ -0,0 +1,27 @@ +package com.nextroom.oescape.controller; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; + +@RestController +@Tag(name = "Test") +public class TestController { + + @Operation( + description = "Test endpoint", + summary = "Create Test", + responses = { + @ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "403", description = "Unauthorized / Invalid Token") + } + ) + @PostMapping("/test") + public ResponseEntity exampleMethod() { + return ResponseEntity.ok().build(); + } +} diff --git a/src/main/java/com/todayescape/controller/ThemeController.java b/src/main/java/com/nextroom/oescape/controller/ThemeController.java similarity index 83% rename from src/main/java/com/todayescape/controller/ThemeController.java rename to src/main/java/com/nextroom/oescape/controller/ThemeController.java index 3785c8c..ee45bcf 100644 --- a/src/main/java/com/todayescape/controller/ThemeController.java +++ b/src/main/java/com/nextroom/oescape/controller/ThemeController.java @@ -1,6 +1,6 @@ -package com.todayescape.controller; +package com.nextroom.oescape.controller; -import static com.todayescape.exceptions.StatusCode.*; +import static com.nextroom.oescape.exceptions.StatusCode.*; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; @@ -11,10 +11,10 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.todayescape.dto.BaseResponse; -import com.todayescape.dto.DataResponse; -import com.todayescape.dto.ThemeDto; -import com.todayescape.service.ThemeService; +import com.nextroom.oescape.dto.BaseResponse; +import com.nextroom.oescape.dto.DataResponse; +import com.nextroom.oescape.dto.ThemeDto; +import com.nextroom.oescape.service.ThemeService; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/nextroom/oescape/domain/Hint.java b/src/main/java/com/nextroom/oescape/domain/Hint.java new file mode 100644 index 0000000..6ea6dda --- /dev/null +++ b/src/main/java/com/nextroom/oescape/domain/Hint.java @@ -0,0 +1,23 @@ +package com.nextroom.oescape.domain; + +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; + +@Entity +public class Hint { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "theme_id") + private Theme theme; + private String code; + private String contents; + private String answer; + private Integer progress; +} diff --git a/src/main/java/com/todayescape/domain/Shop.java b/src/main/java/com/nextroom/oescape/domain/Shop.java similarity index 52% rename from src/main/java/com/todayescape/domain/Shop.java rename to src/main/java/com/nextroom/oescape/domain/Shop.java index 997a1b5..00817bc 100644 --- a/src/main/java/com/todayescape/domain/Shop.java +++ b/src/main/java/com/nextroom/oescape/domain/Shop.java @@ -1,4 +1,4 @@ -package com.todayescape.domain; +package com.nextroom.oescape.domain; import java.util.ArrayList; import java.util.List; @@ -12,11 +12,11 @@ @Entity public class Shop { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - private String code; - private String name; - @OneToMany(mappedBy = "shop", cascade = CascadeType.ALL) - private List themes = new ArrayList<>(); + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String code; + private String name; + @OneToMany(mappedBy = "shop", cascade = CascadeType.ALL) + private List themes = new ArrayList<>(); } diff --git a/src/main/java/com/nextroom/oescape/domain/Theme.java b/src/main/java/com/nextroom/oescape/domain/Theme.java new file mode 100644 index 0000000..711b13a --- /dev/null +++ b/src/main/java/com/nextroom/oescape/domain/Theme.java @@ -0,0 +1,36 @@ +package com.nextroom.oescape.domain; + +import java.util.ArrayList; +import java.util.List; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class Theme { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "shop_id") + private Shop shop; + private String title; + private Integer timeLimit; + @OneToMany(mappedBy = "theme", cascade = CascadeType.ALL) + private List hints = new ArrayList<>(); +} diff --git a/src/main/java/com/nextroom/oescape/dto/BaseResponse.java b/src/main/java/com/nextroom/oescape/dto/BaseResponse.java new file mode 100644 index 0000000..c47e812 --- /dev/null +++ b/src/main/java/com/nextroom/oescape/dto/BaseResponse.java @@ -0,0 +1,16 @@ +package com.nextroom.oescape.dto; + +import com.nextroom.oescape.exceptions.StatusCode; + +import lombok.Getter; + +@Getter +public class BaseResponse { + private final int code; + private final String message; + + public BaseResponse(StatusCode statusCode) { + this.code = statusCode.getCode().value(); + this.message = statusCode.getMessage(); + } +} diff --git a/src/main/java/com/nextroom/oescape/dto/DataResponse.java b/src/main/java/com/nextroom/oescape/dto/DataResponse.java new file mode 100644 index 0000000..f04fdff --- /dev/null +++ b/src/main/java/com/nextroom/oescape/dto/DataResponse.java @@ -0,0 +1,15 @@ +package com.nextroom.oescape.dto; + +import com.nextroom.oescape.exceptions.StatusCode; + +import lombok.Getter; + +@Getter +public class DataResponse extends BaseResponse { + private final T data; + + public DataResponse(StatusCode statusCode, T data) { + super(statusCode); + this.data = data; + } +} diff --git a/src/main/java/com/todayescape/dto/ThemeDto.java b/src/main/java/com/nextroom/oescape/dto/ThemeDto.java similarity index 96% rename from src/main/java/com/todayescape/dto/ThemeDto.java rename to src/main/java/com/nextroom/oescape/dto/ThemeDto.java index c389f49..bc510a6 100644 --- a/src/main/java/com/todayescape/dto/ThemeDto.java +++ b/src/main/java/com/nextroom/oescape/dto/ThemeDto.java @@ -1,4 +1,4 @@ -package com.todayescape.dto; +package com.nextroom.oescape.dto; import lombok.Builder; import lombok.Getter; diff --git a/src/main/java/com/todayescape/exceptions/CustomException.java b/src/main/java/com/nextroom/oescape/exceptions/CustomException.java similarity index 64% rename from src/main/java/com/todayescape/exceptions/CustomException.java rename to src/main/java/com/nextroom/oescape/exceptions/CustomException.java index ed7b96b..3734008 100644 --- a/src/main/java/com/todayescape/exceptions/CustomException.java +++ b/src/main/java/com/nextroom/oescape/exceptions/CustomException.java @@ -1,4 +1,4 @@ -package com.todayescape.exceptions; +package com.nextroom.oescape.exceptions; import lombok.AllArgsConstructor; import lombok.Getter; @@ -6,5 +6,5 @@ @Getter @AllArgsConstructor public class CustomException extends RuntimeException { - private final StatusCode statusCode; + private final StatusCode statusCode; } diff --git a/src/main/java/com/nextroom/oescape/exceptions/ErrorResponse.java b/src/main/java/com/nextroom/oescape/exceptions/ErrorResponse.java new file mode 100644 index 0000000..cb46f19 --- /dev/null +++ b/src/main/java/com/nextroom/oescape/exceptions/ErrorResponse.java @@ -0,0 +1,22 @@ +package com.nextroom.oescape.exceptions; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class ErrorResponse { + private final int code; + private final String message; + + public static ResponseEntity toResponseEntity(HttpStatus status, String message) { + return ResponseEntity + .status(status) + .body(ErrorResponse.builder() + .code(status.value()) + .message(message).build()); + } +} diff --git a/src/main/java/com/nextroom/oescape/exceptions/GlobalExceptionHandler.java b/src/main/java/com/nextroom/oescape/exceptions/GlobalExceptionHandler.java new file mode 100644 index 0000000..25cab78 --- /dev/null +++ b/src/main/java/com/nextroom/oescape/exceptions/GlobalExceptionHandler.java @@ -0,0 +1,14 @@ +package com.nextroom.oescape.exceptions; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(value = {CustomException.class}) + protected ResponseEntity handleCustomException(CustomException e) { + return ErrorResponse.toResponseEntity(e.getStatusCode().getCode(), e.getStatusCode().getMessage()); + } +} diff --git a/src/main/java/com/nextroom/oescape/exceptions/StatusCode.java b/src/main/java/com/nextroom/oescape/exceptions/StatusCode.java new file mode 100644 index 0000000..de24309 --- /dev/null +++ b/src/main/java/com/nextroom/oescape/exceptions/StatusCode.java @@ -0,0 +1,24 @@ +package com.nextroom.oescape.exceptions; + +import org.springframework.http.HttpStatus; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum StatusCode { + + /** + * 4xx Bad Request + */ + BAD_REQUEST(HttpStatus.BAD_REQUEST, "잘못된 요청입니다."), + + /** + * 2xx OK + */ + OK(HttpStatus.OK, "성공"); + + private final HttpStatus code; + private final String message; +} diff --git a/src/main/java/com/todayescape/repository/ThemeRepository.java b/src/main/java/com/nextroom/oescape/repository/ThemeRepository.java similarity index 68% rename from src/main/java/com/todayescape/repository/ThemeRepository.java rename to src/main/java/com/nextroom/oescape/repository/ThemeRepository.java index a4f0baf..e813616 100644 --- a/src/main/java/com/todayescape/repository/ThemeRepository.java +++ b/src/main/java/com/nextroom/oescape/repository/ThemeRepository.java @@ -1,12 +1,12 @@ -package com.todayescape.repository; +package com.nextroom.oescape.repository; import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; -import com.todayescape.domain.Shop; -import com.todayescape.domain.Theme; +import com.nextroom.oescape.domain.Shop; +import com.nextroom.oescape.domain.Theme; public interface ThemeRepository extends JpaRepository { Optional findByTitle(String title); diff --git a/src/main/java/com/todayescape/service/ThemeService.java b/src/main/java/com/nextroom/oescape/service/ThemeService.java similarity index 83% rename from src/main/java/com/todayescape/service/ThemeService.java rename to src/main/java/com/nextroom/oescape/service/ThemeService.java index 56e5e77..3c1df64 100644 --- a/src/main/java/com/todayescape/service/ThemeService.java +++ b/src/main/java/com/nextroom/oescape/service/ThemeService.java @@ -1,16 +1,16 @@ -package com.todayescape.service; +package com.nextroom.oescape.service; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Service; -import com.todayescape.domain.Shop; -import com.todayescape.domain.Theme; -import com.todayescape.dto.ThemeDto; -import com.todayescape.exceptions.CustomException; -import com.todayescape.exceptions.StatusCode; -import com.todayescape.repository.ThemeRepository; +import com.nextroom.oescape.domain.Shop; +import com.nextroom.oescape.domain.Theme; +import com.nextroom.oescape.dto.ThemeDto; +import com.nextroom.oescape.exceptions.CustomException; +import com.nextroom.oescape.exceptions.StatusCode; +import com.nextroom.oescape.repository.ThemeRepository; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/todayescape/TodayEscapeApplication.java b/src/main/java/com/todayescape/TodayEscapeApplication.java deleted file mode 100644 index 6eb47bf..0000000 --- a/src/main/java/com/todayescape/TodayEscapeApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.todayescape; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class TodayEscapeApplication { - - public static void main(String[] args) { - SpringApplication.run(TodayEscapeApplication.class, args); - } - -} diff --git a/src/main/java/com/todayescape/config/SwaggerConfig.java b/src/main/java/com/todayescape/config/SwaggerConfig.java deleted file mode 100644 index 2a8b63a..0000000 --- a/src/main/java/com/todayescape/config/SwaggerConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.todayescape.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import io.swagger.v3.oas.models.OpenAPI; -import io.swagger.v3.oas.models.info.Contact; -import io.swagger.v3.oas.models.info.Info; - -@Configuration -public class SwaggerConfig implements WebMvcConfigurer { - - @Bean - public OpenAPI api() { - return new OpenAPI() - .info(this.apiInfo()); - } - - private Info apiInfo() { - return new Info() - .title("O Escape Api Server") - .description("Nexters 23th 오늘의 방탈출 -NextRoom") - .version("1.0") - .contact(new Contact() - .name("O Escape Server Github Repository") - .url("https://github.com/Nexters/today-escape-server")); - } -} \ No newline at end of file diff --git a/src/main/java/com/todayescape/controller/TestController.java b/src/main/java/com/todayescape/controller/TestController.java deleted file mode 100644 index 86d5b10..0000000 --- a/src/main/java/com/todayescape/controller/TestController.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.todayescape.controller; - -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RestController; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.tags.Tag; - -@RestController -@Tag(name = "Test") -public class TestController { - - @Operation( - description = "Test endpoint", - summary = "Create Test", - responses = { - @ApiResponse(responseCode = "200", description = "Success"), - @ApiResponse(responseCode = "403", description = "Unauthorized / Invalid Token") - } - ) - @PostMapping("/test") - public ResponseEntity exampleMethod() { - return ResponseEntity.ok().build(); - } -} diff --git a/src/main/java/com/todayescape/domain/Hint.java b/src/main/java/com/todayescape/domain/Hint.java deleted file mode 100644 index 9f1a956..0000000 --- a/src/main/java/com/todayescape/domain/Hint.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.todayescape.domain; - -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; - -@Entity -public class Hint { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "theme_id") - private Theme theme; - private String code; - private String contents; - private String answer; - private Integer progress; -} diff --git a/src/main/java/com/todayescape/domain/Theme.java b/src/main/java/com/todayescape/domain/Theme.java deleted file mode 100644 index 2e05d9d..0000000 --- a/src/main/java/com/todayescape/domain/Theme.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.todayescape.domain; - -import java.util.ArrayList; -import java.util.List; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; - -@Entity -public class Theme { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "shop_id") - private Shop shop; - private String title; - private Long timeLimit; - private Long hintCount; - @OneToMany(mappedBy = "theme", cascade = CascadeType.ALL) - private List hints = new ArrayList<>(); -} diff --git a/src/main/java/com/todayescape/dto/BaseResponse.java b/src/main/java/com/todayescape/dto/BaseResponse.java deleted file mode 100644 index d940d2a..0000000 --- a/src/main/java/com/todayescape/dto/BaseResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.todayescape.dto; - -import com.todayescape.exceptions.StatusCode; - -import lombok.Getter; - -@Getter -public class BaseResponse { - private final int code; - private final String message; - - public BaseResponse(StatusCode statusCode) { - this.code = statusCode.getCode().value(); - this.message = statusCode.getMessage(); - } -} diff --git a/src/main/java/com/todayescape/dto/DataResponse.java b/src/main/java/com/todayescape/dto/DataResponse.java deleted file mode 100644 index d9cb8cd..0000000 --- a/src/main/java/com/todayescape/dto/DataResponse.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.todayescape.dto; - -import com.todayescape.exceptions.StatusCode; - -import lombok.Getter; - -@Getter -public class DataResponse extends BaseResponse { - private final T data; - - public DataResponse(StatusCode statusCode, T data) { - super(statusCode); - this.data = data; - } -} diff --git a/src/main/java/com/todayescape/exceptions/ErrorResponse.java b/src/main/java/com/todayescape/exceptions/ErrorResponse.java deleted file mode 100644 index 7ce1d2f..0000000 --- a/src/main/java/com/todayescape/exceptions/ErrorResponse.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.todayescape.exceptions; - -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class ErrorResponse { - private final int code; - private final String message; - - public static ResponseEntity toResponseEntity(HttpStatus status, String message) { - return ResponseEntity - .status(status) - .body(ErrorResponse.builder() - .code(status.value()) - .message(message).build()); - } -} diff --git a/src/main/java/com/todayescape/exceptions/GlobalExceptionHandler.java b/src/main/java/com/todayescape/exceptions/GlobalExceptionHandler.java deleted file mode 100644 index 428fcc3..0000000 --- a/src/main/java/com/todayescape/exceptions/GlobalExceptionHandler.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.todayescape.exceptions; - -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; - -@RestControllerAdvice -public class GlobalExceptionHandler { - - @ExceptionHandler(value = {CustomException.class}) - protected ResponseEntity handleCustomException(CustomException e) { - return ErrorResponse.toResponseEntity(e.getStatusCode().getCode(), e.getStatusCode().getMessage()); - } -} diff --git a/src/main/java/com/todayescape/exceptions/StatusCode.java b/src/main/java/com/todayescape/exceptions/StatusCode.java deleted file mode 100644 index 8d07f44..0000000 --- a/src/main/java/com/todayescape/exceptions/StatusCode.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.todayescape.exceptions; - -import org.springframework.http.HttpStatus; - -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor -public enum StatusCode { - - /** - * 4xx Bad Request - */ - BAD_REQUEST(HttpStatus.BAD_REQUEST, "잘못된 요청입니다."); - - private final HttpStatus code; - private final String message; -} diff --git a/src/test/java/com/todayescape/TodayEscapeApplicationTests.java b/src/test/java/com/nextroom/oescape/OEscapeApplicationTests.java similarity index 53% rename from src/test/java/com/todayescape/TodayEscapeApplicationTests.java rename to src/test/java/com/nextroom/oescape/OEscapeApplicationTests.java index 12b89be..ae01754 100644 --- a/src/test/java/com/todayescape/TodayEscapeApplicationTests.java +++ b/src/test/java/com/nextroom/oescape/OEscapeApplicationTests.java @@ -1,13 +1,13 @@ -package com.todayescape; +package com.nextroom.oescape; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest -class TodayEscapeApplicationTests { +class OEscapeApplicationTests { - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } } diff --git a/src/test/java/com/todayescape/controller/ThemeControllerTest.java b/src/test/java/com/nextroom/oescape/controller/ThemeControllerTest.java similarity index 95% rename from src/test/java/com/todayescape/controller/ThemeControllerTest.java rename to src/test/java/com/nextroom/oescape/controller/ThemeControllerTest.java index b7d9120..c51746f 100644 --- a/src/test/java/com/todayescape/controller/ThemeControllerTest.java +++ b/src/test/java/com/nextroom/oescape/controller/ThemeControllerTest.java @@ -1,4 +1,4 @@ -package com.todayescape.controller; +package com.nextroom.oescape.controller; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -15,7 +15,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; import com.google.gson.Gson; -import com.todayescape.dto.ThemeDto; +import com.nextroom.oescape.dto.ThemeDto; @ExtendWith(MockitoExtension.class) class ThemeControllerTest { diff --git a/src/test/java/com/todayescape/domain/ThemeTest.java b/src/test/java/com/nextroom/oescape/domain/ThemeTest.java similarity index 87% rename from src/test/java/com/todayescape/domain/ThemeTest.java rename to src/test/java/com/nextroom/oescape/domain/ThemeTest.java index dd57902..b502bea 100644 --- a/src/test/java/com/todayescape/domain/ThemeTest.java +++ b/src/test/java/com/nextroom/oescape/domain/ThemeTest.java @@ -1,4 +1,4 @@ -package com.todayescape.domain; +package com.nextroom.oescape.domain; import static org.junit.jupiter.api.Assertions.*; diff --git a/src/test/java/com/todayescape/repository/ThemeRepositoryTest.java b/src/test/java/com/nextroom/oescape/repository/ThemeRepositoryTest.java similarity index 86% rename from src/test/java/com/todayescape/repository/ThemeRepositoryTest.java rename to src/test/java/com/nextroom/oescape/repository/ThemeRepositoryTest.java index f2546e0..88b82c9 100644 --- a/src/test/java/com/todayescape/repository/ThemeRepositoryTest.java +++ b/src/test/java/com/nextroom/oescape/repository/ThemeRepositoryTest.java @@ -1,4 +1,4 @@ -package com.todayescape.repository; +package com.nextroom.oescape.repository; import static org.assertj.core.api.Assertions.*; @@ -7,10 +7,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import com.todayescape.domain.Shop; -import com.todayescape.domain.Theme; -import com.todayescape.exceptions.CustomException; -import com.todayescape.exceptions.StatusCode; +import com.nextroom.oescape.domain.Shop; +import com.nextroom.oescape.domain.Theme; +import com.nextroom.oescape.exceptions.CustomException; +import com.nextroom.oescape.exceptions.StatusCode; @DataJpaTest public class ThemeRepositoryTest { diff --git a/src/test/java/com/todayescape/service/ThemeServiceTest.java b/src/test/java/com/nextroom/oescape/service/ThemeServiceTest.java similarity index 82% rename from src/test/java/com/todayescape/service/ThemeServiceTest.java rename to src/test/java/com/nextroom/oescape/service/ThemeServiceTest.java index 808f769..47b5fea 100644 --- a/src/test/java/com/todayescape/service/ThemeServiceTest.java +++ b/src/test/java/com/nextroom/oescape/service/ThemeServiceTest.java @@ -1,4 +1,4 @@ -package com.todayescape.service; +package com.nextroom.oescape.service; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; @@ -10,13 +10,14 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; -import com.todayescape.domain.Theme; -import com.todayescape.dto.ThemeDto; -import com.todayescape.exceptions.CustomException; -import com.todayescape.exceptions.StatusCode; -import com.todayescape.repository.ThemeRepository; +import com.nextroom.oescape.domain.Theme; +import com.nextroom.oescape.dto.ThemeDto; +import com.nextroom.oescape.exceptions.CustomException; +import com.nextroom.oescape.exceptions.StatusCode; +import com.nextroom.oescape.repository.ThemeRepository; @ExtendWith(MockitoExtension.class) class ThemeServiceTest { @@ -34,7 +35,7 @@ class ThemeServiceTest { void addTheme() { //given doReturn(null).when(themeRepository).findByTitle(title); - doReturn(theme()).when(themeRepository).save(any(Theme.class)); + Mockito.doReturn(theme()).when(themeRepository).save(any(Theme.class)); //when ThemeDto.AddThemeResponse result = themeService.addTheme( From 2d94acd4d030ab2664ddd04856ee116db6491d2f Mon Sep 17 00:00:00 2001 From: eunsol-an Date: Mon, 17 Jul 2023 01:35:19 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[REFACTOR]=20Indent=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - tap을 spaces로 변경 --- .../nextroom/oescape/OEscapeApplication.java | 6 +- .../oescape/config/SwaggerConfig.java | 28 ++--- .../oescape/controller/TestController.java | 24 ++-- .../oescape/controller/ThemeController.java | 54 ++++----- .../com/nextroom/oescape/domain/Hint.java | 20 ++-- .../com/nextroom/oescape/domain/Shop.java | 14 +-- .../com/nextroom/oescape/domain/Theme.java | 20 ++-- .../nextroom/oescape/dto/BaseResponse.java | 12 +- .../nextroom/oescape/dto/DataResponse.java | 10 +- .../com/nextroom/oescape/dto/ThemeDto.java | 68 +++++------ .../oescape/exceptions/CustomException.java | 2 +- .../oescape/exceptions/ErrorResponse.java | 18 +-- .../exceptions/GlobalExceptionHandler.java | 8 +- .../oescape/exceptions/StatusCode.java | 20 ++-- .../oescape/repository/ThemeRepository.java | 4 +- .../oescape/service/ThemeService.java | 110 +++++++++--------- .../oescape/OEscapeApplicationTests.java | 6 +- .../controller/ThemeControllerTest.java | 70 +++++------ .../nextroom/oescape/domain/ThemeTest.java | 12 +- .../repository/ThemeRepositoryTest.java | 84 ++++++------- .../oescape/service/ThemeServiceTest.java | 94 +++++++-------- 21 files changed, 342 insertions(+), 342 deletions(-) diff --git a/src/main/java/com/nextroom/oescape/OEscapeApplication.java b/src/main/java/com/nextroom/oescape/OEscapeApplication.java index 70d3a52..0108eba 100644 --- a/src/main/java/com/nextroom/oescape/OEscapeApplication.java +++ b/src/main/java/com/nextroom/oescape/OEscapeApplication.java @@ -6,8 +6,8 @@ @SpringBootApplication public class OEscapeApplication { - public static void main(String[] args) { - SpringApplication.run(com.nextroom.oescape.OEscapeApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(com.nextroom.oescape.OEscapeApplication.class, args); + } } \ No newline at end of file diff --git a/src/main/java/com/nextroom/oescape/config/SwaggerConfig.java b/src/main/java/com/nextroom/oescape/config/SwaggerConfig.java index 83bd995..0a189ae 100644 --- a/src/main/java/com/nextroom/oescape/config/SwaggerConfig.java +++ b/src/main/java/com/nextroom/oescape/config/SwaggerConfig.java @@ -11,19 +11,19 @@ @Configuration public class SwaggerConfig implements WebMvcConfigurer { - @Bean - public OpenAPI api() { - return new OpenAPI() - .info(this.apiInfo()); - } + @Bean + public OpenAPI api() { + return new OpenAPI() + .info(this.apiInfo()); + } - private Info apiInfo() { - return new Info() - .title("O Escape Api Server") - .description("Nexters 23th 오늘의 방탈출 -NextRoom") - .version("1.0") - .contact(new Contact() - .name("O Escape Server Github Repository") - .url("https://github.com/Nexters/o-escape-be")); - } + private Info apiInfo() { + return new Info() + .title("O Escape Api Server") + .description("Nexters 23th 오늘의 방탈출 -NextRoom") + .version("1.0") + .contact(new Contact() + .name("O Escape Server Github Repository") + .url("https://github.com/Nexters/o-escape-be")); + } } \ No newline at end of file diff --git a/src/main/java/com/nextroom/oescape/controller/TestController.java b/src/main/java/com/nextroom/oescape/controller/TestController.java index 4c9241c..fd2bf95 100644 --- a/src/main/java/com/nextroom/oescape/controller/TestController.java +++ b/src/main/java/com/nextroom/oescape/controller/TestController.java @@ -12,16 +12,16 @@ @Tag(name = "Test") public class TestController { - @Operation( - description = "Test endpoint", - summary = "Create Test", - responses = { - @ApiResponse(responseCode = "200", description = "Success"), - @ApiResponse(responseCode = "403", description = "Unauthorized / Invalid Token") - } - ) - @PostMapping("/test") - public ResponseEntity exampleMethod() { - return ResponseEntity.ok().build(); - } + @Operation( + description = "Test endpoint", + summary = "Create Test", + responses = { + @ApiResponse(responseCode = "200", description = "Success"), + @ApiResponse(responseCode = "403", description = "Unauthorized / Invalid Token") + } + ) + @PostMapping("/test") + public ResponseEntity exampleMethod() { + return ResponseEntity.ok().build(); + } } diff --git a/src/main/java/com/nextroom/oescape/controller/ThemeController.java b/src/main/java/com/nextroom/oescape/controller/ThemeController.java index ee45bcf..33a9629 100644 --- a/src/main/java/com/nextroom/oescape/controller/ThemeController.java +++ b/src/main/java/com/nextroom/oescape/controller/ThemeController.java @@ -22,31 +22,31 @@ @RequestMapping("/api/v1/theme") @RequiredArgsConstructor public class ThemeController { - private final ThemeService themeService; - - @PostMapping - public ResponseEntity addTheme( - @RequestBody ThemeDto.AddThemeRequest request) { - themeService.addTheme(request); - return ResponseEntity.ok(new BaseResponse(OK)); - } - - @GetMapping - public ResponseEntity getThemeList() { - return ResponseEntity.ok(new DataResponse<>(OK, themeService.getThemeList())); - } - - @PutMapping - public ResponseEntity editTheme( - @RequestBody ThemeDto.EditThemeRequest request) { - themeService.editTheme(request); - return ResponseEntity.ok(new BaseResponse(OK)); - } - - @DeleteMapping - public ResponseEntity removeTheme( - @RequestBody ThemeDto.RemoveRequest request) { - themeService.removeTheme(request); - return ResponseEntity.ok(new BaseResponse(OK)); - } + private final ThemeService themeService; + + @PostMapping + public ResponseEntity addTheme( + @RequestBody ThemeDto.AddThemeRequest request) { + themeService.addTheme(request); + return ResponseEntity.ok(new BaseResponse(OK)); + } + + @GetMapping + public ResponseEntity getThemeList() { + return ResponseEntity.ok(new DataResponse<>(OK, themeService.getThemeList())); + } + + @PutMapping + public ResponseEntity editTheme( + @RequestBody ThemeDto.EditThemeRequest request) { + themeService.editTheme(request); + return ResponseEntity.ok(new BaseResponse(OK)); + } + + @DeleteMapping + public ResponseEntity removeTheme( + @RequestBody ThemeDto.RemoveRequest request) { + themeService.removeTheme(request); + return ResponseEntity.ok(new BaseResponse(OK)); + } } diff --git a/src/main/java/com/nextroom/oescape/domain/Hint.java b/src/main/java/com/nextroom/oescape/domain/Hint.java index 6ea6dda..aae8bd9 100644 --- a/src/main/java/com/nextroom/oescape/domain/Hint.java +++ b/src/main/java/com/nextroom/oescape/domain/Hint.java @@ -10,14 +10,14 @@ @Entity public class Hint { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "theme_id") - private Theme theme; - private String code; - private String contents; - private String answer; - private Integer progress; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "theme_id") + private Theme theme; + private String code; + private String contents; + private String answer; + private Integer progress; } diff --git a/src/main/java/com/nextroom/oescape/domain/Shop.java b/src/main/java/com/nextroom/oescape/domain/Shop.java index 00817bc..3130cce 100644 --- a/src/main/java/com/nextroom/oescape/domain/Shop.java +++ b/src/main/java/com/nextroom/oescape/domain/Shop.java @@ -12,11 +12,11 @@ @Entity public class Shop { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - private String code; - private String name; - @OneToMany(mappedBy = "shop", cascade = CascadeType.ALL) - private List themes = new ArrayList<>(); + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String code; + private String name; + @OneToMany(mappedBy = "shop", cascade = CascadeType.ALL) + private List themes = new ArrayList<>(); } diff --git a/src/main/java/com/nextroom/oescape/domain/Theme.java b/src/main/java/com/nextroom/oescape/domain/Theme.java index 711b13a..f432b07 100644 --- a/src/main/java/com/nextroom/oescape/domain/Theme.java +++ b/src/main/java/com/nextroom/oescape/domain/Theme.java @@ -23,14 +23,14 @@ @NoArgsConstructor @AllArgsConstructor public class Theme { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "shop_id") - private Shop shop; - private String title; - private Integer timeLimit; - @OneToMany(mappedBy = "theme", cascade = CascadeType.ALL) - private List hints = new ArrayList<>(); + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "shop_id") + private Shop shop; + private String title; + private Integer timeLimit; + @OneToMany(mappedBy = "theme", cascade = CascadeType.ALL) + private List hints = new ArrayList<>(); } diff --git a/src/main/java/com/nextroom/oescape/dto/BaseResponse.java b/src/main/java/com/nextroom/oescape/dto/BaseResponse.java index c47e812..e04c200 100644 --- a/src/main/java/com/nextroom/oescape/dto/BaseResponse.java +++ b/src/main/java/com/nextroom/oescape/dto/BaseResponse.java @@ -6,11 +6,11 @@ @Getter public class BaseResponse { - private final int code; - private final String message; + private final int code; + private final String message; - public BaseResponse(StatusCode statusCode) { - this.code = statusCode.getCode().value(); - this.message = statusCode.getMessage(); - } + public BaseResponse(StatusCode statusCode) { + this.code = statusCode.getCode().value(); + this.message = statusCode.getMessage(); + } } diff --git a/src/main/java/com/nextroom/oescape/dto/DataResponse.java b/src/main/java/com/nextroom/oescape/dto/DataResponse.java index f04fdff..613c682 100644 --- a/src/main/java/com/nextroom/oescape/dto/DataResponse.java +++ b/src/main/java/com/nextroom/oescape/dto/DataResponse.java @@ -6,10 +6,10 @@ @Getter public class DataResponse extends BaseResponse { - private final T data; + private final T data; - public DataResponse(StatusCode statusCode, T data) { - super(statusCode); - this.data = data; - } + public DataResponse(StatusCode statusCode, T data) { + super(statusCode); + this.data = data; + } } diff --git a/src/main/java/com/nextroom/oescape/dto/ThemeDto.java b/src/main/java/com/nextroom/oescape/dto/ThemeDto.java index bc510a6..98a40f5 100644 --- a/src/main/java/com/nextroom/oescape/dto/ThemeDto.java +++ b/src/main/java/com/nextroom/oescape/dto/ThemeDto.java @@ -7,42 +7,42 @@ public class ThemeDto { - @Getter - @Builder - @RequiredArgsConstructor - @NoArgsConstructor(force = true) - public static class AddThemeRequest { - private final String title; - private final Integer timeLimit; - } + @Getter + @Builder + @RequiredArgsConstructor + @NoArgsConstructor(force = true) + public static class AddThemeRequest { + private final String title; + private final Integer timeLimit; + } - @Getter - @Builder - public static class AddThemeResponse { - private final Long id; - private final String title; - private final Integer timeLimit; - } + @Getter + @Builder + public static class AddThemeResponse { + private final Long id; + private final String title; + private final Integer timeLimit; + } - @Getter - @Builder - public static class ThemeListResponse { - private final Long id; - private final String title; - private final Integer timeLimit; - } + @Getter + @Builder + public static class ThemeListResponse { + private final Long id; + private final String title; + private final Integer timeLimit; + } - @Getter - @RequiredArgsConstructor - public static class EditThemeRequest { - private final Long id; - private final String title; - private final Integer timeLimit; - } + @Getter + @RequiredArgsConstructor + public static class EditThemeRequest { + private final Long id; + private final String title; + private final Integer timeLimit; + } - @Getter - @RequiredArgsConstructor - public static class RemoveRequest { - private final Long id; - } + @Getter + @RequiredArgsConstructor + public static class RemoveRequest { + private final Long id; + } } diff --git a/src/main/java/com/nextroom/oescape/exceptions/CustomException.java b/src/main/java/com/nextroom/oescape/exceptions/CustomException.java index 3734008..038abe3 100644 --- a/src/main/java/com/nextroom/oescape/exceptions/CustomException.java +++ b/src/main/java/com/nextroom/oescape/exceptions/CustomException.java @@ -6,5 +6,5 @@ @Getter @AllArgsConstructor public class CustomException extends RuntimeException { - private final StatusCode statusCode; + private final StatusCode statusCode; } diff --git a/src/main/java/com/nextroom/oescape/exceptions/ErrorResponse.java b/src/main/java/com/nextroom/oescape/exceptions/ErrorResponse.java index cb46f19..62d160f 100644 --- a/src/main/java/com/nextroom/oescape/exceptions/ErrorResponse.java +++ b/src/main/java/com/nextroom/oescape/exceptions/ErrorResponse.java @@ -9,14 +9,14 @@ @Getter @Builder public class ErrorResponse { - private final int code; - private final String message; + private final int code; + private final String message; - public static ResponseEntity toResponseEntity(HttpStatus status, String message) { - return ResponseEntity - .status(status) - .body(ErrorResponse.builder() - .code(status.value()) - .message(message).build()); - } + public static ResponseEntity toResponseEntity(HttpStatus status, String message) { + return ResponseEntity + .status(status) + .body(ErrorResponse.builder() + .code(status.value()) + .message(message).build()); + } } diff --git a/src/main/java/com/nextroom/oescape/exceptions/GlobalExceptionHandler.java b/src/main/java/com/nextroom/oescape/exceptions/GlobalExceptionHandler.java index 25cab78..27b7378 100644 --- a/src/main/java/com/nextroom/oescape/exceptions/GlobalExceptionHandler.java +++ b/src/main/java/com/nextroom/oescape/exceptions/GlobalExceptionHandler.java @@ -7,8 +7,8 @@ @RestControllerAdvice public class GlobalExceptionHandler { - @ExceptionHandler(value = {CustomException.class}) - protected ResponseEntity handleCustomException(CustomException e) { - return ErrorResponse.toResponseEntity(e.getStatusCode().getCode(), e.getStatusCode().getMessage()); - } + @ExceptionHandler(value = {CustomException.class}) + protected ResponseEntity handleCustomException(CustomException e) { + return ErrorResponse.toResponseEntity(e.getStatusCode().getCode(), e.getStatusCode().getMessage()); + } } diff --git a/src/main/java/com/nextroom/oescape/exceptions/StatusCode.java b/src/main/java/com/nextroom/oescape/exceptions/StatusCode.java index de24309..12dc19b 100644 --- a/src/main/java/com/nextroom/oescape/exceptions/StatusCode.java +++ b/src/main/java/com/nextroom/oescape/exceptions/StatusCode.java @@ -9,16 +9,16 @@ @AllArgsConstructor public enum StatusCode { - /** - * 4xx Bad Request - */ - BAD_REQUEST(HttpStatus.BAD_REQUEST, "잘못된 요청입니다."), + /** + * 4xx Bad Request + */ + BAD_REQUEST(HttpStatus.BAD_REQUEST, "잘못된 요청입니다."), - /** - * 2xx OK - */ - OK(HttpStatus.OK, "성공"); + /** + * 2xx OK + */ + OK(HttpStatus.OK, "성공"); - private final HttpStatus code; - private final String message; + private final HttpStatus code; + private final String message; } diff --git a/src/main/java/com/nextroom/oescape/repository/ThemeRepository.java b/src/main/java/com/nextroom/oescape/repository/ThemeRepository.java index e813616..8f52665 100644 --- a/src/main/java/com/nextroom/oescape/repository/ThemeRepository.java +++ b/src/main/java/com/nextroom/oescape/repository/ThemeRepository.java @@ -9,7 +9,7 @@ import com.nextroom.oescape.domain.Theme; public interface ThemeRepository extends JpaRepository { - Optional findByTitle(String title); + Optional findByTitle(String title); - List findAllByShop(Shop shop); + List findAllByShop(Shop shop); } diff --git a/src/main/java/com/nextroom/oescape/service/ThemeService.java b/src/main/java/com/nextroom/oescape/service/ThemeService.java index 3c1df64..847fa12 100644 --- a/src/main/java/com/nextroom/oescape/service/ThemeService.java +++ b/src/main/java/com/nextroom/oescape/service/ThemeService.java @@ -17,59 +17,59 @@ @Service @RequiredArgsConstructor public class ThemeService { - private final ThemeRepository themeRepository; - - public ThemeDto.AddThemeResponse addTheme(ThemeDto.AddThemeRequest request) { - Theme result = themeRepository.findByTitle(request.getTitle()).orElseThrow( - () -> new CustomException(StatusCode.BAD_REQUEST) - ); - - Theme theme = Theme.builder() - .title(request.getTitle()) - .timeLimit(request.getTimeLimit()) - .build(); - - Theme savedTheme = themeRepository.save(theme); - - return ThemeDto.AddThemeResponse.builder() - .id(savedTheme.getId()) - .title(savedTheme.getTitle()) - .timeLimit(savedTheme.getTimeLimit()) - .build(); - } - - public List getThemeList() { - //TODO 회원 검증 로직 - - List themeList = themeRepository.findAllByShop(new Shop()); - List themeListResponses = new ArrayList<>(); - for (Theme theme : themeList) { - themeListResponses.add(ThemeDto.ThemeListResponse - .builder() - .id(theme.getId()) - .title(theme.getTitle()) - .timeLimit(theme.getTimeLimit()) - .build()); - } - return themeListResponses; - } - - public void editTheme(ThemeDto.EditThemeRequest request) { - //TODO 테마 사용자 조회 - - //TODO 테마 조회 - Theme theme = themeRepository.findById(request.getId()).orElseThrow( - () -> new CustomException(StatusCode.BAD_REQUEST) - ); - - //TODO 테마 수정 - } - - public void removeTheme(ThemeDto.RemoveRequest request) { - //TODO 테마 사용자 조회 - - //TODO 테마 조회 - - //TODO 테마 삭제 - } + private final ThemeRepository themeRepository; + + public ThemeDto.AddThemeResponse addTheme(ThemeDto.AddThemeRequest request) { + Theme result = themeRepository.findByTitle(request.getTitle()).orElseThrow( + () -> new CustomException(StatusCode.BAD_REQUEST) + ); + + Theme theme = Theme.builder() + .title(request.getTitle()) + .timeLimit(request.getTimeLimit()) + .build(); + + Theme savedTheme = themeRepository.save(theme); + + return ThemeDto.AddThemeResponse.builder() + .id(savedTheme.getId()) + .title(savedTheme.getTitle()) + .timeLimit(savedTheme.getTimeLimit()) + .build(); + } + + public List getThemeList() { + //TODO 회원 검증 로직 + + List themeList = themeRepository.findAllByShop(new Shop()); + List themeListResponses = new ArrayList<>(); + for (Theme theme : themeList) { + themeListResponses.add(ThemeDto.ThemeListResponse + .builder() + .id(theme.getId()) + .title(theme.getTitle()) + .timeLimit(theme.getTimeLimit()) + .build()); + } + return themeListResponses; + } + + public void editTheme(ThemeDto.EditThemeRequest request) { + //TODO 테마 사용자 조회 + + //TODO 테마 조회 + Theme theme = themeRepository.findById(request.getId()).orElseThrow( + () -> new CustomException(StatusCode.BAD_REQUEST) + ); + + //TODO 테마 수정 + } + + public void removeTheme(ThemeDto.RemoveRequest request) { + //TODO 테마 사용자 조회 + + //TODO 테마 조회 + + //TODO 테마 삭제 + } } diff --git a/src/test/java/com/nextroom/oescape/OEscapeApplicationTests.java b/src/test/java/com/nextroom/oescape/OEscapeApplicationTests.java index ae01754..b2233d2 100644 --- a/src/test/java/com/nextroom/oescape/OEscapeApplicationTests.java +++ b/src/test/java/com/nextroom/oescape/OEscapeApplicationTests.java @@ -6,8 +6,8 @@ @SpringBootTest class OEscapeApplicationTests { - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } } diff --git a/src/test/java/com/nextroom/oescape/controller/ThemeControllerTest.java b/src/test/java/com/nextroom/oescape/controller/ThemeControllerTest.java index c51746f..cbdad98 100644 --- a/src/test/java/com/nextroom/oescape/controller/ThemeControllerTest.java +++ b/src/test/java/com/nextroom/oescape/controller/ThemeControllerTest.java @@ -20,39 +20,39 @@ @ExtendWith(MockitoExtension.class) class ThemeControllerTest { - @InjectMocks - private ThemeController themeController; - - private MockMvc mockMvc; - private Gson gson; - - @BeforeEach - void init() { - gson = new Gson(); - mockMvc = MockMvcBuilders.standaloneSetup(themeController).build(); - } - - @Test - @DisplayName("테마 등록 실패_사용자 식별값 헤더에 없음") - void failAddTheme() throws Exception { - //given - String url = "/api/v1/theme"; - - //when - ResultActions resultActions = mockMvc.perform( - MockMvcRequestBuilders.post(url) - .content(gson.toJson(addThemeRequest("테마 이름", 70))) - .contentType(MediaType.APPLICATION_JSON) - ); - - //then - resultActions.andExpect(status().isBadRequest()); - } - - private ThemeDto.AddThemeRequest addThemeRequest(String title, int timeLimit) { - return ThemeDto.AddThemeRequest.builder() - .title(title) - .timeLimit(timeLimit) - .build(); - } + @InjectMocks + private ThemeController themeController; + + private MockMvc mockMvc; + private Gson gson; + + @BeforeEach + void init() { + gson = new Gson(); + mockMvc = MockMvcBuilders.standaloneSetup(themeController).build(); + } + + @Test + @DisplayName("테마 등록 실패_사용자 식별값 헤더에 없음") + void failAddTheme() throws Exception { + //given + String url = "/api/v1/theme"; + + //when + ResultActions resultActions = mockMvc.perform( + MockMvcRequestBuilders.post(url) + .content(gson.toJson(addThemeRequest("테마 이름", 70))) + .contentType(MediaType.APPLICATION_JSON) + ); + + //then + resultActions.andExpect(status().isBadRequest()); + } + + private ThemeDto.AddThemeRequest addThemeRequest(String title, int timeLimit) { + return ThemeDto.AddThemeRequest.builder() + .title(title) + .timeLimit(timeLimit) + .build(); + } } \ No newline at end of file diff --git a/src/test/java/com/nextroom/oescape/domain/ThemeTest.java b/src/test/java/com/nextroom/oescape/domain/ThemeTest.java index b502bea..4366799 100644 --- a/src/test/java/com/nextroom/oescape/domain/ThemeTest.java +++ b/src/test/java/com/nextroom/oescape/domain/ThemeTest.java @@ -7,10 +7,10 @@ class ThemeTest { - @Test - @DisplayName("테마 생성") - void createTheme() { - Theme theme = new Theme(); - assertNotNull(theme); - } + @Test + @DisplayName("테마 생성") + void createTheme() { + Theme theme = new Theme(); + assertNotNull(theme); + } } \ No newline at end of file diff --git a/src/test/java/com/nextroom/oescape/repository/ThemeRepositoryTest.java b/src/test/java/com/nextroom/oescape/repository/ThemeRepositoryTest.java index 88b82c9..d4d88d5 100644 --- a/src/test/java/com/nextroom/oescape/repository/ThemeRepositoryTest.java +++ b/src/test/java/com/nextroom/oescape/repository/ThemeRepositoryTest.java @@ -15,54 +15,54 @@ @DataJpaTest public class ThemeRepositoryTest { - @Autowired - private ThemeRepository themeRepository; + @Autowired + private ThemeRepository themeRepository; - @Test - @DisplayName("테마 생성") - void save() { - //given - Shop shop = new Shop(); + @Test + @DisplayName("테마 생성") + void save() { + //given + Shop shop = new Shop(); - Theme theme = Theme.builder() - .shop(shop) - .title("테마 이름") - .timeLimit(70) - .build(); + Theme theme = Theme.builder() + .shop(shop) + .title("테마 이름") + .timeLimit(70) + .build(); - //when - Theme result = themeRepository.save(theme); + //when + Theme result = themeRepository.save(theme); - //then - assertThat(result.getId()).isNotNull(); - assertThat(result.getShop()).isEqualTo(shop); - assertThat(result.getTitle()).isEqualTo("테마 이름"); - assertThat(result.getTimeLimit()).isEqualTo(70); - } + //then + assertThat(result.getId()).isNotNull(); + assertThat(result.getShop()).isEqualTo(shop); + assertThat(result.getTitle()).isEqualTo("테마 이름"); + assertThat(result.getTimeLimit()).isEqualTo(70); + } - @Test - @DisplayName("테마 제목으로 조회") - void findByTitle() { - //given - Shop shop = new Shop(); + @Test + @DisplayName("테마 제목으로 조회") + void findByTitle() { + //given + Shop shop = new Shop(); - Theme theme = Theme.builder() - .shop(shop) - .title("테마 이름") - .timeLimit(70) - .build(); + Theme theme = Theme.builder() + .shop(shop) + .title("테마 이름") + .timeLimit(70) + .build(); - //when - themeRepository.save(theme); - Theme result = themeRepository.findByTitle("테마 이름").orElseThrow( - () -> new CustomException(StatusCode.BAD_REQUEST) - ); + //when + themeRepository.save(theme); + Theme result = themeRepository.findByTitle("테마 이름").orElseThrow( + () -> new CustomException(StatusCode.BAD_REQUEST) + ); - //then - assertThat(result).isNotNull(); - assertThat(result.getId()).isNotNull(); - assertThat(result.getShop()).isEqualTo(shop); - assertThat(result.getTitle()).isEqualTo("테마 이름"); - assertThat(result.getTimeLimit()).isEqualTo(70); - } + //then + assertThat(result).isNotNull(); + assertThat(result.getId()).isNotNull(); + assertThat(result.getShop()).isEqualTo(shop); + assertThat(result.getTitle()).isEqualTo("테마 이름"); + assertThat(result.getTimeLimit()).isEqualTo(70); + } } diff --git a/src/test/java/com/nextroom/oescape/service/ThemeServiceTest.java b/src/test/java/com/nextroom/oescape/service/ThemeServiceTest.java index 47b5fea..209fcda 100644 --- a/src/test/java/com/nextroom/oescape/service/ThemeServiceTest.java +++ b/src/test/java/com/nextroom/oescape/service/ThemeServiceTest.java @@ -22,60 +22,60 @@ @ExtendWith(MockitoExtension.class) class ThemeServiceTest { - @InjectMocks - private ThemeService themeService; - @Mock - private ThemeRepository themeRepository; + @InjectMocks + private ThemeService themeService; + @Mock + private ThemeRepository themeRepository; - private final String title = "테마 이름"; - private final Integer timeLimit = 70; + private final String title = "테마 이름"; + private final Integer timeLimit = 70; - @Test - @DisplayName("테마 등록 성공") - void addTheme() { - //given - doReturn(null).when(themeRepository).findByTitle(title); - Mockito.doReturn(theme()).when(themeRepository).save(any(Theme.class)); + @Test + @DisplayName("테마 등록 성공") + void addTheme() { + //given + doReturn(null).when(themeRepository).findByTitle(title); + Mockito.doReturn(theme()).when(themeRepository).save(any(Theme.class)); - //when - ThemeDto.AddThemeResponse result = themeService.addTheme( - ThemeDto.AddThemeRequest - .builder() - .title(title) - .timeLimit(timeLimit) - .build()); + //when + ThemeDto.AddThemeResponse result = themeService.addTheme( + ThemeDto.AddThemeRequest + .builder() + .title(title) + .timeLimit(timeLimit) + .build()); - //then - assertThat(result.getTitle()).isEqualTo(title); - assertThat(result.getTimeLimit()).isEqualTo(timeLimit); + //then + assertThat(result.getTitle()).isEqualTo(title); + assertThat(result.getTimeLimit()).isEqualTo(timeLimit); - //verify - verify(themeRepository, times(1)).findByTitle(title); - verify(themeRepository, times(1)).save(any(Theme.class)); - } + //verify + verify(themeRepository, times(1)).findByTitle(title); + verify(themeRepository, times(1)).save(any(Theme.class)); + } - private Theme theme() { - return Theme.builder() - .title(title) - .timeLimit(timeLimit) - .build(); - } + private Theme theme() { + return Theme.builder() + .title(title) + .timeLimit(timeLimit) + .build(); + } - @Test - @DisplayName("테마 이름 중복") - void duplicateTheme() { - //given - doReturn(Theme.builder().build()).when(themeRepository).findByTitle(title); + @Test + @DisplayName("테마 이름 중복") + void duplicateTheme() { + //given + doReturn(Theme.builder().build()).when(themeRepository).findByTitle(title); - //when - CustomException result = assertThrows(CustomException.class, () -> themeService.addTheme( - ThemeDto.AddThemeRequest - .builder() - .title(title) - .timeLimit(timeLimit) - .build())); + //when + CustomException result = assertThrows(CustomException.class, () -> themeService.addTheme( + ThemeDto.AddThemeRequest + .builder() + .title(title) + .timeLimit(timeLimit) + .build())); - //then - assertThat(result.getStatusCode()).isEqualTo(StatusCode.BAD_REQUEST); - } + //then + assertThat(result.getStatusCode()).isEqualTo(StatusCode.BAD_REQUEST); + } } \ No newline at end of file