PurchaseCommandController.java

package com.newbit.purchase.command.application.controller;

import com.newbit.auth.model.CustomUser;
import com.newbit.common.dto.ApiResponse;
import com.newbit.purchase.command.application.dto.CoffeeChatPurchaseRequest;
import com.newbit.purchase.command.application.dto.ColumnPurchaseRequest;
import com.newbit.purchase.command.application.dto.MentorAuthorityPurchaseRequest;
import com.newbit.purchase.command.application.service.PurchaseCommandService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/purchase")
@Tag(name = "구매관련 API", description = "칼럼 구매 API")
public class PurchaseCommandController {
    private final PurchaseCommandService purchaseCommandService;

    @Operation(
            summary = "칼럼 구매",
            description = "사용자가 유료 칼럼을 구매합니다."
    )
    @io.swagger.v3.oas.annotations.responses.ApiResponse(
            responseCode = "200", description = "칼럼 구매 성공"
    )
    @PostMapping("/column")
    public ResponseEntity<ApiResponse<Void>> purchaseColumn(
            @AuthenticationPrincipal CustomUser customUser,
            @Valid @RequestBody ColumnPurchaseRequest request
    ) {
        purchaseCommandService.purchaseColumn(customUser.getUserId(), request);
        return ResponseEntity.ok(ApiResponse.success(null));
    }

    @Operation(
            summary = "커피챗 구매",
            description = "사용자가 멘토와 확정된 커피챗을 구매합니다."
    )
    @io.swagger.v3.oas.annotations.responses.ApiResponse(
            responseCode = "200", description = "커피챗 구매 성공"
    )
    @PostMapping("/coffeechat")
    public ResponseEntity<ApiResponse<Void>> purchaseCoffeeChat(
            @AuthenticationPrincipal CustomUser customUser,
            @Valid @RequestBody CoffeeChatPurchaseRequest request) {
        purchaseCommandService.purchaseCoffeeChat(customUser.getUserId(), request);
        return ResponseEntity.ok(ApiResponse.success(null));
    }


    @Operation(
            summary = "멘토 권한 구매",
            description = "사용자가 포인트 혹은 다이아를 사용하여 멘토 권한을 구매합니다."
    )
    @io.swagger.v3.oas.annotations.responses.ApiResponse(
            responseCode = "200", description = "멘토 권한 구매 성공"
    )
    @PostMapping("/mentor-authority")
    public ResponseEntity<ApiResponse<Void>> purchaseMentorAuthority(
            @AuthenticationPrincipal CustomUser customUser,
            @Valid @RequestBody MentorAuthorityPurchaseRequest request
    ) {
        purchaseCommandService.purchaseMentorAuthority(customUser.getUserId(), request);
        return ResponseEntity.ok(ApiResponse.success(null));
    }

}