1+ package onku.backend.domain.absence
2+
3+ import jakarta.persistence.*
4+ import onku.backend.domain.absence.dto.request.SubmitAbsenceReportRequest
5+ import onku.backend.domain.absence.enums.AbsenceReportApproval
6+ import onku.backend.domain.absence.enums.AbsenceApprovedType
7+ import onku.backend.domain.absence.enums.AbsenceSubmitType
8+ import onku.backend.domain.member.Member
9+ import onku.backend.domain.session.Session
10+ import onku.backend.global.entity.BaseEntity
11+ import java.time.LocalDateTime
12+
13+ @Entity
14+ @Table(
15+ name = " absence_report" ,
16+ uniqueConstraints = [
17+ UniqueConstraint (
18+ name = " uk_absence_member_session" ,
19+ columnNames = [" member_id" , " session_id" ]
20+ )
21+ ]
22+ )
23+ class AbsenceReport (
24+ @Id
25+ @GeneratedValue(strategy = GenerationType .IDENTITY )
26+ @Column(name = " absence_report_id" )
27+ val id : Long? = null ,
28+
29+ @ManyToOne(fetch = FetchType .LAZY )
30+ @JoinColumn(name = " session_id" )
31+ var session : Session ,
32+
33+ @ManyToOne(fetch = FetchType .LAZY )
34+ @JoinColumn(name = " member_id" )
35+ val member : Member ,
36+
37+ @Column(name = " url" )
38+ var url : String ,
39+
40+ @Column(name = " submit_type" )
41+ @Enumerated(EnumType .STRING ) // 사용자가 제출한 사유서 type
42+ var submitType : AbsenceSubmitType = AbsenceSubmitType .ABSENT ,
43+
44+ @Column(name = " approved_type" )
45+ @Enumerated(EnumType .STRING ) // 운영진이 승인한 사유서 type
46+ var approvedType : AbsenceApprovedType = AbsenceApprovedType .ABSENT ,
47+
48+ @Column(name = " reason" )
49+ var reason : String ,
50+
51+ @Column(name = " approval" )
52+ @Enumerated(EnumType .STRING )
53+ var approval : AbsenceReportApproval ,
54+
55+ @Column(name = " lateDateTime" )
56+ var lateDateTime : LocalDateTime ? ,
57+
58+ @Column(name = " leaveDateTime" )
59+ var leaveDateTime : LocalDateTime ?
60+ ) : BaseEntity() {
61+ companion object {
62+ fun createAbsenceReport (
63+ member : Member ,
64+ session : Session ,
65+ submitAbsenceReportRequest : SubmitAbsenceReportRequest ,
66+ fileKey : String ,
67+ ): AbsenceReport {
68+ return AbsenceReport (
69+ member = member,
70+ session = session,
71+ url = fileKey,
72+ submitType = submitAbsenceReportRequest.submitType,
73+ approvedType = AbsenceApprovedType .ABSENT ,
74+ reason = submitAbsenceReportRequest.reason,
75+ approval = AbsenceReportApproval .SUBMIT ,
76+ leaveDateTime = submitAbsenceReportRequest.leaveDateTime,
77+ lateDateTime = submitAbsenceReportRequest.lateDateTime
78+ )
79+ }
80+ }
81+
82+ fun updateAbsenceReport (
83+ submitAbsenceReportRequest : SubmitAbsenceReportRequest ,
84+ fileKey : String ,
85+ session : Session
86+ ) {
87+ this .session = session
88+ this .reason = submitAbsenceReportRequest.reason
89+ this .url = fileKey
90+ this .submitType = submitAbsenceReportRequest.submitType
91+ this .updatedAt = LocalDateTime .now()
92+ this .leaveDateTime = submitAbsenceReportRequest.leaveDateTime
93+ this .lateDateTime = submitAbsenceReportRequest.lateDateTime
94+ }
95+
96+ fun updateApprovedType (
97+ approvedType : AbsenceApprovedType
98+ ) {
99+ this .approvedType = approvedType;
100+ }
101+
102+ fun updateApproval (
103+ approval : AbsenceReportApproval
104+ ) {
105+ this .approval = approval
106+ }
107+ }
0 commit comments