From 8a95686439c63f9d2a5dbc2dbe01db3707f66cbd Mon Sep 17 00:00:00 2001 From: amaran-th Date: Sat, 18 Nov 2023 22:41:04 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20admin=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - admin 패키지를 분리 - admin api의 uri 수정 #156 --- .../java/com/emmsale/ActivityApiTest.java | 49 ++++++++++--------- .../java/com/emmsale/EventApiTest.java | 19 +++---- .../java/com/emmsale/MockMvcTestHelper.java | 8 +-- .../java/com/emmsale/ReportApiTest.java | 5 +- .../java/com/emmsale/TagApiTest.java | 5 +- .../com/emmsale/activity/api/ActivityApi.java | 14 ------ .../admin/activity/api/AdminActivityApi.java | 28 +++++++++++ .../application/ActivityCommandService.java | 3 +- .../admin/event/api/AdminEventApi.java | 48 ++++++++++++++++++ .../application/EventCommandService.java | 2 +- .../admin/report/api/AdminReportApi.java | 22 +++++++++ .../application/ReportQueryService.java | 2 +- .../emmsale/admin/tag/api/AdminTagApi.java | 25 ++++++++++ .../tag/application/TagCommandService.java | 2 +- .../java/com/emmsale/event/api/EventApi.java | 33 ------------- .../com/emmsale/report/api/ReportApi.java | 10 ---- .../main/java/com/emmsale/tag/api/TagApi.java | 11 ----- .../ActivityCommandServiceTest.java | 18 +++---- .../application/EventCommandServiceTest.java | 41 +--------------- ...EventServiceEventIntegrationTestQuery.java | 2 +- .../application/ReportQueryServiceTest.java | 3 +- .../application/TagCommandServiceTest.java | 2 +- 22 files changed, 187 insertions(+), 165 deletions(-) create mode 100644 backend/emm-sale/src/main/java/com/emmsale/admin/activity/api/AdminActivityApi.java rename backend/emm-sale/src/main/java/com/emmsale/{ => admin}/activity/application/ActivityCommandService.java (95%) create mode 100644 backend/emm-sale/src/main/java/com/emmsale/admin/event/api/AdminEventApi.java rename backend/emm-sale/src/main/java/com/emmsale/{ => admin}/event/application/EventCommandService.java (98%) create mode 100644 backend/emm-sale/src/main/java/com/emmsale/admin/report/api/AdminReportApi.java rename backend/emm-sale/src/main/java/com/emmsale/{ => admin}/report/application/ReportQueryService.java (92%) create mode 100644 backend/emm-sale/src/main/java/com/emmsale/admin/tag/api/AdminTagApi.java rename backend/emm-sale/src/main/java/com/emmsale/{ => admin}/tag/application/TagCommandService.java (95%) rename backend/emm-sale/src/test/java/com/emmsale/{ => admin}/activity/application/ActivityCommandServiceTest.java (82%) rename backend/emm-sale/src/test/java/com/emmsale/{ => admin}/event/application/EventCommandServiceTest.java (85%) rename backend/emm-sale/src/test/java/com/emmsale/{ => admin}/event/application/EventServiceEventIntegrationTestQuery.java (99%) rename backend/emm-sale/src/test/java/com/emmsale/{ => admin}/report/application/ReportQueryServiceTest.java (96%) rename backend/emm-sale/src/test/java/com/emmsale/{ => admin}/tag/application/TagCommandServiceTest.java (97%) diff --git a/backend/emm-sale/src/documentTest/java/com/emmsale/ActivityApiTest.java b/backend/emm-sale/src/documentTest/java/com/emmsale/ActivityApiTest.java index 6d1d83fe4..867906f8c 100644 --- a/backend/emm-sale/src/documentTest/java/com/emmsale/ActivityApiTest.java +++ b/backend/emm-sale/src/documentTest/java/com/emmsale/ActivityApiTest.java @@ -13,6 +13,7 @@ import com.emmsale.activity.application.dto.ActivityAddRequest; import com.emmsale.activity.application.dto.ActivityResponse; import com.emmsale.activity.domain.ActivityType; +import com.emmsale.admin.activity.api.AdminActivityApi; import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -27,7 +28,7 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -@WebMvcTest(ActivityApi.class) +@WebMvcTest({ActivityApi.class, AdminActivityApi.class}) // TODO: 2023/11/18 Admin API Test 분리하기 class ActivityApiTest extends MockMvcTestHelper { @Test @@ -35,26 +36,26 @@ class ActivityApiTest extends MockMvcTestHelper { void findAll() throws Exception { // given final ResponseFieldsSnippet responseFields = PayloadDocumentation.responseFields( - fieldWithPath("[].id").type(JsonFieldType.NUMBER).description("activity id"), - fieldWithPath("[].activityType").type(JsonFieldType.STRING).description("activity 분류"), - fieldWithPath("[].name").type(JsonFieldType.STRING).description("activity 이름") + fieldWithPath("[].id").type(JsonFieldType.NUMBER).description("activity id"), + fieldWithPath("[].activityType").type(JsonFieldType.STRING).description("activity 분류"), + fieldWithPath("[].name").type(JsonFieldType.STRING).description("activity 이름") ); final List expected = List.of( - new ActivityResponse(1L, "동아리", "YAPP"), - new ActivityResponse(2L, "동아리", "DND"), - new ActivityResponse(3L, "동아리", "nexters"), - new ActivityResponse(4L, "컨퍼런스", "인프콘"), - new ActivityResponse(5L, "교육", "우아한테크코스"), - new ActivityResponse(6L, "직무", "Backend") + new ActivityResponse(1L, "동아리", "YAPP"), + new ActivityResponse(2L, "동아리", "DND"), + new ActivityResponse(3L, "동아리", "nexters"), + new ActivityResponse(4L, "컨퍼런스", "인프콘"), + new ActivityResponse(5L, "교육", "우아한테크코스"), + new ActivityResponse(6L, "직무", "Backend") ); Mockito.when(activityQueryService.findAll()).thenReturn(expected); // when & then mockMvc.perform(MockMvcRequestBuilders.get("/activities")) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andDo(MockMvcRestDocumentation.document("find-all-activities", responseFields)); + .andExpect(MockMvcResultMatchers.status().isOk()) + .andDo(MockMvcRestDocumentation.document("find-all-activities", responseFields)); } @Test @@ -62,29 +63,29 @@ void findAll() throws Exception { void addTag() throws Exception { //given final RequestFieldsSnippet requestFields = requestFields( - fieldWithPath("activityType").type(JsonFieldType.STRING).description("활동 유형"), - fieldWithPath("name").type(JsonFieldType.STRING).description("활동 이름") + fieldWithPath("activityType").type(JsonFieldType.STRING).description("활동 유형"), + fieldWithPath("name").type(JsonFieldType.STRING).description("활동 이름") ); final ActivityAddRequest request = new ActivityAddRequest(ActivityType.CLUB, "DND"); final ActivityResponse response = new ActivityResponse(3L, - ActivityType.CLUB.getValue(), - "DND" + ActivityType.CLUB.getValue(), + "DND" ); when(activityCommandService.addActivity(any(ActivityAddRequest.class))).thenReturn(response); final ResponseFieldsSnippet responseFields = responseFields( - fieldWithPath("id").type(JsonFieldType.NUMBER).description("활동 식별자"), - fieldWithPath("activityType").type(JsonFieldType.STRING).description("활동 종류"), - fieldWithPath("name").type(JsonFieldType.STRING).description("활동 이름") + fieldWithPath("id").type(JsonFieldType.NUMBER).description("활동 식별자"), + fieldWithPath("activityType").type(JsonFieldType.STRING).description("활동 종류"), + fieldWithPath("name").type(JsonFieldType.STRING).description("활동 이름") ); //when & then - mockMvc.perform(post("/activities") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(request))) - .andExpect(status().isCreated()) - .andDo(document("add-activity", requestFields, responseFields)); + mockMvc.perform(post("/admin/activities") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(request))) + .andExpect(status().isCreated()) + .andDo(document("add-activity", requestFields, responseFields)); } } diff --git a/backend/emm-sale/src/documentTest/java/com/emmsale/EventApiTest.java b/backend/emm-sale/src/documentTest/java/com/emmsale/EventApiTest.java index ef69d49b0..1dfd3ea7a 100644 --- a/backend/emm-sale/src/documentTest/java/com/emmsale/EventApiTest.java +++ b/backend/emm-sale/src/documentTest/java/com/emmsale/EventApiTest.java @@ -11,6 +11,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.emmsale.admin.event.api.AdminEventApi; import com.emmsale.event.EventFixture; import com.emmsale.event.api.EventApi; import com.emmsale.event.application.dto.EventDetailRequest; @@ -52,7 +53,7 @@ import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequestBuilder; import org.springframework.test.web.servlet.result.MockMvcResultHandlers; -@WebMvcTest(EventApi.class) +@WebMvcTest({EventApi.class, AdminEventApi.class}) class EventApiTest extends MockMvcTestHelper { private static final ResponseFieldsSnippet EVENT_DETAIL_RESPONSE_FILED = PayloadDocumentation.responseFields( @@ -259,7 +260,7 @@ void updateEventTest() throws Exception { //when final MockMultipartHttpServletRequestBuilder builder = multipart(HttpMethod.PUT, - "/events/" + eventId) + "/admin/events/" + eventId) .file("images", image1.getBytes()) .file("images", image2.getBytes()) .file(new MockMultipartFile("request", "", "application/json", contents.getBytes( @@ -285,7 +286,7 @@ void deleteEventTest() throws Exception { Mockito.doNothing().when(eventCommandService).deleteEvent(eventId); //when final ResultActions result = mockMvc.perform( - delete("/events/" + eventId)); + delete("/admin/events/" + eventId)); //then result.andExpect(status().isNoContent()) @@ -360,7 +361,7 @@ void addEventTest() throws Exception { ); //when - final MockMultipartHttpServletRequestBuilder builder = multipart("/events") + final MockMultipartHttpServletRequestBuilder builder = multipart("/admin/events") .file("images", image1.getBytes()) .file("images", image2.getBytes()) .file(new MockMultipartFile("request", "", "application/json", contents.getBytes( @@ -407,7 +408,7 @@ void addEventWithEmptyNameTest(final String eventName) throws Exception { event.getPaymentType(), event.getOrganization()); final String contents = objectMapper.writeValueAsString(request); //when & then - mockMvc.perform(multipart("/events") + mockMvc.perform(multipart("/admin/events") .file("images", image1.getBytes()) .file("images", image2.getBytes()) .file(new MockMultipartFile("request", "", "application/json", contents.getBytes( @@ -448,7 +449,7 @@ void addEventWithEmptyLocationTest(final String eventLocation) throws Exception event.getPaymentType(), event.getOrganization()); final String contents = objectMapper.writeValueAsString(request); //when & then - mockMvc.perform(multipart("/events") + mockMvc.perform(multipart("/admin/events") .file("images", image1.getBytes()) .file("images", image2.getBytes()) .file(new MockMultipartFile("request", "", "application/json", contents.getBytes( @@ -490,7 +491,7 @@ void addEventWithInvalidInformationUrlTest(final String informationUrl) throws E event.getPaymentType(), event.getOrganization()); final String contents = objectMapper.writeValueAsString(request); //when & then - mockMvc.perform(multipart("/events") + mockMvc.perform(multipart("/admin/events") .file("images", image1.getBytes()) .file("images", image2.getBytes()) .file(new MockMultipartFile("request", "", "application/json", contents.getBytes( @@ -538,7 +539,7 @@ void addEventWithUnformattedStartDateTimeTest(final String startDateTime) final String contents = objectMapper.writeValueAsString(request); //when & then - mockMvc.perform(multipart("/events") + mockMvc.perform(multipart("/admin/events") .file("images", image1.getBytes()) .file("images", image2.getBytes()) .file(new MockMultipartFile("request", "", "application/json", contents.getBytes( @@ -585,7 +586,7 @@ void addEventWithUnformattedEndDateTimeTest(final String endDateTime) throws Exc final String contents = objectMapper.writeValueAsString(request); //when & then - mockMvc.perform(multipart("/events") + mockMvc.perform(multipart("/admin/events") .file("images", image1.getBytes()) .file("images", image2.getBytes()) .file(new MockMultipartFile("request", "", "application/json", contents.getBytes( diff --git a/backend/emm-sale/src/documentTest/java/com/emmsale/MockMvcTestHelper.java b/backend/emm-sale/src/documentTest/java/com/emmsale/MockMvcTestHelper.java index 350bfbf05..a5ee07bab 100644 --- a/backend/emm-sale/src/documentTest/java/com/emmsale/MockMvcTestHelper.java +++ b/backend/emm-sale/src/documentTest/java/com/emmsale/MockMvcTestHelper.java @@ -3,13 +3,15 @@ import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; -import com.emmsale.activity.application.ActivityCommandService; import com.emmsale.activity.application.ActivityQueryService; +import com.emmsale.admin.activity.application.ActivityCommandService; +import com.emmsale.admin.event.application.EventCommandService; +import com.emmsale.admin.report.application.ReportQueryService; +import com.emmsale.admin.tag.application.TagCommandService; import com.emmsale.block.application.BlockCommandService; import com.emmsale.block.application.BlockQueryService; import com.emmsale.comment.application.CommentCommandService; import com.emmsale.comment.application.CommentQueryService; -import com.emmsale.event.application.EventCommandService; import com.emmsale.event.application.EventQueryService; import com.emmsale.event.application.RecruitmentPostCommandService; import com.emmsale.event.application.RecruitmentPostQueryService; @@ -27,11 +29,9 @@ import com.emmsale.notification.application.NotificationCommandService; import com.emmsale.notification.application.NotificationQueryService; import com.emmsale.report.application.ReportCommandService; -import com.emmsale.report.application.ReportQueryService; import com.emmsale.resolver.MemberArgumentResolver; import com.emmsale.scrap.application.ScrapCommandService; import com.emmsale.scrap.application.ScrapQueryService; -import com.emmsale.tag.application.TagCommandService; import com.emmsale.tag.application.TagQueryService; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; diff --git a/backend/emm-sale/src/documentTest/java/com/emmsale/ReportApiTest.java b/backend/emm-sale/src/documentTest/java/com/emmsale/ReportApiTest.java index 580fcbf05..ef572149a 100644 --- a/backend/emm-sale/src/documentTest/java/com/emmsale/ReportApiTest.java +++ b/backend/emm-sale/src/documentTest/java/com/emmsale/ReportApiTest.java @@ -10,6 +10,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.emmsale.admin.report.api.AdminReportApi; import com.emmsale.report.api.ReportApi; import com.emmsale.report.application.dto.ReportCreateRequest; import com.emmsale.report.application.dto.ReportCreateResponse; @@ -25,7 +26,7 @@ import org.springframework.restdocs.payload.RequestFieldsSnippet; import org.springframework.restdocs.payload.ResponseFieldsSnippet; -@WebMvcTest(ReportApi.class) +@WebMvcTest({ReportApi.class, AdminReportApi.class}) class ReportApiTest extends MockMvcTestHelper { @Test @@ -100,7 +101,7 @@ void findReports() throws Exception { when(reportQueryService.findReports()).thenReturn(reportFindResponse); // when & then - mockMvc.perform(get("/reports")) + mockMvc.perform(get("/admin/reports")) .andExpect(status().isOk()) .andDo(document("find-reports", responseFields)); } diff --git a/backend/emm-sale/src/documentTest/java/com/emmsale/TagApiTest.java b/backend/emm-sale/src/documentTest/java/com/emmsale/TagApiTest.java index fd15419a4..03d92eecc 100644 --- a/backend/emm-sale/src/documentTest/java/com/emmsale/TagApiTest.java +++ b/backend/emm-sale/src/documentTest/java/com/emmsale/TagApiTest.java @@ -10,6 +10,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.emmsale.admin.tag.api.AdminTagApi; import com.emmsale.tag.api.TagApi; import com.emmsale.tag.application.dto.TagRequest; import com.emmsale.tag.application.dto.TagResponse; @@ -22,7 +23,7 @@ import org.springframework.restdocs.payload.RequestFieldsSnippet; import org.springframework.restdocs.payload.ResponseFieldsSnippet; -@WebMvcTest(TagApi.class) +@WebMvcTest({TagApi.class, AdminTagApi.class}) class TagApiTest extends MockMvcTestHelper { @Test @@ -66,7 +67,7 @@ void addTag() throws Exception { ); //when & then - mockMvc.perform(post("/tags") + mockMvc.perform(post("/admin/tags") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(status().isCreated()) diff --git a/backend/emm-sale/src/main/java/com/emmsale/activity/api/ActivityApi.java b/backend/emm-sale/src/main/java/com/emmsale/activity/api/ActivityApi.java index ed2e74e79..d8a600abc 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/activity/api/ActivityApi.java +++ b/backend/emm-sale/src/main/java/com/emmsale/activity/api/ActivityApi.java @@ -1,16 +1,11 @@ package com.emmsale.activity.api; -import com.emmsale.activity.application.ActivityCommandService; import com.emmsale.activity.application.ActivityQueryService; -import com.emmsale.activity.application.dto.ActivityAddRequest; import com.emmsale.activity.application.dto.ActivityResponse; import java.util.List; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -20,18 +15,9 @@ public class ActivityApi { private final ActivityQueryService activityQueryService; - private final ActivityCommandService activityCommandService; @GetMapping public ResponseEntity> findAll() { return ResponseEntity.ok(activityQueryService.findAll()); } - - @PostMapping - public ResponseEntity create( - @RequestBody final ActivityAddRequest request - ) { - return ResponseEntity.status(HttpStatus.CREATED) - .body(activityCommandService.addActivity(request)); - } } diff --git a/backend/emm-sale/src/main/java/com/emmsale/admin/activity/api/AdminActivityApi.java b/backend/emm-sale/src/main/java/com/emmsale/admin/activity/api/AdminActivityApi.java new file mode 100644 index 000000000..320118055 --- /dev/null +++ b/backend/emm-sale/src/main/java/com/emmsale/admin/activity/api/AdminActivityApi.java @@ -0,0 +1,28 @@ +package com.emmsale.admin.activity.api; + +import com.emmsale.activity.application.dto.ActivityAddRequest; +import com.emmsale.activity.application.dto.ActivityResponse; +import com.emmsale.admin.activity.application.ActivityCommandService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/admin/activities") +@RequiredArgsConstructor +public class AdminActivityApi { + + private final ActivityCommandService activityCommandService; + + @PostMapping + public ResponseEntity create( + @RequestBody final ActivityAddRequest request + ) { + return ResponseEntity.status(HttpStatus.CREATED) + .body(activityCommandService.addActivity(request)); + } +} diff --git a/backend/emm-sale/src/main/java/com/emmsale/activity/application/ActivityCommandService.java b/backend/emm-sale/src/main/java/com/emmsale/admin/activity/application/ActivityCommandService.java similarity index 95% rename from backend/emm-sale/src/main/java/com/emmsale/activity/application/ActivityCommandService.java rename to backend/emm-sale/src/main/java/com/emmsale/admin/activity/application/ActivityCommandService.java index e5b6585fa..a60b51aaa 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/activity/application/ActivityCommandService.java +++ b/backend/emm-sale/src/main/java/com/emmsale/admin/activity/application/ActivityCommandService.java @@ -1,4 +1,4 @@ -package com.emmsale.activity.application; +package com.emmsale.admin.activity.application; import com.emmsale.activity.application.dto.ActivityAddRequest; import com.emmsale.activity.application.dto.ActivityResponse; @@ -30,4 +30,3 @@ private void validateAlreadyExist(final String name) { } } } - diff --git a/backend/emm-sale/src/main/java/com/emmsale/admin/event/api/AdminEventApi.java b/backend/emm-sale/src/main/java/com/emmsale/admin/event/api/AdminEventApi.java new file mode 100644 index 000000000..2c06f1166 --- /dev/null +++ b/backend/emm-sale/src/main/java/com/emmsale/admin/event/api/AdminEventApi.java @@ -0,0 +1,48 @@ +package com.emmsale.admin.event.api; + +import com.emmsale.admin.event.application.EventCommandService; +import com.emmsale.event.application.dto.EventDetailRequest; +import com.emmsale.event.application.dto.EventResponse; +import java.util.List; +import javax.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +@RestController +@RequestMapping("/admin/events") +@RequiredArgsConstructor +public class AdminEventApi { + + private final EventCommandService eventCommandService; + + @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @ResponseStatus(HttpStatus.CREATED) + public EventResponse addEvent(@RequestPart @Valid final EventDetailRequest request, + @RequestPart final List images) { + return eventCommandService.addEvent(request, images); + } + + @PutMapping(path = "/{eventId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + @ResponseStatus(HttpStatus.OK) + public EventResponse updateEvent(@PathVariable final Long eventId, + @RequestPart @Valid final EventDetailRequest request, + @RequestPart final List images) { + return eventCommandService.updateEvent(eventId, request, images); + } + + @DeleteMapping("/{eventId}") + @ResponseStatus(HttpStatus.NO_CONTENT) + public void deleteEvent(@PathVariable final Long eventId) { + eventCommandService.deleteEvent(eventId); + } +} diff --git a/backend/emm-sale/src/main/java/com/emmsale/event/application/EventCommandService.java b/backend/emm-sale/src/main/java/com/emmsale/admin/event/application/EventCommandService.java similarity index 98% rename from backend/emm-sale/src/main/java/com/emmsale/event/application/EventCommandService.java rename to backend/emm-sale/src/main/java/com/emmsale/admin/event/application/EventCommandService.java index c958f360a..c6c322be4 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/event/application/EventCommandService.java +++ b/backend/emm-sale/src/main/java/com/emmsale/admin/event/application/EventCommandService.java @@ -1,4 +1,4 @@ -package com.emmsale.event.application; +package com.emmsale.admin.event.application; import static com.emmsale.event.exception.EventExceptionType.NOT_FOUND_EVENT; import static java.util.stream.Collectors.toList; diff --git a/backend/emm-sale/src/main/java/com/emmsale/admin/report/api/AdminReportApi.java b/backend/emm-sale/src/main/java/com/emmsale/admin/report/api/AdminReportApi.java new file mode 100644 index 000000000..42b175317 --- /dev/null +++ b/backend/emm-sale/src/main/java/com/emmsale/admin/report/api/AdminReportApi.java @@ -0,0 +1,22 @@ +package com.emmsale.admin.report.api; + +import com.emmsale.admin.report.application.ReportQueryService; +import com.emmsale.report.application.dto.ReportFindResponse; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/admin/reports") +@RequiredArgsConstructor +public class AdminReportApi { + + private final ReportQueryService reportQueryService; + + @GetMapping + public List findReports() { + return reportQueryService.findReports(); + } +} diff --git a/backend/emm-sale/src/main/java/com/emmsale/report/application/ReportQueryService.java b/backend/emm-sale/src/main/java/com/emmsale/admin/report/application/ReportQueryService.java similarity index 92% rename from backend/emm-sale/src/main/java/com/emmsale/report/application/ReportQueryService.java rename to backend/emm-sale/src/main/java/com/emmsale/admin/report/application/ReportQueryService.java index 6ca29076a..831070c31 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/report/application/ReportQueryService.java +++ b/backend/emm-sale/src/main/java/com/emmsale/admin/report/application/ReportQueryService.java @@ -1,4 +1,4 @@ -package com.emmsale.report.application; +package com.emmsale.admin.report.application; import com.emmsale.report.application.dto.ReportFindResponse; import com.emmsale.report.domain.repository.ReportRepository; diff --git a/backend/emm-sale/src/main/java/com/emmsale/admin/tag/api/AdminTagApi.java b/backend/emm-sale/src/main/java/com/emmsale/admin/tag/api/AdminTagApi.java new file mode 100644 index 000000000..5c9c12fb0 --- /dev/null +++ b/backend/emm-sale/src/main/java/com/emmsale/admin/tag/api/AdminTagApi.java @@ -0,0 +1,25 @@ +package com.emmsale.admin.tag.api; + +import com.emmsale.admin.tag.application.TagCommandService; +import com.emmsale.tag.application.dto.TagRequest; +import com.emmsale.tag.application.dto.TagResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/admin/tags") +@RequiredArgsConstructor +public class AdminTagApi { + + private final TagCommandService commandService; + + @PostMapping + public ResponseEntity create(@RequestBody final TagRequest tagRequest) { + return ResponseEntity.status(HttpStatus.CREATED).body(commandService.addTag(tagRequest)); + } +} diff --git a/backend/emm-sale/src/main/java/com/emmsale/tag/application/TagCommandService.java b/backend/emm-sale/src/main/java/com/emmsale/admin/tag/application/TagCommandService.java similarity index 95% rename from backend/emm-sale/src/main/java/com/emmsale/tag/application/TagCommandService.java rename to backend/emm-sale/src/main/java/com/emmsale/admin/tag/application/TagCommandService.java index e81fbfda0..461435587 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/tag/application/TagCommandService.java +++ b/backend/emm-sale/src/main/java/com/emmsale/admin/tag/application/TagCommandService.java @@ -1,4 +1,4 @@ -package com.emmsale.tag.application; +package com.emmsale.admin.tag.application; import com.emmsale.tag.application.dto.TagRequest; import com.emmsale.tag.application.dto.TagResponse; diff --git a/backend/emm-sale/src/main/java/com/emmsale/event/api/EventApi.java b/backend/emm-sale/src/main/java/com/emmsale/event/api/EventApi.java index 7aebba943..c719bc0b7 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/event/api/EventApi.java +++ b/backend/emm-sale/src/main/java/com/emmsale/event/api/EventApi.java @@ -1,30 +1,19 @@ package com.emmsale.event.api; -import com.emmsale.event.application.EventCommandService; import com.emmsale.event.application.EventQueryService; -import com.emmsale.event.application.dto.EventDetailRequest; import com.emmsale.event.application.dto.EventResponse; import com.emmsale.event.domain.EventStatus; import com.emmsale.event.domain.EventType; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; -import javax.validation.Valid; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; 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.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RequestPart; -import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/events") @@ -32,7 +21,6 @@ public class EventApi { private final EventQueryService eventQueryService; - private final EventCommandService eventCommandService; @GetMapping("/{id}") public ResponseEntity findEventById(@PathVariable final Long id) { @@ -52,25 +40,4 @@ public ResponseEntity> findEvents( statuses, keyword)); } - - @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - @ResponseStatus(HttpStatus.CREATED) - public EventResponse addEvent(@RequestPart @Valid final EventDetailRequest request, - @RequestPart final List images) { - return eventCommandService.addEvent(request, images); - } - - @PutMapping(path = "/{eventId}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - @ResponseStatus(HttpStatus.OK) - public EventResponse updateEvent(@PathVariable final Long eventId, - @RequestPart @Valid final EventDetailRequest request, - @RequestPart final List images) { - return eventCommandService.updateEvent(eventId, request, images); - } - - @DeleteMapping("/{eventId}") - @ResponseStatus(HttpStatus.NO_CONTENT) - public void deleteEvent(@PathVariable final Long eventId) { - eventCommandService.deleteEvent(eventId); - } } diff --git a/backend/emm-sale/src/main/java/com/emmsale/report/api/ReportApi.java b/backend/emm-sale/src/main/java/com/emmsale/report/api/ReportApi.java index 3779984ca..2754f24e5 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/report/api/ReportApi.java +++ b/backend/emm-sale/src/main/java/com/emmsale/report/api/ReportApi.java @@ -2,14 +2,10 @@ import com.emmsale.member.domain.Member; import com.emmsale.report.application.ReportCommandService; -import com.emmsale.report.application.ReportQueryService; import com.emmsale.report.application.dto.ReportCreateRequest; import com.emmsale.report.application.dto.ReportCreateResponse; -import com.emmsale.report.application.dto.ReportFindResponse; -import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.ResponseStatus; @@ -20,7 +16,6 @@ public class ReportApi { private final ReportCommandService reportCommandService; - private final ReportQueryService reportQueryService; @PostMapping("/reports") @ResponseStatus(HttpStatus.CREATED) @@ -28,9 +23,4 @@ public ReportCreateResponse create(@RequestBody final ReportCreateRequest report final Member member) { return reportCommandService.create(reportRequest, member); } - - @GetMapping("/reports") - public List findReports() { - return reportQueryService.findReports(); - } } diff --git a/backend/emm-sale/src/main/java/com/emmsale/tag/api/TagApi.java b/backend/emm-sale/src/main/java/com/emmsale/tag/api/TagApi.java index 0457dda7a..3534659b6 100644 --- a/backend/emm-sale/src/main/java/com/emmsale/tag/api/TagApi.java +++ b/backend/emm-sale/src/main/java/com/emmsale/tag/api/TagApi.java @@ -1,16 +1,11 @@ package com.emmsale.tag.api; -import com.emmsale.tag.application.TagCommandService; import com.emmsale.tag.application.TagQueryService; -import com.emmsale.tag.application.dto.TagRequest; import com.emmsale.tag.application.dto.TagResponse; import java.util.List; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -20,15 +15,9 @@ public class TagApi { private final TagQueryService queryService; - private final TagCommandService commandService; @GetMapping public ResponseEntity> findAll() { return ResponseEntity.ok(queryService.findAll()); } - - @PostMapping - public ResponseEntity create(@RequestBody final TagRequest tagRequest) { - return ResponseEntity.status(HttpStatus.CREATED).body(commandService.addTag(tagRequest)); - } } diff --git a/backend/emm-sale/src/test/java/com/emmsale/activity/application/ActivityCommandServiceTest.java b/backend/emm-sale/src/test/java/com/emmsale/admin/activity/application/ActivityCommandServiceTest.java similarity index 82% rename from backend/emm-sale/src/test/java/com/emmsale/activity/application/ActivityCommandServiceTest.java rename to backend/emm-sale/src/test/java/com/emmsale/admin/activity/application/ActivityCommandServiceTest.java index b71f3117b..c99823578 100644 --- a/backend/emm-sale/src/test/java/com/emmsale/activity/application/ActivityCommandServiceTest.java +++ b/backend/emm-sale/src/test/java/com/emmsale/admin/activity/application/ActivityCommandServiceTest.java @@ -1,4 +1,4 @@ -package com.emmsale.activity.application; +package com.emmsale.admin.activity.application; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -26,19 +26,19 @@ void findActivity() { final String activityName = "DDD"; final ActivityAddRequest request = new ActivityAddRequest(ActivityType.CLUB, activityName); final ActivityResponse expected = new ActivityResponse( - 7L, - ActivityType.CLUB.getValue(), - activityName + 7L, + ActivityType.CLUB.getValue(), + activityName ); //when final ActivityResponse actual - = activityCommandService.addActivity(request); + = activityCommandService.addActivity(request); //then assertThat(actual) - .usingRecursiveComparison() - .isEqualTo(expected); + .usingRecursiveComparison() + .isEqualTo(expected); } @Test @@ -54,7 +54,7 @@ void findActivity_duplicate_fail() { //then assertThatThrownBy(actual) - .isInstanceOf(ActivityException.class) - .hasMessage(ActivityExceptionType.ALEADY_EXIST_ACTIVITY.errorMessage()); + .isInstanceOf(ActivityException.class) + .hasMessage(ActivityExceptionType.ALEADY_EXIST_ACTIVITY.errorMessage()); } } diff --git a/backend/emm-sale/src/test/java/com/emmsale/event/application/EventCommandServiceTest.java b/backend/emm-sale/src/test/java/com/emmsale/admin/event/application/EventCommandServiceTest.java similarity index 85% rename from backend/emm-sale/src/test/java/com/emmsale/event/application/EventCommandServiceTest.java rename to backend/emm-sale/src/test/java/com/emmsale/admin/event/application/EventCommandServiceTest.java index d16ada5a2..06eb1eb2b 100644 --- a/backend/emm-sale/src/test/java/com/emmsale/event/application/EventCommandServiceTest.java +++ b/backend/emm-sale/src/test/java/com/emmsale/admin/event/application/EventCommandServiceTest.java @@ -1,8 +1,6 @@ -package com.emmsale.event.application; +package com.emmsale.admin.event.application; -import static com.emmsale.event.EventFixture.AI_아이디어_공모전; import static com.emmsale.event.EventFixture.AI_컨퍼런스; -import static com.emmsale.event.EventFixture.구름톤; import static com.emmsale.event.EventFixture.모바일_컨퍼런스; import static com.emmsale.event.EventFixture.안드로이드_컨퍼런스; import static com.emmsale.event.EventFixture.웹_컨퍼런스; @@ -43,7 +41,6 @@ import com.emmsale.tag.application.dto.TagRequest; import com.emmsale.tag.domain.Tag; import com.emmsale.tag.domain.TagRepository; -import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; @@ -58,35 +55,6 @@ class EventCommandServiceTest extends ServiceIntegrationTestHelper { - private static final EventResponse 인프콘_2023 = new EventResponse(null, "인프콘 2023", - null, null, null, null, null, "코엑스", List.of("백엔드"), - "이미지1", EventType.CONFERENCE.name(), List.of(), "인프런", PaymentType.PAID.getValue(), - EventMode.OFFLINE.getValue()); - private static final EventResponse 웹_컨퍼런스 = new EventResponse(null, "웹 컨퍼런스", null, - null, null, - null, null, "코엑스", List.of("백엔드"), "이미지1", EventType.CONFERENCE.name(), - List.of(), "주최기관", PaymentType.PAID.getValue(), EventMode.ONLINE.getValue()); - private static final EventResponse 안드로이드_컨퍼런스 = new EventResponse(null, "안드로이드 컨퍼런스", - null, null, null, null, null, "코엑스", List.of("백엔드"), - "이미지1", EventType.CONFERENCE.name(), List.of(), "주최기관", PaymentType.PAID.getValue(), - EventMode.ONLINE.getValue()); - private static final EventResponse AI_컨퍼런스 = new EventResponse(null, "AI 컨퍼런스", - null, null, null, null, null, "코엑스", List.of("백엔드"), - "이미지1", EventType.CONFERENCE.name(), List.of(), "주최기관", PaymentType.PAID.getValue(), - EventMode.ONLINE.getValue()); - private static final EventResponse 모바일_컨퍼런스 = new EventResponse(null, "모바일 컨퍼런스", - null, null, null, null, null, "코엑스", List.of("백엔드"), - "이미지1", EventType.CONFERENCE.name(), List.of(), "주최기관", PaymentType.PAID.getValue(), - EventMode.ONLINE.getValue()); - private static final EventResponse AI_아이디어_공모전 = new EventResponse(null, - "AI 아이디어 공모전", null, null, null, null, null, "코엑스", - List.of("백엔드"), "이미지1", EventType.CONFERENCE.name(), List.of(), "주최기관", - PaymentType.PAID.getValue(), EventMode.ONLINE.getValue()); - private static final EventResponse 구름톤 = new EventResponse(null, "구름톤", null, - null, null, null, null, "코엑스", List.of("백엔드"), - "이미지1", EventType.COMPETITION.name(), List.of(), "주최기관", PaymentType.PAID.getValue(), - EventMode.ONLINE.getValue()); - @Autowired private EventCommandService eventCommandService; @Autowired @@ -113,8 +81,6 @@ void init() { final Event 모바일_컨퍼런스 = eventRepository.save(모바일_컨퍼런스()); final Event 안드로이드_컨퍼런스 = eventRepository.save(안드로이드_컨퍼런스()); final Event 웹_컨퍼런스 = eventRepository.save(웹_컨퍼런스()); - final Event AI_아이디어_공모전 = eventRepository.save(AI_아이디어_공모전()); - final Event 구름톤 = eventRepository.save(구름톤()); eventTagRepository.saveAll(List.of( new EventTag(인프콘_2023, 백엔드), new EventTag(인프콘_2023, 프론트엔드), new EventTag(인프콘_2023, 안드로이드), @@ -157,11 +123,9 @@ class AddEvent { private final String eventName = "새로운 이름"; private final String eventLocation = "새로운 장소"; private final String eventInformationUrl = "https://새로운-상세-URL.com"; - private final String imageUrl = "https://image.com"; private final PaymentType paymentType = PaymentType.FREE_PAID; private final EventMode eventMode = EventMode.ON_OFFLINE; private final EventType type = EventType.CONFERENCE; - private final LocalDate now = LocalDate.now(); private final String organization = "행사기관"; @Test @@ -287,7 +251,6 @@ class UpdateEvent { private final String newName = "새로운 이름"; private final String newLocation = "새로운 장소"; private final String newInformationUrl = "https://새로운-상세-URL.com"; - private final LocalDate now = LocalDate.now(); private final PaymentType paymentType = PaymentType.FREE_PAID; private final EventMode eventMode = EventMode.ON_OFFLINE; private final String organization = "행사기관"; @@ -464,4 +427,4 @@ void deleteEventWithNotExistsEventTest() { } } -} \ No newline at end of file +} diff --git a/backend/emm-sale/src/test/java/com/emmsale/event/application/EventServiceEventIntegrationTestQuery.java b/backend/emm-sale/src/test/java/com/emmsale/admin/event/application/EventServiceEventIntegrationTestQuery.java similarity index 99% rename from backend/emm-sale/src/test/java/com/emmsale/event/application/EventServiceEventIntegrationTestQuery.java rename to backend/emm-sale/src/test/java/com/emmsale/admin/event/application/EventServiceEventIntegrationTestQuery.java index be4533b48..7a5e48cf6 100644 --- a/backend/emm-sale/src/test/java/com/emmsale/event/application/EventServiceEventIntegrationTestQuery.java +++ b/backend/emm-sale/src/test/java/com/emmsale/admin/event/application/EventServiceEventIntegrationTestQuery.java @@ -1,4 +1,4 @@ -package com.emmsale.event.application; +package com.emmsale.admin.event.application; import static com.emmsale.tag.TagFixture.IOS; import static com.emmsale.tag.TagFixture.백엔드; diff --git a/backend/emm-sale/src/test/java/com/emmsale/report/application/ReportQueryServiceTest.java b/backend/emm-sale/src/test/java/com/emmsale/admin/report/application/ReportQueryServiceTest.java similarity index 96% rename from backend/emm-sale/src/test/java/com/emmsale/report/application/ReportQueryServiceTest.java rename to backend/emm-sale/src/test/java/com/emmsale/admin/report/application/ReportQueryServiceTest.java index f8312ebac..4de6768f2 100644 --- a/backend/emm-sale/src/test/java/com/emmsale/report/application/ReportQueryServiceTest.java +++ b/backend/emm-sale/src/test/java/com/emmsale/admin/report/application/ReportQueryServiceTest.java @@ -1,4 +1,4 @@ -package com.emmsale.report.application; +package com.emmsale.admin.report.application; import static com.emmsale.event.EventFixture.eventFixture; @@ -12,6 +12,7 @@ import com.emmsale.helper.ServiceIntegrationTestHelper; import com.emmsale.member.domain.Member; import com.emmsale.member.domain.MemberRepository; +import com.emmsale.report.application.ReportCommandService; import com.emmsale.report.application.dto.ReportCreateRequest; import com.emmsale.report.application.dto.ReportCreateResponse; import com.emmsale.report.application.dto.ReportFindResponse; diff --git a/backend/emm-sale/src/test/java/com/emmsale/tag/application/TagCommandServiceTest.java b/backend/emm-sale/src/test/java/com/emmsale/admin/tag/application/TagCommandServiceTest.java similarity index 97% rename from backend/emm-sale/src/test/java/com/emmsale/tag/application/TagCommandServiceTest.java rename to backend/emm-sale/src/test/java/com/emmsale/admin/tag/application/TagCommandServiceTest.java index 0435c2830..4fdd936d6 100644 --- a/backend/emm-sale/src/test/java/com/emmsale/tag/application/TagCommandServiceTest.java +++ b/backend/emm-sale/src/test/java/com/emmsale/admin/tag/application/TagCommandServiceTest.java @@ -1,4 +1,4 @@ -package com.emmsale.tag.application; +package com.emmsale.admin.tag.application; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.AssertionsForClassTypes.assertThat;