diff --git a/src/main/kotlin/com/yourssu/scouter/ScouterApplication.kt b/src/main/kotlin/com/yourssu/scouter/ScouterApplication.kt index 9ce86e4..dd5dd45 100644 --- a/src/main/kotlin/com/yourssu/scouter/ScouterApplication.kt +++ b/src/main/kotlin/com/yourssu/scouter/ScouterApplication.kt @@ -7,5 +7,5 @@ import org.springframework.boot.runApplication class ScouterApplication fun main(args: Array) { - runApplication(*args) + runApplication(*args) } diff --git a/src/main/kotlin/com/yourssu/scouter/ats/application/domain/applicant/CreateApplicantRequest.kt b/src/main/kotlin/com/yourssu/scouter/ats/application/domain/applicant/CreateApplicantRequest.kt index a83fbcc..7236744 100644 --- a/src/main/kotlin/com/yourssu/scouter/ats/application/domain/applicant/CreateApplicantRequest.kt +++ b/src/main/kotlin/com/yourssu/scouter/ats/application/domain/applicant/CreateApplicantRequest.kt @@ -1,8 +1,8 @@ package com.yourssu.scouter.ats.application.domain.applicant import com.fasterxml.jackson.annotation.JsonFormat -import com.yourssu.scouter.ats.business.support.utils.ApplicantStateConverter import com.yourssu.scouter.ats.business.domain.applicant.CreateApplicantCommand +import com.yourssu.scouter.ats.business.support.utils.ApplicantStateConverter import jakarta.validation.constraints.Email import jakarta.validation.constraints.NotBlank import jakarta.validation.constraints.NotNull diff --git a/src/main/kotlin/com/yourssu/scouter/ats/application/domain/applicant/UpdateApplicantRequest.kt b/src/main/kotlin/com/yourssu/scouter/ats/application/domain/applicant/UpdateApplicantRequest.kt index f92cf6c..7517b13 100644 --- a/src/main/kotlin/com/yourssu/scouter/ats/application/domain/applicant/UpdateApplicantRequest.kt +++ b/src/main/kotlin/com/yourssu/scouter/ats/application/domain/applicant/UpdateApplicantRequest.kt @@ -1,8 +1,8 @@ package com.yourssu.scouter.ats.application.domain.applicant import com.fasterxml.jackson.annotation.JsonFormat -import com.yourssu.scouter.ats.business.support.utils.ApplicantStateConverter import com.yourssu.scouter.ats.business.domain.applicant.UpdateApplicantCommand +import com.yourssu.scouter.ats.business.support.utils.ApplicantStateConverter import jakarta.validation.constraints.Pattern import java.time.LocalDate diff --git a/src/main/kotlin/com/yourssu/scouter/ats/implement/domain/applicant/Applicant.kt b/src/main/kotlin/com/yourssu/scouter/ats/implement/domain/applicant/Applicant.kt index 3493abb..33e09db 100644 --- a/src/main/kotlin/com/yourssu/scouter/ats/implement/domain/applicant/Applicant.kt +++ b/src/main/kotlin/com/yourssu/scouter/ats/implement/domain/applicant/Applicant.kt @@ -32,8 +32,4 @@ class Applicant( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "Applicant(id=$id, name='$name', email='$email', phoneNumber='$phoneNumber', age='$age', department=$department, studentId='$studentId', part=$part, state=$state, applicationDate=$applicationDateTime, applicationSemester=$applicationSemester, academicSemester='$academicSemester')" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/ats/storage/domain/applicant/ApplicantEntity.kt b/src/main/kotlin/com/yourssu/scouter/ats/storage/domain/applicant/ApplicantEntity.kt index 00059bd..757acd9 100644 --- a/src/main/kotlin/com/yourssu/scouter/ats/storage/domain/applicant/ApplicantEntity.kt +++ b/src/main/kotlin/com/yourssu/scouter/ats/storage/domain/applicant/ApplicantEntity.kt @@ -107,8 +107,4 @@ class ApplicantEntity( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "ApplicantEntity(id=$id, name='$name', email='$email', phoneNumber='$phoneNumber', age='$age', department=$department, studentId='$studentId', part=$part, state=$state, applicationDate=$applicationDateTime, applicationSemester=$applicationSemester)" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/common/application/domain/department/DepartmentController.kt b/src/main/kotlin/com/yourssu/scouter/common/application/domain/department/DepartmentController.kt index 70a1614..8c8449e 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/application/domain/department/DepartmentController.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/application/domain/department/DepartmentController.kt @@ -12,7 +12,7 @@ class DepartmentController( private val departmentService: DepartmentService, ) { - @GetMapping ("/departments") + @GetMapping("/departments") fun readAll(): ResponseEntity> { val result: ReadDepartmentsResult = departmentService.readAll() val response: List = result.departmentDtos.map { ReadDepartmentsResponse.from(it) } diff --git a/src/main/kotlin/com/yourssu/scouter/common/application/domain/semester/ReadSemesterResponse.kt b/src/main/kotlin/com/yourssu/scouter/common/application/domain/semester/ReadSemesterResponse.kt index 398dac8..50ec2e4 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/application/domain/semester/ReadSemesterResponse.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/application/domain/semester/ReadSemesterResponse.kt @@ -1,7 +1,7 @@ package com.yourssu.scouter.common.application.domain.semester -import com.yourssu.scouter.common.business.support.utils.SemesterConverter import com.yourssu.scouter.common.business.domain.semester.SemesterDto +import com.yourssu.scouter.common.business.support.utils.SemesterConverter data class ReadSemesterResponse( val semesterId: Long, diff --git a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/basetime/BaseCreateTime.kt b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/basetime/BaseCreateTime.kt new file mode 100644 index 0000000..3ea5d82 --- /dev/null +++ b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/basetime/BaseCreateTime.kt @@ -0,0 +1,7 @@ +package com.yourssu.scouter.common.implement.domain.basetime + +import java.time.LocalDateTime + +open class BaseCreateTime( + val createdTime: LocalDateTime? = null +) diff --git a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/basetime/BaseTime.kt b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/basetime/BaseTime.kt new file mode 100644 index 0000000..7d849d0 --- /dev/null +++ b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/basetime/BaseTime.kt @@ -0,0 +1,8 @@ +package com.yourssu.scouter.common.implement.domain.basetime + +import java.time.LocalDateTime + +open class BaseTime( + createdTime: LocalDateTime? = null, + val updatedTime: LocalDateTime? = null +) : BaseCreateTime(createdTime) diff --git a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/department/Department.kt b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/department/Department.kt index b3e742e..fdfbc65 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/department/Department.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/department/Department.kt @@ -18,8 +18,4 @@ class Department( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "Department(id=$id, collegeId=$collegeId, name='$name')" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/division/Division.kt b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/division/Division.kt index ec97d72..386deff 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/division/Division.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/division/Division.kt @@ -3,7 +3,12 @@ package com.yourssu.scouter.common.implement.domain.division class Division( val id: Long? = null, val name: String, -) { + val sortPriority: Int, +) : Comparable { + + override fun compareTo(other: Division): Int { + return this.sortPriority.compareTo(other.sortPriority) + } override fun equals(other: Any?): Boolean { if (this === other) return true @@ -17,8 +22,4 @@ class Division( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "Division(id=$id, name='$name')" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/part/Part.kt b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/part/Part.kt index 618a9ed..7ea5a27 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/part/Part.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/part/Part.kt @@ -6,7 +6,17 @@ class Part( val id: Long? = null, val division: Division, val name: String, -) { + val sortPriority: Int, +) : Comparable { + + override fun compareTo(other: Part): Int { + val divisionCompare = this.division.compareTo(other.division) + if (divisionCompare != 0) { + return divisionCompare + } + + return this.sortPriority.compareTo(other.sortPriority) + } override fun equals(other: Any?): Boolean { if (this === other) return true @@ -20,8 +30,4 @@ class Part( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "Part(id=$id, division=$division, name='$name')" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/semester/Semester.kt b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/semester/Semester.kt index f789927..ccafa06 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/semester/Semester.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/semester/Semester.kt @@ -7,8 +7,15 @@ class Semester( val id: Long? = null, val year: Year, val term: Term, -) { - constructor(year: Int, term: Int) : this(null, Year.of(year), Term.from(term)) +) : Comparable { + constructor( + year: Int, + term: Int + ) : this( + id = null, + year = Year.of(year), + term = Term.from(term) + ) companion object { fun of(date: LocalDate): Semester = Semester( @@ -39,6 +46,15 @@ class Semester( return Semester(year = year, term = Term.FALL) } + override fun compareTo(other: Semester): Int { + val yearCompare = this.year.compareTo(other.year) + if (yearCompare != 0) { + return yearCompare + } + + return this.term.intValue.compareTo(other.term.intValue) + } + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -51,8 +67,4 @@ class Semester( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "Semester(id=$id, year=$year, semester=$term)" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/semester/Term.kt b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/semester/Term.kt index 0c45d2c..aaa1438 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/semester/Term.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/semester/Term.kt @@ -9,7 +9,7 @@ enum class Term(val intValue: Int, val targetMonthRange: IntRange) { companion object { fun of(date: LocalDate): Term { - return entries.first {date.monthValue in it.targetMonthRange } + return entries.first { date.monthValue in it.targetMonthRange } } fun of(term: Int): Term { diff --git a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/user/User.kt b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/user/User.kt index 7211c92..ae5072c 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/implement/domain/user/User.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/implement/domain/user/User.kt @@ -42,10 +42,6 @@ class User( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "User(id=$id, userInfo=$userInfo, tokenInfo=$tokenInfo)" - } } class UserInfo( diff --git a/src/main/kotlin/com/yourssu/scouter/common/implement/support/initialization/DivisionsAndPartsInitializer.kt b/src/main/kotlin/com/yourssu/scouter/common/implement/support/initialization/DivisionsAndPartsInitializer.kt index 4e4caf2..6526c99 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/implement/support/initialization/DivisionsAndPartsInitializer.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/implement/support/initialization/DivisionsAndPartsInitializer.kt @@ -29,35 +29,35 @@ class DivisionsAndPartsInitializer( private fun alreadyInitialized() = divisionRepository.count() != 0L private fun initialize_운영() { - val division = divisionRepository.save(Division(name = "운영")) + val division = divisionRepository.save(Division(name = "운영", sortPriority = 1)) val parts = mutableListOf() - parts.add(Part(division = division, name = "Head lead")) - parts.add(Part(division = division, name = "finance")) - parts.add(Part(division = division, name = "HR")) - parts.add(Part(division = division, name = "Contents Marketing")) - parts.add(Part(division = division, name = "legal")) - parts.add(Part(division = division, name = "PM")) + parts.add(Part(division = division, name = "Head lead", sortPriority = 1)) + parts.add(Part(division = division, name = "finance", sortPriority = 2)) + parts.add(Part(division = division, name = "HR", sortPriority = 3)) + parts.add(Part(division = division, name = "Contents Marketing", sortPriority = 34)) + parts.add(Part(division = division, name = "legal", sortPriority = 5)) + parts.add(Part(division = division, name = "PM", sortPriority = 6)) partRepository.saveAll(parts) } private fun initialize_개발() { - val division = divisionRepository.save(Division(name = "개발")) + val division = divisionRepository.save(Division(name = "개발", sortPriority = 2)) val parts = mutableListOf() - parts.add(Part(division = division, name = "Backend")) - parts.add(Part(division = division, name = "Android")) - parts.add(Part(division = division, name = "iOS")) - parts.add(Part(division = division, name = "Web-frontend")) + parts.add(Part(division = division, name = "Backend", sortPriority = 1)) + parts.add(Part(division = division, name = "Android", sortPriority = 2)) + parts.add(Part(division = division, name = "iOS", sortPriority = 3)) + parts.add(Part(division = division, name = "Web-frontend", sortPriority = 4)) partRepository.saveAll(parts) } private fun initialize_디자인() { - val division = divisionRepository.save(Division(name = "디자인")) + val division = divisionRepository.save(Division(name = "디자인", sortPriority = 3)) val parts = mutableListOf() - parts.add(Part(division = division, name = "Product Design")) + parts.add(Part(division = division, name = "Product Design", sortPriority = 1)) partRepository.saveAll(parts) } diff --git a/src/main/kotlin/com/yourssu/scouter/common/storage/domain/basetime/BaseCreateTimeEntity.kt b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/basetime/BaseCreateTimeEntity.kt new file mode 100644 index 0000000..63a9b42 --- /dev/null +++ b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/basetime/BaseCreateTimeEntity.kt @@ -0,0 +1,18 @@ +package com.yourssu.scouter.common.storage.domain.basetime + +import jakarta.persistence.Column +import jakarta.persistence.EntityListeners +import jakarta.persistence.MappedSuperclass +import java.time.LocalDateTime +import org.springframework.data.annotation.CreatedDate +import org.springframework.data.jpa.domain.support.AuditingEntityListener + +@EntityListeners(AuditingEntityListener::class) +@MappedSuperclass +class BaseCreateTimeEntity { + + @CreatedDate + @Column(updatable = false, nullable = false) + var createdTime: LocalDateTime? = null + protected set +} diff --git a/src/main/kotlin/com/yourssu/scouter/common/storage/domain/basetime/BaseTimeEntity.kt b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/basetime/BaseTimeEntity.kt new file mode 100644 index 0000000..7e34650 --- /dev/null +++ b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/basetime/BaseTimeEntity.kt @@ -0,0 +1,18 @@ +package com.yourssu.scouter.common.storage.domain.basetime + +import jakarta.persistence.Column +import jakarta.persistence.EntityListeners +import jakarta.persistence.MappedSuperclass +import java.time.LocalDateTime +import org.springframework.data.annotation.LastModifiedDate +import org.springframework.data.jpa.domain.support.AuditingEntityListener + +@EntityListeners(AuditingEntityListener::class) +@MappedSuperclass +class BaseTimeEntity : BaseCreateTimeEntity() { + + @LastModifiedDate + @Column(nullable = false) + var updatedTime: LocalDateTime? = null + protected set +} diff --git a/src/main/kotlin/com/yourssu/scouter/common/storage/domain/college/CollegeEntity.kt b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/college/CollegeEntity.kt index 9b96167..393a1e8 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/storage/domain/college/CollegeEntity.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/college/CollegeEntity.kt @@ -44,8 +44,4 @@ class CollegeEntity( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "CollegeEntity(id=$id, name='$name')" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/common/storage/domain/department/DepartmentEntity.kt b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/department/DepartmentEntity.kt index f802ed7..9fef1dd 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/storage/domain/department/DepartmentEntity.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/department/DepartmentEntity.kt @@ -23,6 +23,14 @@ class DepartmentEntity( val name: String, ) { + companion object { + fun from(department: Department) = DepartmentEntity( + id = department.id, + collegeId = department.collegeId, + name = department.name, + ) + } + fun toDomain() = Department( id = id, collegeId = collegeId, @@ -41,16 +49,4 @@ class DepartmentEntity( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "DepartmentEntity(id=$id, collegeId=$collegeId, name='$name')" - } - - companion object { - fun from(department: Department) = DepartmentEntity( - id = department.id, - collegeId = department.collegeId, - name = department.name, - ) - } } diff --git a/src/main/kotlin/com/yourssu/scouter/common/storage/domain/division/DivisionEntity.kt b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/division/DivisionEntity.kt index f47e07f..1151262 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/storage/domain/division/DivisionEntity.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/division/DivisionEntity.kt @@ -18,18 +18,23 @@ class DivisionEntity( @Column(nullable = false, unique = true) val name: String, + + @Column(nullable = false) + val sortPriority: Int, ) { companion object { fun from(division: Division): DivisionEntity = DivisionEntity( id = division.id, name = division.name, + sortPriority = division.sortPriority, ) } fun toDomain() = Division( id = id, name = name, + sortPriority = sortPriority, ) override fun equals(other: Any?): Boolean { @@ -44,8 +49,4 @@ class DivisionEntity( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "DivisionEntity(id=$id, name='$name')" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/common/storage/domain/part/PartEntity.kt b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/part/PartEntity.kt index 8cd5c0e..8f59f5b 100644 --- a/src/main/kotlin/com/yourssu/scouter/common/storage/domain/part/PartEntity.kt +++ b/src/main/kotlin/com/yourssu/scouter/common/storage/domain/part/PartEntity.kt @@ -27,6 +27,9 @@ class PartEntity( @Column(nullable = false, unique = true) val name: String, + + @Column(nullable = false) + val sortPriority: Int, ) { companion object { @@ -34,6 +37,7 @@ class PartEntity( id = part.id, division = DivisionEntity.from(part.division), name = part.name, + sortPriority = part.sortPriority, ) } @@ -41,6 +45,7 @@ class PartEntity( id = id, division = division.toDomain(), name = name, + sortPriority = sortPriority, ) override fun equals(other: Any?): Boolean { @@ -55,8 +60,4 @@ class PartEntity( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "PartEntity(id=$id, division=$division, name='$name')" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/common/storage/support/configuration/JpaConfiguration.kt b/src/main/kotlin/com/yourssu/scouter/common/storage/support/configuration/JpaConfiguration.kt new file mode 100644 index 0000000..31e09a1 --- /dev/null +++ b/src/main/kotlin/com/yourssu/scouter/common/storage/support/configuration/JpaConfiguration.kt @@ -0,0 +1,8 @@ +package com.yourssu.scouter.common.storage.support.configuration + +import org.springframework.context.annotation.Configuration +import org.springframework.data.jpa.repository.config.EnableJpaAuditing + +@Configuration +@EnableJpaAuditing +class JpaConfiguration diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/CreateMemberCommand.kt b/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/CreateMemberCommand.kt index 4f4c02e..941c63c 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/CreateMemberCommand.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/CreateMemberCommand.kt @@ -6,6 +6,7 @@ import com.yourssu.scouter.hrms.implement.domain.member.Member import com.yourssu.scouter.hrms.implement.domain.member.MemberRole import com.yourssu.scouter.hrms.implement.domain.member.MemberState import java.time.LocalDate +import java.time.LocalDateTime data class CreateMemberCommand( val name: String, @@ -30,12 +31,13 @@ data class CreateMemberCommand( birthDate = birthDate, department = department, studentId = studentId, - parts = parts, + parts = parts.toSortedSet(), role = role, nicknameEnglish = nicknameEnglish, nicknameKorean = nicknameKorean, state = state, joinDate = joinDate, + stateUpdatedTime = LocalDateTime.now(), note = note, ) } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/MemberDto.kt b/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/MemberDto.kt index 8a76b70..4eac1d3 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/MemberDto.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/MemberDto.kt @@ -6,6 +6,7 @@ import com.yourssu.scouter.hrms.implement.domain.member.Member import com.yourssu.scouter.hrms.implement.domain.member.MemberRole import com.yourssu.scouter.hrms.implement.domain.member.MemberState import java.time.LocalDate +import java.time.LocalDateTime data class MemberDto( val id: Long, @@ -22,6 +23,9 @@ data class MemberDto( val state: MemberState, val joinDate: LocalDate, val note: String, + val stateUpdatedTime: LocalDateTime, + val createdTime: LocalDateTime, + val updatedTime: LocalDateTime, ) { companion object { @@ -40,6 +44,9 @@ data class MemberDto( state = member.state, joinDate = member.joinDate, note = member.note, + stateUpdatedTime = member.stateUpdatedTime, + createdTime = member.createdTime!!, + updatedTime = member.updatedTime!!, ) } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/MemberService.kt b/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/MemberService.kt index 9c263c4..2e1c7ce 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/MemberService.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/business/domain/member/MemberService.kt @@ -19,6 +19,7 @@ import com.yourssu.scouter.hrms.implement.domain.member.MemberState import com.yourssu.scouter.hrms.implement.domain.member.MemberWriter import com.yourssu.scouter.hrms.implement.domain.member.WithdrawnMember import java.time.LocalDate +import java.time.LocalDateTime import org.springframework.stereotype.Service @Service @@ -42,49 +43,49 @@ class MemberService( } fun readAllActive(): List { - val members: List = memberReader.readAllActive() + val members: List = memberReader.readAllActive().sorted() return members.map { ActiveMemberDto.from(it) } } fun readAllInactive(): List { - val members: List = memberReader.readAllInactive() + val members: List = memberReader.readAllInactive().sorted() return members.map { InactiveMemberDto.from(it) } } fun readAllGraduated(): List { - val members: List = memberReader.readAllGraduated() + val members: List = memberReader.readAllGraduated().sorted() return members.map { GraduatedMemberDto.from(it) } } fun readAllWithdrawn(): List { - val members: List = memberReader.readAllWithdrawn() + val members: List = memberReader.readAllWithdrawn().sorted() return members.map { WithdrawnMemberDto.from(it) } } fun searchAllActiveByNameOrNickname(query: String): List { - val members: List = memberReader.searchAllActiveByNameOrNickname(query) + val members: List = memberReader.searchAllActiveByNameOrNickname(query).sorted() return members.map { ActiveMemberDto.from(it) } } fun searchAllInactiveByNameOrNickname(query: String): List { - val members: List = memberReader.searchAllInactiveByNameOrNickname(query) + val members: List = memberReader.searchAllInactiveByNameOrNickname(query).sorted() return members.map { InactiveMemberDto.from(it) } } fun searchAllGraduatedByNameOrNickname(query: String): List { - val members: List = memberReader.searchAllGraduatedByNameOrNickname(query) + val members: List = memberReader.searchAllGraduatedByNameOrNickname(query).sorted() return members.map { GraduatedMemberDto.from(it) } } fun searchAllWithdrawnByNameOrNickname(query: String): List { - val members: List = memberReader.searchAllWithdrawnByNameOrNickname(query) + val members: List = memberReader.searchAllWithdrawnByNameOrNickname(query).sorted() return members.map { WithdrawnMemberDto.from(it) } } @@ -219,13 +220,14 @@ class MemberService( birthDate = command.birthDate ?: target.birthDate, department = command.departmentId?.let { departmentReader.readById(it) } ?: target.department, studentId = command.studentId ?: target.studentId, - parts = command.partIds?.let { partReader.readAllByIds(it) } ?: target.parts, + parts = command.partIds?.let { partReader.readAllByIds(it).toSortedSet() } ?: target.parts, role = target.role, nicknameEnglish = command.nicknameEnglish ?: target.nicknameEnglish, nicknameKorean = command.nicknameKorean ?: target.nicknameKorean, state = target.state, joinDate = command.joinDate ?: target.joinDate, note = command.note ?: target.note, + stateUpdatedTime = target.stateUpdatedTime, ) memberWriter.update(updateMember) @@ -274,6 +276,7 @@ class MemberService( state = target.state, joinDate = target.joinDate, note = "${newNote}${target.note}", + stateUpdatedTime = target.stateUpdatedTime, ) memberWriter.update(updateMember) @@ -295,6 +298,7 @@ class MemberService( state = newState, joinDate = target.joinDate, note = target.note, + stateUpdatedTime = LocalDateTime.now() ) deletePreviousStateData(target) diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/ActiveMember.kt b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/ActiveMember.kt index d1927e3..1001db6 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/ActiveMember.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/ActiveMember.kt @@ -4,19 +4,15 @@ class ActiveMember( val id: Long? = null, val member: Member, val isMembershipFeePaid: Boolean = false, -) { +) : Comparable { constructor(member: Member) : this( member = member, isMembershipFeePaid = false, ) - fun updateMembershipFeePaid(isMembershipFeePaid: Boolean): ActiveMember { - return ActiveMember( - id = id, - member = member, - isMembershipFeePaid = isMembershipFeePaid, - ) + override fun compareTo(other: ActiveMember): Int { + return this.member.compareTo(other.member) } override fun equals(other: Any?): Boolean { @@ -31,8 +27,4 @@ class ActiveMember( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "ActiveMember(id=$id, member=$member, isMembershipFeePaid=$isMembershipFeePaid)" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/GraduatedMember.kt b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/GraduatedMember.kt index 870a7c3..8067704 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/GraduatedMember.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/GraduatedMember.kt @@ -7,7 +7,7 @@ class GraduatedMember( val member: Member, val activePeriod: SemesterPeriod, val isAdvisorDesired: Boolean, -) { +) : Comparable { constructor( member: Member, @@ -22,13 +22,8 @@ class GraduatedMember( isAdvisorDesired = false, ) - fun updateAdvisorDesired(isAdvisorDesired: Boolean): GraduatedMember { - return GraduatedMember( - id = id, - member = member, - activePeriod = activePeriod, - isAdvisorDesired = isAdvisorDesired, - ) + override fun compareTo(other: GraduatedMember): Int { + return other.member.stateUpdatedTime.compareTo(this.member.stateUpdatedTime) } override fun equals(other: Any?): Boolean { @@ -43,8 +38,4 @@ class GraduatedMember( override fun hashCode(): Int { return id.hashCode() } - - override fun toString(): String { - return "GraduatedMember(id=$id, member=$member, activePeriod=$activePeriod, isAdvisorDesired=$isAdvisorDesired)" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/InactiveMember.kt b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/InactiveMember.kt index 9517475..3ef1c39 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/InactiveMember.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/InactiveMember.kt @@ -8,7 +8,7 @@ class InactiveMember( val activePeriod: SemesterPeriod, val expectedReturnSemester: Semester, val inactivePeriod: SemesterPeriod, -) { +) : Comparable { constructor( member: Member, @@ -42,6 +42,15 @@ class InactiveMember( ) } + override fun compareTo(other: InactiveMember): Int { + val returnCompare = this.expectedReturnSemester.compareTo(other.expectedReturnSemester) + if (returnCompare != 0) { + return returnCompare + } + + return this.member.compareTo(other.member) + } + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -54,8 +63,4 @@ class InactiveMember( override fun hashCode(): Int { return id.hashCode() } - - override fun toString(): String { - return "InactiveMember(id=$id, member=$member, activePeriod=$activePeriod, expectedReturnSemester=$expectedReturnSemester, inactivePeriod=$inactivePeriod)" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/Member.kt b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/Member.kt index 387380d..0a18e1b 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/Member.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/Member.kt @@ -1,8 +1,11 @@ package com.yourssu.scouter.hrms.implement.domain.member +import com.yourssu.scouter.common.implement.domain.basetime.BaseTime import com.yourssu.scouter.common.implement.domain.department.Department import com.yourssu.scouter.common.implement.domain.part.Part import java.time.LocalDate +import java.time.LocalDateTime +import java.util.SortedSet class Member( val id: Long? = null, @@ -12,14 +15,27 @@ class Member( val birthDate: LocalDate, val department: Department, val studentId: String, - val parts: List = listOf(), + val parts: SortedSet = sortedSetOf(), val role: MemberRole, val nicknameEnglish: String, val nicknameKorean: String, val state: MemberState, val joinDate: LocalDate, val note: String, -) { + val stateUpdatedTime: LocalDateTime, + createdTime: LocalDateTime? = null, + updatedTime: LocalDateTime? = null, +) : BaseTime(createdTime, updatedTime), Comparable { + + override fun compareTo(other: Member): Int { + val partCompare = this.parts.first().compareTo(other.parts.first()) + + if (partCompare != 0) { + return partCompare + } + + return this.joinDate.compareTo(other.joinDate) + } override fun equals(other: Any?): Boolean { if (this === other) return true @@ -33,8 +49,4 @@ class Member( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "Member(id=$id, name='$name', email='$email', phoneNumber='$phoneNumber', birthDate=$birthDate, department=$department, studentId='$studentId', parts=$parts, role=$role, nicknameEnglish='$nicknameEnglish', nicknameKorean='$nicknameKorean', state=$state, joinDate=$joinDate, note='$note')" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/SemesterPeriod.kt b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/SemesterPeriod.kt index 1774e91..7302e1b 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/SemesterPeriod.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/SemesterPeriod.kt @@ -24,8 +24,4 @@ class SemesterPeriod( result = 31 * result + endSemester.hashCode() return result } - - override fun toString(): String { - return "SemesterPeriod(startSemester=$startSemester, endSemester=$endSemester)" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/WithdrawnMember.kt b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/WithdrawnMember.kt index 8de3178..ab5f644 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/WithdrawnMember.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/implement/domain/member/WithdrawnMember.kt @@ -3,7 +3,12 @@ package com.yourssu.scouter.hrms.implement.domain.member class WithdrawnMember( val id: Long? = null, val member: Member, -) { +) : Comparable { + + override fun compareTo(other: WithdrawnMember): Int { + return other.member.stateUpdatedTime.compareTo(this.member.stateUpdatedTime) + } + override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false @@ -16,8 +21,4 @@ class WithdrawnMember( override fun hashCode(): Int { return id.hashCode() } - - override fun toString(): String { - return "WithdrawnMember(id=$id, member=$member)" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/ActiveMemberEntity.kt b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/ActiveMemberEntity.kt index 738a4f8..961e2c4 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/ActiveMemberEntity.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/ActiveMemberEntity.kt @@ -53,8 +53,4 @@ class ActiveMemberEntity( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "ActiveMemberEntity(id=$id, member=$member, isMembershipFeePaid=$isMembershipFeePaid)" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/GraduatedMemberEntity.kt b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/GraduatedMemberEntity.kt index 4d73c1c..0733666 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/GraduatedMemberEntity.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/GraduatedMemberEntity.kt @@ -78,8 +78,4 @@ class GraduatedMemberEntity( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "GraduatedMemberEntity(id=$id, member=$member, activeStartSemester=$activeStartSemester, activeEndSemester=$activeEndSemester, isAdvisorDesired=$isAdvisorDesired)" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/InactiveMemberEntity.kt b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/InactiveMemberEntity.kt index b73b51d..9a71ac6 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/InactiveMemberEntity.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/InactiveMemberEntity.kt @@ -105,8 +105,4 @@ class InactiveMemberEntity( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "InactiveMemberEntity(id=$id, member=$member, activeStartSemester=$activeStartSemester, activeEndSemester=$activeEndSemester, expectedReturnSemester=$expectedReturnSemester, inactiveStartSemester=$inactiveStartSemester, inactiveEndSemester=$inactiveEndSemester)" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaActiveMemberRepository.kt b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaActiveMemberRepository.kt index ba95a6f..9ba2d37 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaActiveMemberRepository.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaActiveMemberRepository.kt @@ -5,28 +5,22 @@ import org.springframework.data.jpa.repository.Query interface JpaActiveMemberRepository : JpaRepository { - @Query( - """ + @Query(""" SELECT am FROM ActiveMemberEntity am WHERE am.member.name = :name - """ - ) + """) fun findAllByName(name: String): List - @Query( - """ + @Query(""" SELECT am FROM ActiveMemberEntity am WHERE am.member.nicknameKorean = :nicknameKorean - """ - ) + """) fun findAllByNicknameKoreanIgnoreCase(nicknameKorean: String): List - @Query( - """ + @Query(""" SELECT am FROM ActiveMemberEntity am WHERE LOWER(am.member.nicknameEnglish) = LOWER(:nicknameEnglish) - """ - ) + """) fun findAllByNicknameEnglishIgnoreCase(nicknameEnglish: String): List fun findByMemberId(memberId: Long): ActiveMemberEntity? diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaGraduatedMemberRepository.kt b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaGraduatedMemberRepository.kt index f2bac49..c1b4162 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaGraduatedMemberRepository.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaGraduatedMemberRepository.kt @@ -7,12 +7,10 @@ interface JpaGraduatedMemberRepository : JpaRepository @Query(""" diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaInactiveMemberRepository.kt b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaInactiveMemberRepository.kt index b82378a..aad44f5 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaInactiveMemberRepository.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaInactiveMemberRepository.kt @@ -7,12 +7,10 @@ interface JpaInactiveMemberRepository : JpaRepository @Query(""" diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaMemberRepository.kt b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaMemberRepository.kt index cc4d206..1332e5d 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaMemberRepository.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaMemberRepository.kt @@ -2,5 +2,5 @@ package com.yourssu.scouter.hrms.storage.domain.member import org.springframework.data.jpa.repository.JpaRepository -interface JpaMemberRepository: JpaRepository { +interface JpaMemberRepository : JpaRepository { } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaWithdrawnMemberRepository.kt b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaWithdrawnMemberRepository.kt index 524dab7..2cf6627 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaWithdrawnMemberRepository.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/JpaWithdrawnMemberRepository.kt @@ -5,12 +5,10 @@ import org.springframework.data.jpa.repository.Query interface JpaWithdrawnMemberRepository : JpaRepository { - @Query( - """ + @Query(""" SELECT wm FROM WithdrawnMemberEntity wm WHERE wm.member.name = :name - """ - ) + """) fun findAllByName(name: String): List @Query(""" diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/MemberEntity.kt b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/MemberEntity.kt index c2321c5..df341ba 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/MemberEntity.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/MemberEntity.kt @@ -1,6 +1,7 @@ package com.yourssu.scouter.hrms.storage.domain.member import com.yourssu.scouter.common.implement.domain.part.Part +import com.yourssu.scouter.common.storage.domain.basetime.BaseTimeEntity import com.yourssu.scouter.common.storage.domain.department.DepartmentEntity import com.yourssu.scouter.hrms.implement.domain.member.Member import com.yourssu.scouter.hrms.implement.domain.member.MemberRole @@ -18,6 +19,7 @@ import jakarta.persistence.JoinColumn import jakarta.persistence.ManyToOne import jakarta.persistence.Table import java.time.LocalDate +import java.time.LocalDateTime @Entity @Table(name = "member") @@ -65,7 +67,11 @@ class MemberEntity( @Column(nullable = false) val note: String, -) { + + @Column(nullable = false) + val stateUpdatedTime: LocalDateTime, + + ) : BaseTimeEntity() { companion object { fun from(member: Member) = MemberEntity( @@ -82,10 +88,11 @@ class MemberEntity( state = member.state, joinDate = member.joinDate, note = member.note, + stateUpdatedTime = member.stateUpdatedTime, ) } - fun toDomain(savedParts: List) = Member( + fun toDomain(savedParts: Collection) = Member( id = id, name = name, email = email, @@ -93,13 +100,16 @@ class MemberEntity( birthDate = birthDate, department = department.toDomain(), studentId = studentId, - parts = savedParts, + parts = savedParts.toSortedSet(), role = role, nicknameEnglish = nicknameEnglish, nicknameKorean = nicknameKorean, state = state, joinDate = joinDate, note = note, + stateUpdatedTime = stateUpdatedTime, + createdTime = createdTime, + updatedTime = updatedTime, ) override fun equals(other: Any?): Boolean { @@ -114,8 +124,4 @@ class MemberEntity( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "MemberEntity(id=$id, name='$name', email='$email', phoneNumber='$phoneNumber', birthDate=$birthDate, department=$department, studentId='$studentId', role=$role, nicknameEnglish='$nicknameEnglish', nicknameKorean='$nicknameKorean', state=$state, joinDate=$joinDate, note='$note')" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/MemberPartEntity.kt b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/MemberPartEntity.kt index 8c894c0..bef915a 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/MemberPartEntity.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/MemberPartEntity.kt @@ -40,8 +40,4 @@ class MemberPartEntity( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "MemberPartEntity(id=$id, member=$member, part=$part)" - } } diff --git a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/WithdrawnMemberEntity.kt b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/WithdrawnMemberEntity.kt index d3ff568..f983cc8 100644 --- a/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/WithdrawnMemberEntity.kt +++ b/src/main/kotlin/com/yourssu/scouter/hrms/storage/domain/member/WithdrawnMemberEntity.kt @@ -48,8 +48,4 @@ class WithdrawnMemberEntity( override fun hashCode(): Int { return id?.hashCode() ?: 0 } - - override fun toString(): String { - return "WithdrawnMemberEntity(id=$id, member=$member)" - } }