diff --git a/backend/src/main/java/com/twtw/backend/domain/plan/dto/request/SavePlanRequest.java b/backend/src/main/java/com/twtw/backend/domain/plan/dto/request/SavePlanRequest.java index fdc2a2e2..fad17772 100644 --- a/backend/src/main/java/com/twtw/backend/domain/plan/dto/request/SavePlanRequest.java +++ b/backend/src/main/java/com/twtw/backend/domain/plan/dto/request/SavePlanRequest.java @@ -1,11 +1,13 @@ package com.twtw.backend.domain.plan.dto.request; +import com.fasterxml.jackson.annotation.JsonFormat; import com.twtw.backend.domain.plan.dto.response.PlaceDetails; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; import java.util.UUID; @Getter @@ -13,5 +15,12 @@ @AllArgsConstructor public class SavePlanRequest { private UUID groupId; + + @JsonFormat( + shape = JsonFormat.Shape.STRING, + pattern = "yyyy-MM-dd HH:mm", + timezone = "Asia/Seoul") + private LocalDateTime planDay; + private PlaceDetails placeDetails; } diff --git a/backend/src/main/java/com/twtw/backend/domain/plan/dto/response/PlanInfoResponse.java b/backend/src/main/java/com/twtw/backend/domain/plan/dto/response/PlanInfoResponse.java index a15af644..42137613 100644 --- a/backend/src/main/java/com/twtw/backend/domain/plan/dto/response/PlanInfoResponse.java +++ b/backend/src/main/java/com/twtw/backend/domain/plan/dto/response/PlanInfoResponse.java @@ -17,6 +17,7 @@ public class PlanInfoResponse { private UUID planId; private UUID placeId; private UUID planMakerId; + private String planDay; private PlaceDetails placeDetails; private GroupInfoResponse groupInfo; private List members; diff --git a/backend/src/main/java/com/twtw/backend/domain/plan/entity/Plan.java b/backend/src/main/java/com/twtw/backend/domain/plan/entity/Plan.java index ae1c41f6..cf22b212 100644 --- a/backend/src/main/java/com/twtw/backend/domain/plan/entity/Plan.java +++ b/backend/src/main/java/com/twtw/backend/domain/plan/entity/Plan.java @@ -29,6 +29,7 @@ import org.hibernate.annotations.Where; +import java.time.LocalDateTime; import java.util.HashSet; import java.util.Set; import java.util.UUID; @@ -63,10 +64,13 @@ public class Plan implements Auditable { @Column(nullable = false) private BaseTime baseTime; - public Plan(Member member, Place place, Group group) { + private LocalDateTime planDay; + + public Plan(Member member, Place place, Group group, LocalDateTime planDay) { this.planMembers.add(new PlanMember(this, member, true)); organizePlace(place); organizeGroup(group); + this.planDay = planDay; } public void addMember(final Member member) { diff --git a/backend/src/main/java/com/twtw/backend/domain/plan/mapper/PlanMapper.java b/backend/src/main/java/com/twtw/backend/domain/plan/mapper/PlanMapper.java index 46483df1..f5beda0f 100644 --- a/backend/src/main/java/com/twtw/backend/domain/plan/mapper/PlanMapper.java +++ b/backend/src/main/java/com/twtw/backend/domain/plan/mapper/PlanMapper.java @@ -33,9 +33,11 @@ public interface PlanMapper { @Mapping(target = "planMakerId", source = "plan.planMakerId") @Mapping(target = "groupInfo", source = "groupInfoResponse") @Mapping(target = "members", source = "memberResponses") + @Mapping(target = "planDay", source = "planDay") PlanInfoResponse toPlanInfoResponse( Plan plan, PlaceClientDetails placeDetails, + String planDay, GroupInfoResponse groupInfoResponse, List memberResponses); diff --git a/backend/src/main/java/com/twtw/backend/domain/plan/service/PlanService.java b/backend/src/main/java/com/twtw/backend/domain/plan/service/PlanService.java index 561a81c2..45d179d0 100644 --- a/backend/src/main/java/com/twtw/backend/domain/plan/service/PlanService.java +++ b/backend/src/main/java/com/twtw/backend/domain/plan/service/PlanService.java @@ -30,6 +30,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.UUID; @@ -77,7 +78,7 @@ public PlanResponse savePlan(final SavePlanRequest request) { Member member = authService.getMemberByJwt(); Group group = groupService.getGroupEntity(request.getGroupId()); Place place = placeService.getEntityByDetail(request.getPlaceDetails()); - Plan plan = new Plan(member, place, group); + Plan plan = new Plan(member, place, group, request.getPlanDay()); return planMapper.toPlanResponse(planRepository.save(plan)); } @@ -105,10 +106,11 @@ public PlanInfoResponse getPlanById(UUID id) { private PlanInfoResponse getPlanInfoResponse(final Plan plan) { GroupInfoResponse groupInfo = groupService.getGroupInfoResponse(plan.getGroup()); PlaceClientDetails placeDetails = placeService.getPlaceDetails(plan.getPlace()); - + String planDay = plan.getPlanDay().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")); List memberResponse = toMemberResponse(plan); - return planMapper.toPlanInfoResponse(plan, placeDetails, groupInfo, memberResponse); + return planMapper.toPlanInfoResponse( + plan, placeDetails, planDay, groupInfo, memberResponse); } public void deletePlan(UUID id) { diff --git a/backend/src/test/java/com/twtw/backend/domain/group/repository/GroupRepositoryTest.java b/backend/src/test/java/com/twtw/backend/domain/group/repository/GroupRepositoryTest.java index de6dc4ae..f0d0a7b9 100644 --- a/backend/src/test/java/com/twtw/backend/domain/group/repository/GroupRepositoryTest.java +++ b/backend/src/test/java/com/twtw/backend/domain/group/repository/GroupRepositoryTest.java @@ -17,6 +17,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import java.time.LocalDateTime; import java.util.List; @DisplayName("GroupRepository의") @@ -41,7 +42,7 @@ void makeGroup() { Place place = PlaceEntityFixture.FIRST_PLACE.toEntity(); - Plan plan = new Plan(member1, place, group); + Plan plan = new Plan(member1, place, group, LocalDateTime.of(2023, 12, 25, 13, 30)); plan.addMember(member2); // when @@ -86,7 +87,7 @@ void getPlan() { Place place = PlaceEntityFixture.FIRST_PLACE.toEntity(); - Plan plan = new Plan(member1, place, group); + Plan plan = new Plan(member1, place, group, LocalDateTime.of(2023, 12, 25, 13, 30)); plan.addMember(member2); // when diff --git a/backend/src/test/java/com/twtw/backend/domain/plan/controller/PlanControllerTest.java b/backend/src/test/java/com/twtw/backend/domain/plan/controller/PlanControllerTest.java index 2d5fccaa..0082dac4 100644 --- a/backend/src/test/java/com/twtw/backend/domain/plan/controller/PlanControllerTest.java +++ b/backend/src/test/java/com/twtw/backend/domain/plan/controller/PlanControllerTest.java @@ -32,6 +32,7 @@ import org.springframework.http.MediaType; import org.springframework.test.web.servlet.ResultActions; +import java.time.LocalDateTime; import java.util.List; import java.util.UUID; @@ -106,6 +107,7 @@ void savePlan() throws Exception { toRequestBody( new SavePlanRequest( UUID.randomUUID(), + LocalDateTime.of(2023, 12, 25, 15, 30), new PlaceDetails( "카페 온마이마인드", "https://place.map.kakao.com/1625295668", @@ -134,6 +136,7 @@ void getPlanById() throws Exception { UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), + "2023-12-25 15:30", new PlaceDetails( "카페 온마이마인드", "https://place.map.kakao.com/1625295668", @@ -207,6 +210,7 @@ void joinPlan() throws Exception { toRequestBody( new SavePlanRequest( UUID.randomUUID(), + LocalDateTime.of(2023, 12, 25, 13, 30), new PlaceDetails( "이디야커피 안성죽산점", "http://place.map.kakao.com/1562566188", @@ -259,6 +263,7 @@ void getPlans() throws Exception { UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), + "2023-12-25 15:30", new PlaceDetails( "카페 온마이마인드", "https://place.map.kakao.com/1625295668", @@ -278,6 +283,7 @@ void getPlans() throws Exception { UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), + "2023-12-26 15:30", new PlaceDetails( "카페 온유어마인드", "https://place.map.kakao.com/1625295669", diff --git a/backend/src/test/java/com/twtw/backend/domain/plan/repository/PlanRepositoryTest.java b/backend/src/test/java/com/twtw/backend/domain/plan/repository/PlanRepositoryTest.java index 126df216..90f7207a 100644 --- a/backend/src/test/java/com/twtw/backend/domain/plan/repository/PlanRepositoryTest.java +++ b/backend/src/test/java/com/twtw/backend/domain/plan/repository/PlanRepositoryTest.java @@ -18,6 +18,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import java.time.LocalDateTime; import java.util.List; import java.util.UUID; @@ -37,7 +38,9 @@ void saveAndFindById() { final Member member = memberRepository.save(MemberEntityFixture.LOGIN_MEMBER.toEntity()); final Plan plan = PlanEntityFixture.FIRST_PLACE.toEntity( - member, GroupEntityFixture.BTS_GROUP.toEntity(member)); + member, + GroupEntityFixture.BTS_GROUP.toEntity(member), + LocalDateTime.of(2023, 12, 25, 13, 30)); // when final UUID expected = planRepository.save(plan).getId(); @@ -58,7 +61,15 @@ void softDelete() { final Group group = new Group("그룹", "http://abcdefg", member); - final UUID planId = planRepository.save(new Plan(member, place, group)).getId(); + final UUID planId = + planRepository + .save( + new Plan( + member, + place, + group, + LocalDateTime.of(2023, 12, 25, 13, 30))) + .getId(); // when planRepository.deleteById(planId); @@ -88,8 +99,16 @@ void findAllPlanByMember() { final Group group = new Group("그룹", "http://abcdefg", member); - final Plan plan = planRepository.save(new Plan(member, firstPlace, group)); - planRepository.save(new Plan(member, secondPlace, new Group("1", "2", member))); + final Plan plan = + planRepository.save( + new Plan( + member, firstPlace, group, LocalDateTime.of(2023, 12, 25, 13, 30))); + planRepository.save( + new Plan( + member, + secondPlace, + new Group("1", "2", member), + LocalDateTime.of(2023, 12, 26, 13, 30))); plan.addMember(firstMember); plan.addMember(secondMember); diff --git a/backend/src/test/java/com/twtw/backend/domain/plan/service/PlanServiceTest.java b/backend/src/test/java/com/twtw/backend/domain/plan/service/PlanServiceTest.java index f257eb81..5b731f78 100644 --- a/backend/src/test/java/com/twtw/backend/domain/plan/service/PlanServiceTest.java +++ b/backend/src/test/java/com/twtw/backend/domain/plan/service/PlanServiceTest.java @@ -23,6 +23,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import java.time.LocalDateTime; import java.util.Optional; import java.util.UUID; @@ -58,7 +59,9 @@ void savePlan() { final PlanResponse planResponse = planService.savePlan( new SavePlanRequest( - groupId, PlaceDetailsFixture.FIRST_PLACE.toPlaceDetails())); + groupId, + LocalDateTime.of(2023, 12, 25, 15, 30), + PlaceDetailsFixture.FIRST_PLACE.toPlaceDetails())); // then final Optional result = planRepository.findById(planResponse.getPlanId()); @@ -75,7 +78,8 @@ void joinPlan() { new Plan( member, PlaceEntityFixture.FIRST_PLACE.toEntity(), - GroupEntityFixture.BTS_GROUP.toEntity(loginUser))); + GroupEntityFixture.BTS_GROUP.toEntity(loginUser), + LocalDateTime.of(2023, 12, 25, 15, 30))); final UUID planId = plan.getId(); // when @@ -92,7 +96,9 @@ void outPlan() { // given final Plan plan = PlanEntityFixture.SECOND_PLACE.toEntity( - loginUser, GroupEntityFixture.HDJ_GROUP.toEntity(loginUser)); + loginUser, + GroupEntityFixture.HDJ_GROUP.toEntity(loginUser), + LocalDateTime.of(2023, 12, 25, 13, 30)); final UUID planId = planRepository.save(plan).getId(); // when @@ -113,7 +119,8 @@ void getPlanById() { new Plan( loginUser, PlaceEntityFixture.SECOND_PLACE.toEntity(), - GroupEntityFixture.HDJ_GROUP.toEntity(loginUser))) + GroupEntityFixture.HDJ_GROUP.toEntity(loginUser), + LocalDateTime.of(2023, 12, 25, 15, 30))) .getId(); // when @@ -133,7 +140,8 @@ void deletePlan() { new Plan( loginUser, PlaceEntityFixture.SECOND_PLACE.toEntity(), - GroupEntityFixture.HDJ_GROUP.toEntity(loginUser))) + GroupEntityFixture.HDJ_GROUP.toEntity(loginUser), + LocalDateTime.of(2023, 12, 25, 15, 30))) .getId(); // when diff --git a/backend/src/test/java/com/twtw/backend/fixture/plan/PlanEntityFixture.java b/backend/src/test/java/com/twtw/backend/fixture/plan/PlanEntityFixture.java index eb44aaf2..db3f1f4f 100644 --- a/backend/src/test/java/com/twtw/backend/fixture/plan/PlanEntityFixture.java +++ b/backend/src/test/java/com/twtw/backend/fixture/plan/PlanEntityFixture.java @@ -8,6 +8,8 @@ import lombok.RequiredArgsConstructor; +import java.time.LocalDateTime; + @RequiredArgsConstructor public enum PlanEntityFixture { FIRST_PLACE(PlaceEntityFixture.FIRST_PLACE.toEntity()), @@ -15,7 +17,7 @@ public enum PlanEntityFixture { private final Place place; - public Plan toEntity(final Member member, final Group group) { - return new Plan(member, place, group); + public Plan toEntity(final Member member, final Group group, final LocalDateTime planDay) { + return new Plan(member, place, group, planDay); } }