Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ADD] entity 초기 구현 #2

Draft
wants to merge 8 commits into
base: main
Choose a base branch
from
Draft
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ bin/
out/
!**/src/main/**/out/
!**/src/test/**/out/
src/test/resources/application.yml

### NetBeans ###
/nbproject/private/
Expand Down
9 changes: 6 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ repositories {
mavenCentral()
}

subprojects {
subprojects { //ktlint 적용 린트
repositories {
mavenCentral()
}
Expand All @@ -41,14 +41,17 @@ dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

compileKotlin {
compileKotlin {
kotlinOptions {
freeCompilerArgs = ['-Xjsr305=strict']
jvmTarget = '17'
}
}

allOpen {
//JPA 엔티티 만들 때 규칙이 있음 (final 클래스 안돼)
//코틀린은 클래스 기본이 final이야. @Entity 등 annotation이 붙이면 자동으로 final 아니게 설정
//이렇게 안 하면 모든 클래스에 open을 붙여야됨
annotation("jakarta.persistence.Entity")
annotation("jakarta.persistence.MappedSuperclass")
annotation("jakarta.persistence.Embeddable")
Expand All @@ -58,6 +61,6 @@ noArg {
annotation("jakarta.persistence.Entity")
}

test{
test {
useJUnitPlatform()
}
76 changes: 76 additions & 0 deletions src/main/kotlin/com/record/zooc/domain/entity/Account.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package com.record.zooc.domain.entity

import com.record.zooc.domain.entity.relation.UserFamilyRelation
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.OneToMany
import jakarta.persistence.Table

// @Builder가 필요한 상황 찾아보기
// reflection 개념 찾아보기

@Entity
@Table(name = "account")
class Account(
role: String,
everRecorded: Boolean = false,
refreshToken: String,
snsToken: String,
snsType: String,
userEmail: String? = null,
profileImage: String? = null
) {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long? = 0
protected set
// 객체의 id를 null로 두고 데이터베이스에 insert일어날 때 생성되기 때문에 nullable이어야됨

@Column
var role: String = role
protected set

@Column(name = "user_email")
var userEmail: String? = userEmail
protected set

@Column(name = "profile_image")
var profileImage: String? = profileImage
protected set

@Column(name = "ever_recorded")
var everRecorded: Boolean = everRecorded
protected set

@Column(name = "refresh_token")
var refreshToken: String = refreshToken
protected set

@Column(name = "sns_token")
var snsToken: String = snsToken
protected set

@Column(name = "sns_type")
var snsType: String = snsType
protected set

@OneToMany(mappedBy = "account")
var relationsWithFamily: ArrayList<UserFamilyRelation> = ArrayList()
protected set

fun updateUserRoleAndProfile(
role: String? = null,
profileImage: String? = null,
) {
// role이 null이 아니면 this에 role 저장
role?.let { this.role = it }
profileImage?.let { this.profileImage = it }
}

fun userRecordedForTheFirstTime() {
this.everRecorded = true
}
}
27 changes: 27 additions & 0 deletions src/main/kotlin/com/record/zooc/domain/entity/Family.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.record.zooc.domain.entity

import com.record.zooc.domain.entity.relation.UserFamilyRelation
import com.record.zooc.domain.entity.base.ModifiedTimeEntity
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.OneToMany

@Entity
class Family(
code: String,
) : ModifiedTimeEntity() {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long? = 0
protected set

@Column
val code: String = code

@OneToMany(mappedBy = "family")
var relationsWithUser: ArrayList<UserFamilyRelation> = ArrayList()
protected set
}
33 changes: 33 additions & 0 deletions src/main/kotlin/com/record/zooc/domain/entity/Pet.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.record.zooc.domain.entity

import com.record.zooc.domain.entity.relation.MemoryPetRelation
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.OneToMany
import jakarta.persistence.Table

@Entity
@Table(name = "pet")
class Pet(
name: String,
profileImage: String? = null
) {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long? = null

@Column
var name: String = name
protected set

@Column(name = "profile_image")
var profileImage: String? = profileImage
protected set

@OneToMany(mappedBy = "pet")
var relationsWithMemory: ArrayList<MemoryPetRelation> = ArrayList()
protected set
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.record.zooc.domain.entity.base

import com.fasterxml.jackson.annotation.JsonFormat
import jakarta.persistence.Column
import jakarta.persistence.EntityListeners
import jakarta.persistence.MappedSuperclass
import org.springframework.data.annotation.CreatedDate
import org.springframework.data.jpa.domain.support.AuditingEntityListener
import java.time.LocalDateTime

@MappedSuperclass
@EntityListeners(AuditingEntityListener::class)
abstract class CreatedTimeEntity {
@CreatedDate
@Column(nullable = false, updatable = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
var createdAt: LocalDateTime = LocalDateTime.now()
protected set
// var로 해야지 시간 저장될 때 오류 안남
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.record.zooc.domain.entity.base

import com.fasterxml.jackson.annotation.JsonFormat
import jakarta.persistence.Column
import jakarta.persistence.EntityListeners
import jakarta.persistence.MappedSuperclass
import org.springframework.data.annotation.LastModifiedDate
import org.springframework.data.jpa.domain.support.AuditingEntityListener
import java.time.LocalDateTime

@MappedSuperclass
@EntityListeners(AuditingEntityListener::class)
abstract class ModifiedTimeEntity : CreatedTimeEntity() {

@LastModifiedDate
@Column(nullable = false)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
var modifiedAt: LocalDateTime = LocalDateTime.now()
protected set
}
50 changes: 50 additions & 0 deletions src/main/kotlin/com/record/zooc/domain/entity/comment/Comment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.record.zooc.domain.entity.comment

import com.record.zooc.domain.entity.Account
import com.record.zooc.domain.entity.base.ModifiedTimeEntity
import jakarta.persistence.Column
import jakarta.persistence.DiscriminatorColumn
import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.Inheritance
import jakarta.persistence.InheritanceType
import jakarta.persistence.JoinColumn
import jakarta.persistence.OneToOne
import jakarta.persistence.Table

@DiscriminatorColumn(name = "comment_type")
@Entity
@Table(name = "comment")
@Inheritance(strategy = InheritanceType.JOINED)
class Comment(
content: String,
account: Account,
memoryId: Int,

) : ModifiedTimeEntity() {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long? = 0
protected set

@Column
var content: String = content
protected set

@OneToOne
@JoinColumn(name = "writer_id")
var writer: Account = account
protected set

@Column
var memoryId: Int = memoryId
protected set

fun updateContent(
content: String,
) {
this.content = content
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.record.zooc.domain.entity.comment

import com.record.zooc.domain.entity.Account
import jakarta.persistence.Column
import jakarta.persistence.DiscriminatorValue

@DiscriminatorValue("Emoji")
class Emojicomment(
content: String,
account: Account,
recordId: Int,
emoji: Int
) : Comment(content, account, recordId) {
@Column
var emoji: Int = emoji
protected set
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.record.zooc.domain.entity.comment

import com.record.zooc.domain.entity.Account
import jakarta.persistence.DiscriminatorValue

@DiscriminatorValue("Text")
class Textcomment(
content: String,
account: Account,
recordId: Int,
) : Comment(content, account, recordId)
50 changes: 50 additions & 0 deletions src/main/kotlin/com/record/zooc/domain/entity/memory/Memory.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.record.zooc.domain.entity.memory

import com.record.zooc.domain.entity.Account
import com.record.zooc.domain.entity.relation.MemoryPetRelation
import com.record.zooc.domain.entity.base.ModifiedTimeEntity
import jakarta.persistence.Column
import jakarta.persistence.DiscriminatorColumn
import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.Inheritance
import jakarta.persistence.InheritanceType
import jakarta.persistence.JoinColumn
import jakarta.persistence.OneToMany
import jakarta.persistence.OneToOne
import jakarta.persistence.Table

@DiscriminatorColumn(name = "memory_type")
@Entity
@Table(name = "memory")
@Inheritance(strategy = InheritanceType.JOINED)
class Memory(
image: String,
content: String,
writer: Account
) : ModifiedTimeEntity() {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long? = 0
protected set

@Column
var image: String = image
protected set

@Column
var content: String = content
protected set

@OneToMany(mappedBy = "memory")
@JoinColumn(name = "memory_pet")
var relationsWithPet: ArrayList<MemoryPetRelation> = ArrayList()
protected set

@OneToOne
@JoinColumn(name = "writer_id")
var writer: Account = writer
protected set
}
23 changes: 23 additions & 0 deletions src/main/kotlin/com/record/zooc/domain/entity/memory/Mission.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.record.zooc.domain.entity.memory

import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id
import jakarta.persistence.Table

@Entity
@Table(name = "mission")
class Mission(
missionContent: String
) {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long? = 0
protected set

@Column(name = "mission_content")
var missionContent: String = missionContent
protected set
}
Loading