package com.tourguide.api.guide; import com.tourguide.common.api.ApiResponse; import com.tourguide.common.api.PageResponse; import com.tourguide.modules.finance.dto.GuideWithdrawalCreateRequest; import com.tourguide.modules.finance.dto.GuideWithdrawalSummaryResponse; import com.tourguide.modules.finance.dto.WithdrawalResponse; import com.tourguide.modules.finance.service.GuideWithdrawalService; 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.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; @Validated @RestController @RequestMapping("/api/guide/withdrawals") public class GuideWithdrawalController { private final GuideWithdrawalService withdrawalService; public GuideWithdrawalController(GuideWithdrawalService withdrawalService) { this.withdrawalService = withdrawalService; } @GetMapping("/summary") public ApiResponse summary( @AuthenticationPrincipal AppUserPrincipal principal) { return ApiResponse.success(withdrawalService.summary(principal.getUserId())); } @GetMapping public ApiResponse> page( @AuthenticationPrincipal AppUserPrincipal principal, @RequestParam(defaultValue = "1") long page, @RequestParam(defaultValue = "50") long size) { return ApiResponse.success(withdrawalService.page(principal.getUserId(), page, size)); } @PostMapping public ApiResponse create( @AuthenticationPrincipal AppUserPrincipal principal, @Valid @RequestBody GuideWithdrawalCreateRequest request) { return ApiResponse.success(withdrawalService.create(principal.getUserId(), request)); } }