package com.tourguide.api.admin; import com.tourguide.common.api.ApiResponse; import com.tourguide.common.api.PageResponse; import com.tourguide.modules.user.dto.GuideApplicationResponse; import com.tourguide.modules.user.dto.GuideAuditRequest; import com.tourguide.modules.user.service.GuideApplicationService; import com.tourguide.security.AppUserPrincipal; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.time.LocalDate; /** * 管理后台导游入驻申请查询与审核接口。 * 审核操作会记录审核人和审核意见,并由业务层控制申请状态流转及通过后的账号处理。 */ @RestController @RequestMapping("/api/admin/guide-applications") public class AdminGuideApplicationController { private final GuideApplicationService applicationService; public AdminGuideApplicationController(GuideApplicationService applicationService) { this.applicationService = applicationService; } /** * 分页查询导游入驻申请,支持按申请信息、审核状态和提交日期筛选。 * * @param page 页码,从 1 开始 * @param size 每页记录数 * @param keyword 申请编号、真实姓名或手机号关键字 * @param auditStatus 审核状态 * @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 auditStatus, @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate, @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate) { return ApiResponse.success(applicationService.page(page, size, keyword, auditStatus, startDate, endDate)); } /** * 查询指定导游入驻申请的身份资料和审核信息。 * * @param id 导游申请主键 * @return 导游申请详情 */ @GetMapping("/{id}") public ApiResponse detail(@PathVariable Long id) { return ApiResponse.success(applicationService.detail(id)); } /** * 审核指定导游入驻申请,并记录当前后台操作人。 * 审核状态、驳回原因和重复审核限制由业务层统一校验。 * * @param id 导游申请主键 * @param request 审核状态和审核意见 * @param principal 当前后台登录用户身份 * @return 审核后的导游申请详情 */ @PutMapping("/{id}/audit") public ApiResponse audit(@PathVariable Long id, @Valid @RequestBody GuideAuditRequest request, @AuthenticationPrincipal AppUserPrincipal principal) { return ApiResponse.success(applicationService.audit( id, request.getAuditStatus(), request.getAuditRemark(), principal.getUsername())); } }