feat(admin-books): implement book CRUD management endpoints
- Add book with name, author, and stock validation - Update existing book information - Delete book by ID - Adjust book inventory stock - Rename AdminDashBoardService to DashBoardService - Remove hardcoded user seed data from SQL schema
This commit is contained in:
@@ -1,17 +1,83 @@
|
||||
package com.msksbr.bookmgr.controller
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
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.Result
|
||||
import jakarta.servlet.http.HttpServletRequest
|
||||
import jakarta.validation.Valid
|
||||
import org.springframework.web.bind.annotation.*
|
||||
|
||||
/*
|
||||
* 图书管理接口(面向管理员)
|
||||
* 路径前缀(待定):/api/admin/books
|
||||
* 路径前缀:/api/admin/books
|
||||
*
|
||||
* 计划接口:
|
||||
* 接口:
|
||||
* - 新增图书
|
||||
* - 修改图书信息
|
||||
* - 删除图书
|
||||
* - 调整库存
|
||||
*
|
||||
* 全部接口需 admin 角色,由 @RequireRole 切面校验
|
||||
*/
|
||||
@RestController
|
||||
class AdminBookController {
|
||||
@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?
|
||||
): Result<Any?> {
|
||||
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?
|
||||
): Result<Any?> {
|
||||
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?
|
||||
): Result<Any?> {
|
||||
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?
|
||||
): Result<Any?> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user