JPA 사용을 위한 Entity 작성을 하였다..
JPA 처음사용하다보니 강의들었을때랑 실제 응용하는 부분에서 많이 어려웠다..
어디 확인받을곳도없고 우선 ERD처럼 나오긴했는데
아직 NOTNULL부분은 제대로 설정하진않았고 추후에 설정할예정
그리고 언제든지 수정될수있음 ..
작성한 Entity 및 ENUM 파일 목록입니다.
1. ENUM 파일 목록
Provider(소셜로그인시 소셜 업체)
package dev.momory.moneymindbackend.entity;
public enum Provider {
KAKAO,
NAVER,
GOOGLE;
}
AuthProvider(회원가입 일반계정인지, 소셜계정 여부)
package dev.momory.moneymindbackend.entity;
public enum AuthProvider {
LOCAL,
KAKAO,
NAVER,
GOOGLE;
}
AccountType(계좌등록시 카드or통장 여부)
package dev.momory.moneymindbackend.entity;
public enum AccountType {
BANK, CARD
}
AccountTransactionType(수입 or 지출 여부)
package dev.momory.moneymindbackend.entity;
public enum AccountTransactionType {
INCOME,
EXPENSE
}
2.Entity 파일 목록
User
package dev.momory.moneymindbackend.entity;
import jakarta.persistence.*;
import lombok.Getter;
import org.hibernate.annotations.Comment;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import java.time.LocalDateTime;
import java.util.List;
@Entity
@Getter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("사용자 고유 ID")
private Long id;
@Column(nullable = false)
@Comment("사용자 이름")
private String username;
// @Column(nullable = false)
@Comment("이메일")
private String email;
// @Column(nullable = false)
@Comment("비밀번호")
private String password;
@Comment("프로필 사진 URL")
private String profilePicture;
@Column(nullable = false)
@Comment("계정 생성 날짜")
@CreatedDate
private LocalDateTime createdAt;
@Column(nullable = false)
@Comment("계정 수정 날짜")
@LastModifiedDate
private LocalDateTime updatedAt;
@Comment("로그인타입")
@Enumerated(EnumType.STRING)
private AuthProvider authProvider;
@Comment("소셜 로그인 사용자 ID")
@OneToMany(mappedBy = "user")
private List<SocialAccount> socialAccount;
}
SocialAccount
package dev.momory.moneymindbackend.entity;
import jakarta.persistence.*;
import lombok.Getter;
import org.hibernate.annotations.Comment;
import static jakarta.persistence.FetchType.LAZY;
@Entity
@Getter
public class SocialAccount {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("소셜 계정 고유 ID")
private Long id;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "user_id")
@Comment("사용자 고유 ID")
private User user;
@Comment("소셜 로그인 제공자")
@Enumerated(EnumType.STRING)
private Provider provider;
@Comment("소셜 로그인 사용자 ID")
private String providerUserId;
@Comment("소셜 로그인 액세스 토큰")
private String accessToken;
@Comment("소셜 로그인 리프레시 토큰")
private String refreshToken;
}
Account
package dev.momory.moneymindbackend.entity;
import jakarta.persistence.*;
import lombok.Getter;
import org.hibernate.annotations.Comment;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static jakarta.persistence.FetchType.LAZY;
@Entity
@Getter
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("계좌 고유 ID")
private Long id;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "user_id", nullable = false)
@Comment("사용자 고유 ID")
User user;
// transaction_id(FK) 작성필요함
// 아직 애매 해서 작성하지는 않음..
@Enumerated(EnumType.STRING)
@Comment("계좌유형(은행계좌, 카드)")
private AccountType accountType;
@Comment("계좌 이름")
private String accountName;
@Comment("계좌 별명")
private String accountNickname;
@Comment("현재잔액")
private BigDecimal balance;
@Comment("계좌 생성 날짜")
@CreatedDate
private LocalDateTime createdAt;
@Comment("계좌 수정 날짜")
@LastModifiedDate
private LocalDateTime updatedAt;
}
AccountTransaction
package dev.momory.moneymindbackend.entity;
import jakarta.persistence.*;
import lombok.Getter;
import org.hibernate.annotations.Comment;
import org.springframework.data.annotation.CreatedDate;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static jakarta.persistence.FetchType.LAZY;
@Entity
@Getter
public class AccountTransaction {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("계좌 거래 고유ID")
private Long id;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "account_id", nullable = false)
@Comment("계좌 고유 ID")
private Account account;;
@Comment("거래 금액")
private BigDecimal amount;
@Comment("거래 날짜")
private LocalDateTime transactionDate;
@Comment("거래 유형")
@Enumerated(EnumType.STRING)
private AccountTransactionType type;
@CreatedDate
@Comment("거래 생성 날짜")
private LocalDateTime createdAt;
}
Transaction
package dev.momory.moneymindbackend.entity;
import jakarta.persistence.*;
import lombok.Getter;
import org.hibernate.annotations.Comment;
import org.springframework.cglib.core.Local;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Entity
@Getter
public class Transaction {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("거래 고유 ID")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", nullable = false)
@Comment("사용자 고유 ID")
private User user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "category_id", nullable = false)
@Comment("카테고리 고유 ID")
private Category category;
@Comment("거래 금액")
private BigDecimal amount;
@Comment("거래 날짜")
private LocalDateTime transactionDate;
@Comment("거래 유형")
private AccountTransactionType transactionType;
@Comment("메모")
@Column(columnDefinition = "TEXT")
private String memo;
@CreatedDate
@Comment("거래 생성 날짜")
private LocalDateTime createdAt;
@LastModifiedDate
@Comment("거래 수정 날짜")
private LocalDateTime updatedAt;
}
Category
package dev.momory.moneymindbackend.entity;
import jakarta.persistence.*;
import lombok.Getter;
import org.hibernate.annotations.Comment;
@Entity
@Getter
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("카테고리 고유 ID")
private Long id;
@Column(nullable = false)
@Comment("카테고리 이름")
private String name;
@Column(nullable = false)
@Comment("카테고리 아이콘")
private String icon;
}
'프로그래밍 > 개인프로젝트' 카테고리의 다른 글
[프로젝트] 6. 로그인(일반) - 프론트화면(react) (1) | 2024.09.03 |
---|---|
[프로젝트] 5. 로그인(일반) (0) | 2024.08.29 |
[프로젝트] 3. 프로젝트 폴더 구조 (3) | 2024.08.28 |
[프로젝트] 2. ERD 및 테이블 정의서 작성하기 (1) | 2024.08.28 |
[프로젝트] 1. 주제 정하기 (0) | 2024.08.27 |