fake-iamport-server
Version:
Fake iamport server for testing
112 lines (104 loc) • 4.4 kB
text/typescript
import core from "@nestia/core";
import { Controller } from "@nestjs/common";
import { IIamportResponse } from "iamport-server-api/lib/structures/IIamportResponse";
import { IIamportSubscription } from "iamport-server-api/lib/structures/IIamportSubscription";
import { IIamportUser } from "iamport-server-api/lib/structures/IIamportUser";
import { v4 } from "uuid";
import { FakeIamportUserAuth } from "../../decorators/FakeIamportUserAuth";
import { FakeIamportResponseProvider } from "../../providers/FakeIamportResponseProvider";
import { FakeIamportStorage } from "../../providers/FakeIamportStorage";
import { AdvancedRandomGenerator } from "../../utils/AdvancedRandomGenerator";
export class FakeIamportSubscribeCustomersController {
/**
* 간편 결제 카드 정보 조회하기.
*
* `subscribe.customers.at` 은 고객이 {@link create} 나 혹은 아임포트가 제공하는
* 간편 결제 카드 등록 창을 이용하여 저장한 간편 결제 카드 정보를 조회하는 API
* 함수이다.
*
* @param customer_uid 고객 (간편 결제 카드) 식별자 키
* @returns 간편 결제 카드 정보
*
* @security bearer
* @author Samchon
*/
.TypedRoute.Get(":customer_uid")
public at(
_user: IIamportUser.IAccessor,
.TypedParam("customer_uid") customer_uid: string,
): IIamportResponse<IIamportSubscription> {
// GET SUBSCRIPTION RECORD
const subscription = FakeIamportStorage.subscriptions.get(customer_uid);
// RETURNS
return FakeIamportResponseProvider.success(subscription);
}
/**
* 간편 결제 카드 등록하기.
*
* `subscribe.customers.stoer` 는 고객이 자신의 카드를 서버에 등록해두고, 매번 결제가
* 필요할 때마다 카드 정보를 반복 입력하는 일 없이, 간편하게 결제를 진행하고자 할 때
* 사용하는 API 함수이다.
*
* 참고로 `subscribe.customers.create` 는 클라이언트 어플리케이션이 아임포트가 제공하는
* 간편 결제 카드 등록 창을 사용하는 경우, 귀하의 백엔드 서버가 이를 실 서비스에서 호출하는
* 일은 없을 것이다. 다만, 고객이 간편 결제 카드를 등록하는 상황을 시뮬레이션하기 위하여,
* 테스트 자동화 프로그램 수준에서 사용될 수는 있다.
*
* @param customer_uid 고객 (간편 결제 카드) 식별자 키
* @param input 카드 입력 정보
* @returns 간편 결제 카드 정보
*
* @security bearer
* @author Samchon
*/
.TypedRoute.Post(":customer_uid")
public create(
_user: IIamportUser.IAccessor,
.TypedParam("customer_uid") customer_uid: string,
.TypedBody() input: IIamportSubscription.ICreate,
): IIamportResponse<IIamportSubscription> {
// ENROLLMENT
const subscription: IIamportSubscription = {
customer_uid,
pg_provider: "pg-of-somewhere",
pg_id: v4(),
card_type: "card",
card_code: v4(),
card_name: AdvancedRandomGenerator.name(),
card_number: input.card_number,
customer_name: AdvancedRandomGenerator.name(),
customer_tel: AdvancedRandomGenerator.mobile(),
customer_addr: "address-of-somewhere",
customer_email: AdvancedRandomGenerator.alphabets(8) + "@samchon.org",
customer_postcode: "11122",
inserted: 1,
updated: 0,
};
FakeIamportStorage.subscriptions.set(customer_uid, subscription);
// RETURNS
return FakeIamportResponseProvider.success(subscription);
}
/**
* 간편 결제 카드 삭제하기.
*
* 간편 결제를 위하여 등록한 카드를 제거한다.
*
* @param customer_uid 고객 (간편 결제 카드) 식별자 키
* @returns 삭제된 간편 결제 카드 정보
*
* @security bearer
* @author Samchon
*/
.TypedRoute.Delete(":customer_uid")
public erase(
_user: IIamportUser.IAccessor,
.TypedParam("customer_uid") customer_uid: string,
): IIamportResponse<IIamportSubscription> {
// ERASE RECORD
const subscription = FakeIamportStorage.subscriptions.get(customer_uid);
FakeIamportStorage.subscriptions.erase(customer_uid);
// RETURNS
return FakeIamportResponseProvider.success(subscription);
}
}