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> 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> 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> 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 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 publish(@Valid ItemPublishRequest req, HttpSession session) { return Result.success(itemService.publish(req, session)); } @Operation(summary = "我的发布列表") @GetMapping("/my") public Result> myItems(HttpSession session) { return Result.success(itemService.myItems(session)); } @Operation(summary = "下架物品", description = "卖家下架自己的物品") @PutMapping("/{id}/offline") public Result offline(@Parameter(description = "物品ID") @PathVariable Long id, HttpSession session) { itemService.offline(id, session); return Result.success(); } @Operation(summary = "删除物品", description = "卖家删除自己的物品") @DeleteMapping("/{id}") public Result delete(@Parameter(description = "物品ID") @PathVariable Long id, HttpSession session) { itemService.delete(id, session); return Result.success(); } }