Skip to content

Commit 1542d9e

Browse files
committed
feat: 관리자 비밀번호 수정 api 구현
1 parent 93f02a5 commit 1542d9e

6 files changed

Lines changed: 47 additions & 0 deletions

File tree

src/main/kotlin/site/billilge/api/backend/domain/configvalue/controller/AdminConfigValueApi.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.tags.Tag
77
import org.springframework.http.ResponseEntity
88
import org.springframework.web.bind.annotation.RequestBody
99
import org.springframework.web.bind.annotation.RequestParam
10+
import site.billilge.api.backend.domain.configvalue.dto.request.ChangeAdminPasswordRequest
1011
import site.billilge.api.backend.domain.configvalue.dto.request.ConfigValueBulkUpdateRequest
1112
import site.billilge.api.backend.domain.configvalue.dto.request.ConfigValueUpdateRequest
1213
import site.billilge.api.backend.domain.configvalue.dto.response.ConfigValueDetail
@@ -58,4 +59,16 @@ interface AdminConfigValueApi {
5859
]
5960
)
6061
fun updateAll(@RequestBody request: ConfigValueBulkUpdateRequest): ResponseEntity<Void>
62+
63+
@Operation(
64+
summary = "관리자 비밀번호 변경",
65+
description = "현재 비밀번호를 검증 후 새 비밀번호로 변경하는 API"
66+
)
67+
@ApiResponses(
68+
value = [
69+
ApiResponse(responseCode = "200", description = "비밀번호 변경 성공"),
70+
ApiResponse(responseCode = "400", description = "현재 비밀번호가 일치하지 않습니다.")
71+
]
72+
)
73+
fun changeAdminPassword(@RequestBody request: ChangeAdminPasswordRequest): ResponseEntity<Void>
6174
}

src/main/kotlin/site/billilge/api/backend/domain/configvalue/controller/AdminConfigValueController.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package site.billilge.api.backend.domain.configvalue.controller
22

33
import org.springframework.http.ResponseEntity
44
import org.springframework.web.bind.annotation.*
5+
import site.billilge.api.backend.domain.configvalue.dto.request.ChangeAdminPasswordRequest
56
import site.billilge.api.backend.domain.configvalue.dto.request.ConfigValueBulkUpdateRequest
67
import site.billilge.api.backend.domain.configvalue.dto.request.ConfigValueUpdateRequest
78
import site.billilge.api.backend.domain.configvalue.dto.response.ConfigValueDetail
@@ -38,4 +39,10 @@ class AdminConfigValueController(
3839
configValueFacade.updateAll(request)
3940
return ResponseEntity.ok().build()
4041
}
42+
43+
@PatchMapping("/password")
44+
override fun changeAdminPassword(@RequestBody request: ChangeAdminPasswordRequest): ResponseEntity<Void> {
45+
configValueFacade.changeAdminPassword(request)
46+
return ResponseEntity.ok().build()
47+
}
4148
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package site.billilge.api.backend.domain.configvalue.dto.request
2+
3+
import io.swagger.v3.oas.annotations.media.Schema
4+
5+
@Schema
6+
data class ChangeAdminPasswordRequest(
7+
@field:Schema(description = "현재 비밀번호", example = "0412")
8+
val currentPassword: String,
9+
@field:Schema(description = "새 비밀번호", example = "1234")
10+
val newPassword: String,
11+
)

src/main/kotlin/site/billilge/api/backend/domain/configvalue/exception/ConfigValueErrorCode.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ enum class ConfigValueErrorCode(
88
override val httpStatus: HttpStatus
99
) : ErrorCode {
1010
CONFIG_VALUE_NOT_FOUND("설정값을 찾을 수 없습니다.", HttpStatus.NOT_FOUND),
11+
ADMIN_PASSWORD_MISMATCH("현재 비밀번호가 일치하지 않습니다.", HttpStatus.BAD_REQUEST),
1112
}

src/main/kotlin/site/billilge/api/backend/domain/configvalue/facade/ConfigValueFacade.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package site.billilge.api.backend.domain.configvalue.facade
22

33
import org.springframework.stereotype.Component
4+
import site.billilge.api.backend.domain.configvalue.dto.request.ChangeAdminPasswordRequest
45
import site.billilge.api.backend.domain.configvalue.dto.request.ConfigValueBulkUpdateRequest
56
import site.billilge.api.backend.domain.configvalue.dto.request.ConfigValueUpdateRequest
67
import site.billilge.api.backend.domain.configvalue.dto.response.ConfigValueDetail
@@ -27,4 +28,8 @@ class ConfigValueFacade(
2728
fun updateAll(request: ConfigValueBulkUpdateRequest) {
2829
request.configValues.forEach { configValueService.upsert(it.key, it.value) }
2930
}
31+
32+
fun changeAdminPassword(request: ChangeAdminPasswordRequest) {
33+
configValueService.changeAdminPassword(request.currentPassword, request.newPassword)
34+
}
3035
}

src/main/kotlin/site/billilge/api/backend/domain/configvalue/service/ConfigValueService.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package site.billilge.api.backend.domain.configvalue.service
33
import org.springframework.stereotype.Service
44
import org.springframework.transaction.annotation.Transactional
55
import site.billilge.api.backend.domain.configvalue.entity.ConfigValue
6+
import site.billilge.api.backend.domain.configvalue.enums.ConfigValueKeys
67
import site.billilge.api.backend.domain.configvalue.exception.ConfigValueErrorCode
78
import site.billilge.api.backend.domain.configvalue.repository.ConfigValueRepository
89
import site.billilge.api.backend.global.exception.ApiException
@@ -39,4 +40,13 @@ class ConfigValueService(
3940
configValueRepository.save(ConfigValue(key = key, value = value))
4041
}
4142
}
43+
44+
@Transactional
45+
fun changeAdminPassword(currentPassword: String, newPassword: String) {
46+
val configValue = getByKey(ConfigValueKeys.ADMIN_PASSWORD.key)
47+
if (configValue.value != currentPassword) {
48+
throw ApiException(ConfigValueErrorCode.ADMIN_PASSWORD_MISMATCH)
49+
}
50+
configValue.updateValue(newPassword)
51+
}
4252
}

0 commit comments

Comments
 (0)