package com.tourguide.api.admin; import com.tourguide.common.api.ApiResponse; import com.tourguide.common.api.PageResponse; import com.tourguide.modules.user.dto.GuideTeamResponse; import com.tourguide.modules.user.dto.GuideTeamCollectionGuideResponse; import com.tourguide.modules.user.dto.GuideTeamSaveRequest; import com.tourguide.modules.user.dto.UserStatusRequest; import com.tourguide.modules.user.service.GuideTeamService; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.time.LocalDate; import java.util.List; /** * 管理后台讲解队管理接口。 * 维护讲解队基础资料、队员与景区服务配置,并提供讲解队停启控制。 */ @RestController @RequestMapping("/api/admin/guide-teams") public class AdminGuideTeamController { private final GuideTeamService teamService; public AdminGuideTeamController(GuideTeamService teamService) { this.teamService = teamService; } /** * 分页查询讲解队,支持按名称等关键字、状态和创建日期筛选。 * * @param page 页码,从 1 开始 * @param size 每页记录数 * @param keyword 讲解队名称或负责人等关键字 * @param status 启用或禁用状态 * @param startDate 创建日期起始值,包含当天 * @param endDate 创建日期结束值,包含当天 * @return 讲解队分页结果 */ @GetMapping public ApiResponse> page(@RequestParam(defaultValue = "1") long page, @RequestParam(defaultValue = "10") long size, @RequestParam(required = false) String keyword, @RequestParam(required = false) Integer status, @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate, @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate) { return ApiResponse.success(teamService.page(page, size, keyword, status, startDate, endDate)); } /** * 查询指定讲解队的基础资料、成员及景区配置。 * * @param id 讲解队主键 * @return 讲解队完整详情 */ @GetMapping("/{id}") public ApiResponse detail(@PathVariable Long id) { return ApiResponse.success(teamService.detail(id)); } @GetMapping("/{id}/collection-guide-options") public ApiResponse> collectionGuideOptions(@PathVariable Long id) { return ApiResponse.success(teamService.collectionGuideOptions(id)); } /** * 新建讲解队并保存成员及景区服务配置。 * * @param request 讲解队基础资料和关联配置 * @return 新建后的讲解队详情 */ @PostMapping public ApiResponse create(@Valid @RequestBody GuideTeamSaveRequest request) { return ApiResponse.success(teamService.create(request)); } /** * 更新指定讲解队的基础资料、成员及景区服务配置。 * * @param id 讲解队主键 * @param request 最新讲解队资料和关联配置 * @return 更新后的讲解队详情 */ @PutMapping("/{id}") public ApiResponse update(@PathVariable Long id, @Valid @RequestBody GuideTeamSaveRequest request) { return ApiResponse.success(teamService.update(id, request)); } /** * 启用或禁用指定讲解队,状态值由统一状态请求模型校验。 * * @param id 讲解队主键 * @param request 目标状态,1 为启用、0 为禁用 * @return 无业务数据的成功响应 */ @PutMapping("/{id}/status") public ApiResponse updateStatus(@PathVariable Long id, @Valid @RequestBody UserStatusRequest request) { teamService.updateStatus(id, request.getStatus()); return ApiResponse.success(); } }