All files / src/presentation/routes info.ts

0% Statements 0/17
100% Branches 0/0
0% Functions 0/3
0% Lines 0/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122                                                                                                                                                                                                                                                   
// hono instance
import honoFactory from '../factory/hono';
// validator
import {
  getInfoAboutUserTransactionsResponseSchema,
  getInfoAboutGroupsTheUserBelongsToResponseSchema,
  deleteInfoAboutUserRepaymentRequestSchema,
} from 'validator';
// error schema
import { route } from '../share/error';
// application
import {
  getInfoAboutGroupsTheUserBelongsToUseCase,
  getInfoAboutUserTransactionsUseCase,
  deleteInfoUserRepaymentUseCase,
} from '../../application/info';
 
const hono = honoFactory();
 
// NOTE: ユーザが参加しているグループ一覧を返す
const getInfoAboutGroupsTheUserBelongsToSchema = route.createSchema(
  {
    path: '/api/info/group',
    method: 'get',
    description: 'ログインユーザーが参加しているグループ一覧を取得するエンドポイント',
    security: [{ SessionCookie: [] }],
    request: {},
    responses: {
      200: {
        description: 'OK',
        content: {
          'application/json': {
            schema: getInfoAboutGroupsTheUserBelongsToResponseSchema,
          },
        },
      },
    },
  },
  [401, 500] as const
);
 
hono.openapi(getInfoAboutGroupsTheUserBelongsToSchema, async (c) => {
  const loginUser = c.get('user');
 
  // ビジネスロジック呼び出し
  const response = await getInfoAboutGroupsTheUserBelongsToUseCase(c.env, loginUser.id);
 
  // レスポンス
  return c.json(response, 200);
});
 
// NOTE: ユーザの貸し借りの履歴を返す
const getInfoAboutUserTransactionsSchema = route.createSchema(
  {
    path: '/api/info/transaction',
    method: 'get',
    description: 'ログインユーザーの貸し借りの履歴を取得するエンドポイント',
    security: [{ SessionCookie: [] }],
    request: {},
    responses: {
      200: {
        description: 'OK',
        content: {
          'application/json': {
            schema: getInfoAboutUserTransactionsResponseSchema,
          },
        },
      },
    },
  },
  [401, 500] as const
);
 
hono.openapi(getInfoAboutUserTransactionsSchema, async (c) => {
  const loginUser = c.get('user');
 
  // ビジネスロジック呼び出し
  const response = await getInfoAboutUserTransactionsUseCase(c.env, loginUser.id);
 
  // レスポンス
  return c.json(response, 200);
});
 
// NOTE: ユーザの返済処理を行う
const deleteInfoUserRepaymentSchema = route.createSchema(
  {
    path: '/api/info/transaction',
    method: 'delete',
    description: 'ログインユーザーと指定された取引相手間の取引履歴を削除する (完済する) エンドポイント',
    security: [{ SessionCookie: [] }],
    request: {
      body: {
        required: true,
        content: {
          'application/json': {
            schema: deleteInfoAboutUserRepaymentRequestSchema,
          },
        },
      },
    },
    responses: {
      204: {
        description: 'No Content',
      },
    },
  },
  [400, 401, 500] as const
);
 
hono.openapi(deleteInfoUserRepaymentSchema, async (c) => {
  const loginUser = c.get('user');
  const body = c.req.valid('json');
 
  // ビジネスロジック呼び出し
  await deleteInfoUserRepaymentUseCase(c.env, loginUser.id, body.counterparty_id);
 
  // レスポンス
  return c.body(null, 204);
});
 
export default hono;