Skip to content

Commit

Permalink
merge: (#542) 외출 가능 시간, 동행자 Entity setting + DB 구조 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
ilyoil2 committed Feb 8, 2024
2 parents 174d79a + 38cfcf6 commit 407e7e8
Show file tree
Hide file tree
Showing 8 changed files with 223 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package team.aliens.dms.domain.outing.model

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

@Aggregate
data class CompanionForOuting(

val outingApplicationId: UUID,

val studentId: UUID

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

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

@Aggregate
class OutingAvailableTime(

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

override val schoolId: UUID,

val outingTime: LocalTime,

val arrivalTime: LocalTime,

val enabled: Boolean,

val dayOfWeek: DayOfWeek

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

import team.aliens.dms.persistence.student.entity.StudentJpaEntity
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_companion_for_outing")
class CompanionForOutingJpaEntity(

@EmbeddedId
val id: CompanionForOutingJpaEntityId,

@MapsId("outingApplicationId")
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "outing_application_id", columnDefinition = "BINARY(16)", nullable = false)
val outingApplication: OutingApplicationJpaEntity?,


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

)

@Embeddable
data class CompanionForOutingJpaEntityId(

@Column
val outingApplicationId: UUID,

@Column
val studentId: UUID,

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

import team.aliens.dms.persistence.BaseUUIDEntity
import team.aliens.dms.persistence.school.entity.SchoolJpaEntity
import java.time.LocalTime
import java.util.UUID
import jakarta.persistence.Entity
import jakarta.persistence.FetchType
import jakarta.persistence.Table
import jakarta.persistence.ManyToOne
import jakarta.persistence.Column
import jakarta.persistence.JoinColumn
import jakarta.persistence.EnumType
import jakarta.persistence.Enumerated
import java.time.DayOfWeek

@Entity
@Table(name = "tbl_outing_available_time")
class OutingAvailableTimeJpaEntity(

id: UUID?,

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

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

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

@Column(columnDefinition = "BIT(1)", nullable = false)
val enabled: Boolean,

@Column(columnDefinition = "VARCHAR(10)", nullable = false)
@Enumerated(EnumType.STRING)
val dayOfWeek: DayOfWeek

) : BaseUUIDEntity(id)
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
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.CompanionForOuting
import team.aliens.dms.persistence.GenericMapper
import team.aliens.dms.persistence.outing.entity.CompanionForOutingJpaEntity
import team.aliens.dms.persistence.outing.entity.CompanionForOutingJpaEntityId
import team.aliens.dms.persistence.outing.repository.OutingApplicationJpaRepository
import team.aliens.dms.persistence.student.repository.StudentJpaRepository

@Component
class CompanionForOutingMapper(
private val outingApplicationJpaRepository: OutingApplicationJpaRepository,
private val studentRepository: StudentJpaRepository
) : GenericMapper<CompanionForOuting, CompanionForOutingJpaEntity> {

override fun toDomain(entity: CompanionForOutingJpaEntity?): CompanionForOuting? {
return entity?.let {
CompanionForOuting(
outingApplicationId = it.outingApplication!!.id!!,
studentId = it.student!!.id!!
)
}
}

override fun toEntity(domain: CompanionForOuting): CompanionForOutingJpaEntity {
val id = CompanionForOutingJpaEntityId(
outingApplicationId = domain.outingApplicationId,
studentId = domain.studentId
)
val student = studentRepository.findByIdOrNull(domain.studentId)
val outingApplication = outingApplicationJpaRepository.findByIdOrNull(domain.outingApplicationId)

return CompanionForOutingJpaEntity(
id = id,
outingApplication = outingApplication,
student = student
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
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.OutingAvailableTime
import team.aliens.dms.persistence.GenericMapper
import team.aliens.dms.persistence.outing.entity.OutingAvailableTimeJpaEntity
import team.aliens.dms.persistence.school.repository.SchoolJpaRepository

@Component
class OutingAvailableTimeMapper (
private val schoolRepository: SchoolJpaRepository
) : GenericMapper<OutingAvailableTime, OutingAvailableTimeJpaEntity> {

override fun toDomain(entity: OutingAvailableTimeJpaEntity?): OutingAvailableTime? {
return entity?.let {
OutingAvailableTime(
id = it.id!!,
schoolId = it.school!!.id!!,
outingTime = it.outingTime,
arrivalTime = it.arrivalTime,
enabled = it.enabled,
dayOfWeek = it.dayOfWeek
)
}
}

override fun toEntity(domain: OutingAvailableTime): OutingAvailableTimeJpaEntity {
val school = schoolRepository.findByIdOrNull(domain.schoolId)

return OutingAvailableTimeJpaEntity(
id = domain.id,
school = school,
outingTime = domain.outingTime,
arrivalTime = domain.arrivalTime,
enabled = domain.enabled,
dayOfWeek = domain.dayOfWeek
)
}
}
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.CompanionForOutingJpaEntity
import team.aliens.dms.persistence.outing.entity.CompanionForOutingJpaEntityId

@Repository
interface CompanionForOutingJpaRepository : CrudRepository<CompanionForOutingJpaEntity, CompanionForOutingJpaEntityId>{
}
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.OutingAvailableTimeJpaEntity
import java.util.UUID

@Repository
interface OutingAvailableTimeJpaRepository : CrudRepository<OutingAvailableTimeJpaEntity, UUID> {
}

0 comments on commit 407e7e8

Please sign in to comment.