From 783c3804302b2003cde2100c799a0ca551255cad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=8F=84=EA=B2=BD?= Date: Sun, 7 Apr 2024 16:22:50 +0900 Subject: [PATCH 1/8] add :: domain --- .../domain/attendance/domain/Attendance.kt | 19 ++++++++ .../attendance/entity/AttendanceJpaEntity.kt | 38 ++++++++++++++++ .../attendance/mapper/AttendanceMapper.kt | 43 +++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/domain/Attendance.kt create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/domain/Attendance.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/domain/Attendance.kt new file mode 100644 index 00000000..3249a0c1 --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/domain/Attendance.kt @@ -0,0 +1,19 @@ +package dsm.pick2024.domain.attendance.domain + +import dsm.pick2024.domain.afterschool.enums.Status +import java.util.* + +data class Attendance ( + val id: UUID? = null, + val userId: UUID, + val grade: Int, + val classNum: Int, + val num: Int, + val name: String, + val club: String, + val period6: Status, + val period7: Status, + val period8: Status, + val period9: Status, + val period10: Status, +) diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt new file mode 100644 index 00000000..dbd789c2 --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt @@ -0,0 +1,38 @@ +package dsm.pick2024.domain.attendance.entity + +import dsm.pick2024.domain.afterschool.enums.Status +import dsm.pick2024.global.base.BaseUUIDEntity +import java.util.UUID +import javax.persistence.Column +import javax.persistence.Entity +import javax.persistence.EnumType +import javax.persistence.Enumerated + +@Entity +class AttendanceJpaEntity ( + id: UUID?, + + @Column(columnDefinition = "BINARY(16)") + val userId: UUID, + @Column(nullable = false) + val name: String, + @Column(nullable = false) + val grade: Int, + @Column(name = "class_num", nullable = false) + val classNum: Int, + @Column(nullable = false) + val num: Int, + @Column(name = "club") + val club: String? = null, + @Enumerated(value = EnumType.STRING) + val period6: Status, + @Enumerated(value = EnumType.STRING) + val period7: Status, + @Enumerated(value = EnumType.STRING) + val period8: Status, + @Enumerated(value = EnumType.STRING) + val period9: Status, + @Enumerated(value = EnumType.STRING) + val period10: Status + +): BaseUUIDEntity(id) diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt new file mode 100644 index 00000000..10bb1f84 --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt @@ -0,0 +1,43 @@ +package dsm.pick2024.domain.attendance.mapper + +import dsm.pick2024.domain.attendance.domain.Attendance +import dsm.pick2024.domain.attendance.entity.AttendanceJpaEntity +import dsm.pick2024.global.base.GenericMapper + +class AttendanceMapper: GenericMapper { + override fun toEntity(domain: Attendance) = + domain.run { + AttendanceJpaEntity( + id = id, + userId = userId, + grade = grade, + classNum = classNum, + num = num, + name = name, + club = club, + period6 = period6, + period7 = period7, + period8 = period8, + period9 = period9, + period10 = period10 + ) + } + + override fun toDomain(entity: AttendanceJpaEntity) = + entity.run { + Attendance( + id = id, + userId = userId, + grade = grade, + classNum = classNum, + num = num, + name = name, + club = club!!, + period6 = period6, + period7 = period7, + period8 = period8, + period9 = period9, + period10 = period10 + ) + } +} From 1cdff808428d5d3c25cf050146b0bed95b634e19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=8F=84=EA=B2=BD?= Date: Sun, 7 Apr 2024 16:25:16 +0900 Subject: [PATCH 2/8] add :: persistence --- .../domain/attendance/mapper/AttendanceMapper.kt | 2 ++ .../persistence/AttendancePersistenceAdapter.kt | 12 ++++++++++++ .../repository/AttendanceJpaRepository.kt | 8 ++++++++ 3 files changed, 22 insertions(+) create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceJpaRepository.kt diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt index 10bb1f84..074d6d8c 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt @@ -3,7 +3,9 @@ package dsm.pick2024.domain.attendance.mapper import dsm.pick2024.domain.attendance.domain.Attendance import dsm.pick2024.domain.attendance.entity.AttendanceJpaEntity import dsm.pick2024.global.base.GenericMapper +import org.springframework.stereotype.Component +@Component class AttendanceMapper: GenericMapper { override fun toEntity(domain: Attendance) = domain.run { diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt new file mode 100644 index 00000000..f35aa397 --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt @@ -0,0 +1,12 @@ +package dsm.pick2024.domain.attendance.persistence + +import dsm.pick2024.domain.attendance.mapper.AttendanceMapper +import dsm.pick2024.domain.attendance.persistence.repository.AttendanceJpaRepository +import org.springframework.stereotype.Component + +@Component +class AttendancePersistenceAdapter( + private val attendanceJpaRepository: AttendanceJpaRepository, + private val attendanceMapper: AttendanceMapper +) { +} diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceJpaRepository.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceJpaRepository.kt new file mode 100644 index 00000000..6e166572 --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceJpaRepository.kt @@ -0,0 +1,8 @@ +package dsm.pick2024.domain.attendance.persistence.repository + +import dsm.pick2024.domain.attendance.entity.AttendanceJpaEntity +import org.springframework.data.repository.Repository +import java.util.UUID + +interface AttendanceJpaRepository : Repository { +} From e02959df30f8917eeaa3c623cd53b3ed40c06bc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=8F=84=EA=B2=BD?= Date: Sun, 7 Apr 2024 16:33:06 +0900 Subject: [PATCH 3/8] modify :: persistence --- .../domain/attendance/entity/AttendanceJpaEntity.kt | 4 +--- .../persistence/AttendancePersistenceAdapter.kt | 8 +++++--- ...AttendanceJpaRepository.kt => AttendanceRepository.kt} | 3 +-- 3 files changed, 7 insertions(+), 8 deletions(-) rename src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/{AttendanceJpaRepository.kt => AttendanceRepository.kt} (72%) diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt index dbd789c2..1f55dbe5 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt @@ -8,10 +8,9 @@ import javax.persistence.Entity import javax.persistence.EnumType import javax.persistence.Enumerated -@Entity +@Entity(name = "tbl_attendance") class AttendanceJpaEntity ( id: UUID?, - @Column(columnDefinition = "BINARY(16)") val userId: UUID, @Column(nullable = false) @@ -34,5 +33,4 @@ class AttendanceJpaEntity ( val period9: Status, @Enumerated(value = EnumType.STRING) val period10: Status - ): BaseUUIDEntity(id) diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt index f35aa397..02e06bd7 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt @@ -1,12 +1,14 @@ package dsm.pick2024.domain.attendance.persistence +import com.querydsl.jpa.impl.JPAQueryFactory import dsm.pick2024.domain.attendance.mapper.AttendanceMapper -import dsm.pick2024.domain.attendance.persistence.repository.AttendanceJpaRepository +import dsm.pick2024.domain.attendance.persistence.repository.AttendanceRepository import org.springframework.stereotype.Component @Component class AttendancePersistenceAdapter( - private val attendanceJpaRepository: AttendanceJpaRepository, - private val attendanceMapper: AttendanceMapper + private val attendanceJpaRepository: AttendanceRepository, + private val attendanceMapper: AttendanceMapper, + private val jpaQueryFactory: JPAQueryFactory ) { } diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceJpaRepository.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceRepository.kt similarity index 72% rename from src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceJpaRepository.kt rename to src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceRepository.kt index 6e166572..c8323264 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceJpaRepository.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceRepository.kt @@ -4,5 +4,4 @@ import dsm.pick2024.domain.attendance.entity.AttendanceJpaEntity import org.springframework.data.repository.Repository import java.util.UUID -interface AttendanceJpaRepository : Repository { -} +interface AttendanceRepository : Repository From 96f45a7f8247c1e21c0074915889fd7c84dd5009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=8F=84=EA=B2=BD?= Date: Sun, 7 Apr 2024 16:44:19 +0900 Subject: [PATCH 4/8] modify --- .../infrastructure/feign/client/response/XquareResponse.kt | 1 + .../feign/client/response/XquareUserAllResponse.kt | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/dsm/pick2024/infrastructure/feign/client/response/XquareResponse.kt b/src/main/kotlin/dsm/pick2024/infrastructure/feign/client/response/XquareResponse.kt index 2360f1d2..1728f1e0 100644 --- a/src/main/kotlin/dsm/pick2024/infrastructure/feign/client/response/XquareResponse.kt +++ b/src/main/kotlin/dsm/pick2024/infrastructure/feign/client/response/XquareResponse.kt @@ -12,5 +12,6 @@ data class XquareResponse( val classNum: Int, val num: Int, val userRole: String, + val clubName: String, val birthDay: LocalDate ) diff --git a/src/main/kotlin/dsm/pick2024/infrastructure/feign/client/response/XquareUserAllResponse.kt b/src/main/kotlin/dsm/pick2024/infrastructure/feign/client/response/XquareUserAllResponse.kt index 69e709e6..cafe6f1a 100644 --- a/src/main/kotlin/dsm/pick2024/infrastructure/feign/client/response/XquareUserAllResponse.kt +++ b/src/main/kotlin/dsm/pick2024/infrastructure/feign/client/response/XquareUserAllResponse.kt @@ -7,5 +7,6 @@ data class XquareUserAllResponse( val name: String, val grade: Int, val classNum: Int, - val num: Int + val num: Int, + val club: String ) From 1b8b7d0da6cf4e2b72be7207642742aed68cd7fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=8F=84=EA=B2=BD?= Date: Sun, 7 Apr 2024 16:56:44 +0900 Subject: [PATCH 5/8] add :: save All fun --- .../persistence/AttendancePersistenceAdapter.kt | 8 +++++++- .../persistence/repository/AttendanceRepository.kt | 4 +++- .../pick2024/domain/attendance/port/out/AttendancePort.kt | 3 +++ .../dsm/pick2024/domain/attendance/port/out/SaveAll.kt | 8 ++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/port/out/AttendancePort.kt create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/port/out/SaveAll.kt diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt index 02e06bd7..c8931b04 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt @@ -1,8 +1,10 @@ package dsm.pick2024.domain.attendance.persistence import com.querydsl.jpa.impl.JPAQueryFactory +import dsm.pick2024.domain.attendance.domain.Attendance import dsm.pick2024.domain.attendance.mapper.AttendanceMapper import dsm.pick2024.domain.attendance.persistence.repository.AttendanceRepository +import dsm.pick2024.domain.attendance.port.out.AttendancePort import org.springframework.stereotype.Component @Component @@ -10,5 +12,9 @@ class AttendancePersistenceAdapter( private val attendanceJpaRepository: AttendanceRepository, private val attendanceMapper: AttendanceMapper, private val jpaQueryFactory: JPAQueryFactory -) { +): AttendancePort { + override fun saveAll(attendance: MutableList) { + val entities = attendance.map { attendanceMapper.toEntity(it) } + attendanceJpaRepository.saveAll(entities) + } } diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceRepository.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceRepository.kt index c8323264..d2a6b2b0 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceRepository.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceRepository.kt @@ -4,4 +4,6 @@ import dsm.pick2024.domain.attendance.entity.AttendanceJpaEntity import org.springframework.data.repository.Repository import java.util.UUID -interface AttendanceRepository : Repository +interface AttendanceRepository : Repository { + fun saveAll(entity: Iterable) +} diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/AttendancePort.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/AttendancePort.kt new file mode 100644 index 00000000..d089b26a --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/AttendancePort.kt @@ -0,0 +1,3 @@ +package dsm.pick2024.domain.attendance.port.out + +interface AttendancePort : SaveAll diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/SaveAll.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/SaveAll.kt new file mode 100644 index 00000000..6c0e80c4 --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/SaveAll.kt @@ -0,0 +1,8 @@ +package dsm.pick2024.domain.attendance.port.out + +import dsm.pick2024.domain.attendance.domain.Attendance + + +interface SaveAll { + fun saveAll(attendance: MutableList) +} From 89bf9d785244ce9c910f7a8bc6fd38b294ec4abd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=8F=84=EA=B2=BD?= Date: Sun, 7 Apr 2024 21:41:33 +0900 Subject: [PATCH 6/8] add :: logic --- .../service/SaveAfterSchoolStudentService.kt | 4 +- .../port/in/SaveAllAttendanceUseCase.kt | 5 +++ .../presentation/AttendanceController.kt | 4 ++ .../SaveAllAttendanceSaveAllUserService.kt | 38 +++++++++++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/port/in/SaveAllAttendanceUseCase.kt create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/service/SaveAllAttendanceSaveAllUserService.kt diff --git a/src/main/kotlin/dsm/pick2024/domain/afterschool/service/SaveAfterSchoolStudentService.kt b/src/main/kotlin/dsm/pick2024/domain/afterschool/service/SaveAfterSchoolStudentService.kt index 71e946be..293d4c3c 100644 --- a/src/main/kotlin/dsm/pick2024/domain/afterschool/service/SaveAfterSchoolStudentService.kt +++ b/src/main/kotlin/dsm/pick2024/domain/afterschool/service/SaveAfterSchoolStudentService.kt @@ -22,11 +22,11 @@ class SaveAfterSchoolStudentService( val user = findByStudentNumPort.findByStudentNum(grade, classNum, num) AfterSchoolStudent( id = null, - userId = user!!.id!!, + userId = user!!.id, grade = grade, classNum = classNum, num = num, - name = user!!.name, + name = user.name, status1 = Status.ATTENDANCE, status2 = Status.ATTENDANCE, status3 = Status.ATTENDANCE diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/port/in/SaveAllAttendanceUseCase.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/port/in/SaveAllAttendanceUseCase.kt new file mode 100644 index 00000000..04ab706f --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/port/in/SaveAllAttendanceUseCase.kt @@ -0,0 +1,5 @@ +package dsm.pick2024.domain.attendance.port.`in` + +interface SaveAllAttendanceUseCase { + fun saveAll(key: String) +} diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt new file mode 100644 index 00000000..cde76c43 --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt @@ -0,0 +1,4 @@ +package dsm.pick2024.domain.attendance.presentation + +class AttendanceController { +} diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/service/SaveAllAttendanceSaveAllUserService.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/service/SaveAllAttendanceSaveAllUserService.kt new file mode 100644 index 00000000..9eed0a2f --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/service/SaveAllAttendanceSaveAllUserService.kt @@ -0,0 +1,38 @@ +package dsm.pick2024.domain.attendance.service + +import dsm.pick2024.domain.afterschool.enums.Status +import dsm.pick2024.domain.attendance.domain.Attendance +import dsm.pick2024.domain.attendance.port.`in`.SaveAllAttendanceUseCase +import dsm.pick2024.domain.attendance.port.out.SaveAll +import dsm.pick2024.infrastructure.feign.client.XquareFeignClient +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional + +@Service +class SaveAllAttendanceSaveAllUserService( + private val saveAll: SaveAll, + private val xquareFeignClient: XquareFeignClient +): SaveAllAttendanceUseCase { + + @Transactional + override fun saveAll(key: String) { + val xquare = xquareFeignClient.userAll(key) + val entity = xquare.map { + it -> + Attendance( + userId = it.id, + name = it.name, + grade = it.grade, + classNum = it.classNum, + num = it.num, + club = it.club, + period6 = Status.ATTENDANCE, + period7 = Status.ATTENDANCE, + period8 = Status.ATTENDANCE, + period9 = Status.ATTENDANCE, + period10 = Status.ATTENDANCE + ) + }.toMutableList() + saveAll.saveAll(entity) + } +} From 3054b92cdc35d9fae33f62aecf9fc11f67415c61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=8F=84=EA=B2=BD?= Date: Sun, 7 Apr 2024 21:58:36 +0900 Subject: [PATCH 7/8] test --- .../domain/attendance/domain/Attendance.kt | 4 +- .../attendance/entity/AttendanceJpaEntity.kt | 4 +- .../attendance/mapper/AttendanceMapper.kt | 2 +- .../AttendancePersistenceAdapter.kt | 6 ++- .../repository/AttendanceRepository.kt | 2 + .../port/in/ChangeAttendanceUseCase.kt | 7 ++++ .../attendance/port/out/AttendancePort.kt | 4 +- .../attendance/port/out/FindByUserIdPort.kt | 8 ++++ .../domain/attendance/port/out/SaveAll.kt | 1 - .../presentation/AttendanceController.kt | 29 +++++++++++++- .../dto/request/ChangeAttendanceRequest.kt | 9 +++++ .../service/ChangeAttendanceService.kt | 38 +++++++++++++++++++ .../SaveAllAttendanceSaveAllUserService.kt | 4 +- 13 files changed, 107 insertions(+), 11 deletions(-) create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/port/in/ChangeAttendanceUseCase.kt create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/port/out/FindByUserIdPort.kt create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/presentation/dto/request/ChangeAttendanceRequest.kt create mode 100644 src/main/kotlin/dsm/pick2024/domain/attendance/service/ChangeAttendanceService.kt diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/domain/Attendance.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/domain/Attendance.kt index 3249a0c1..d68cf991 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/domain/Attendance.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/domain/Attendance.kt @@ -3,7 +3,7 @@ package dsm.pick2024.domain.attendance.domain import dsm.pick2024.domain.afterschool.enums.Status import java.util.* -data class Attendance ( +data class Attendance( val id: UUID? = null, val userId: UUID, val grade: Int, @@ -15,5 +15,5 @@ data class Attendance ( val period7: Status, val period8: Status, val period9: Status, - val period10: Status, + val period10: Status ) diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt index 1f55dbe5..2eebadd0 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/entity/AttendanceJpaEntity.kt @@ -9,7 +9,7 @@ import javax.persistence.EnumType import javax.persistence.Enumerated @Entity(name = "tbl_attendance") -class AttendanceJpaEntity ( +class AttendanceJpaEntity( id: UUID?, @Column(columnDefinition = "BINARY(16)") val userId: UUID, @@ -33,4 +33,4 @@ class AttendanceJpaEntity ( val period9: Status, @Enumerated(value = EnumType.STRING) val period10: Status -): BaseUUIDEntity(id) +) : BaseUUIDEntity(id) diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt index 074d6d8c..f886a4ad 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/mapper/AttendanceMapper.kt @@ -6,7 +6,7 @@ import dsm.pick2024.global.base.GenericMapper import org.springframework.stereotype.Component @Component -class AttendanceMapper: GenericMapper { +class AttendanceMapper : GenericMapper { override fun toEntity(domain: Attendance) = domain.run { AttendanceJpaEntity( diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt index c8931b04..cf4df06c 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/AttendancePersistenceAdapter.kt @@ -6,15 +6,19 @@ import dsm.pick2024.domain.attendance.mapper.AttendanceMapper import dsm.pick2024.domain.attendance.persistence.repository.AttendanceRepository import dsm.pick2024.domain.attendance.port.out.AttendancePort import org.springframework.stereotype.Component +import java.util.* @Component class AttendancePersistenceAdapter( private val attendanceJpaRepository: AttendanceRepository, private val attendanceMapper: AttendanceMapper, private val jpaQueryFactory: JPAQueryFactory -): AttendancePort { +) : AttendancePort { override fun saveAll(attendance: MutableList) { val entities = attendance.map { attendanceMapper.toEntity(it) } attendanceJpaRepository.saveAll(entities) } + + override fun findByUserId(userId: UUID) = + attendanceJpaRepository.findByUserId(userId).let { attendanceMapper.toDomain(it) } } diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceRepository.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceRepository.kt index d2a6b2b0..6fe5a0f7 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceRepository.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/persistence/repository/AttendanceRepository.kt @@ -6,4 +6,6 @@ import java.util.UUID interface AttendanceRepository : Repository { fun saveAll(entity: Iterable) + + fun findByUserId(userId: UUID): AttendanceJpaEntity } diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/port/in/ChangeAttendanceUseCase.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/port/in/ChangeAttendanceUseCase.kt new file mode 100644 index 00000000..d3c6202c --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/port/in/ChangeAttendanceUseCase.kt @@ -0,0 +1,7 @@ +package dsm.pick2024.domain.attendance.port.`in` + +import dsm.pick2024.domain.attendance.presentation.dto.request.ChangeAttendanceRequest + +interface ChangeAttendanceUseCase { + fun changeAttendance(request: List) +} diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/AttendancePort.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/AttendancePort.kt index d089b26a..f3d2577a 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/AttendancePort.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/AttendancePort.kt @@ -1,3 +1,5 @@ package dsm.pick2024.domain.attendance.port.out -interface AttendancePort : SaveAll +interface AttendancePort : + SaveAll, + FindByUserIdPort diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/FindByUserIdPort.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/FindByUserIdPort.kt new file mode 100644 index 00000000..0ad4af6c --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/FindByUserIdPort.kt @@ -0,0 +1,8 @@ +package dsm.pick2024.domain.attendance.port.out + +import dsm.pick2024.domain.attendance.domain.Attendance +import java.util.UUID + +interface FindByUserIdPort { + fun findByUserId(userId: UUID): Attendance? +} diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/SaveAll.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/SaveAll.kt index 6c0e80c4..149106ef 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/SaveAll.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/port/out/SaveAll.kt @@ -2,7 +2,6 @@ package dsm.pick2024.domain.attendance.port.out import dsm.pick2024.domain.attendance.domain.Attendance - interface SaveAll { fun saveAll(attendance: MutableList) } diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt index cde76c43..690635b0 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt @@ -1,4 +1,31 @@ package dsm.pick2024.domain.attendance.presentation -class AttendanceController { +import dsm.pick2024.domain.attendance.port.`in`.ChangeAttendanceUseCase +import dsm.pick2024.domain.attendance.port.`in`.SaveAllAttendanceUseCase +import dsm.pick2024.domain.attendance.presentation.dto.request.ChangeAttendanceRequest +import io.swagger.v3.oas.annotations.Operation +import io.swagger.v3.oas.annotations.tags.Tag +import org.springframework.web.bind.annotation.PatchMapping +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam +import org.springframework.web.bind.annotation.RestController + +@Tag(name = "attendance API") +@RestController +@RequestMapping("/attendance") +class AttendanceController( + private val saveAllAttendanceUseCase: SaveAllAttendanceUseCase, + private val changeAttendanceUseCase: ChangeAttendanceUseCase +) { + + @Operation(summary = "데이터 저장 api") + @PostMapping("/all") + fun all (@RequestParam(name = "key") key: String) = + saveAllAttendanceUseCase.saveAll(key) + + @Operation(summary = "자습 or 방과후 상태관리") + @PatchMapping("/modify") + fun changeAttendance(changeAttendanceRequest: List) = + changeAttendanceUseCase.changeAttendance(changeAttendanceRequest) } diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/dto/request/ChangeAttendanceRequest.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/dto/request/ChangeAttendanceRequest.kt new file mode 100644 index 00000000..0bf9cd0c --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/dto/request/ChangeAttendanceRequest.kt @@ -0,0 +1,9 @@ +package dsm.pick2024.domain.attendance.presentation.dto.request + +import dsm.pick2024.domain.afterschool.enums.Status +import java.util.UUID + +data class ChangeAttendanceRequest( + val userId: UUID, + val statusList: List +) diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/service/ChangeAttendanceService.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/service/ChangeAttendanceService.kt new file mode 100644 index 00000000..ba2453e1 --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/service/ChangeAttendanceService.kt @@ -0,0 +1,38 @@ +package dsm.pick2024.domain.attendance.service + +import dsm.pick2024.domain.attendance.domain.Attendance +import dsm.pick2024.domain.attendance.port.`in`.ChangeAttendanceUseCase +import dsm.pick2024.domain.attendance.port.out.FindByUserIdPort +import dsm.pick2024.domain.attendance.port.out.SaveAll +import dsm.pick2024.domain.attendance.presentation.dto.request.ChangeAttendanceRequest +import dsm.pick2024.domain.user.exception.UserNotFoundException +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional + +@Service +class ChangeAttendanceService( + private val saveAll: SaveAll, + private val findByUserIdPort: FindByUserIdPort +) : ChangeAttendanceUseCase { + + @Transactional + override fun changeAttendance(request: List) { + val update = mutableListOf() + + request.map { + it -> + val attendance = findByUserIdPort.findByUserId(it.userId) + ?: throw UserNotFoundException + val list = it.statusList + val add = attendance.copy( + period6 = list.getOrElse(0) { attendance.period6 }, + period7 = list.getOrElse(1) { attendance.period7 }, + period8 = list.getOrElse(2) { attendance.period8 }, + period9 = list.getOrElse(1) { attendance.period9 }, + period10 = list.getOrElse(2) { attendance.period10 } + ) + update.add(add) + } + saveAll.saveAll(update) + } +} diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/service/SaveAllAttendanceSaveAllUserService.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/service/SaveAllAttendanceSaveAllUserService.kt index 9eed0a2f..603e8977 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/service/SaveAllAttendanceSaveAllUserService.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/service/SaveAllAttendanceSaveAllUserService.kt @@ -12,13 +12,13 @@ import org.springframework.transaction.annotation.Transactional class SaveAllAttendanceSaveAllUserService( private val saveAll: SaveAll, private val xquareFeignClient: XquareFeignClient -): SaveAllAttendanceUseCase { +) : SaveAllAttendanceUseCase { @Transactional override fun saveAll(key: String) { val xquare = xquareFeignClient.userAll(key) val entity = xquare.map { - it -> + it -> Attendance( userId = it.id, name = it.name, From c2166e8928a03beb86831d259e0ca061d83b7bb1 Mon Sep 17 00:00:00 2001 From: soohyeon Date: Sun, 7 Apr 2024 22:07:58 +0900 Subject: [PATCH 8/8] ktlint --- .../domain/attendance/presentation/AttendanceController.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt b/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt index 690635b0..a262507a 100644 --- a/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt +++ b/src/main/kotlin/dsm/pick2024/domain/attendance/presentation/AttendanceController.kt @@ -21,7 +21,7 @@ class AttendanceController( @Operation(summary = "데이터 저장 api") @PostMapping("/all") - fun all (@RequestParam(name = "key") key: String) = + fun all(@RequestParam(name = "key") key: String) = saveAllAttendanceUseCase.saveAll(key) @Operation(summary = "자습 or 방과후 상태관리")