Skip to content

Commit 103a91b

Browse files
authored
Merge pull request #107 from billilge/feat/#106
feat: 관리자 역할 관리자, 총무부, 근무자로 분리
2 parents 1596fc4 + 3a6eeac commit 103a91b

13 files changed

Lines changed: 67 additions & 14 deletions

File tree

‎build.gradle.kts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ dependencies {
7070
testImplementation("org.springframework.boot:spring-boot-starter-test")
7171
testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
7272
testImplementation("org.springframework.security:spring-security-test")
73+
runtimeOnly("com.h2database:h2")
7374
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
7475
}
7576

‎src/main/kotlin/site/billilge/api/backend/domain/item/controller/AdminItemController.kt‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ import site.billilge.api.backend.domain.item.dto.request.ItemRequest
99
import site.billilge.api.backend.domain.item.dto.response.AdminItemFindAllResponse
1010
import site.billilge.api.backend.domain.item.dto.response.ItemDetail
1111
import site.billilge.api.backend.domain.item.facade.AdminItemFacade
12+
import site.billilge.api.backend.domain.member.enums.Role
1213
import site.billilge.api.backend.global.annotation.OnlyAdmin
1314
import site.billilge.api.backend.global.dto.PageableCondition
1415
import site.billilge.api.backend.global.dto.SearchCondition
1516

1617
@RestController
1718
@RequestMapping("/admin/items")
18-
@OnlyAdmin
19+
@OnlyAdmin(roles = [Role.ADMIN, Role.GA, Role.WORKER])
1920
class AdminItemController(
2021
private val adminItemFacade: AdminItemFacade
2122
) : AdminItemApi {
@@ -32,6 +33,7 @@ class AdminItemController(
3233
)
3334
}
3435

36+
@OnlyAdmin
3537
@PostMapping(consumes = [MediaType.MULTIPART_FORM_DATA_VALUE])
3638
override fun addItem(
3739
@RequestPart image: MultipartFile,
@@ -41,6 +43,7 @@ class AdminItemController(
4143
return ResponseEntity.status(HttpStatus.CREATED).build()
4244
}
4345

46+
@OnlyAdmin
4447
@PutMapping("/{itemId}", consumes = [MediaType.MULTIPART_FORM_DATA_VALUE])
4548
override fun updateItem(
4649
@PathVariable itemId: Long,
@@ -58,6 +61,7 @@ class AdminItemController(
5861
return ResponseEntity.ok(adminItemFacade.getItemById(itemId))
5962
}
6063

64+
@OnlyAdmin
6165
@DeleteMapping("/{itemId}")
6266
override fun deleteItem(@PathVariable itemId: Long): ResponseEntity<Void> {
6367
adminItemFacade.deleteItem(itemId)

‎src/main/kotlin/site/billilge/api/backend/domain/member/controller/AdminMemberController.kt‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ import site.billilge.api.backend.domain.member.dto.request.AdminRequest
66
import site.billilge.api.backend.domain.member.dto.response.AdminFindAllResponse
77
import site.billilge.api.backend.domain.member.dto.response.MemberFindAllResponse
88
import site.billilge.api.backend.domain.member.facade.AdminMemberFacade
9+
import site.billilge.api.backend.domain.member.enums.Role
910
import site.billilge.api.backend.global.annotation.OnlyAdmin
1011
import site.billilge.api.backend.global.dto.PageableCondition
1112
import site.billilge.api.backend.global.dto.SearchCondition
1213

1314
@RestController
1415
@RequestMapping("admin/members")
15-
@OnlyAdmin
16+
@OnlyAdmin(roles = [Role.ADMIN, Role.GA, Role.WORKER])
1617
class AdminMemberController(
1718
private val adminMemberFacade: AdminMemberFacade
1819
) : AdminMemberApi {
@@ -32,12 +33,14 @@ class AdminMemberController(
3233
return ResponseEntity.ok(adminMemberFacade.getAdminList(pageableCondition, searchCondition))
3334
}
3435

36+
@OnlyAdmin
3537
@PostMapping("/admins")
3638
override fun addAdmins(@RequestBody request: AdminRequest): ResponseEntity<Void> {
3739
adminMemberFacade.addAdmins(request)
3840
return ResponseEntity.ok().build()
3941
}
4042

43+
@OnlyAdmin
4144
@DeleteMapping("/admins")
4245
override fun deleteAdmins(@RequestBody request: AdminRequest): ResponseEntity<Void> {
4346
adminMemberFacade.deleteAdmins(request)
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package site.billilge.api.backend.domain.member.dto.request
22

33
import io.swagger.v3.oas.annotations.media.Schema
4+
import site.billilge.api.backend.domain.member.enums.Role
45

56
@Schema
67
data class AdminRequest(
78
@field:Schema(description = "회원 ID 목록", example = "[1, 2, 3]")
8-
val memberIds: List<Long>
9+
val memberIds: List<Long>,
10+
@field:Schema(description = "관리자 역할", example = "ADMIN")
11+
val role: Role = Role.ADMIN,
912
)

‎src/main/kotlin/site/billilge/api/backend/domain/member/enums/Role.kt‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ enum class Role(
55
val description: String,
66
) {
77
USER("ROLE_USER", "사용자"),
8-
ADMIN("ROLE_ADMIN", "관리자")
8+
ADMIN("ROLE_ADMIN", "관리자"),
9+
WORKER("ROLE_WORKER", "근무자"),
10+
GA("ROLE_GA", "총무부"),
911
}

‎src/main/kotlin/site/billilge/api/backend/domain/member/facade/AdminMemberFacade.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class AdminMemberFacade(
2727
}
2828

2929
fun addAdmins(request: AdminRequest) {
30-
memberService.addAdmins(request.memberIds)
30+
memberService.addAdmins(request.memberIds, request.role)
3131
}
3232

3333
fun deleteAdmins(request: AdminRequest) {

‎src/main/kotlin/site/billilge/api/backend/domain/member/service/MemberService.kt‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ class MemberService(
6969
}
7070

7171
@Transactional
72-
fun addAdmins(memberIds: List<Long>) {
72+
fun addAdmins(memberIds: List<Long>, role: Role) {
7373
memberRepository.findAllByIds(memberIds)
7474
.forEach { member ->
75-
member.updateRole(Role.ADMIN)
75+
member.updateRole(role)
7676
}
7777
}
7878

@@ -125,7 +125,7 @@ class MemberService(
125125
if (password != adminPassword)
126126
throw ApiException(MemberErrorCode.ADMIN_PASSWORD_MISMATCH)
127127

128-
if (member.role != Role.ADMIN)
128+
if (member.role !in listOf(Role.ADMIN, Role.GA, Role.WORKER))
129129
throw ApiException(MemberErrorCode.FORBIDDEN)
130130

131131
return tokenProvider.generateToken(member, Duration.ofDays(30))

‎src/main/kotlin/site/billilge/api/backend/domain/notification/controller/AdminNotificationController.kt‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ import org.springframework.web.bind.annotation.RequestMapping
77
import org.springframework.web.bind.annotation.RestController
88
import site.billilge.api.backend.domain.notification.dto.response.NotificationFindAllResponse
99
import site.billilge.api.backend.domain.notification.facade.AdminNotificationFacade
10+
import site.billilge.api.backend.domain.member.enums.Role
1011
import site.billilge.api.backend.global.annotation.OnlyAdmin
1112
import site.billilge.api.backend.global.security.oauth2.UserAuthInfo
1213

13-
@OnlyAdmin
14+
@OnlyAdmin(roles = [Role.ADMIN, Role.GA, Role.WORKER])
1415
@RestController
1516
@RequestMapping("/admin/notifications")
1617
class AdminNotificationController(

‎src/main/kotlin/site/billilge/api/backend/domain/payer/controller/AdminPayerController.kt‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import site.billilge.api.backend.domain.payer.dto.request.PayerDeleteRequest
1010
import site.billilge.api.backend.domain.payer.dto.request.PayerRequest
1111
import site.billilge.api.backend.domain.payer.dto.response.PayerFindAllResponse
1212
import site.billilge.api.backend.domain.payer.facade.AdminPayerFacade
13+
import site.billilge.api.backend.domain.member.enums.Role
1314
import site.billilge.api.backend.global.annotation.OnlyAdmin
1415
import site.billilge.api.backend.global.dto.PageableCondition
1516
import site.billilge.api.backend.global.dto.SearchCondition
@@ -18,7 +19,7 @@ import java.time.format.DateTimeFormatter
1819

1920
@RestController
2021
@RequestMapping("/admin/members/payers")
21-
@OnlyAdmin
22+
@OnlyAdmin(roles = [Role.ADMIN, Role.GA])
2223
class AdminPayerController(
2324
private val adminPayerFacade: AdminPayerFacade
2425
) : AdminPayerApi {

‎src/main/kotlin/site/billilge/api/backend/domain/rental/controller/AdminRentalController.kt‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ import site.billilge.api.backend.domain.rental.dto.response.AdminRentalHistoryFi
99
import site.billilge.api.backend.domain.rental.dto.response.DashboardResponse
1010
import site.billilge.api.backend.domain.rental.enums.RentalStatus
1111
import site.billilge.api.backend.domain.rental.facade.AdminRentalFacade
12+
import site.billilge.api.backend.domain.member.enums.Role
1213
import site.billilge.api.backend.global.annotation.OnlyAdmin
1314
import site.billilge.api.backend.global.dto.PageableCondition
1415
import site.billilge.api.backend.global.dto.SearchCondition
1516
import site.billilge.api.backend.global.security.oauth2.UserAuthInfo
1617

1718
@RestController
1819
@RequestMapping("/admin/rentals")
19-
@OnlyAdmin
20+
@OnlyAdmin(roles = [Role.ADMIN, Role.GA, Role.WORKER])
2021
class AdminRentalController(
2122
private val adminRentalFacade: AdminRentalFacade
2223
) : AdminRentalApi {
@@ -53,6 +54,7 @@ class AdminRentalController(
5354
return ResponseEntity.ok().build()
5455
}
5556

57+
@OnlyAdmin
5658
@DeleteMapping("/{rentalHistoryId}")
5759
override fun deleteRentalHistory(@PathVariable rentalHistoryId: Long): ResponseEntity<Void> {
5860
adminRentalFacade.deleteRentalHistory(rentalHistoryId)

0 commit comments

Comments
 (0)