1313import com .depromeet .fairer .service .member .MemberService ;
1414
1515import com .depromeet .fairer .service .team .TeamService ;
16+ import com .depromeet .fairer .dto .housework .request .HouseWorkDeleteRequestDto ;
1617import com .depromeet .fairer .vo .houseWork .HouseWorkUpdateVo ;
1718import io .swagger .annotations .ApiOperation ;
1819import io .swagger .annotations .ApiParam ;
2728
2829import javax .validation .Valid ;
2930import java .time .LocalDate ;
30- import java .util .ArrayList ;
31- import java .util .HashMap ;
32- import java .util .List ;
33- import java .util .Map ;
31+ import java .time .temporal .ChronoUnit ;
32+ import java .util .*;
3433import java .util .stream .Collectors ;
34+ import java .util .stream .Stream ;
3535
3636@ Slf4j
3737@ RestController
@@ -45,16 +45,128 @@ public class HouseWorkController {
4545 private final ModelMapper modelMapper ;
4646
4747 @ Tag (name = "houseWorks" )
48- @ ApiOperation (value = "집안일 생성 API " )
48+ @ ApiOperation (value = "집안일 생성 API" )
4949 @ PostMapping ("" )
50- public ResponseEntity <HouseWorksCreateResponseDto > createHouseWorks (@ ApiIgnore @ RequestMemberId Long memberId ,
51- @ RequestBody @ Valid HouseWorksCreateRequestDto dto ) {
52- List <HouseWorkResponseDto > houseWorkList = houseWorkService .createHouseWorks (memberId , dto .getHouseWorks ());
53- return new ResponseEntity <>(new HouseWorksCreateResponseDto (houseWorkList ), HttpStatus .CREATED );
50+ public ResponseEntity <List <HouseWorkResponseDto >> createHouseWorks (@ ApiIgnore @ RequestMemberId Long memberId ,
51+ @ RequestBody @ Valid List <HouseWorksCreateRequestDto > request ) {
52+ List <HouseWorkResponseDto > responseDtos = new ArrayList <>();
53+ for (HouseWorksCreateRequestDto requestDto : request ) {
54+ responseDtos .add (houseWorkService .createHouseWork (memberId , requestDto ));
55+ }
56+ return new ResponseEntity <>(responseDtos , HttpStatus .CREATED );
57+ }
58+
59+ @ Tag (name = "houseWorks" )
60+ @ ApiOperation (value = "집안일 수정 API - 반복 기능 구현 후" )
61+ @ PutMapping ("/v2" )
62+ public ResponseEntity <?> editHouseWork (@ ApiIgnore @ RequestMemberId Long memberId ,
63+ @ RequestBody @ Valid HouseWorkUpdateRequestDto dto ) {
64+ return ResponseEntity .ok (houseWorkService .updateHouseWork (memberId , dto ));
65+ }
66+
67+ @ Tag (name = "houseWorks" )
68+ @ ApiOperation (value = "집안일 삭제 API - 반복 기능 구현 후" )
69+ @ DeleteMapping ("/v2" )
70+ public ResponseEntity <?> deleteHouseWork (
71+ @ ApiIgnore @ RequestMemberId Long memberId ,
72+ @ RequestBody @ Valid HouseWorkDeleteRequestDto dto ) {
73+ houseWorkService .deleteHouseWork (memberId , dto .getHouseWorkId (), dto .getType (), dto .getDeleteStandardDate ());
74+ return new ResponseEntity <>(HttpStatus .OK );
75+ }
76+
77+ // 쿼리 1개로 처리
78+ @ Tag (name = "houseWorks" )
79+ @ ApiOperation (value = "팀원의 특정 기간 집안일 목록 조회 - 반복 기능 구현 후" , notes = "본인이 속한 팀의 팀원의 특정 기간 집안일 목록 조회" )
80+ @ GetMapping ("/list/member/{teamMemberId}/query" )
81+ public ResponseEntity <Map <String , HouseWorkDateResponseDto >> getHouseWorkListByTeamMemberAndDateQuery (@ RequestParam ("fromDate" ) String fromDate ,
82+ @ RequestParam ("toDate" ) String toDate ,@ PathVariable ("teamMemberId" ) Long teamMemberId ,
83+ @ ApiIgnore @ RequestMemberId Long memberId ) {
84+ final LocalDate from = DateTimeUtils .stringToLocalDate (fromDate );
85+ final LocalDate to = DateTimeUtils .stringToLocalDate (toDate );
86+
87+ teamService .checkJoinSameTeam (teamMemberId , memberId );
88+ Member teamMember = memberService .find (teamMemberId );
89+
90+ Map <LocalDate , List <HouseWorkResponseDto >> results = new HashMap <>();
91+ Stream .iterate (from , date -> date .plusDays (1 ))
92+ .limit (ChronoUnit .DAYS .between (from , to ) + 1 ).forEach (date -> {
93+
94+ List <HouseWorkResponseDto > houseWorkResponseDtoList = houseWorkService .getHouseWorkByDateRepeatQuery (teamMember , date ).stream ().map (arr -> {
95+ List <MemberDto > memberDtoList = memberService .getMemberListByHouseWorkId (arr .getHouseWork ().getHouseWorkId ())
96+ .stream ().map (MemberDto ::from ).collect (Collectors .toList ());
97+ return HouseWorkResponseDto .from (arr .getHouseWork (), memberDtoList , date , arr .getHouseWorkCompleteId ());
98+
99+ }).collect (Collectors .toList ());
100+
101+ results .put (date , houseWorkResponseDtoList );
102+ });
103+
104+ return ResponseEntity .ok (makeHouseWorkListResponse (teamMemberId , results ));
105+ }
106+
107+ // 팀 전체 쿼리 1개
108+ @ Tag (name = "houseWorks" )
109+ @ ApiOperation (value = "특정 날짜별 집안일 조회 - 반복 기능 구현 후" , notes = "특정 날짜별 집안일 조회" )
110+ @ GetMapping ("/list/query" )
111+ public ResponseEntity <Map <String , HouseWorkDateResponseDto >> getHouseWorkListByDateQuery (@ RequestParam ("fromDate" ) String fromDate ,
112+ @ RequestParam ("toDate" ) String toDate ,
113+ @ ApiIgnore @ RequestMemberId Long memberId ) {
114+ final LocalDate from = DateTimeUtils .stringToLocalDate (fromDate );
115+ final LocalDate to = DateTimeUtils .stringToLocalDate (toDate );
116+
117+ Member member = memberService .find (memberId );
118+ Map <LocalDate , List <HouseWorkResponseDto >> results = new HashMap <>();
119+
120+ Stream .iterate (from , date -> date .plusDays (1 ))
121+ .limit (ChronoUnit .DAYS .between (from , to ) + 1 ).forEach (date -> {
122+ List <HouseWorkResponseDto > houseWorkResponseDtoList = houseWorkService .getHouseWorkByDateRepeatTeamQuery (member .getTeam (), date ).stream ().map (arr -> {
123+ List <MemberDto > memberDtoList = memberService .getMemberListByHouseWorkId (arr .getHouseWork ().getHouseWorkId ())
124+ .stream ().map (MemberDto ::from ).collect (Collectors .toList ());
125+ return HouseWorkResponseDto .from (arr .getHouseWork (), memberDtoList , date , arr .getHouseWorkCompleteId ());
126+ }).collect (Collectors .toList ());
127+
128+ results .put (date , houseWorkResponseDtoList );
129+ });
130+
131+ return ResponseEntity .ok (makeHouseWorkListResponse (memberId , results ));
132+ }
133+
134+ private Map <LocalDate , List <HouseWorkResponseDto >> getHouseWorkListGroupByScheduledDate (List <HouseWork > houseWorkList ) {
135+ return houseWorkList .stream ().map (houseWork -> {
136+ List <MemberDto > memberDtoList = memberService .getMemberListByHouseWorkId (houseWork .getHouseWorkId ())
137+ .stream ().map (MemberDto ::from ).collect (Collectors .toList ());
138+ return HouseWorkResponseDto .from (houseWork , memberDtoList );
139+ }).collect (Collectors .groupingBy (HouseWorkResponseDto ::getScheduledDate , HashMap ::new , Collectors .toCollection (ArrayList ::new )));
140+ }
141+
142+ private Map <String , HouseWorkDateResponseDto > makeHouseWorkListResponse (Long memberId , Map <LocalDate , List <HouseWorkResponseDto >> houseWorkListGroupByScheduledDate ) {
143+ Map <String , HouseWorkDateResponseDto > response = new HashMap <>();
144+ houseWorkListGroupByScheduledDate .forEach ((scheduledDate , houseWorkResponseDtoList ) -> {
145+ long countDone = houseWorkResponseDtoList .stream ().filter (HouseWorkResponseDto ::getSuccess ).count ();
146+ long countLeft = houseWorkResponseDtoList .stream ().filter (houseWorkResponseDto -> !houseWorkResponseDto .getSuccess ()).count ();
147+ response .put (DateTimeUtils .localDateToString (scheduledDate ), HouseWorkDateResponseDto .from (memberId , scheduledDate , countDone , countLeft , houseWorkResponseDtoList ));
148+ });
149+ return response ;
150+ }
151+
152+ @ Tag (name = "houseWorks" )
153+ @ ApiOperation (value = "개별 집안일 조회" , notes = "" )
154+ @ GetMapping (value = "{houseWorkId}/detail" )
155+ public ResponseEntity <HouseWorkResponseDto > getHouseWorkDetail (@ PathVariable ("houseWorkId" ) Long houseWorkId ) {
156+ return ResponseEntity .ok (houseWorkService .getHouseWorkDetail (houseWorkId ));
157+ }
158+
159+ @ Tag (name = "houseWorks" )
160+ @ GetMapping ("/success/count" )
161+ public ResponseEntity <HouseWorkSuccessCountResponseDto > getSuccessCount (@ RequestParam String scheduledDate ,
162+ @ ApiIgnore @ RequestMemberId Long memberId ) {
163+ HouseWorkSuccessCountResponseDto houseWorkSuccessCountResponseDto = houseWorkService .getSuccessCount (scheduledDate , memberId );
164+ return ResponseEntity .ok (houseWorkSuccessCountResponseDto );
54165 }
55166
167+ @ Deprecated
56168 @ Tag (name = "houseWorks" )
57- @ ApiOperation (value = "집안일 수정 API" )
169+ @ ApiOperation (value = "집안일 수정 API - 반복 기능 구현 전 " )
58170 @ PutMapping ("/{houseWorkId}" )
59171 public ResponseEntity <HouseWorkResponseDto > editHouseWork (@ ApiIgnore @ RequestMemberId Long memberId ,
60172 @ RequestBody @ Valid HouseWorkUpdateRequestDto dto ,
@@ -66,8 +178,9 @@ public ResponseEntity<HouseWorkResponseDto> editHouseWork(@ApiIgnore @RequestMem
66178 return new ResponseEntity <>(houseWorkService .updateHouseWork (houseWorkUpdateVo ), HttpStatus .OK );
67179 }
68180
181+ @ Deprecated
69182 @ Tag (name = "houseWorks" )
70- @ ApiOperation (value = "집안일 삭제 API " )
183+ @ ApiOperation (value = "집안일 삭제 API - 반복 기능 구현 전 " )
71184 @ DeleteMapping ("/{houseWorkId}" )
72185 public ResponseEntity <?> deleteHouseWork (
73186 @ ApiIgnore @ RequestMemberId Long memberId ,
@@ -106,8 +219,10 @@ public ResponseEntity<List<HouseWorkDateResponseDto>> getHouseWork(@RequestParam
106219 return ResponseEntity .ok (houseWorkDateResponseDtos );
107220 }
108221
222+ // 1명 조회
223+ @ Deprecated
109224 @ Tag (name = "houseWorks" )
110- @ ApiOperation (value = "팀원의 특정 기간 집안일 목록 조회" , notes = "본인이 속한 팀의 팀원의 특정 기간 집안일 목록 조회" )
225+ @ ApiOperation (value = "팀원의 특정 기간 집안일 목록 조회 - 반복 기능 구현 전 " , notes = "본인이 속한 팀의 팀원의 특정 기간 집안일 목록 조회" )
111226 @ GetMapping ("/list/member/{teamMemberId}" )
112227 public ResponseEntity <Map <String , HouseWorkDateResponseDto >> getHouseWorkListByTeamMemberAndDate (@ RequestParam ("fromDate" ) String fromDate ,
113228 @ RequestParam ("toDate" ) String toDate ,
@@ -124,8 +239,10 @@ public ResponseEntity<Map<String, HouseWorkDateResponseDto>> getHouseWorkListByT
124239 return ResponseEntity .ok (makeHouseWorkListResponse (teamMemberId , houseWorkListGroupByScheduledDate ));
125240 }
126241
242+ // 팀 전체 조회
243+ @ Deprecated
127244 @ Tag (name = "houseWorks" )
128- @ ApiOperation (value = "특정 날짜별 집안일 조회" , notes = "특정 날짜별 집안일 조회" )
245+ @ ApiOperation (value = "특정 날짜별 집안일 조회 - 반복 기능 구현 전 " , notes = "특정 날짜별 집안일 조회" )
129246 @ GetMapping ("/list" )
130247 public ResponseEntity <Map <String , HouseWorkDateResponseDto >> getHouseWorkListByDate (@ RequestParam ("fromDate" ) String fromDate ,
131248 @ RequestParam ("toDate" ) String toDate ,
@@ -139,44 +256,12 @@ public ResponseEntity<Map<String, HouseWorkDateResponseDto>> getHouseWorkListByD
139256 return ResponseEntity .ok (makeHouseWorkListResponse (memberId , houseWorkListGroupByScheduledDate ));
140257 }
141258
142- private Map <LocalDate , List <HouseWorkResponseDto >> getHouseWorkListGroupByScheduledDate (List <HouseWork > houseWorkList ) {
143- return houseWorkList .stream ().map (houseWork -> {
144- List <MemberDto > memberDtoList = memberService .getMemberListByHouseWorkId (houseWork .getHouseWorkId ())
145- .stream ().map (MemberDto ::from ).collect (Collectors .toList ());
146- return HouseWorkResponseDto .from (houseWork , memberDtoList );
147- }).collect (Collectors .groupingBy (HouseWorkResponseDto ::getScheduledDate , HashMap ::new , Collectors .toCollection (ArrayList ::new )));
148- }
149-
150- private Map <String , HouseWorkDateResponseDto > makeHouseWorkListResponse (Long memberId , Map <LocalDate , List <HouseWorkResponseDto >> houseWorkListGroupByScheduledDate ) {
151- Map <String , HouseWorkDateResponseDto > response = new HashMap <>();
152- houseWorkListGroupByScheduledDate .forEach ((scheduledDate , houseWorkResponseDtoList ) -> {
153- long countDone = houseWorkResponseDtoList .stream ().filter (HouseWorkResponseDto ::getSuccess ).count ();
154- long countLeft = houseWorkResponseDtoList .stream ().filter (houseWorkResponseDto -> !houseWorkResponseDto .getSuccess ()).count ();
155- response .put (DateTimeUtils .localDateToString (scheduledDate ), HouseWorkDateResponseDto .from (memberId , scheduledDate , countDone , countLeft , houseWorkResponseDtoList ));
156- });
157- return response ;
158- }
159-
160- @ Tag (name = "houseWorks" )
161- @ ApiOperation (value = "개별 집안일 조회" , notes = "" )
162- @ GetMapping (value = "{houseWorkId}/detail" )
163- public ResponseEntity <HouseWorkResponseDto > getHouseWorkDetail (@ PathVariable ("houseWorkId" ) Long houseWorkId ) {
164- return ResponseEntity .ok (houseWorkService .getHouseWorkDetail (houseWorkId ));
165- }
166-
167259 @ Tag (name = "houseWorks" )
168- @ ApiOperation (value = "집안일 완료여부 수정" , notes = "toBeStatus=0이면 완료->미완료, toBeStatus=1이면 미완료->완료" )
260+ @ ApiOperation (value = "집안일 완료여부 수정 - 반복 기능 구현 전 " , notes = "toBeStatus=0이면 완료->미완료, toBeStatus=1이면 미완료->완료" )
169261 @ PatchMapping (value = "{houseWorkId}" )
262+ @ Deprecated
170263 public ResponseEntity <HouseWorkStatusResponseDto > updateHouseWorkStatus (@ PathVariable ("houseWorkId" ) Long houseWorkId ,
171264 @ RequestBody @ Valid HouseWorkStatusRequestDto req ) {
172265 return ResponseEntity .ok (houseWorkService .updateHouseWorkStatus (houseWorkId , req .getToBeStatus ()));
173266 }
174-
175- @ Tag (name = "houseWorks" )
176- @ GetMapping ("/success/count" )
177- public ResponseEntity <HouseWorkSuccessCountResponseDto > getSuccessCount (@ RequestParam String scheduledDate ,
178- @ ApiIgnore @ RequestMemberId Long memberId ) {
179- HouseWorkSuccessCountResponseDto houseWorkSuccessCountResponseDto = houseWorkService .getSuccessCount (scheduledDate , memberId );
180- return ResponseEntity .ok (houseWorkSuccessCountResponseDto );
181- }
182267}
0 commit comments