Search

[Applicaion]05.Basecode: coupon-api

Publish Date
2024/11/08
Tags
Status
Done
1 more property
Context
Table of Content

쿠폰 발급 요청 및 반환 기능 구현

REST API를 통해 사용자로부터 발급 요청을 받고, 처리 결과를 반환하는 인터페이스를 제공한다. 클라이언트와 명확한 데이터 교환을 통해 사용자 경험을 개선하고, 서비스의 응답성을 높인다.

구조 및 구현

├── coupon-api/ │ ├── src/main/java/com/example/couponapi/ │ ├── controller/ # REST API 요청을 처리하는 컨트롤러 클래스 │ │ ├── dto/ # 데이터 전송 객체(Data Transfer Object) 관련 클래스가 포함 │ │ │ ├── CouponIssueRequestDto.java │ │ │ └── CouponIssueResponseDto.java │ │ └── HelloController.java │ ├── service/ # 비즈니스 로직을 처리하는 서비스 계층 클래스 │ │ ├── CouponIssueRequestService.java │ │ ├── CouponApiApplication.java │ │ ├── CouponControllerAdvice.java │ │ └── CouponIssueController.java
Java
복사
클래스명
내용
CouponIssueRequestDto.java
클라이언트가 요청한 쿠폰 발급 정보를 담는 데이터 전송 객체(DTO) userIdcouponId를 포함
CouponIssueResponseDto.java
쿠폰 발급 결과를 클라이언트에게 전달하기 위한 DTO 성공 여부(isSuccess)와 메시지(comment)를 포함
HelloController.java
테스트용 컨트롤러로, 기본적인 HTTP 요청과 응답을 처리하며 애플리케이션 상태 확인에 사용됨
CouponIssueRequestService.java
비즈니스 로직을 처리하는 서비스 계층 쿠폰 발급 요청을 처리하고 관련 로직을 실행하며 성공 메시지를 로그로 기록
CouponApiApplication.java
애플리케이션의 진입점으로, Spring Boot 애플리케이션 실행을 담당
CouponIssueController.java
RESTful API 엔드포인트를 제공하는 컨트롤러 클라이언트의 쿠폰 발급 요청을 받아 서비스를 호출하고 결과를 반환

소스코드

CouponIssueRequestDto.java
클라이언트의 쿠폰 발급 요청 데이터를 담는 Dto로, couponId, userId를 포함한다.
package com.example.couponapi.controller.dto; public record CouponIssueRequestDto(long userId, long couponId) { }
Java
복사
필드명
설명
userId
요청한 사용자의 ID
couponId
발급할 쿠폰의 ID
CouponIssueResponseDto.java
쿠폰 발급 요청의 결과를 클라이언트에게 반환하는 DTO로, 성공 여부와 결과 메시지를 포함한다.
package com.example.couponapi.controller.dto; import com.fasterxml.jackson.annotation.JsonInclude; import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; @JsonInclude(value = NON_NULL) public record CouponIssueResponseDto(boolean isSuccess, String comment) { }
Java
복사
필드명
설명
isSuccess
쿠폰 발급 성공 여부를 나타냄
comment
결과 메시지 (성공 시 null)
HelloController.java
테스트용 컨트롤러로, HTTP 요청을 받아 간단한 문자열 응답을 반환한다.
package com.example.couponapi.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "hello!"; } }
Java
복사
메서드명
내용
hello()
HTTP GET 요청을 /hello 경로로 받아 "hello!" 문자열을 반환
CouponIssueRequestService.java
쿠폰 발급 요청을 처리하는 서비스 계층으로, 발급 로직을 호출하고 성공 메시지를 로그로 기록한다.
package com.example.couponapi.service; import com.example.couponapi.controller.dto.CouponIssueRequestDto; import com.example.couponcore.service.CouponIssueService; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @RequiredArgsConstructor @Service public class CouponIssueRequestService { private final CouponIssueService couponIssueService; private final Logger log = LoggerFactory.getLogger(this.getClass().getSimpleName()); public void issueRequestV1(CouponIssueRequestDto requestDto) { couponIssueService.issue(requestDto.couponId(), requestDto.userId()); log.info("쿠폰 발급 완료. couponId: %s, userId: %s".formatted(requestDto.couponId(), requestDto.userId())); } }
Java
복사
메서드명
설명
issueRequestV1
쿠폰 발급 로직 호출 및 성공 메시지 로그 기록
CouponApiApplication.java
애플리케이션의 진입점으로, Spring Boot 애플리케이션 실행을 담당한다.
package com.example.couponapi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class CouponApiApplication { public static void main(String[] args) { SpringApplication.run(CouponApiApplication.class, args); } }
Java
복사
CouponControllerAdvice.java
글로벌 예외처리를 담당하며, 쿠폰 발급 관련 예외를 처리하여 클라이언트에게 표준화된 응답을 반환한다.
package com.example.couponapi; import com.example.couponapi.controller.dto.CouponIssueResponseDto; import com.example.couponcore.exception.CouponIssueException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice public class CouponControllerAdvice { @ExceptionHandler(CouponIssueException.class) public CouponIssueResponseDto couponIssueExceptionHandler(CouponIssueException exception) { return new CouponIssueResponseDto(false, exception.getErrorCode().message); } }
Java
복사
메서드명
내용
couponIssueExceptionHandler
CouponIssueException 예외 발생 시 표준화된 실패 응답(CouponIssueResponseDto)을 반환
CouponIssueController.java
HTTP 요청을 처리하는 컨트롤러로, RESTful API 엔트포인트를 제공하며 쿠폰 발급 요청을 처리한다.
package com.example.couponapi; import com.example.couponapi.controller.dto.CouponIssueRequestDto; import com.example.couponapi.controller.dto.CouponIssueResponseDto; import com.example.couponapi.service.CouponIssueRequestService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RequiredArgsConstructor @RestController public class CouponIssueController { private final CouponIssueRequestService couponIssueRequestService; @PostMapping("/v1/issue") public CouponIssueResponseDto issueV1(@RequestBody CouponIssueRequestDto body) { couponIssueRequestService.issueRequestV1(body); return new CouponIssueResponseDto(true, null); } }
Java
복사
메서드명
설명
issueV1
쿠폰 발급 요청을 처리 성공 여부를 응답(CouponIssueResponseDto)으로 반환

확인

postman으로 요청
정상요청
중복 발급 요청
Search
Main PageCategoryTagskkogggokkAbout MeContact