Skip to content

Commit 74a6978

Browse files
authored
Merge pull request #4 from TaskFlow-CLAP/CLAP-28
CLAP-28 엔티티 구조 설계
2 parents d74edc7 + 12fe3f2 commit 74a6978

34 files changed

+971
-3
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package clap.server.adapter.outbound.persistense.entity.common;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.EntityListeners;
5+
import jakarta.persistence.MappedSuperclass;
6+
import lombok.AccessLevel;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
import lombok.experimental.SuperBuilder;
10+
import org.springframework.data.annotation.CreatedDate;
11+
import org.springframework.data.annotation.LastModifiedDate;
12+
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
13+
14+
import java.time.LocalDateTime;
15+
16+
@Getter
17+
@SuperBuilder
18+
@MappedSuperclass
19+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
20+
@EntityListeners(AuditingEntityListener.class)
21+
public class BaseTimeEntity {
22+
23+
@CreatedDate
24+
@Column(nullable = false, updatable = false)
25+
private LocalDateTime createdAt;
26+
27+
@LastModifiedDate
28+
@Column(nullable = false)
29+
private LocalDateTime updatedAt;
30+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package clap.server.adapter.outbound.persistense.entity.log;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.DiscriminatorValue;
5+
import jakarta.persistence.Entity;
6+
import lombok.AccessLevel;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
import lombok.experimental.SuperBuilder;
10+
11+
@Entity
12+
@Getter
13+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
14+
@DiscriminatorValue("ANONYMOUS")
15+
@SuperBuilder
16+
public class AnonymousLogEntity extends ApiLogEntity{
17+
@Column
18+
private String loginNickname;
19+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package clap.server.adapter.outbound.persistense.entity.log;
2+
3+
import clap.server.adapter.outbound.persistense.entity.log.constant.ApiHttpMethod;
4+
import jakarta.persistence.*;
5+
import lombok.AccessLevel;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
import lombok.experimental.SuperBuilder;
9+
10+
import java.time.LocalDateTime;
11+
12+
@Entity
13+
@Table(name = "api_log")
14+
@Getter
15+
@SuperBuilder
16+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
17+
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
18+
@DiscriminatorColumn(name = "DTYPE")
19+
public class ApiLogEntity {
20+
@Id
21+
@GeneratedValue(strategy = GenerationType.IDENTITY)
22+
private Long logId;
23+
24+
@Column(nullable = false)
25+
private String serverIp;
26+
27+
@Column(nullable = false)
28+
private String clientIp;
29+
30+
@Column(length = 4096, nullable = false)
31+
private String requestUrl;
32+
33+
@Column(nullable = false)
34+
@Enumerated(EnumType.STRING)
35+
private ApiHttpMethod requestMethod;
36+
37+
@Column(nullable = false)
38+
private Integer statusCode;
39+
40+
@Column(nullable = false)
41+
private String customStatusCode;
42+
43+
@Column(length = 4096, nullable = false)
44+
private String request;
45+
46+
@Column(length = 4096, nullable = false)
47+
private String response;
48+
49+
@Column(nullable = false)
50+
private LocalDateTime requestAt;
51+
52+
@Column(nullable = false)
53+
private LocalDateTime responseAt;
54+
55+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package clap.server.adapter.outbound.persistense.entity.log;
2+
3+
import clap.server.adapter.outbound.persistense.entity.member.MemberEntity;
4+
import jakarta.persistence.*;
5+
import lombok.AccessLevel;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
import lombok.experimental.SuperBuilder;
9+
10+
@Entity
11+
@Getter
12+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
13+
@DiscriminatorValue("MEMBER")
14+
@SuperBuilder
15+
public class MemberLogEntity extends ApiLogEntity{
16+
@ManyToOne(fetch = FetchType.LAZY)
17+
@JoinColumn(name = "member_id")
18+
private MemberEntity member;
19+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package clap.server.adapter.outbound.persistense.entity.log.constant;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
6+
@Getter
7+
@RequiredArgsConstructor
8+
public enum ApiHttpMethod {
9+
POST,
10+
GET,
11+
PATCH,
12+
PUT,
13+
DELETE;
14+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package clap.server.adapter.outbound.persistense.entity.member;
2+
3+
import clap.server.adapter.outbound.persistense.entity.common.BaseTimeEntity;
4+
import clap.server.adapter.outbound.persistense.entity.member.constant.DepartmentStatus;
5+
import jakarta.persistence.*;
6+
import lombok.AccessLevel;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
import lombok.experimental.SuperBuilder;
10+
11+
@Entity
12+
@Table(name = "department")
13+
@Getter
14+
@SuperBuilder
15+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
16+
public class DepartmentEntity extends BaseTimeEntity {
17+
18+
@Id
19+
@GeneratedValue(strategy = GenerationType.IDENTITY)
20+
@Column(nullable = false)
21+
private Long departmentId;
22+
23+
@ManyToOne(fetch = FetchType.LAZY)
24+
@JoinColumn(name = "admin_id", nullable = false)
25+
private MemberEntity admin;
26+
27+
@Column(nullable = false)
28+
private String code;
29+
30+
@Column(nullable = false)
31+
private String name;
32+
33+
@Column(nullable = false)
34+
@Enumerated(EnumType.STRING)
35+
private DepartmentStatus departmentStatus;
36+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package clap.server.adapter.outbound.persistense.entity.member;
2+
3+
import clap.server.adapter.outbound.persistense.entity.common.BaseTimeEntity;
4+
import jakarta.persistence.*;
5+
import lombok.AccessLevel;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
import lombok.experimental.SuperBuilder;
9+
10+
@Entity
11+
@Table(name = "member")
12+
@Getter
13+
@SuperBuilder
14+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
15+
public class MemberEntity extends BaseTimeEntity {
16+
@Id
17+
@GeneratedValue(strategy = GenerationType.IDENTITY)
18+
private Long memberId;
19+
20+
@Embedded
21+
private MemberInfo memberInfo;
22+
23+
@Column
24+
private String imageUrl;
25+
26+
@Column
27+
private Boolean notificationEnabled;
28+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package clap.server.adapter.outbound.persistense.entity.member;
2+
3+
import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole;
4+
import clap.server.adapter.outbound.persistense.entity.member.constant.MemberStatus;
5+
import jakarta.persistence.*;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
9+
@Getter
10+
@NoArgsConstructor
11+
@Embeddable
12+
public class MemberInfo {
13+
@Column(nullable = false)
14+
private String name;
15+
16+
@Column(unique = true, nullable = false)
17+
private String email;
18+
19+
@Column(unique = true, nullable = false)
20+
private String nickname;
21+
22+
@Column(nullable = false)
23+
private boolean isReviewer;
24+
25+
@ManyToOne(fetch = FetchType.LAZY)
26+
@JoinColumn(name = "department_id", nullable = false)
27+
private DepartmentEntity department;
28+
29+
@Column(nullable = false)
30+
@Enumerated(EnumType.STRING)
31+
private MemberRole role;
32+
33+
@Column(nullable = false)
34+
private String departmentRole;
35+
36+
@ManyToOne(fetch = FetchType.LAZY)
37+
@JoinColumn(name = "admin_id", nullable = false)
38+
private MemberEntity admin;
39+
40+
@Enumerated(EnumType.STRING)
41+
@Column(nullable = false)
42+
private MemberStatus memberStatus;
43+
44+
// TODO: spring security 적용 예정
45+
@Column(nullable = false)
46+
private String password;
47+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package clap.server.adapter.outbound.persistense.entity.member;
2+
3+
import clap.server.adapter.outbound.persistense.entity.common.BaseTimeEntity;
4+
import clap.server.adapter.outbound.persistense.entity.notification.NotificationChannelEntity;
5+
import jakarta.persistence.*;
6+
import lombok.AccessLevel;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
import lombok.experimental.SuperBuilder;
10+
11+
@Entity
12+
@Table(name = "member_notification")
13+
@Getter
14+
@SuperBuilder
15+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
16+
public class MemberNotificationEntity extends BaseTimeEntity {
17+
@Id
18+
@GeneratedValue(strategy = GenerationType.IDENTITY)
19+
@Column(nullable = false)
20+
private Long memberNotificationId;
21+
22+
@ManyToOne(fetch = FetchType.LAZY)
23+
@JoinColumn(name = "member_id")
24+
private MemberEntity member;
25+
26+
@ManyToOne(fetch = FetchType.LAZY)
27+
@JoinColumn(name = "notification_channel_id")
28+
private NotificationChannelEntity notificationChannel;
29+
30+
@Column(nullable = false)
31+
private boolean isEnabled;
32+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package clap.server.adapter.outbound.persistense.entity.member.constant;
2+
3+
import lombok.Getter;
4+
import lombok.RequiredArgsConstructor;
5+
6+
@Getter
7+
@RequiredArgsConstructor
8+
public enum DepartmentStatus {
9+
ACTIVE("활성"),
10+
INACTIVE("비활성");
11+
12+
private final String description;
13+
}

0 commit comments

Comments
 (0)