Skip to content

steinsroka/rest-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rest-generator

rest-generator for cyan

Installation

npm install cyan-rest-generator --save-dev

Features

  • Generates maven-rest interfaces (rest, flax, url)

Usage

As a CLI tool

rest-generator <input-path> <output-path>

As a VSCode extension

스크린샷 2024-12-29 오후 5 59 04

Input

import { Get, HeaderParam, Post, QueryParam, SystemParam } from "@jnpmedi/cyan/dist/router";
import { BaseController } from "./Base.controller";

export class HelloController extends BaseController {
    constructor() { super(); }

    @Get("hello")
    async getHello(
        @SystemParam({ type: "REQ", attr: "remoteAddress" }) ipAddr: string,
        @HeaderParam("user-agent", { required: true }) userAgent: string,
        @HeaderParam("authorization", { required: true }) authorization: string,
        @QueryParam("foo", {required: true}) foo: string,
        @QueryParam("bar", {required: false}) bar: number,
    ): Promise<HelloResponse> {
        return {};
    }

    @Post("hello")
    async createHello(
        @SystemParam({ type: "REQ", attr: "remoteAddress" }) ipAddr: string,
        @HeaderParam("user-agent", { required: true }) userAgent: string,
        @HeaderParam("authorization", { required: true }) authorization: string,
    ): Promise<CreateHelloResponse> {
        return {};
    }
}

export interface HelloResponse {}
export interface CreateHelloResponse {}

Output

import { GetHelloRequest, HelloResponse, CreateHelloResponse, CreateHelloRequest } from "./Hello.dto";
import { HelloUrl } from "./Hello.url";
import { ApiReq } from "../common/flax.types";
import { extractKey, HttpRequest } from "../common/HttpRequest";

export class HelloRest {
    public static async getHello(req: ApiReq<GetHelloRequest>): Promise<{}> {
    const authorization = extractKey(req, "authorization");

    const resp = await HttpRequest.request<{}>(
      process.env.MAVEN_DOCS_BE_URL,
      ...HelloUrl.getHello,
      req,
      {
        authorization,
      }
    );

    return resp.data;
  }

  public static async createHello(req: ApiReq<CreateHelloRequest>): Promise<{}> {
    const authorization = extractKey(req, "authorization");

    const resp = await HttpRequest.request<{}>(
      process.env.MAVEN_DOCS_BE_URL,
      ...HelloUrl.createHello,
      req,
      {
        authorization,
      }
    );

    return resp.data;
  }
}
import { GetHelloRequest, {}, CreateHelloRequest } from "./Hello.dto";
import { HelloUrl } from "./Hello.url";
import { restReq } from "../common/cyan.types";
import { FxApiRequestData, FxRequestData } from "../common/flax.types";
import { extractKey } from "../common/HttpRequest";

export class HelloFlax {
    public static getHello(data: FxRequestData<GetHelloRequest>): FxApiRequestData<{}> {
    
    return {
      ...restReq(process.env.MAVEN_DOCS_BE_URL, HelloUrl.getHello, data),
      reducer: resp => resp,
      errReducer: resp => resp,
    };
  }

  public static createHello(data: FxRequestData<CreateHelloRequest>): FxApiRequestData<{}> {
    
    return {
      ...restReq(process.env.MAVEN_DOCS_BE_URL, HelloUrl.createHello, data),
      reducer: resp => resp,
      errReducer: resp => resp,
    };
  }
}
import { RestUrl } from "../common/cyan.types";

export class HelloUrl {
  public static getHello: RestUrl = ["GET", "hello"];
  public static createHello: RestUrl = ["POST", "hello"];
}

About

rest-generator

Resources

License

Stars

Watchers

Forks

Packages

No packages published