| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package com.campus.trade.controller;
- import com.campus.trade.common.Result;
- import com.campus.trade.dto.ItemPublishRequest;
- import com.campus.trade.service.ItemService;
- import com.campus.trade.vo.ItemVO;
- import com.campus.trade.vo.PageResult;
- import io.swagger.v3.oas.annotations.Operation;
- import io.swagger.v3.oas.annotations.Parameter;
- import io.swagger.v3.oas.annotations.tags.Tag;
- import jakarta.servlet.http.HttpSession;
- import jakarta.validation.Valid;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.http.MediaType;
- import org.springframework.web.bind.annotation.*;
- import java.util.List;
- @RestController
- @RequestMapping("/items")
- @Tag(name = "Items", description = "物品发布、浏览、搜索、管理")
- public class ItemController {
- @Autowired
- private ItemService itemService;
- @Operation(summary = "首页物品列表", description = "按发布时间倒序,分页返回")
- @GetMapping
- public Result<PageResult<ItemVO>> list(@RequestParam(defaultValue = "1") int pageNum,
- @RequestParam(defaultValue = "10") int pageSize) {
- return Result.success(PageResult.of(itemService.list(pageNum, pageSize)));
- }
- @Operation(summary = "搜索物品", description = "按标题/描述模糊匹配")
- @GetMapping("/search")
- public Result<PageResult<ItemVO>> search(@RequestParam String keyword,
- @RequestParam(defaultValue = "1") int pageNum,
- @RequestParam(defaultValue = "10") int pageSize) {
- return Result.success(PageResult.of(itemService.search(keyword, pageNum, pageSize)));
- }
- @Operation(summary = "按分类筛选")
- @GetMapping("/category/{id}")
- public Result<PageResult<ItemVO>> byCategory(@Parameter(description = "分类ID") @PathVariable Long id,
- @RequestParam(defaultValue = "1") int pageNum,
- @RequestParam(defaultValue = "10") int pageSize) {
- return Result.success(PageResult.of(itemService.byCategory(id, pageNum, pageSize)));
- }
- @Operation(summary = "物品详情")
- @GetMapping("/{id}")
- public Result<ItemVO> detail(@Parameter(description = "物品ID") @PathVariable Long id) {
- return Result.success(itemService.detail(id));
- }
- @Operation(summary = "发布物品", description = "需要实名认证,图片以 multipart 上传")
- @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
- public Result<Long> publish(@Valid ItemPublishRequest req, HttpSession session) {
- return Result.success(itemService.publish(req, session));
- }
- @Operation(summary = "我的发布列表")
- @GetMapping("/my")
- public Result<List<ItemVO>> myItems(HttpSession session) {
- return Result.success(itemService.myItems(session));
- }
- @Operation(summary = "下架物品", description = "卖家下架自己的物品")
- @PutMapping("/{id}/offline")
- public Result<Void> offline(@Parameter(description = "物品ID") @PathVariable Long id, HttpSession session) {
- itemService.offline(id, session);
- return Result.success();
- }
- @Operation(summary = "删除物品", description = "卖家删除自己的物品")
- @DeleteMapping("/{id}")
- public Result<Void> delete(@Parameter(description = "物品ID") @PathVariable Long id, HttpSession session) {
- itemService.delete(id, session);
- return Result.success();
- }
- }
|