Skip to content

Commit ea67229

Browse files
authored
Merge pull request #445 from DSM-PICK/develop
merge into develop
2 parents a2b7c15 + f5e5568 commit ea67229

File tree

44 files changed

+344
-85
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+344
-85
lines changed

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ dependencies {
8383
implementation(Dependencies.FCM)
8484

8585
implementation(Dependencies.WEB_SOCKET)
86+
87+
implementation(Dependencies.GOOGLE_OAUTH)
8688
}
8789

8890
tasks.withType<KotlinCompile> {

buildSrc/src/main/kotlin/Dependencies.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,7 @@ object Dependencies {
5757

5858
const val WEB_SOCKET = "org.springframework.boot:spring-boot-starter-websocket"
5959

60+
const val GOOGLE_OAUTH = "com.google.auth:google-auth-library-oauth2-http:${DependencyVersions.GOOGLE_OAUTH2}"
61+
62+
6063
}

buildSrc/src/main/kotlin/DependencyVersions.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ object DependencyVersions {
1212
const val GSON = "2.8.7"
1313
const val AWS = "1.12.281"
1414
const val FCM = "8.1.0"
15+
const val GOOGLE_OAUTH2 = "1.17.0"
1516
}

src/main/kotlin/dsm/pick2024/domain/admin/service/AdminLoginService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import dsm.pick2024.domain.user.entity.enums.Role
1212
import dsm.pick2024.domain.user.exception.PasswordMissMatchException
1313
import dsm.pick2024.global.security.jwt.JwtTokenProvider
1414
import dsm.pick2024.global.security.jwt.dto.TokenResponse
15-
import dsm.pick2024.infrastructure.feign.client.XquareFeignClient
16-
import dsm.pick2024.infrastructure.feign.client.dto.request.XquareRequest
15+
import dsm.pick2024.infrastructure.feign.xquare.client.XquareFeignClient
16+
import dsm.pick2024.infrastructure.feign.xquare.dto.request.XquareRequest
1717
import io.swagger.v3.oas.annotations.tags.Tag
1818
import org.springframework.security.crypto.password.PasswordEncoder
1919
import org.springframework.stereotype.Service

src/main/kotlin/dsm/pick2024/domain/application/persistence/ApplicationPersistenceAdapter.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ class ApplicationPersistenceAdapter(
3838
) =
3939
applicationRepository.existsByStatusAndUserIdAndApplicationKind(status, userId, applicationKind)
4040

41-
override fun findByIdAndApplicationKind(id: UUID, applicationKind: ApplicationKind) =
42-
applicationRepository.findById(id).let { applicationMapper.toDomain(it) }
41+
override fun findById(id: UUID): Application? {
42+
return applicationRepository.findById(id)?.let { applicationMapper.toDomain(it) }
43+
}
4344

4445
override fun deleteByIdAndApplicationKind(applicationId: UUID, applicationKind: ApplicationKind) {
4546
applicationRepository.deleteByIdAndApplicationKind(applicationId, applicationKind)
@@ -52,7 +53,11 @@ class ApplicationPersistenceAdapter(
5253
applicationRepository.deleteAllByApplicationKind(applicationKind)
5354
}
5455

55-
override fun findByUserId(id: UUID) = applicationRepository.findById(id).let { applicationMapper.toDomain(it) }
56+
override fun findByUserId(userId: UUID) = applicationRepository.findById(userId)?.let {
57+
applicationMapper.toDomain(
58+
it
59+
)
60+
}
5661

5762
override fun findAllByApplicationKind(applicationKind: ApplicationKind) =
5863
applicationRepository.findAllByApplicationKind(applicationKind).map { applicationMapper.toDomain(it) }
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package dsm.pick2024.domain.application.persistence.finder
2+
3+
import dsm.pick2024.domain.application.domain.Application
4+
import dsm.pick2024.domain.application.exception.ApplicationNotFoundException
5+
import dsm.pick2024.domain.application.port.`in`.ApplicationFinderUseCase
6+
import dsm.pick2024.domain.application.port.out.QueryApplicationPort
7+
import org.springframework.stereotype.Component
8+
import java.util.*
9+
10+
@Component
11+
class ApplicationFinder(
12+
private val queryApplicationPort: QueryApplicationPort
13+
) : ApplicationFinderUseCase {
14+
override fun findByIdOrThrow(id: UUID) = queryApplicationPort.findById(id) ?: throw ApplicationNotFoundException
15+
override fun findByUserIdOrThrow(id: UUID): Application {
16+
return queryApplicationPort.findByUserId(id) ?: throw ApplicationNotFoundException
17+
}
18+
}

src/main/kotlin/dsm/pick2024/domain/application/persistence/repository/ApplicationRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ interface ApplicationRepository : Repository<ApplicationJapEntity, UUID> {
2222

2323
fun saveAll(entity: Iterable<ApplicationJapEntity>)
2424

25-
fun findById(id: UUID): ApplicationJapEntity
25+
fun findById(id: UUID): ApplicationJapEntity?
2626

2727
fun findByUserId(userId: UUID): ApplicationJapEntity
2828

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package dsm.pick2024.domain.application.port.`in`
2+
3+
import dsm.pick2024.domain.application.domain.Application
4+
import java.util.*
5+
6+
interface ApplicationFinderUseCase {
7+
fun findByIdOrThrow(id: UUID): Application
8+
fun findByUserIdOrThrow(id: UUID): Application
9+
}

src/main/kotlin/dsm/pick2024/domain/application/port/out/QueryApplicationPort.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import java.util.*
88
interface QueryApplicationPort {
99
fun findByUserId(userId: UUID): Application?
1010

11-
fun findByIdAndApplicationKind(id: UUID, applicationKind: ApplicationKind): Application?
11+
fun findById(id: UUID): Application?
1212

1313
fun findByGradeAndClassNumAndApplicationKind(
1414
grade: Int,

src/main/kotlin/dsm/pick2024/domain/application/service/ChangeApplicationStatusService.kt

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import dsm.pick2024.domain.application.domain.Application
55
import dsm.pick2024.domain.application.enums.ApplicationKind
66
import dsm.pick2024.domain.application.enums.Status
77
import dsm.pick2024.domain.event.dto.ChangeStatusRequest
8-
import dsm.pick2024.domain.application.exception.ApplicationNotFoundException
8+
import dsm.pick2024.domain.application.port.`in`.ApplicationFinderUseCase
99
import dsm.pick2024.domain.application.port.`in`.ChangeApplicationStatusUseCase
1010
import dsm.pick2024.domain.application.port.out.DeleteApplicationPort
1111
import dsm.pick2024.domain.application.port.out.QueryApplicationPort
@@ -18,6 +18,8 @@ import dsm.pick2024.domain.attendance.domain.service.AttendanceService
1818
import dsm.pick2024.domain.attendance.port.out.QueryAttendancePort
1919
import dsm.pick2024.domain.attendance.port.out.SaveAttendancePort
2020
import dsm.pick2024.domain.event.enums.EventTopic
21+
import dsm.pick2024.domain.fcm.port.`in`.FcmSendMessageUseCase
22+
import dsm.pick2024.domain.user.port.`in`.UserFacadeUseCase
2123
import org.springframework.context.ApplicationEventPublisher
2224
import org.springframework.stereotype.Service
2325
import org.springframework.transaction.annotation.Transactional
@@ -33,18 +35,38 @@ class ChangeApplicationStatusService(
3335
private val saveAttendancePort: SaveAttendancePort,
3436
private val queryAttendancePort: QueryAttendancePort,
3537
private val attendanceService: AttendanceService,
36-
private val eventPublisher: ApplicationEventPublisher
38+
private val eventPublisher: ApplicationEventPublisher,
39+
private val sendMessageUseCase: FcmSendMessageUseCase,
40+
private val userFacadeUseCase: UserFacadeUseCase,
41+
private val applicationFinderUseCase: ApplicationFinderUseCase
3742
) : ChangeApplicationStatusUseCase {
3843

3944
@Transactional
4045
override fun changeStatusApplication(request: ApplicationStatusRequest) {
4146
val admin = adminFacadeUseCase.currentAdmin()
47+
val applications = request.idList.map { findApplicationById(it) }
48+
val deviceTokens = applications.mapNotNull {
49+
userFacadeUseCase.getUserByXquareId(
50+
it.userId
51+
).deviceToken
52+
}.filter { it.isNotBlank() }
53+
54+
when (request.status) {
55+
Status.NO -> {
56+
sendMessageUseCase.execute(deviceTokens, "외출 신청 반려 안내", "${admin.name} 선생님이 외출 신청을 반려하셨습니다.")
57+
}
58+
Status.OK -> {
59+
sendMessageUseCase.execute(deviceTokens, "외출 신청 승인 안내", "${admin.name} 선생님이 외출 신청을 승인하셨습니다.")
60+
}
61+
else -> {
62+
}
63+
}
64+
4265
if (request.status == Status.NO) {
4366
handleStatusNo(request.idList)
4467
} else {
45-
val updateApplicationList = request.idList.map { id ->
46-
val application = findApplicationById(id)
47-
updateApplication(application, admin.name)
68+
val updateApplicationList = applications.map {
69+
updateApplication(it, admin.name)
4870
}
4971

5072
val applicationStory = updateApplicationList.map { it ->
@@ -75,8 +97,7 @@ class ChangeApplicationStatusService(
7597
}
7698

7799
private fun findApplicationById(id: UUID): Application {
78-
return queryApplicationPort.findByIdAndApplicationKind(id, ApplicationKind.APPLICATION)
79-
?: throw ApplicationNotFoundException
100+
return applicationFinderUseCase.findByIdOrThrow(id)
80101
}
81102

82103
private fun updateApplication(application: Application, adminName: String): Application {

0 commit comments

Comments
 (0)