package com.tourguide.api.admin; import com.tourguide.common.api.ApiResponse; import com.tourguide.common.api.PageResponse; import com.tourguide.modules.operation.dto.CityCreateRequest; import com.tourguide.modules.operation.dto.CityResponse; import com.tourguide.modules.operation.dto.CityStatusRequest; import com.tourguide.modules.operation.service.OperationCityService; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.time.LocalDate; /** * 管理后台运营城市管理接口。 * 维护平台已开通城市,并通过状态控制城市是否可继续用于景区及前台业务配置。 */ @RestController @RequestMapping("/api/admin/operation-cities") public class AdminOperationCityController { private final OperationCityService cityService; public AdminOperationCityController(OperationCityService cityService) { this.cityService = cityService; } /** * 分页查询运营城市,支持按城市名称、状态和创建日期筛选。 * * @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(cityService.page(page, size, keyword, status, startDate, endDate)); } /** * 新增运营城市,城市名称唯一性由业务层校验。 * * @param request 城市名称创建参数 * @return 新建后的城市信息 */ @PostMapping public ApiResponse create(@Valid @RequestBody CityCreateRequest request) { return ApiResponse.success(cityService.create(request.getCityName())); } /** * 启用或禁用指定运营城市。 * * @param id 城市主键 * @param request 目标状态,1 为启用、0 为禁用 * @return 无业务数据的成功响应 */ @PutMapping("/{id}/status") public ApiResponse updateStatus(@PathVariable Long id, @Valid @RequestBody CityStatusRequest request) { cityService.updateStatus(id, request.getStatus()); return ApiResponse.success(); } }