Skip to content

Commit

Permalink
✨ [STMT-254] 활동 도메인 영속화를 위한 JPA 엔티티 및 컨버터 정의
Browse files Browse the repository at this point in the history
  • Loading branch information
zxcv9203 committed Apr 15, 2024
1 parent 4cfdf0e commit c2278ea
Show file tree
Hide file tree
Showing 6 changed files with 194 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.stumeet.server.activity.adapter.out.mapper;

import com.stumeet.server.activity.domain.exception.NotExistsActivityStatusException;
import com.stumeet.server.activity.domain.model.ActivityStatus;
import com.stumeet.server.activity.domain.model.AssignmentStatus;
import com.stumeet.server.activity.domain.model.DefaultStatus;
import com.stumeet.server.activity.domain.model.MeetStatus;
import jakarta.persistence.AttributeConverter;

import java.util.stream.Stream;

public class ActivityStatusConverter implements AttributeConverter<ActivityStatus, String> {
@Override
public String convertToDatabaseColumn(ActivityStatus activityStatus) {
return activityStatus.getStatus();
}

@Override
public ActivityStatus convertToEntityAttribute(String s) {
return Stream.of(MeetStatus.values(), DefaultStatus.values(), AssignmentStatus.values())
.flatMap(Stream::of)
.filter(activityStatus -> activityStatus.getStatus().equals(s))
.findAny()
.orElseThrow(() -> new NotExistsActivityStatusException(s));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.stumeet.server.activity.adapter.out.model;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Comment;

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("활동 이미지 id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "activity_id")
@Comment("활동")
private ActivityJpaEntity activity;

@Column(name = "url", nullable = false, length = 500)
@Comment("이미지 url")
private String image;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.stumeet.server.activity.adapter.out.model;
import com.stumeet.server.activity.domain.model.ActivityCategory;
import com.stumeet.server.common.model.BaseTimeEntity;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Comment;

import java.time.LocalDateTime;

@Entity
@Table(name = "activity")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Builder
@Getter
public class ActivityJpaEntity extends BaseTimeEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("활동 id")
private Long id;

@ManyToOne
@JoinColumn(name = "study_id")
@Comment("연관된 스터디")
private ActivityLinkedStudyJpaEntity study;

@OneToOne
@JoinColumn(name = "member_id")
@Comment("연관된 멤버")
private ActivityMemberJpaEntity member;

@Column(name = "category", nullable = false)
@Enumerated(EnumType.STRING)
@Comment("활동 카테고리")
private ActivityCategory category;

@Column(name = "title", nullable = false)
@Comment("활동 제목")
private String title;

@Column(name = "content", nullable = false, length = 500)
@Comment("활동 내용")
private String content;

@Column(name = "is_notice", nullable = false)
@Comment("공지 여부")
private boolean isNotice;

@Column(name = "start_date", nullable = false)
@Comment("활동 시작 날짜")
private LocalDateTime startDate;

@Column(name = "end_date", nullable = false)
@Comment("활동 종료 날짜")
private LocalDateTime endDate;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.stumeet.server.activity.adapter.out.model;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Comment;

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("스터디 id")
private Long id;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.stumeet.server.activity.adapter.out.model;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Comment;

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("활동 멤버 id")
private Long id;

@Column(name = "name", nullable = false)
@Comment("멤버 이름")
private String name;

@Column(name = "image", nullable = false)
@Comment("멤버 이미지")
private String image;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.stumeet.server.activity.adapter.out.model;

import com.stumeet.server.activity.adapter.out.mapper.ActivityStatusConverter;
import com.stumeet.server.activity.domain.model.ActivityStatus;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Comment;

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Comment("활동 참여자 id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "activity_id")
@Comment("참여하는 활동")
private ActivityJpaEntity activity;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
@Comment("참여하는 멤버")
private ActivityMemberJpaEntity member;

@Convert(converter = ActivityStatusConverter.class)
@Comment("활동 참여자 상태")
private ActivityStatus status;
}

0 comments on commit c2278ea

Please sign in to comment.