ItemController.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package com.campus.trade.controller;
  2. import com.campus.trade.common.Result;
  3. import com.campus.trade.dto.ItemPublishRequest;
  4. import com.campus.trade.service.ItemService;
  5. import com.campus.trade.vo.ItemVO;
  6. import com.campus.trade.vo.PageResult;
  7. import io.swagger.v3.oas.annotations.Operation;
  8. import io.swagger.v3.oas.annotations.Parameter;
  9. import io.swagger.v3.oas.annotations.tags.Tag;
  10. import jakarta.servlet.http.HttpSession;
  11. import jakarta.validation.Valid;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.http.MediaType;
  14. import org.springframework.web.bind.annotation.*;
  15. import java.util.List;
  16. @RestController
  17. @RequestMapping("/items")
  18. @Tag(name = "Items", description = "物品发布、浏览、搜索、管理")
  19. public class ItemController {
  20. @Autowired
  21. private ItemService itemService;
  22. @Operation(summary = "首页物品列表", description = "按发布时间倒序,分页返回")
  23. @GetMapping
  24. public Result<PageResult<ItemVO>> list(@RequestParam(defaultValue = "1") int pageNum,
  25. @RequestParam(defaultValue = "10") int pageSize) {
  26. return Result.success(PageResult.of(itemService.list(pageNum, pageSize)));
  27. }
  28. @Operation(summary = "搜索物品", description = "按标题/描述模糊匹配")
  29. @GetMapping("/search")
  30. public Result<PageResult<ItemVO>> search(@RequestParam String keyword,
  31. @RequestParam(defaultValue = "1") int pageNum,
  32. @RequestParam(defaultValue = "10") int pageSize) {
  33. return Result.success(PageResult.of(itemService.search(keyword, pageNum, pageSize)));
  34. }
  35. @Operation(summary = "按分类筛选")
  36. @GetMapping("/category/{id}")
  37. public Result<PageResult<ItemVO>> byCategory(@Parameter(description = "分类ID") @PathVariable Long id,
  38. @RequestParam(defaultValue = "1") int pageNum,
  39. @RequestParam(defaultValue = "10") int pageSize) {
  40. return Result.success(PageResult.of(itemService.byCategory(id, pageNum, pageSize)));
  41. }
  42. @Operation(summary = "物品详情")
  43. @GetMapping("/{id}")
  44. public Result<ItemVO> detail(@Parameter(description = "物品ID") @PathVariable Long id) {
  45. return Result.success(itemService.detail(id));
  46. }
  47. @Operation(summary = "发布物品", description = "需要实名认证,图片以 multipart 上传")
  48. @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
  49. public Result<Long> publish(@Valid ItemPublishRequest req, HttpSession session) {
  50. return Result.success(itemService.publish(req, session));
  51. }
  52. @Operation(summary = "我的发布列表")
  53. @GetMapping("/my")
  54. public Result<List<ItemVO>> myItems(HttpSession session) {
  55. return Result.success(itemService.myItems(session));
  56. }
  57. @Operation(summary = "下架物品", description = "卖家下架自己的物品")
  58. @PutMapping("/{id}/offline")
  59. public Result<Void> offline(@Parameter(description = "物品ID") @PathVariable Long id, HttpSession session) {
  60. itemService.offline(id, session);
  61. return Result.success();
  62. }
  63. @Operation(summary = "删除物品", description = "卖家删除自己的物品")
  64. @DeleteMapping("/{id}")
  65. public Result<Void> delete(@Parameter(description = "物品ID") @PathVariable Long id, HttpSession session) {
  66. itemService.delete(id, session);
  67. return Result.success();
  68. }
  69. }