Skip to content

Commit 0e064d0

Browse files
authored
Merge pull request #166 from CEOS-Developers/feature/retrospec
[feat] 회고 기능 구현
2 parents 084f952 + e06df75 commit 0e064d0

15 files changed

+438
-104
lines changed

src/main/java/ceos/backend/domain/application/enums/SortPartType.java

-9
This file was deleted.

src/main/java/ceos/backend/domain/application/enums/SortPassType.java

-7
This file was deleted.

src/main/java/ceos/backend/domain/application/helper/ApplicationHelper.java

-83
Original file line numberDiff line numberDiff line change
@@ -3,84 +3,27 @@
33

44
import ceos.backend.domain.application.domain.Application;
55
import ceos.backend.domain.application.domain.ApplicationQuestion;
6-
import ceos.backend.domain.application.domain.Pass;
76
import ceos.backend.domain.application.dto.request.CreateApplicationRequest;
87
import ceos.backend.domain.application.dto.request.UpdateAttendanceRequest;
9-
import ceos.backend.domain.application.enums.SortPartType;
10-
import ceos.backend.domain.application.enums.SortPassType;
118
import ceos.backend.domain.application.exception.exceptions.ApplicantNotFound;
12-
import ceos.backend.domain.application.mapper.ApplicationMapper;
139
import ceos.backend.domain.application.repository.ApplicationQuestionRepository;
1410
import ceos.backend.domain.application.repository.ApplicationRepository;
1511
import ceos.backend.global.common.dto.AwsSESMail;
1612
import ceos.backend.global.common.dto.SlackUnavailableReason;
17-
import ceos.backend.global.common.entity.Part;
1813
import ceos.backend.global.common.event.Event;
1914
import java.util.List;
2015
import java.util.UUID;
2116
import lombok.RequiredArgsConstructor;
2217
import lombok.extern.slf4j.Slf4j;
23-
import org.springframework.data.domain.Page;
24-
import org.springframework.data.domain.PageRequest;
2518
import org.springframework.stereotype.Component;
2619

2720
@Slf4j
2821
@Component
2922
@RequiredArgsConstructor
3023
public class ApplicationHelper {
31-
private final ApplicationMapper applicationMapper;
3224
private final ApplicationRepository applicationRepository;
3325
private final ApplicationQuestionRepository applicationQuestionRepository;
3426

35-
public Page<Application> getApplications(
36-
SortPassType docPass,
37-
SortPassType finalPass,
38-
SortPartType sortType,
39-
PageRequest pageRequest) {
40-
Page<Application> pageManagements = null;
41-
Part part = toPart(sortType);
42-
if (docPass == SortPassType.ALL && finalPass == SortPassType.ALL) {
43-
switch (sortType) {
44-
case ALL -> pageManagements = applicationRepository.findAll(pageRequest);
45-
default -> pageManagements =
46-
applicationRepository.findAllByPart(toPart(sortType), pageRequest);
47-
}
48-
} else if (docPass != SortPassType.ALL && finalPass == SortPassType.ALL) {
49-
Pass pass = toPass(docPass);
50-
switch (sortType) {
51-
case ALL -> pageManagements =
52-
applicationRepository.findAllByDocumentPass(pass, pageRequest);
53-
default -> pageManagements =
54-
applicationRepository.findAllByPartAndDocumentPass(
55-
toPart(sortType), pass, pageRequest);
56-
}
57-
} else if (docPass == SortPassType.ALL && finalPass != SortPassType.ALL) {
58-
Pass pass = toPass(finalPass);
59-
switch (sortType) {
60-
case ALL -> pageManagements =
61-
applicationRepository.findAllByFinalPass(pass, pageRequest);
62-
default -> pageManagements =
63-
applicationRepository.findAllByPartAndFinalPass(
64-
toPart(sortType), pass, pageRequest);
65-
}
66-
} else {
67-
Pass convertedDocPass = toPass(docPass);
68-
Pass convertedFinalPass = toPass(finalPass);
69-
switch (sortType) {
70-
case ALL -> pageManagements =
71-
applicationRepository.findAllByDocumentPassAndFinalPass(
72-
convertedDocPass, convertedFinalPass, pageRequest);
73-
default -> pageManagements =
74-
applicationRepository.findAllByPartAndDocumentPassAndFinalPass(
75-
toPart(sortType),
76-
convertedDocPass,
77-
convertedFinalPass,
78-
pageRequest);
79-
}
80-
}
81-
return pageManagements;
82-
}
83-
8427
public String generateUUID() {
8528
String newUUID;
8629
while (true) {
@@ -122,30 +65,4 @@ public Application getApplicationByUuidAndEmail(String uuid, String email) {
12265
throw ApplicantNotFound.EXCEPTION;
12366
});
12467
}
125-
126-
private Pass toPass(SortPassType passType) {
127-
Pass pass = Pass.FAIL;
128-
if (passType == SortPassType.PASS) {
129-
pass = Pass.PASS;
130-
}
131-
return pass;
132-
}
133-
134-
private Part toPart(SortPartType sortType) {
135-
switch (sortType) {
136-
case DESIGN -> {
137-
return Part.DESIGN;
138-
}
139-
case BACKEND -> {
140-
return Part.BACKEND;
141-
}
142-
case PRODUCT -> {
143-
return Part.PRODUCT;
144-
}
145-
case FRONTEND -> {
146-
return Part.FRONTEND;
147-
}
148-
}
149-
return null;
150-
}
15168
}

src/main/java/ceos/backend/domain/application/mapper/ApplicationMapper.java

+26-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,31 @@
11
package ceos.backend.domain.application.mapper;
22

3-
import static java.util.Map.*;
43

5-
import ceos.backend.domain.application.domain.*;
4+
import ceos.backend.domain.application.domain.Application;
5+
import ceos.backend.domain.application.domain.ApplicationAnswer;
6+
import ceos.backend.domain.application.domain.ApplicationInterview;
7+
import ceos.backend.domain.application.domain.ApplicationQuestion;
8+
import ceos.backend.domain.application.domain.ApplicationQuestionDetail;
9+
import ceos.backend.domain.application.domain.Interview;
10+
import ceos.backend.domain.application.domain.QuestionCategory;
611
import ceos.backend.domain.application.dto.request.CreateApplicationRequest;
712
import ceos.backend.domain.application.dto.request.UpdateApplicationQuestion;
8-
import ceos.backend.domain.application.dto.response.*;
13+
import ceos.backend.domain.application.dto.response.GetApplication;
14+
import ceos.backend.domain.application.dto.response.GetApplicationQuestion;
15+
import ceos.backend.domain.application.dto.response.GetApplications;
16+
import ceos.backend.domain.application.dto.response.GetInterviewTime;
17+
import ceos.backend.domain.application.dto.response.GetResultResponse;
918
import ceos.backend.domain.application.exception.exceptions.InterviewNotFound;
1019
import ceos.backend.domain.application.exception.exceptions.QuestionNotFound;
11-
import ceos.backend.domain.application.vo.*;
20+
import ceos.backend.domain.application.vo.AnswerVo;
21+
import ceos.backend.domain.application.vo.ApplicationBriefInfoVo;
22+
import ceos.backend.domain.application.vo.InterviewDateTimesVo;
23+
import ceos.backend.domain.application.vo.InterviewTimeVo;
24+
import ceos.backend.domain.application.vo.QnAVo;
25+
import ceos.backend.domain.application.vo.QuestionDetailVo;
26+
import ceos.backend.domain.application.vo.QuestionListVo;
27+
import ceos.backend.domain.application.vo.QuestionVo;
28+
import ceos.backend.domain.application.vo.QuestionWithIdVo;
1229
import ceos.backend.domain.recruitment.domain.Recruitment;
1330
import ceos.backend.global.common.dto.PageInfo;
1431
import ceos.backend.global.common.dto.ParsedDuration;
@@ -17,7 +34,11 @@
1734
import ceos.backend.global.util.ParsedDurationConvertor;
1835
import java.time.LocalDateTime;
1936
import java.time.format.DateTimeFormatter;
20-
import java.util.*;
37+
import java.util.ArrayList;
38+
import java.util.Comparator;
39+
import java.util.List;
40+
import java.util.Objects;
41+
import java.util.Set;
2142
import java.util.stream.Collectors;
2243
import org.springframework.data.domain.Page;
2344
import org.springframework.stereotype.Component;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package ceos.backend.domain.retrospect;
2+
3+
4+
import ceos.backend.domain.retrospect.dto.request.CreateRetrospectRequest;
5+
import ceos.backend.domain.retrospect.dto.response.GetRetrospectResponse;
6+
import ceos.backend.domain.retrospect.dto.response.GetRetrospectsResponse;
7+
import ceos.backend.domain.retrospect.service.RetrospectService;
8+
import io.swagger.v3.oas.annotations.Operation;
9+
import io.swagger.v3.oas.annotations.tags.Tag;
10+
import jakarta.validation.Valid;
11+
import lombok.RequiredArgsConstructor;
12+
import lombok.extern.slf4j.Slf4j;
13+
import org.springframework.validation.annotation.Validated;
14+
import org.springframework.web.bind.annotation.DeleteMapping;
15+
import org.springframework.web.bind.annotation.GetMapping;
16+
import org.springframework.web.bind.annotation.PathVariable;
17+
import org.springframework.web.bind.annotation.PostMapping;
18+
import org.springframework.web.bind.annotation.PutMapping;
19+
import org.springframework.web.bind.annotation.RequestBody;
20+
import org.springframework.web.bind.annotation.RequestMapping;
21+
import org.springframework.web.bind.annotation.RequestParam;
22+
import org.springframework.web.bind.annotation.RestController;
23+
24+
@Slf4j
25+
@RestController
26+
@RequiredArgsConstructor
27+
@Validated
28+
@RequestMapping(value = "/retrospect")
29+
@Tag(name = "Retrospect")
30+
public class RetrospectController {
31+
private final RetrospectService retrospectService;
32+
33+
@Operation(summary = "회고록 목록 보기")
34+
@GetMapping
35+
public GetRetrospectsResponse getRetrospects(
36+
@RequestParam("pageNum") int pageNum, @RequestParam("limit") int limit) {
37+
log.info("회고록 목록 보기");
38+
39+
return retrospectService.getRetrospects(pageNum, limit);
40+
}
41+
42+
@Operation(summary = "회고록 상세 보기")
43+
@GetMapping("/{id}")
44+
public GetRetrospectResponse getRetrospect(@PathVariable("id") Long id) {
45+
log.info("회고록 상세 보기");
46+
47+
return retrospectService.getRetrospect(id);
48+
}
49+
50+
@Operation(summary = "회고록 작성")
51+
@PostMapping
52+
public void createRetrospect(
53+
@RequestBody @Valid CreateRetrospectRequest createRetrospectRequest) {
54+
log.info("회고록 작성");
55+
56+
retrospectService.createRetrospect(createRetrospectRequest);
57+
}
58+
59+
@Operation(summary = "회고록 수정")
60+
@PutMapping("/{id}")
61+
public GetRetrospectResponse updateRetrospect(
62+
@PathVariable("id") Long id,
63+
@RequestBody @Valid CreateRetrospectRequest createRetrospectRequest) {
64+
log.info("회고록 수정");
65+
66+
return retrospectService.updateRetrospect(id, createRetrospectRequest);
67+
}
68+
69+
@Operation(summary = "회고록 삭제")
70+
@DeleteMapping("/{id}")
71+
public void deleteRetrospect(@PathVariable("id") Long id) {
72+
log.info("회고록 삭제");
73+
74+
retrospectService.deleteRetrospect(id);
75+
}
76+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package ceos.backend.domain.retrospect.domain;
2+
3+
4+
import ceos.backend.domain.retrospect.dto.request.CreateRetrospectRequest;
5+
import ceos.backend.global.common.entity.BaseEntity;
6+
import ceos.backend.global.common.entity.Part;
7+
import jakarta.persistence.Column;
8+
import jakarta.persistence.Entity;
9+
import jakarta.persistence.EnumType;
10+
import jakarta.persistence.Enumerated;
11+
import jakarta.persistence.GeneratedValue;
12+
import jakarta.persistence.GenerationType;
13+
import jakarta.persistence.Id;
14+
import jakarta.validation.constraints.NotBlank;
15+
import jakarta.validation.constraints.NotNull;
16+
import jakarta.validation.constraints.Positive;
17+
import lombok.AccessLevel;
18+
import lombok.Builder;
19+
import lombok.Getter;
20+
import lombok.NoArgsConstructor;
21+
22+
@Getter
23+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
24+
@Entity
25+
public class Retrospect extends BaseEntity {
26+
@Id
27+
@GeneratedValue(strategy = GenerationType.IDENTITY)
28+
@Column(name = "retrospect_id")
29+
private Long id;
30+
31+
@NotBlank private String title;
32+
33+
@NotBlank private String url;
34+
35+
@NotBlank private String writer;
36+
37+
@NotNull @Positive private Integer generation;
38+
39+
@NotNull
40+
@Enumerated(EnumType.STRING)
41+
private Part part;
42+
43+
@Builder
44+
public Retrospect(String title, String url, String writer, Integer generation, Part part) {
45+
this.title = title;
46+
this.url = url;
47+
this.writer = writer;
48+
this.generation = generation;
49+
this.part = part;
50+
}
51+
52+
public void update(CreateRetrospectRequest createRetrospectRequest) {
53+
title = createRetrospectRequest.getTitle();
54+
url = createRetrospectRequest.getUrl();
55+
writer = createRetrospectRequest.getWriter();
56+
generation = createRetrospectRequest.getGeneration();
57+
part = createRetrospectRequest.getPart();
58+
}
59+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package ceos.backend.domain.retrospect.dto.request;
2+
3+
4+
import ceos.backend.domain.retrospect.domain.Retrospect;
5+
import ceos.backend.global.common.entity.Part;
6+
import io.swagger.v3.oas.annotations.media.Schema;
7+
import jakarta.validation.constraints.NotBlank;
8+
import jakarta.validation.constraints.NotNull;
9+
import jakarta.validation.constraints.Positive;
10+
import lombok.Data;
11+
12+
@Data
13+
public class CreateRetrospectRequest {
14+
@NotBlank(message = "회고 제목을 입력해주세요")
15+
@Schema(type = "string", description = "회고 제목")
16+
private String title;
17+
18+
@NotBlank(message = "회고 내용이 담긴 url을 입력해주세요")
19+
@Schema(type = "string", description = "회고 내용")
20+
private String url;
21+
22+
@NotBlank(message = "작성자를 입력해주세요")
23+
@Schema(type = "string", description = "회고 제목")
24+
private String writer;
25+
26+
@NotNull(message = "기수를 입력해주세요")
27+
@Positive
28+
@Schema(type = "integer", description = "기수")
29+
private Integer generation;
30+
31+
@NotNull(message = "파트를 입력해주세요")
32+
@Schema(type = "Part", description = "파트")
33+
private Part part;
34+
35+
public Retrospect toEntity() {
36+
return Retrospect.builder()
37+
.title(title)
38+
.url(url)
39+
.writer(writer)
40+
.generation(generation)
41+
.part(part)
42+
.build();
43+
}
44+
}

0 commit comments

Comments
 (0)