Skip to content

Commit 3b5e2fb

Browse files
authored
♻️ Refactor - 요구사항에 맞게 AI Report 저장형식을 변경한다
♻️ Refactor - 요구사항에 맞게 AI Report 저장형식을 변경한다
2 parents 8523757 + 9b8f9a0 commit 3b5e2fb

7 files changed

Lines changed: 73 additions & 24 deletions

File tree

src/main/java/sopt/comfit/report/domain/AIReport.java

Lines changed: 42 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import org.hibernate.annotations.JdbcTypeCode;
99
import org.hibernate.type.SqlTypes;
1010
import sopt.comfit.company.domain.Company;
11-
import sopt.comfit.experience.domain.Experience;
1211
import sopt.comfit.global.base.BaseTimeEntity;
1312

1413
@Entity
@@ -20,6 +19,24 @@ public class AIReport extends BaseTimeEntity {
2019
@GeneratedValue(strategy = GenerationType.IDENTITY)
2120
private Long id;
2221

22+
@Column(name = "user_id", nullable = false)
23+
private Long userId;
24+
25+
@Column(name = "experience_title", nullable = false)
26+
private String experienceTitle;
27+
28+
@Column(name = "situation", nullable = false, columnDefinition = "TEXT")
29+
private String situation;
30+
31+
@Column(name = "task", nullable = false, columnDefinition = "TEXT")
32+
private String task;
33+
34+
@Column(name = "action", nullable = false, columnDefinition = "TEXT")
35+
private String action;
36+
37+
@Column(name = "result", nullable = false, columnDefinition = "TEXT")
38+
private String result;
39+
2340
@Column(name = "job_description", nullable = false, columnDefinition = "TEXT")
2441
private String jobDescription;
2542

@@ -41,52 +58,68 @@ public class AIReport extends BaseTimeEntity {
4158
@Column(name = "guidance", nullable = false, columnDefinition = "TEXT")
4259
private String guidance;
4360

44-
@ManyToOne(fetch = FetchType.LAZY)
45-
@JoinColumn(name = "experience_id", nullable = false)
46-
private Experience experience;
47-
4861
@ManyToOne(fetch = FetchType.LAZY)
4962
@JoinColumn(name = "company_id", nullable = false)
5063
private Company company;
5164

5265
@Builder(access = AccessLevel.PROTECTED)
5366
private AIReport(
67+
final Long userId,
68+
final String experienceTitle,
69+
final String situation,
70+
final String task,
71+
final String action,
72+
final String result,
5473
final String jobDescription,
5574
final String perspectives,
5675
final String density,
5776
final String appealPoint,
5877
final String suggestion,
5978
final String guidance,
60-
final Experience experience,
6179
final Company company) {
80+
this.userId = userId;
81+
this.experienceTitle = experienceTitle;
82+
this.situation = situation;
83+
this.task = task;
84+
this.action = action;
85+
this.result = result;
6286
this.jobDescription = jobDescription;
6387
this.perspectives = perspectives;
6488
this.density = density;
6589
this.appealPoint = appealPoint;
6690
this.suggestion = suggestion;
6791
this.guidance = guidance;
68-
this.experience = experience;
6992
this.company = company;
7093
}
7194

7295
public static AIReport create(
96+
final Long userId,
97+
final String experienceTitle,
98+
final String situation,
99+
final String task,
100+
final String action,
101+
final String result,
73102
final String jobDescription,
74103
final String perspectives,
75104
final String density,
76105
final String appealPoint,
77106
final String suggestion,
78107
final String guidance,
79-
final Experience experience,
80108
final Company company) {
81109

82110
return AIReport.builder()
111+
.userId(userId)
112+
.experienceTitle(experienceTitle)
113+
.situation(situation)
114+
.task(task)
115+
.action(action)
116+
.result(result)
83117
.jobDescription(jobDescription)
84118
.perspectives(perspectives)
85119
.density(density)
86120
.appealPoint(appealPoint)
87121
.suggestion(suggestion)
88122
.guidance(guidance)
89-
.experience(experience)
90123
.company(company)
91124
.build();
92125
}

src/main/java/sopt/comfit/report/domain/AIReportRepository.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,24 @@
99
import java.util.Optional;
1010

1111
public interface AIReportRepository extends JpaRepository<AIReport, Long> {
12-
Page<AIReport> findByExperienceUserId(Long experienceUserId, Pageable pageable);
12+
Page<AIReport> findByUserId(Long userId, Pageable pageable);
13+
1314
@Query("""
1415
SELECT ar FROM AIReport ar
15-
JOIN ar.experience e
1616
JOIN ar.company c
17-
WHERE e.user.id = :userId
17+
WHERE ar.userId = :userId
1818
AND (c.name LIKE %:keyword%)
1919
""")
20-
Page<AIReport> findByExperienceUserIdAndKeyword(
20+
Page<AIReport> findByUserIdAndKeyword(
2121
@Param("userId") Long userId,
2222
@Param("keyword") String keyword,
2323
Pageable pageable
2424
);
2525

2626
@Query("SELECT a FROM AIReport a " +
2727
"JOIN FETCH a.company " +
28-
"JOIN FETCH a.experience " +
29-
"WHERE a.experience.user.id = :userId AND a.id = :id")
30-
Optional<AIReport> findByExperienceUserIdAndId(@Param("userId") Long userId, @Param("id") Long id);
28+
"WHERE a.userId = :userId AND a.id = :id")
29+
Optional<AIReport> findByUserIdAndId(@Param("userId") Long userId, @Param("id") Long id);
3130

32-
boolean existsByCompanyIdAndExperienceUserId(Long companyId, Long userId);
31+
boolean existsByCompanyIdAndUserId(Long companyId, Long userId);
3332
}

src/main/java/sopt/comfit/report/dto/response/AIReportResponseDto.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ public record AIReportResponseDto(
1616

1717
String experienceTitle,
1818

19+
String situation,
20+
21+
String task,
22+
23+
String action,
24+
25+
String result,
26+
1927
String jobDescription,
2028

2129
List<Perspective> perspectives,
@@ -38,7 +46,11 @@ public static AIReportResponseDto from(AIReport report) {
3846
return new AIReportResponseDto(
3947
report.getId(),
4048
report.getCompany().getName(),
41-
report.getExperience().getTitle(),
49+
report.getExperienceTitle(),
50+
report.getSituation(),
51+
report.getTask(),
52+
report.getAction(),
53+
report.getResult(),
4254
report.getJobDescription(),
4355
fromJson(report.getPerspectives(), new TypeReference<List<Perspective>>() {}),
4456
fromJson(report.getDensity(), new TypeReference<List<Density>>() {}),

src/main/java/sopt/comfit/report/dto/response/GetReportSummaryResponseDto.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public static GetReportSummaryResponseDto from(AIReport aiRepot) {
1717
return new GetReportSummaryResponseDto(
1818
aiRepot.getId(),
1919
aiRepot.getCompany().getName(),
20-
aiRepot.getExperience().getTitle(),
20+
aiRepot.getExperienceTitle(),
2121
aiRepot.getCreatedAt().toLocalDate()
2222
);
2323
}

src/main/java/sopt/comfit/report/service/AIReportCommandService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,18 @@ public AIReport parseAndSave(String content, Experience experience, Company comp
4343
json.get("appealPoint").size());
4444

4545
AIReport report = AIReport.create(
46+
experience.getUser().getId(),
47+
experience.getTitle(),
48+
experience.getSituation(),
49+
experience.getTask(),
50+
experience.getAction(),
51+
experience.getResult(),
4652
jobDescription,
4753
json.get("perspectives").toString(),
4854
json.get("density").toString(),
4955
json.get("appealPoint").toString(),
5056
json.get("suggestion").asText(),
5157
json.get("guidance").asText(),
52-
experience,
5358
company
5459
);
5560

src/main/java/sopt/comfit/report/service/AIReportQueryService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,17 @@ public PageDto<GetReportSummaryResponseDto> getReportList(Long userId, Pageable
4343
Page<AIReport> reports;
4444

4545
if (keyword != null && !keyword.trim().isEmpty()) {
46-
reports = aIReportRepository.findByExperienceUserIdAndKeyword(userId, keyword, pageable);
46+
reports = aIReportRepository.findByUserIdAndKeyword(userId, keyword, pageable);
4747
} else {
48-
reports = aIReportRepository.findByExperienceUserId(userId, pageable);
48+
reports = aIReportRepository.findByUserId(userId, pageable);
4949
}
5050

5151
return PageDto.from(reports.map(GetReportSummaryResponseDto::from));
5252
}
5353

5454
@Transactional(readOnly = true)
5555
public AIReportResponseDto getReport(Long userId, Long reportId) {
56-
AIReport aiReport = aIReportRepository.findByExperienceUserIdAndId(userId, reportId)
56+
AIReport aiReport = aIReportRepository.findByUserIdAndId(userId, reportId)
5757
.orElseThrow(() -> BaseException.type(AIReportErrorCode.AI_REPORT_NOT_FOUND));
5858

5959
return AIReportResponseDto.from(aiReport);

src/main/java/sopt/comfit/user/service/UserService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public Long addBookmark(Long userId, Long companyId) {
5050
Company company = companyRepository.findById(companyId)
5151
.orElseThrow(() -> BaseException.type(CompanyErrorCode.COMPANY_NOT_FOUND));
5252

53-
boolean isConnected = aIReportRepository.existsByCompanyIdAndExperienceUserId(companyId, userId);
53+
boolean isConnected = aIReportRepository.existsByCompanyIdAndUserId(companyId, userId);
5454
UserCompany userCompany = userCompanyRepository.save(UserCompany.create(user, company, isConnected));
5555
return userCompany.getId();
5656
}

0 commit comments

Comments
 (0)