bc4f7ac8cc
- 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
89 lines
3.0 KiB
Kotlin
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)
|
|
}
|
|
}
|