package com.tcm.training.admin.member.controller; import com.tcm.training.admin.common.ApiResponse; import com.tcm.training.admin.common.PageResponse; import com.tcm.training.admin.member.service.ClinicAppService; import com.tcm.training.admin.member.dto.ClinicBankAccountUpdateRequest; import com.tcm.training.admin.member.vo.ClinicBoundUserItemVO; import com.tcm.training.admin.member.vo.ClinicDetailVO; import com.tcm.training.admin.member.vo.ClinicListItemVO; import com.tcm.training.admin.member.vo.ClinicRegionOptionVO; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.bind.annotation.RequestBody; import javax.validation.Valid; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.time.LocalDateTime; import java.util.List; @Validated @RestController @RequestMapping({"/api/v1", "/api"}) public class ClinicController { private final ClinicAppService clinicAppService; public ClinicController(ClinicAppService clinicAppService) { this.clinicAppService = clinicAppService; } @GetMapping("/clinics") public ApiResponse> page( @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int pageSize, @RequestParam(required = false) String regionCode, @RequestParam(required = false) String name, @RequestParam(required = false) String phone, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdTo, @RequestParam(required = false) Integer status) { return ApiResponse.ok(clinicAppService.page(page, pageSize, regionCode, name, phone, createdFrom, createdTo, status)); } @GetMapping("/clinics/clinic-import-template") public void downloadClinicImportTemplate(HttpServletResponse response) throws IOException { clinicAppService.downloadClinicImportTemplate(response); } @PostMapping("/clinics/agent-bindings/import") public ApiResponse importAgentBindings(@RequestParam("file") MultipartFile file) throws IOException { clinicAppService.importAgentBindings(file); return ApiResponse.ok(null); } @GetMapping("/clinics/export") public void export(HttpServletResponse response, @RequestParam(required = false) String regionCode, @RequestParam(required = false) String name, @RequestParam(required = false) String phone, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime createdTo, @RequestParam(required = false) Integer status) throws IOException { clinicAppService.export(regionCode, name, phone, createdFrom, createdTo, status, response); } @GetMapping("/clinics/regions") public ApiResponse> regionOptions() { return ApiResponse.ok(clinicAppService.regionOptions()); } @GetMapping("/clinics/{id}") public ApiResponse detail(@PathVariable Long id) { return ApiResponse.ok(clinicAppService.detail(id)); } @PutMapping("/clinics/{id}") public ApiResponse update(@PathVariable Long id, @Valid @RequestBody ClinicBankAccountUpdateRequest request) { return ApiResponse.ok(clinicAppService.updateBankAccount(id, request)); } @GetMapping("/clinics/{id}/users") public ApiResponse> clinicUsers( @PathVariable Long id, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int pageSize, @RequestParam(required = false) String nickname, @RequestParam(required = false) String phone, @RequestParam(required = false) Integer status, @RequestParam(required = false) Integer isMember, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime registeredFrom, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime registeredTo) { return ApiResponse.ok(clinicAppService.clinicUsers(id, page, pageSize, nickname, phone, status, isMember, registeredFrom, registeredTo)); } }