Skip to content

Commit

Permalink
Merge pull request #215 from DSM-PICK/214-classroom-startplace-error
Browse files Browse the repository at this point in the history
🔀 :: (PICK-214)classroom startplace error
  • Loading branch information
meltapplee authored Jul 8, 2024
2 parents 4d7ebe4 + 031bf87 commit fcfa320
Show file tree
Hide file tree
Showing 9 changed files with 106 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ class AttendancePersistenceAdapter(

override fun findAll() = attendanceJpaRepository.findAll().map { attendanceMapper.toDomain(it) }

override fun findByFloor(floor: Int): List<Attendance>? = attendanceJpaRepository.findByFloor(floor).map {
attendanceMapper.toDomain(
it
)
}

override fun findByGradeAndClassNum(
grade: Int,
classNum: Int
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ interface AttendanceRepository : Repository<AttendanceJpaEntity, UUID> {
fun findByUserId(userId: UUID): AttendanceJpaEntity

fun findAll(): List<AttendanceJpaEntity>

fun findByFloor(floor: Int): List<AttendanceJpaEntity>
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@ interface QueryAttendancePort {
fun findByClub(club: String): List<Attendance>?

fun findByUserId(userId: UUID): Attendance?

fun findByFloor(floor: Int): List<Attendance>?
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package dsm.pick2024.domain.attendance.service
import dsm.pick2024.domain.attendance.port.`in`.QueryClassAttendanceUseCase
import dsm.pick2024.domain.attendance.port.out.QueryAttendancePort
import dsm.pick2024.domain.attendance.presentation.dto.response.QueryAttendanceResponse
import dsm.pick2024.domain.classroom.port.out.ExistClassRoomPort
import dsm.pick2024.domain.classroom.port.out.QueryClassroomPort
import org.springframework.dao.EmptyResultDataAccessException
import org.springframework.stereotype.Service
Expand All @@ -12,8 +11,7 @@ import org.springframework.transaction.annotation.Transactional
@Service
class QueryClassAttendanceService(
private val queryAttendancePort: QueryAttendancePort,
private val queryClassroomPort: QueryClassroomPort,
private val existClassRoomPort: ExistClassRoomPort
private val queryClassroomPort: QueryClassroomPort
) : QueryClassAttendanceUseCase {

@Transactional(readOnly = true)
Expand All @@ -26,7 +24,7 @@ class QueryClassAttendanceService(
val userId = it.userId
val classroomName = try {
val classroom = queryClassroomPort.findByUserId(userId)
classroom?.classroomName ?: it.place.toString()
classroom?.classroomName
} catch (e: EmptyResultDataAccessException) {
""
}
Expand All @@ -43,7 +41,7 @@ class QueryClassAttendanceService(
status8 = period8,
status9 = period9,
status10 = period10,
classroomName = classroomName
classroomName = classroomName!!
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package dsm.pick2024.domain.attendance.service
import dsm.pick2024.domain.attendance.port.`in`.QueryClubAttendanceUseCase
import dsm.pick2024.domain.attendance.port.out.QueryAttendancePort
import dsm.pick2024.domain.attendance.presentation.dto.response.QueryAttendanceResponse
import dsm.pick2024.domain.classroom.exception.ClassroomNorFoundException
import dsm.pick2024.domain.classroom.port.out.QueryClassroomPort
import dsm.pick2024.domain.earlyreturn.exception.ClubNotFoundException
import org.springframework.dao.EmptyResultDataAccessException
Expand All @@ -24,11 +23,11 @@ class QueryClubAttendanceService(
return students.map { it ->
val classroomName = try {
val classroom = queryClassRoomPort.findByUserId(it.userId)
?: throw ClassroomNorFoundException
classroom.classroomName
classroom?.classroomName
} catch (e: EmptyResultDataAccessException) {
it.place.toString()
""
}

QueryAttendanceResponse(
id = it.userId,
username = it.userName,
Expand All @@ -40,7 +39,7 @@ class QueryClubAttendanceService(
status8 = it.period8,
status9 = it.period9,
status10 = it.period10,
classroomName = classroomName
classroomName = classroomName!!
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package dsm.pick2024.domain.classroom.persistence

import com.querydsl.jpa.impl.JPAQueryFactory
import dsm.pick2024.domain.application.enums.Status
import dsm.pick2024.domain.attendance.persistence.repository.AttendanceRepository
import dsm.pick2024.domain.classroom.domain.Classroom
import dsm.pick2024.domain.classroom.entity.QClassroomJpaEntity
import dsm.pick2024.domain.classroom.mapper.ClassroomMapper
Expand All @@ -15,7 +16,8 @@ import java.util.UUID
class PersistenceAdapterClassRoom(
private val classroomMapper: ClassroomMapper,
private val classroomRepository: ClassroomRepository,
private val jpaQueryFactory: JPAQueryFactory
private val jpaQueryFactory: JPAQueryFactory,
private val attendanceRepository: AttendanceRepository
) : ClassRoomPort {
override fun save(classroom: Classroom) {
classroomRepository.save(classroomMapper.toEntity(classroom))
Expand Down Expand Up @@ -103,4 +105,24 @@ class PersistenceAdapterClassRoom(
.where(user.id.eq(userId), classroom.status.eq(Status.OK))
.fetchFirst() != null
}

override fun queryFloorClassroomWithAttendance(floor: Int): List<Classroom> {
val attendances = attendanceRepository.findByFloor(floor)
val userIds = attendances.map { it.userId }

val classrooms = jpaQueryFactory
.selectFrom(QClassroomJpaEntity.classroomJpaEntity)
.innerJoin(QUserJpaEntity.userJpaEntity)
.on(
QClassroomJpaEntity.classroomJpaEntity.grade.eq(QUserJpaEntity.userJpaEntity.grade)
.and(QClassroomJpaEntity.classroomJpaEntity.classNum.eq(QUserJpaEntity.userJpaEntity.classNum))
.and(QClassroomJpaEntity.classroomJpaEntity.num.eq(QUserJpaEntity.userJpaEntity.num))
)
.where(
QUserJpaEntity.userJpaEntity.id.`in`(userIds)
)
.fetch()

return classrooms.map { classroomMapper.toDomain(it) }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,6 @@ interface QueryClassroomPort {
fun queryFloorClassroom(floor: Int): List<Classroom>

fun findAllByStatus(status: Status): List<Classroom>

fun queryFloorClassroomWithAttendance(floor: Int): List<Classroom>
}
Original file line number Diff line number Diff line change
@@ -1,46 +1,60 @@
package dsm.pick2024.domain.classroom.service

import dsm.pick2024.domain.application.enums.Status
import dsm.pick2024.domain.attendance.port.out.QueryAttendancePort
import dsm.pick2024.domain.classroom.exception.FloorNotFoundException
import dsm.pick2024.domain.classroom.port.`in`.QueryFloorClassroomUseCase
import dsm.pick2024.domain.classroom.port.out.QueryClassroomPort
import dsm.pick2024.domain.classroom.presentation.dto.response.QueryClassroomResponse
import org.joda.time.LocalDate
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional

@Service
class QueryFloorClassroomService(
private val queryClassroomPort: QueryClassroomPort
private val queryClassroomPort: QueryClassroomPort,
private val queryAttendancePort: QueryAttendancePort
) : QueryFloorClassroomUseCase {

@Transactional(readOnly = true)
override fun queryFloorClassroom(
floor: Int,
status: Status
): List<QueryClassroomResponse> {
val classrooms = when (floor) {
2, 3, 4 -> {
queryClassroomPort.queryFloorClassroom(floor)
.filter { it.status == if (status == Status.QUIET) Status.QUIET else Status.OK }
when (floor) {
2, 3, 4, 5 -> {
val today = LocalDate.now().dayOfWeek

val dayFilter = if (today == 2 || today == 5) {
queryClassroomPort.queryFloorClassroomWithAttendance(floor)
.filter { it.status == if (status == Status.QUIET) Status.QUIET else Status.OK }
} else {
queryClassroomPort.queryFloorClassroom(floor)
.filter { it.status == if (status == Status.QUIET) Status.QUIET else Status.OK }
}

return dayFilter.map { classroom ->
val move = if (today == 2 || today == 5) {
queryAttendancePort.findByUserId(classroom.userId)?.place ?: ""
} else {
"${classroom.grade}-${classroom.classNum}"
}

QueryClassroomResponse(
id = classroom.userId,
username = classroom.userName,
classroomName = classroom.classroomName,
move = move,
grade = classroom.grade,
classNum = classroom.classNum,
num = classroom.num,
startPeriod = classroom.startPeriod,
endPeriod = classroom.endPeriod
)
}.sortedWith(compareBy({ it.grade }, { it.classNum }, { it.num }))
}
5 -> {
queryClassroomPort.findAllByStatus(status)

else -> {
throw FloorNotFoundException
}
else -> throw FloorNotFoundException
}

return classrooms.map {
QueryClassroomResponse(
id = it.userId,
username = it.userName,
classroomName = it.classroomName,
move = "${it.grade}-${it.classNum}",
grade = it.grade,
classNum = it.classNum,
num = it.num,
startPeriod = it.startPeriod,
endPeriod = it.endPeriod
)
}.sortedWith(compareBy({ it.grade }, { it.classNum }, { it.num }))
}
}
Original file line number Diff line number Diff line change
@@ -1,33 +1,44 @@
package dsm.pick2024.domain.classroom.service

import dsm.pick2024.domain.attendance.port.out.QueryAttendancePort
import dsm.pick2024.domain.classroom.port.`in`.QueryGradeClassroomUseCase
import dsm.pick2024.domain.classroom.port.out.QueryClassroomPort
import dsm.pick2024.domain.classroom.presentation.dto.response.QueryClassroomResponse
import org.joda.time.LocalDate
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional

@Service
class QueryGradeClassroomService(
private val queryClassroomPort: QueryClassroomPort
private val queryClassroomPort: QueryClassroomPort,
private val queryAttendancePort: QueryAttendancePort
) : QueryGradeClassroomUseCase {
@Transactional(readOnly = true)
override fun queryGradeClassroom(
grade: Int,
classNum: Int
) =
queryClassroomPort.queryGradeClassroom(grade, classNum)
.map {
it ->
): List<QueryClassroomResponse> {
val today = LocalDate.now().dayOfWeek

return queryClassroomPort.queryGradeClassroom(grade, classNum)
.map { classroom ->
val move = if (today == 2 || today == 5) {
queryAttendancePort.findByUserId(classroom.userId)?.place ?: ""
} else {
"${classroom.grade}-${classroom.classNum}"
}

QueryClassroomResponse(
id = it.userId,
username = it.userName,
classroomName = it.classroomName,
move = "${it.grade}-${it.classNum}",
grade = it.grade,
classNum = it.classNum,
num = it.num,
startPeriod = it.startPeriod,
endPeriod = it.endPeriod
id = classroom.userId,
username = classroom.userName,
classroomName = classroom.classroomName,
move = move,
grade = classroom.grade,
classNum = classroom.classNum,
num = classroom.num,
startPeriod = classroom.startPeriod,
endPeriod = classroom.endPeriod
)
}
}.sortedWith(compareBy({ it.grade }, { it.classNum }, { it.num }))
}
}

0 comments on commit fcfa320

Please sign in to comment.