Frontend-Common/api
Vasili Karaev bf0259ef3b Add module documentation 2021-08-05 12:33:24 +03:00
..
ApiMethodFactory.ts Wrap api factory constructor parameter with object 2021-08-05 12:32:39 +03:00
HttpMethod.ts Add api module 2021-08-04 20:58:21 +03:00
README.md Add module documentation 2021-08-05 12:33:24 +03:00
error.ts Add api module 2021-08-04 20:58:21 +03:00
index.ts Add api module 2021-08-04 20:58:21 +03:00
request.ts Add api module 2021-08-04 20:58:21 +03:00

README.md

api

This module helps define callable API methods.

Usage example

import { ApiMethodFactory, HttpMethod } from 'lib/api'

const { make } = new ApiMethodFactory({ apiPrefix: '/api' })

interface User {
  id: string
  name: string
  email: string
}

interface UserRequest {
  id: string
}

interface UserListRequest {
  limit: number
  offset: number
}

type UserResponse = User

type UserListResponse = User[]

type _ = unknown

const API = {
  user: {
    get: make<UserResponse, UserRequest>('/users/%(id)s', HttpMethod.GET, {
      path: ['id'],
    }),
    list: make<UserListResponse, UserListRequest>('/users', HttpMethod.GET, {
      query: ['limit', 'offset'],
    }),
    delete: make<_, UserRequest>('/users/%(id)s', HttpMethod.DELETE, {
      path: ['id'],
    }),
  },
}

const run = async () => {
  const users = await API.user.list({ limit: 10, offset: 0 })

  users.forEach(async (user) => {
    await API.user.delete({
      id: user.id,
    })
  })
}