Skip to content

Commit

Permalink
merge: (#538) 외출 신청, 타입Entity setting + DB 구조 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
ilyoil2 committed Feb 5, 2024
2 parents 6a71fca + ae07b9a commit 174d79a
Show file tree
Hide file tree
Showing 11 changed files with 292 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package team.aliens.dms.domain.outing.exception

import team.aliens.dms.common.error.DmsException
import team.aliens.dms.domain.outing.exception.error.OutingErrorCode

object OutingNotFoundException : DmsException(
OutingErrorCode.OUTING_NOT_FOUND
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package team.aliens.dms.domain.outing.exception.error

import team.aliens.dms.common.error.ErrorProperty
import team.aliens.dms.common.error.ErrorStatus

enum class OutingErrorCode(
private val status: Int,
private val message: String,
private val sequence: Int
) : ErrorProperty {

OUTING_NOT_FOUND(ErrorStatus.NOT_FOUND, "Outing Not Found", 1)
;

override fun status(): Int = status
override fun message(): String = message
override fun code(): String = "OUTING-$status-$sequence"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package team.aliens.dms.domain.outing.model

import team.aliens.dms.common.annotation.Aggregate
import team.aliens.dms.common.model.SchoolIdDomain
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
import java.util.UUID

@Aggregate
data class OutingApplication(

val id: UUID = UUID(0, 0),

val studentId: UUID,

val createdAt: LocalDateTime,

val outAt: LocalDate,

val outingTime: LocalTime,

val arrivalTime: LocalTime,

val status: OutingStatus,

val reason: String,

val destination: String,

val outingTypeTitle: String,

override val schoolId: UUID

) : SchoolIdDomain
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package team.aliens.dms.domain.outing.model

enum class OutingStatus{
REQUESTED,
APPROVED,
REJECTED,
OUTING,
DONE
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package team.aliens.dms.domain.outing.model

import team.aliens.dms.common.annotation.Aggregate
import team.aliens.dms.common.model.SchoolIdDomain
import java.util.UUID

@Aggregate
data class OutingType(

val title: String,

override val schoolId: UUID

) : SchoolIdDomain
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package team.aliens.dms.persistence.outing.entity

import jakarta.persistence.Entity
import team.aliens.dms.domain.outing.model.OutingStatus
import team.aliens.dms.persistence.BaseEntity
import team.aliens.dms.persistence.student.entity.StudentJpaEntity
import jakarta.persistence.JoinColumn
import jakarta.persistence.JoinColumns
import java.util.UUID
import jakarta.persistence.ManyToOne
import jakarta.persistence.Table
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
import jakarta.persistence.Column
import jakarta.persistence.FetchType

@Entity
@Table(name = "tbl_outing_application")
class OutingApplicationJpaEntity (

id: UUID?,

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "student_id", columnDefinition = "BINARY(16)", nullable = false)
val student: StudentJpaEntity?,

override val createdAt: LocalDateTime,

@Column(columnDefinition = "DATE", nullable = false)
val outAt: LocalDate,

@Column(columnDefinition = "TIME", nullable = false)
val outingTime: LocalTime,

@Column(columnDefinition = "TIME", nullable = false)
val arrivalTime: LocalTime,

@Column(columnDefinition = "VARCHAR(9)", nullable = false)
val status: OutingStatus,

@Column(columnDefinition = "VARCHAR(100)", nullable = false)
val reason: String,

@Column(columnDefinition = "VARCHAR(15)", nullable = false)
val destination: String,

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns(
JoinColumn(name = "outing_type_title", referencedColumnName = "title", nullable = false),
JoinColumn(name = "outing_type_school_id", referencedColumnName = "school_id", columnDefinition = "BINARY(16)", nullable = false),
)
val outingType: OutingTypeJpaEntity?

) : BaseEntity(id)
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package team.aliens.dms.persistence.outing.entity

import team.aliens.dms.persistence.school.entity.SchoolJpaEntity
import java.io.Serializable
import java.util.UUID
import jakarta.persistence.EmbeddedId
import jakarta.persistence.Entity
import jakarta.persistence.FetchType
import jakarta.persistence.Table
import jakarta.persistence.ManyToOne
import jakarta.persistence.MapsId
import jakarta.persistence.Column
import jakarta.persistence.Embeddable
import jakarta.persistence.JoinColumn

@Entity
@Table(name = "tbl_outing_type")
class OutingTypeJpaEntity(

@EmbeddedId
val id: OutingTypeJpaEntityId,

@MapsId("schoolId")
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "school_id", columnDefinition = "BINARY(16)", nullable = false)
val school: SchoolJpaEntity?,

)

@Embeddable
data class OutingTypeJpaEntityId(

@Column(columnDefinition = "VARCHAR(20)" ,nullable = false)
val title: String,

@Column(nullable = false)
val schoolId: UUID

) : Serializable
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package team.aliens.dms.persistence.outing.mapper

import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Component
import team.aliens.dms.domain.outing.model.OutingApplication
import team.aliens.dms.persistence.GenericMapper
import team.aliens.dms.persistence.outing.entity.OutingApplicationJpaEntity
import team.aliens.dms.persistence.outing.entity.OutingTypeJpaEntityId
import team.aliens.dms.persistence.outing.repository.OutingTypeJpaRepository
import team.aliens.dms.persistence.student.repository.StudentJpaRepository

@Component
class OutingApplicationMapper(
private val outingTypeRepository: OutingTypeJpaRepository,
private val studentRepository: StudentJpaRepository,
) : GenericMapper<OutingApplication, OutingApplicationJpaEntity> {

override fun toDomain(entity: OutingApplicationJpaEntity?): OutingApplication? {
return entity?.let {
OutingApplication(
id = it.id!!,
studentId = it.student!!.id!!,
createdAt = it.createdAt,
outAt = it.outAt,
outingTime = it.outingTime,
arrivalTime = it.arrivalTime,
status = it.status,
reason = it.reason,
destination = it.destination,
outingTypeTitle = it.outingType!!.id.title,
schoolId = it.outingType!!.id.schoolId
)
}
}

override fun toEntity(domain: OutingApplication): OutingApplicationJpaEntity {
val id = OutingTypeJpaEntityId(
title = domain.outingTypeTitle,
schoolId = domain.schoolId
)
val outingType = outingTypeRepository.findByIdOrNull(id)
val student = studentRepository.findByIdOrNull(domain.studentId)

return OutingApplicationJpaEntity(
id = domain.id,
student = student,
createdAt = domain.createdAt,
outAt = domain.outAt,
outingTime = domain.outingTime,
arrivalTime = domain.arrivalTime,
status = domain.status,
reason = domain.reason,
destination = domain.destination,
outingType = outingType
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package team.aliens.dms.persistence.outing.mapper

import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Component
import team.aliens.dms.domain.outing.model.OutingType
import team.aliens.dms.persistence.GenericMapper
import team.aliens.dms.persistence.outing.entity.OutingTypeJpaEntity
import team.aliens.dms.persistence.outing.entity.OutingTypeJpaEntityId
import team.aliens.dms.persistence.school.repository.SchoolJpaRepository

@Component
class OutingTypeMapper (
private val schoolRepository: SchoolJpaRepository
) : GenericMapper<OutingType, OutingTypeJpaEntity> {

override fun toDomain(entity: OutingTypeJpaEntity?): OutingType? {
return entity?.let {
OutingType(
title = it.id.title,
schoolId = it.id.schoolId
)
}
}

override fun toEntity(domain: OutingType): OutingTypeJpaEntity {
val school = schoolRepository.findByIdOrNull(domain.schoolId)

return OutingTypeJpaEntity(
id = OutingTypeJpaEntityId(
title = domain.title,
schoolId = domain.schoolId
),
school = school
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package team.aliens.dms.persistence.outing.repository

import org.springframework.data.repository.CrudRepository
import org.springframework.stereotype.Repository
import team.aliens.dms.persistence.outing.entity.OutingApplicationJpaEntity
import team.aliens.dms.persistence.outing.entity.OutingTypeJpaEntityId
import java.util.UUID

@Repository
interface OutingApplicationJpaRepository : CrudRepository<OutingApplicationJpaEntity, UUID> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package team.aliens.dms.persistence.outing.repository

import org.springframework.data.repository.CrudRepository
import org.springframework.stereotype.Repository
import team.aliens.dms.persistence.outing.entity.OutingTypeJpaEntity
import team.aliens.dms.persistence.outing.entity.OutingTypeJpaEntityId

@Repository
interface OutingTypeJpaRepository : CrudRepository<OutingTypeJpaEntity, OutingTypeJpaEntityId> {
}

0 comments on commit 174d79a

Please sign in to comment.