Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package clap.server.adapter.outbound.persistense.entity.common;

import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;

@Getter
@SuperBuilder
@MappedSuperclass
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@EntityListeners(AuditingEntityListener.class)
public class BaseTimeEntity {

@CreatedDate
@Column(nullable = false, updatable = false)
private LocalDateTime createdAt;

@LastModifiedDate
@Column(nullable = false)
private LocalDateTime updatedAt;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package clap.server.adapter.outbound.persistense.entity.log;

import jakarta.persistence.Column;
import jakarta.persistence.DiscriminatorValue;
import jakarta.persistence.Entity;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@DiscriminatorValue("ANONYMOUS")
@SuperBuilder
public class AnonymousLogEntity extends ApiLogEntity{
@Column
private String loginNickname;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package clap.server.adapter.outbound.persistense.entity.log;

import clap.server.adapter.outbound.persistense.entity.log.constant.ApiHttpMethod;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.time.LocalDateTime;

@Entity
@Table(name = "api_log")
@Getter
@SuperBuilder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DTYPE")
public class ApiLogEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long logId;

@Column(nullable = false)
private String serverIp;

@Column(nullable = false)
private String clientIp;

@Column(length = 4096, nullable = false)
private String requestUrl;

@Column(nullable = false)
@Enumerated(EnumType.STRING)
private ApiHttpMethod requestMethod;

@Column(nullable = false)
private Integer statusCode;

@Column(nullable = false)
private String customStatusCode;

@Column(length = 4096, nullable = false)
private String request;

@Column(length = 4096, nullable = false)
private String response;

@Column(nullable = false)
private LocalDateTime requestAt;

@Column(nullable = false)
private LocalDateTime responseAt;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package clap.server.adapter.outbound.persistense.entity.log;

import clap.server.adapter.outbound.persistense.entity.member.MemberEntity;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@DiscriminatorValue("MEMBER")
@SuperBuilder
public class MemberLogEntity extends ApiLogEntity{
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private MemberEntity member;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package clap.server.adapter.outbound.persistense.entity.log.constant;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum ApiHttpMethod {
POST,
GET,
PATCH,
PUT,
DELETE;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package clap.server.adapter.outbound.persistense.entity.member;

import clap.server.adapter.outbound.persistense.entity.common.BaseTimeEntity;
import clap.server.adapter.outbound.persistense.entity.member.constant.DepartmentStatus;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

@Entity
@Table(name = "department")
@Getter
@SuperBuilder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class DepartmentEntity extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false)
private Long departmentId;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "admin_id", nullable = false)
private MemberEntity admin;

@Column(nullable = false)
private String code;

@Column(nullable = false)
private String name;

@Column(nullable = false)
@Enumerated(EnumType.STRING)
private DepartmentStatus departmentStatus;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package clap.server.adapter.outbound.persistense.entity.member;

import clap.server.adapter.outbound.persistense.entity.common.BaseTimeEntity;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

@Entity
@Table(name = "member")
@Getter
@SuperBuilder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class MemberEntity extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long memberId;

@Embedded
private MemberInfo memberInfo;

@Column
private String imageUrl;

@Column
private Boolean notificationEnabled;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package clap.server.adapter.outbound.persistense.entity.member;

import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole;
import clap.server.adapter.outbound.persistense.entity.member.constant.MemberStatus;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@Embeddable
public class MemberInfo {
@Column(nullable = false)
private String name;

@Column(unique = true, nullable = false)
private String email;

@Column(unique = true, nullable = false)
private String nickname;

@Column(nullable = false)
private boolean isReviewer;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "department_id", nullable = false)
private DepartmentEntity department;

@Column(nullable = false)
@Enumerated(EnumType.STRING)
private MemberRole role;

@Column(nullable = false)
private String departmentRole;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "admin_id", nullable = false)
private MemberEntity admin;

@Enumerated(EnumType.STRING)
@Column(nullable = false)
private MemberStatus memberStatus;

// TODO: spring security 적용 예정
@Column(nullable = false)
private String password;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package clap.server.adapter.outbound.persistense.entity.member;

import clap.server.adapter.outbound.persistense.entity.common.BaseTimeEntity;
import clap.server.adapter.outbound.persistense.entity.notification.NotificationChannelEntity;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

@Entity
@Table(name = "member_notification")
@Getter
@SuperBuilder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class MemberNotificationEntity extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false)
private Long memberNotificationId;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private MemberEntity member;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "notification_channel_id")
private NotificationChannelEntity notificationChannel;

@Column(nullable = false)
private boolean isEnabled;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package clap.server.adapter.outbound.persistense.entity.member.constant;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum DepartmentStatus {
ACTIVE("활성"),
INACTIVE("비활성");

private final String description;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package clap.server.adapter.outbound.persistense.entity.member.constant;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum MemberRole {
ROLE_ADMIN("관리자"),
ROLE_USER("사용자"),
ROLE_MANAGER("담당자");

private final String description;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package clap.server.adapter.outbound.persistense.entity.member.constant;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum MemberStatus {
PENDING("회원 등록 대기중"),
APPROVAL_REQUEST("회원 등록 요청 상태"),
ACTIVE("활성"),
INACTIVE("비활성"),
DELETED("삭제");

private final String description;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
//package clap.server.adapter.out.persistense.entity.member.constant;
//
//import jakarta.persistence.Column;
//import jakarta.persistence.Embeddable;
//import lombok.AccessLevel;
//import lombok.Getter;
//import lombok.NoArgsConstructor;
//import org.springframework.security.crypto.factory.PasswordEncoderFactories;
//import org.springframework.security.crypto.password.PasswordEncoder;
//
//@Getter
//@NoArgsConstructor(access = AccessLevel.PROTECTED)
//@Embeddable
//public class Password {
//
// public static final PasswordEncoder ENCODER = PasswordEncoderFactories.createDelegatingPasswordEncoder();
//
// @Column(name = "password", nullable = false)
// private String value;
//
// private Password(String value) {
// this.value = value;
// }
//
// public static Password encrypt(String value, PasswordEncoder encoder) {
// return new Password(encoder.encode(value));
// }
//
// public boolean isSamePassword(String password, PasswordEncoder encoder) {
// return encoder.matches(password, this.value);
// }
//}
Loading