Files
bookMgr/src/main/kotlin/com/msksbr/bookmgr/controller/AdminBookController.kt
T
msksbr bc4f7ac8cc refactor(admin-book): rename Result to ApiResult and tighten return types
- Replace `Result` with `ApiResult` across admin book/borrow modules
- Change return type from `Result<Any?>` to `ApiResult<String>`
- Reformat multi-arg log statements for readability
2026-05-23 21:43:40 +08:00

89 lines
3.0 KiB
Kotlin

package com.msksbr.bookmgr.controller
import com.msksbr.bookmgr.annotation.RequireRole
import com.msksbr.bookmgr.config.IpExtractor
import com.msksbr.bookmgr.dto.BookAddDto
import com.msksbr.bookmgr.dto.BookUpdateDto
import com.msksbr.bookmgr.script.log
import com.msksbr.bookmgr.service.AdminBookService
import com.msksbr.bookmgr.template.ApiResult
import jakarta.servlet.http.HttpServletRequest
import jakarta.validation.Valid
import org.springframework.web.bind.annotation.*
/*
* 图书管理接口(面向管理员)
* 路径前缀:/api/admin/books
*
* 接口:
* - 新增图书
* - 修改图书信息
* - 删除图书
* - 调整库存
*
* 全部接口需 admin 角色,由 @RequireRole 切面校验
*/
@RestController
@RequestMapping("/api/admin/books")
class AdminBookController(private val adminBookService: AdminBookService, private val ipExtractor: IpExtractor) {
@RequireRole("admin")
@PostMapping("/add")
fun addBook(
@Valid
@RequestBody
bookAddDto: BookAddDto,
request: HttpServletRequest,
@RequestAttribute(required = false) username: String?
): ApiResult<String> {
log.info(
"[AdminBook] add: user={}, name={}, author={}",
username ?: "guest",
bookAddDto.name,
bookAddDto.author
)
log.info("[AdminBook] user agent: {}, ip={}", request.getHeader("User-Agent"), ipExtractor.getRealIp(request))
return adminBookService.addBook(bookAddDto)
}
@RequireRole("admin")
@PostMapping("/update")
fun updateBook(
id: Long,
@Valid
@RequestBody
bookUpdateDto: BookUpdateDto,
request: HttpServletRequest,
@RequestAttribute(required = false) username: String?
): ApiResult<String> {
log.info("[AdminBook] update: user={}, id={}", username ?: "guest", id)
log.info("[AdminBook] user agent: {}, ip={}", request.getHeader("User-Agent"), ipExtractor.getRealIp(request))
return adminBookService.updateBook(id, bookUpdateDto)
}
@RequireRole("admin")
@PostMapping("/delete")
fun deleteBook(
id: Long,
request: HttpServletRequest,
@RequestAttribute(required = false) username: String?
): ApiResult<String> {
log.info("[AdminBook] delete: user={}, id={}", username ?: "guest", id)
log.info("[AdminBook] user agent: {}, ip={}", request.getHeader("User-Agent"), ipExtractor.getRealIp(request))
return adminBookService.deleteBook(id)
}
@RequireRole("admin")
@PostMapping("/update-stock")
fun updateStock(
id: Long,
stock: Int,
request: HttpServletRequest,
@RequestAttribute(required = false) username: String?
): ApiResult<String> {
log.info("[AdminBook] updateStock: user={}, id={}, stock={}", username ?: "guest", id, stock)
log.info("[AdminBook] user agent: {}, ip={}", request.getHeader("User-Agent"), ipExtractor.getRealIp(request))
return adminBookService.updateStock(id, stock)
}
}