package com.talentcard.server.business.card; import java.util.Map; import com.talentcard.server.business.PageResult; import com.talentcard.server.business.admin.StatusUpdateRequest; import com.talentcard.server.common.ApiResponse; import jakarta.validation.Valid; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/admin/cards") public class CardAdminController { private final CardAdminService cardAdminService; public CardAdminController(CardAdminService cardAdminService) { this.cardAdminService = cardAdminService; } @GetMapping("/family-applications") public ApiResponse>> familyApplications( @RequestParam(required = false) String familyKeyword, @RequestParam(required = false) String talentKeyword, @RequestParam(required = false) String cardLevel, @RequestParam(required = false) String status, @RequestParam(required = false) String applyStart, @RequestParam(required = false) String applyEnd, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size ) { return ApiResponse.success(cardAdminService.familyApplications( familyKeyword, talentKeyword, cardLevel, status, applyStart, applyEnd, page, size)); } @GetMapping("/family-applications/{id}") public ApiResponse> familyApplication(@PathVariable Long id) { return ApiResponse.success(cardAdminService.familyApplication(id)); } @PatchMapping("/family-applications/{id}/audit") public ApiResponse> auditFamilyApplication( @PathVariable Long id, @Valid @RequestBody CardAuditRequest request ) { return ApiResponse.success(cardAdminService.auditFamilyApplication(id, request)); } @GetMapping("/family-cards") public ApiResponse>> familyCards( @RequestParam(required = false) String familyKeyword, @RequestParam(required = false) String talentKeyword, @RequestParam(required = false) String cardLevel, @RequestParam(required = false) Integer status, @RequestParam(required = false) String applyStart, @RequestParam(required = false) String applyEnd, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size ) { return ApiResponse.success(cardAdminService.familyCards( familyKeyword, talentKeyword, cardLevel, status, applyStart, applyEnd, page, size)); } @PatchMapping("/family-cards/{cardId}/status") public ApiResponse> updateFamilyCardStatus( @PathVariable Long cardId, @Valid @RequestBody StatusUpdateRequest request ) { return ApiResponse.success(cardAdminService.updateFamilyCardStatus(cardId, request.status())); } @GetMapping("/upgrade-applications") public ApiResponse>> upgradeApplications( @RequestParam(required = false) String keyword, @RequestParam(required = false) String targetLevel, @RequestParam(required = false) String status, @RequestParam(required = false) String applyStart, @RequestParam(required = false) String applyEnd, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size ) { return ApiResponse.success(cardAdminService.upgradeApplications( keyword, targetLevel, status, applyStart, applyEnd, page, size)); } @GetMapping("/upgrade-applications/{id}") public ApiResponse> upgradeApplication(@PathVariable Long id) { return ApiResponse.success(cardAdminService.upgradeApplication(id)); } @PatchMapping("/upgrade-applications/{id}/audit") public ApiResponse> auditUpgradeApplication( @PathVariable Long id, @Valid @RequestBody CardAuditRequest request ) { return ApiResponse.success(cardAdminService.auditUpgradeApplication(id, request)); } }