From 61e9279dcc0e8df0d4e04ac6697a321aa78dd312 Mon Sep 17 00:00:00 2001 From: Lim jeong woo Date: Mon, 18 Mar 2024 22:14:31 +0900 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Feat:=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=20#31=20=20(#34)=20(#35)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Feat: User 도메인 생성 * Feat: Member 도메인 생성 * Feat: Team 도메인 생성 * Feat: Scrum 도메인 생성 * Feat: 도메인 상태 관리 --- .../team28/startup_valley/domain/Answer.java | 28 ++++++++++ .../team28/startup_valley/domain/Member.java | 35 ++++++++++++ .../startup_valley/domain/Question.java | 35 ++++++++++++ .../team28/startup_valley/domain/Review.java | 30 ++++++++++ .../team28/startup_valley/domain/Scrum.java | 36 ++++++++++++ .../team28/startup_valley/domain/Team.java | 39 +++++++++++++ .../team28/startup_valley/domain/User.java | 55 +++++++++++++++++++ .../team28/startup_valley/domain/Work.java | 34 ++++++++++++ .../team28/startup_valley/dto/type/EPart.java | 15 +++++ .../dto/type/EProfileImage.java | 20 +++++++ .../dto/type/EProjectStatus.java | 13 +++++ .../dto/type/EQuestionStatus.java | 12 ++++ .../team28/startup_valley/dto/type/ERole.java | 14 +++++ .../startup_valley/dto/type/EScrumStatus.java | 12 ++++ 14 files changed, 378 insertions(+) create mode 100644 src/main/java/goormthon/team28/startup_valley/domain/Answer.java create mode 100644 src/main/java/goormthon/team28/startup_valley/domain/Member.java create mode 100644 src/main/java/goormthon/team28/startup_valley/domain/Question.java create mode 100644 src/main/java/goormthon/team28/startup_valley/domain/Review.java create mode 100644 src/main/java/goormthon/team28/startup_valley/domain/Scrum.java create mode 100644 src/main/java/goormthon/team28/startup_valley/domain/Team.java create mode 100644 src/main/java/goormthon/team28/startup_valley/domain/User.java create mode 100644 src/main/java/goormthon/team28/startup_valley/domain/Work.java create mode 100644 src/main/java/goormthon/team28/startup_valley/dto/type/EPart.java create mode 100644 src/main/java/goormthon/team28/startup_valley/dto/type/EProfileImage.java create mode 100644 src/main/java/goormthon/team28/startup_valley/dto/type/EProjectStatus.java create mode 100644 src/main/java/goormthon/team28/startup_valley/dto/type/EQuestionStatus.java create mode 100644 src/main/java/goormthon/team28/startup_valley/dto/type/ERole.java create mode 100644 src/main/java/goormthon/team28/startup_valley/dto/type/EScrumStatus.java diff --git a/src/main/java/goormthon/team28/startup_valley/domain/Answer.java b/src/main/java/goormthon/team28/startup_valley/domain/Answer.java new file mode 100644 index 0000000..90214da --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/domain/Answer.java @@ -0,0 +1,28 @@ +package goormthon.team28.startup_valley.domain; + +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicUpdate; + +import java.time.LocalDateTime; + +@Entity +@Getter +@DynamicUpdate +@Table(name = "answers") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Answer { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "question_id") + private Question question; + @Column(name = "content", nullable = false) + private String content; + @Column(name = "created_at", nullable = false) + private LocalDateTime createdAt; +} diff --git a/src/main/java/goormthon/team28/startup_valley/domain/Member.java b/src/main/java/goormthon/team28/startup_valley/domain/Member.java new file mode 100644 index 0000000..556b069 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/domain/Member.java @@ -0,0 +1,35 @@ +package goormthon.team28.startup_valley.domain; + +import goormthon.team28.startup_valley.dto.type.EPart; +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicUpdate; + +@Entity +@Getter +@DynamicUpdate +@Table(name = "members") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Member { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "team_id") + private Team team; + @Column(name = "part") + @Enumerated(EnumType.STRING) + private EPart part; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + private User user; + @Column(name = "total_minute") + private Long totalMinute; + @Column(name = "retrospection") + private String retrospection; + + +} diff --git a/src/main/java/goormthon/team28/startup_valley/domain/Question.java b/src/main/java/goormthon/team28/startup_valley/domain/Question.java new file mode 100644 index 0000000..37b1e47 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/domain/Question.java @@ -0,0 +1,35 @@ +package goormthon.team28.startup_valley.domain; + +import goormthon.team28.startup_valley.dto.type.EQuestionStatus; +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicUpdate; + +import java.time.LocalDateTime; + +@Entity +@Getter +@DynamicUpdate +@Table(name = "questions") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Question { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "sender_id") + private Member sender; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "receiver_id") + private Member receiver; + @Column(name = "content", nullable = false) + private String content; + @Column(name = "created_at", nullable = false) + private LocalDateTime createdAt; + @Column(name = "question_status", nullable = false) + @Enumerated(EnumType.STRING) + private EQuestionStatus status; +} diff --git a/src/main/java/goormthon/team28/startup_valley/domain/Review.java b/src/main/java/goormthon/team28/startup_valley/domain/Review.java new file mode 100644 index 0000000..99ad45c --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/domain/Review.java @@ -0,0 +1,30 @@ +package goormthon.team28.startup_valley.domain; + +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicUpdate; + +@Entity +@Getter +@DynamicUpdate +@Table(name = "reviews") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Review { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "team_id") + private Team team; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "sender_id") + private Member sender; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "receiver_id") + private Member receiver; + @Column(name = "content") + private String content; +} diff --git a/src/main/java/goormthon/team28/startup_valley/domain/Scrum.java b/src/main/java/goormthon/team28/startup_valley/domain/Scrum.java new file mode 100644 index 0000000..9c69661 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/domain/Scrum.java @@ -0,0 +1,36 @@ +package goormthon.team28.startup_valley.domain; + +import goormthon.team28.startup_valley.dto.type.EScrumStatus; +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicUpdate; + +import java.time.LocalDate; + +@Entity +@Getter +@DynamicUpdate +@Table(name = "scrums") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Scrum { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "summary") + private String summary; + @Column(name = "start_at", nullable = false) + private LocalDate startAt; + @Column(name = "end_at") + private LocalDate endAt; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "worker_id") + private Member worker; + @Column(name = "status") + @Enumerated(EnumType.STRING) + private EScrumStatus status; + + +} diff --git a/src/main/java/goormthon/team28/startup_valley/domain/Team.java b/src/main/java/goormthon/team28/startup_valley/domain/Team.java new file mode 100644 index 0000000..04ae934 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/domain/Team.java @@ -0,0 +1,39 @@ +package goormthon.team28.startup_valley.domain; + +import goormthon.team28.startup_valley.dto.type.EProjectStatus; +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; + +import java.time.LocalDate; + +@Entity +@Getter +@DynamicUpdate +@Table(name = "teams") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Team { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "name", nullable = false) + private String name; + @Column(name = "team_image") + private String teamImage; + @OneToOne + @JoinColumn(name = "id", nullable = false) + private Member leader; + @Column(name = "start_at", nullable = false) + private LocalDate startAt; + @Column(name = "end_at") + private LocalDate endAt; + @Column(name = "status") + @Enumerated(EnumType.STRING) + private EProjectStatus status; + @Column(name = "is_public", nullable = false) + private Boolean isPublic; +} diff --git a/src/main/java/goormthon/team28/startup_valley/domain/User.java b/src/main/java/goormthon/team28/startup_valley/domain/User.java new file mode 100644 index 0000000..0392ae8 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/domain/User.java @@ -0,0 +1,55 @@ +package goormthon.team28.startup_valley.domain; + +import goormthon.team28.startup_valley.dto.type.EProfileImage; +import goormthon.team28.startup_valley.dto.type.ERole; +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.transaction.annotation.Transactional; + +@Entity +@Getter +@DynamicUpdate +@Table(name = "users") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + /* 사용자 인증 및 권한 정보 */ + @Column(name = "serial_id", nullable = false, unique = true) + private String serialId; // discord serial id + @Column(name = "password", nullable = false) + private String password; + @Column(name = "discord_id", nullable = true) + private Long discordId; + @Column(name = "role", nullable = false) + @Enumerated(EnumType.STRING) + private ERole role; + + /* 사용자 이용 정보 */ + @Column(name = "nickname", nullable = false) + private String nickname; + @Column(name = "profile_image", nullable = false) + @Enumerated(EnumType.STRING) + private EProfileImage profileImage; + @Column(name = "refresh_Token") + private String refreshToken; + @Builder + public User(String serialId, String password, ERole role, String nickname, EProfileImage profileImage, String refreshToken) { + this.serialId = serialId; + this.password = password; + this.role = role; + this.nickname = nickname; + this.profileImage = profileImage; + this.refreshToken = refreshToken; + } + public void doubleCheck(Long discordId){ + this.discordId = discordId; + } +} diff --git a/src/main/java/goormthon/team28/startup_valley/domain/Work.java b/src/main/java/goormthon/team28/startup_valley/domain/Work.java new file mode 100644 index 0000000..7ca4618 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/domain/Work.java @@ -0,0 +1,34 @@ +package goormthon.team28.startup_valley.domain; + +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.DynamicUpdate; + +import java.time.LocalDateTime; + +@Entity +@Getter +@DynamicUpdate +@Table(name = "works") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Work { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "scrum_id") + private Scrum scrum; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member owner; + @Column(name = "content", nullable = false) + private String content; + @Column(name = "start_at", nullable = false) + private LocalDateTime startAt; + @Column(name = "end_at") + private LocalDateTime endAt; + +} diff --git a/src/main/java/goormthon/team28/startup_valley/dto/type/EPart.java b/src/main/java/goormthon/team28/startup_valley/dto/type/EPart.java new file mode 100644 index 0000000..a2e4132 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/dto/type/EPart.java @@ -0,0 +1,15 @@ +package goormthon.team28.startup_valley.dto.type; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum EPart { + BACKEND("BACKEND"), + FRONTEND("FRONTEND"), + FULLSTACK("FULLSTACK"), + PM("PM"), + DESIGN("DESIGN"); + private final String name; +} \ No newline at end of file diff --git a/src/main/java/goormthon/team28/startup_valley/dto/type/EProfileImage.java b/src/main/java/goormthon/team28/startup_valley/dto/type/EProfileImage.java new file mode 100644 index 0000000..e2009b4 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/dto/type/EProfileImage.java @@ -0,0 +1,20 @@ +package goormthon.team28.startup_valley.dto.type; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum EProfileImage { + BLUEBERRY("BLUEBERRY"), + CABBAGE("CABBAGE"), + CARROT("CARROT"), + CLOCK("CLOCK"), + CUCUMBER("CUCUMBER"), + LOADER("LOADER"), + STRAWBERRY("STRAWBERRY"), + TOMATO("TOMATO"); + private final String name; + // blueberry, cabbage, carrot, clock, cucumber, loader, strawberry, tomato + +} diff --git a/src/main/java/goormthon/team28/startup_valley/dto/type/EProjectStatus.java b/src/main/java/goormthon/team28/startup_valley/dto/type/EProjectStatus.java new file mode 100644 index 0000000..958f4b6 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/dto/type/EProjectStatus.java @@ -0,0 +1,13 @@ +package goormthon.team28.startup_valley.dto.type; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum EProjectStatus { + IN_PROGRESS("IN_PROGRESS"), + PEER_REVIEW("PEER_REVIEW"), + FINISH("FINISH"); + private final String status; +} diff --git a/src/main/java/goormthon/team28/startup_valley/dto/type/EQuestionStatus.java b/src/main/java/goormthon/team28/startup_valley/dto/type/EQuestionStatus.java new file mode 100644 index 0000000..ab9eab2 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/dto/type/EQuestionStatus.java @@ -0,0 +1,12 @@ +package goormthon.team28.startup_valley.dto.type; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum EQuestionStatus { + WAITING_ANSWER("WAITING_ANSWER"), + FINISH("FINISH"); + private final String status; +} diff --git a/src/main/java/goormthon/team28/startup_valley/dto/type/ERole.java b/src/main/java/goormthon/team28/startup_valley/dto/type/ERole.java new file mode 100644 index 0000000..0f75441 --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/dto/type/ERole.java @@ -0,0 +1,14 @@ +package goormthon.team28.startup_valley.dto.type; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum ERole { + GUEST("GUEST", "ROLE_GUEST"), + USER("USER", "ROLE_USER"), + ADMIN("ADMIN", "ROLE_ADMIN"); + private final String role; + private final String securityRole; +} diff --git a/src/main/java/goormthon/team28/startup_valley/dto/type/EScrumStatus.java b/src/main/java/goormthon/team28/startup_valley/dto/type/EScrumStatus.java new file mode 100644 index 0000000..0d8c6db --- /dev/null +++ b/src/main/java/goormthon/team28/startup_valley/dto/type/EScrumStatus.java @@ -0,0 +1,12 @@ +package goormthon.team28.startup_valley.dto.type; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum EScrumStatus { + IN_PROGRESS("IN_PROGRESS"), + FINISH("FINISH"); + private final String status; +}