package com.tourguide.api.guide; import com.tourguide.common.api.ApiResponse; import com.tourguide.modules.finance.dto.GuideBankBranchResponse; import com.tourguide.modules.finance.dto.GuideBankCardRequest; import com.tourguide.modules.finance.dto.GuideBankCardResponse; import com.tourguide.modules.finance.dto.GuideSettlementOnboardingRequest; import com.tourguide.modules.finance.dto.GuideSettlementStatusResponse; import com.tourguide.modules.finance.service.GuideSettlementService; import com.tourguide.security.AppUserPrincipal; import org.springframework.security.core.annotation.AuthenticationPrincipal; 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.PostMapping; 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; import javax.validation.Valid; import java.util.List; @Validated @RestController @RequestMapping("/api/guide/settlement") public class GuideSettlementController { private final GuideSettlementService settlementService; public GuideSettlementController(GuideSettlementService settlementService) { this.settlementService = settlementService; } @GetMapping("/onboarding/status") public ApiResponse status( @AuthenticationPrincipal AppUserPrincipal principal) { return ApiResponse.success(settlementService.status(principal.getUserId())); } @PostMapping("/onboarding") public ApiResponse submit( @AuthenticationPrincipal AppUserPrincipal principal, @Valid @RequestBody GuideSettlementOnboardingRequest request) { return ApiResponse.success(settlementService.submit(principal.getUserId(), request)); } @GetMapping("/bank-cards") public ApiResponse> bankCards( @AuthenticationPrincipal AppUserPrincipal principal) { return ApiResponse.success(settlementService.bankCards(principal.getUserId())); } @PostMapping("/bank-cards") public ApiResponse bindBankCard( @AuthenticationPrincipal AppUserPrincipal principal, @Valid @RequestBody GuideBankCardRequest request) { return ApiResponse.success(settlementService.bindBankCard(principal.getUserId(), request)); } @PostMapping("/bank-cards/{cardId}/business-open") public ApiResponse openBankCardBusiness( @AuthenticationPrincipal AppUserPrincipal principal, @PathVariable Integer cardId) { return ApiResponse.success(settlementService.openBankCardBusiness(principal.getUserId(), cardId)); } @GetMapping("/bank-branches") public ApiResponse> branches( @RequestParam(required = false) String cityCode, @RequestParam(required = false) String keyword) { return ApiResponse.success(settlementService.branches(cityCode, keyword)); } }