Skip to content

Commit

Permalink
[MERGE/#20] - 도메인 엔티티 작성
Browse files Browse the repository at this point in the history
[FEAT] #20 - 도메인 엔티티 작성
  • Loading branch information
ckkim817 authored Jul 10, 2024
2 parents 61daf8a + c7afb49 commit a3256f0
Show file tree
Hide file tree
Showing 23 changed files with 397 additions and 11 deletions.
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package org.sopt.seonyakServer.domain.appointment.model;

import jakarta.persistence.Column;
import jakarta.persistence.Convert;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import java.util.Map;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.sopt.seonyakServer.domain.member.model.Member;
import org.sopt.seonyakServer.domain.senior.model.Senior;
import org.sopt.seonyakServer.domain.util.JsonConverter;


@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "appointment")
public class Appointment {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "appointment_id")
private Long appointmentId;

@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "member_id", referencedColumnName = "member_id", nullable = false)
private Member member;

@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "senior_id", referencedColumnName = "senior_id", nullable = false)
private Senior senior;

@Enumerated(EnumType.STRING)
@Column(name = "appointment_status", nullable = false)
private AppointmentStatus appointmentStatus;

@Column(name = "time_list", columnDefinition = "jsonb", nullable = false)
@Convert(converter = JsonConverter.class)
private Map<String, Object> timeList;

@Column(name = "topic", length = 255)
private String topic;

@Column(name = "personal_topic", length = 255)
private String personalTopic;

@Column(name = "reject_reason", length = 255)
private String rejectReason;

@Column(name = "google_meet_link", length = 255)
private String googleMeetLink;

@Builder(access = AccessLevel.PRIVATE)
private Appointment(
Member member,
Senior senior,
AppointmentStatus appointmentStatus,
Map<String, Object> timeList
) {
this.member = member;
this.senior = senior;
this.appointmentStatus = appointmentStatus;
this.timeList = timeList;
}

public static Appointment createAppointment(
Member member,
Senior senior,
AppointmentStatus appointmentStatus,
Map<String, Object> timeList
) {
return Appointment.builder()
.member(member)
.senior(senior)
.appointmentStatus(appointmentStatus)
.timeList(timeList)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.sopt.seonyakServer.domain.appointment.model;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public enum AppointmentStatus {

PENDING("PENDING"),
SCHEDULED("SCHEDULED"),
PAST("PAST"),
REJECTED("REJECTED");

private final String appointmentStatus;
}
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -1,36 +1,79 @@
package org.sopt.seonyakServer.domain.member.model;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.sopt.seonyakServer.domain.senior.model.Senior;

@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "member")
public class Member {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "member_id")
private Long memberId;

@Enumerated(EnumType.STRING)
@Column(name = "social_type", nullable = false)
private SocialType socialType;

@Column(name = "social_id", nullable = false, length = 255)
private String socialId;

@Column(name = "email", nullable = false, length = 255)
private String email;

public static Member of(
@Column(name = "is_subscribed")
private Boolean isSubscribed;

@Column(name = "nickname", length = 20)
private String nickname;

@Column(name = "image", length = 255)
private String image;

@Column(name = "phone_number", length = 255)
private String phoneNumber;

@Column(name = "univ_name", length = 255)
private String univName;

@Column(name = "field", length = 255)
private String field;

@Column(name = "department", length = 255)
private String department;

@OneToOne(mappedBy = "member", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Senior senior;

@Builder(access = AccessLevel.PRIVATE)
private Member(
final SocialType socialType,
final String socialId,
final String email
) {
this.socialType = socialType;
this.socialId = socialId;
this.email = email;
}

public static Member createMember(
final SocialType socialType,
final String socialId,
final String email
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ public class MemberManagementService {

@Transactional
public Long createMember(final MemberInfoResponse memberInfoResponse) {
Member member = Member.of(
Member member = Member.createMember(
memberInfoResponse.socialType(),
memberInfoResponse.socialId(),
memberInfoResponse.email()
);

return memberRepository.save(member).getId();
return memberRepository.save(member).getMemberId();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public Long getMemberIdBySocialId(
() -> new CustomException(ErrorType.NOT_FOUND_MEMBER_ERROR)
);

return member.getId();
return member.getMemberId();
}

public LoginSuccessResponse getTokenByMemberId(final Long id) {
Expand Down
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package org.sopt.seonyakServer.domain.senior.model;

import jakarta.persistence.Column;
import jakarta.persistence.Convert;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import java.util.Map;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.sopt.seonyakServer.domain.member.model.Member;
import org.sopt.seonyakServer.domain.util.JsonConverter;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "senior")
public class Senior {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "senior_id")
private Long seniorId;

@OneToOne(optional = false)
@JoinColumn(name = "member_id", referencedColumnName = "member_id", nullable = false)
private Member member;

@Column(name = "business_card", nullable = false, length = 255)
private String businessCard;

@Column(name = "company", length = 255)
private String company;

@Column(name = "position", length = 255)
private String position;

@Column(name = "detail_position", nullable = false, length = 255)
private String detailPosition;

@Column(name = "level", nullable = false)
private Integer level;

@Column(name = "catchphrase", length = 255)
private String catchphrase;

@Column(name = "career", length = 255)
private String career;

@Column(name = "award", length = 255)
private String award;

@Column(name = "story", length = 255)
private String story;

@Column(name = "preffered_time_list", columnDefinition = "jsonb")
@Convert(converter = JsonConverter.class)
private Map<String, Object> prefferedTimeList;

@Builder(access = AccessLevel.PRIVATE)
private Senior(
Member member,
String businessCard,
String detailPosition,
Integer level
) {
this.member = member;
this.businessCard = businessCard;
this.detailPosition = detailPosition;
this.level = level;
}

public static Senior createSenior(
Member member,
String businessCard,
String detailPosition,
Integer level
) {
return Senior.builder()
.member(member)
.businessCard(businessCard)
.detailPosition(detailPosition)
.level(level)
.build();
}
}
Empty file.
Empty file.
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package org.sopt.seonyakServer.domain.university.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "department")
public class Department {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "dept_id")
private Long deptId;

@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "univ_id", referencedColumnName = "univ_id", nullable = false)
private University university;

@Column(name = "dept_name", nullable = false, length = 20)
private String deptName;

@Column(name = "is_closed", nullable = false)
private Boolean isClosed;

@Builder(access = AccessLevel.PRIVATE)
private Department(
final University university,
final String deptName,
final Boolean isClosed
) {
this.university = university;
this.deptName = deptName;
this.isClosed = isClosed;
}

public static Department createDepartment(
final University university,
final String deptName,
final Boolean isClosed
) {
return Department.builder()
.university(university)
.deptName(deptName)
.isClosed(isClosed)
.build();
}
}
Loading

0 comments on commit a3256f0

Please sign in to comment.