package com.tourguide.api.admin; import com.tourguide.common.api.ApiResponse; import com.tourguide.common.api.PageResponse; import com.tourguide.modules.user.dto.MiniUserDetailResponse; import com.tourguide.modules.user.dto.MiniUserResponse; import com.tourguide.modules.user.dto.UserStatusRequest; import com.tourguide.modules.user.service.MiniUserService; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.time.LocalDate; /** * 管理后台游客账号管理接口。 * 仅管理 mini_user 表中的小程序游客资料和账号状态,不与后台或导游账号混用。 */ @RestController @RequestMapping("/api/admin/mini-users") public class AdminMiniUserController { private final MiniUserService userService; public AdminMiniUserController(MiniUserService userService) { this.userService = userService; } /** * 分页查询小程序游客,支持按用户信息、状态和注册日期筛选。 * * @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(userService.page(page, size, keyword, status, startDate, endDate)); } /** * 查询指定游客的账号资料及关联业务统计信息。 * * @param id 游客账号主键 * @return 游客完整详情 */ @GetMapping("/{id}") public ApiResponse detail(@PathVariable Long id) { return ApiResponse.success(userService.detail(id)); } /** * 启用或禁用指定游客账号,禁用后游客无法继续访问小程序受保护接口。 * * @param id 游客账号主键 * @param request 目标状态,1 为启用、0 为禁用 * @return 无业务数据的成功响应 */ @PutMapping("/{id}/status") public ApiResponse updateStatus(@PathVariable Long id, @Valid @RequestBody UserStatusRequest request) { userService.updateStatus(id, request.getStatus()); return ApiResponse.success(); } }