diff --git a/docs/ERD.md b/docs/ERD.md index 4048f47..ece7e21 100644 --- a/docs/ERD.md +++ b/docs/ERD.md @@ -1,11 +1,9 @@ # uncar - > Generated by [`prisma-markdown`](https://github.com/samchon/prisma-markdown) - [default](#default) ## default - ```mermaid erDiagram "user" { @@ -209,227 +207,208 @@ erDiagram ### `user` **Properties** - -- `id`: -- `account`: -- `password`: -- `nickname`: -- `phone`: -- `country_code`: -- `created_at`: -- `updated_at`: -- `deleted_at`: + - `id`: + - `account`: + - `password`: + - `nickname`: + - `phone`: + - `country_code`: + - `created_at`: + - `updated_at`: + - `deleted_at`: ### `user_snapshot` **Properties** - -- `id`: -- `userId`: -- `account`: -- `password`: -- `nickname`: -- `phone`: -- `contry_code`: -- `created_at`: + - `id`: + - `userId`: + - `account`: + - `password`: + - `nickname`: + - `phone`: + - `contry_code`: + - `created_at`: ### `user_last_snapshot` **Properties** - -- `user_id`: 사용자 ID -- `snapshot_id`: 스냅샷 ID -- `created_at`: -- `updated_at`: + - `user_id`: 사용자 ID + - `snapshot_id`: 스냅샷 ID + - `created_at`: + - `updated_at`: ### `user_profile_image` **Properties** - -- `user_id`: 사용자 ID -- `image_id`: 이미지 ID -- `created_at`: -- `updated_at`: + - `user_id`: 사용자 ID + - `image_id`: 이미지 ID + - `created_at`: + - `updated_at`: ### `terms_agreements` **Properties** - -- `id`: 약관동의 ID -- `user_id`: 사용자 ID -- `type`: -- `agree`: -- `created_at`: -- `updated_at`: + - `id`: 약관동의 ID + - `user_id`: 사용자 ID + - `type`: + - `agree`: + - `created_at`: + - `updated_at`: ### `oauth` **Properties** - -- `id`: -- `user_id`: -- `provider`: -- `provider_id`: -- `created_at`: -- `updated_at`: + - `id`: + - `user_id`: + - `provider`: + - `provider_id`: + - `created_at`: + - `updated_at`: ### `certification` **Properties** - -- `id`: -- `certification_code_id`: -- `user_id`: -- `targetType`: -- `type`: -- `created_at`: -- `updated_at`: + - `id`: + - `certification_code_id`: + - `user_id`: + - `targetType`: + - `type`: + - `created_at`: + - `updated_at`: ### `certification_code` **Properties** - -- `id`: -- `targetType`: -- `type`: -- `status`: -- `code`: -- `target`: -- `created_at`: -- `updated_at`: -- `expired_at`: + - `id`: + - `targetType`: + - `type`: + - `status`: + - `code`: + - `target`: + - `created_at`: + - `updated_at`: + - `expired_at`: ### `car` **Properties** - -- `id`: -- `owner_id`: -- `type`: -- `number`: -- `status`: -- `created_at`: -- `updated_at`: + - `id`: + - `owner_id`: + - `type`: + - `number`: + - `status`: + - `created_at`: + - `updated_at`: ### `car_image` **Properties** - -- `id`: -- `car_id`: -- `image_id`: -- `created_at`: -- `updated_at`: + - `id`: + - `car_id`: + - `image_id`: + - `created_at`: + - `updated_at`: ### `car_snapshot` **Properties** - -- `id`: -- `car_id`: -- `owner_id`: -- `type`: -- `number`: -- `created_at`: -- `updated_at`: -- `status`: + - `id`: + - `car_id`: + - `owner_id`: + - `type`: + - `number`: + - `created_at`: + - `updated_at`: + - `status`: ### `Rental` **Properties** - -- `id`: -- `car_id`: -- `user_id`: -- `start_date`: -- `end_date`: -- `status`: -- `created_at`: -- `updated_at`: + - `id`: + - `car_id`: + - `user_id`: + - `start_date`: + - `end_date`: + - `status`: + - `created_at`: + - `updated_at`: ### `driving` **Properties** - -- `id`: -- `user_id`: -- `car_id`: -- `created_at`: -- `updated_at`: -- `rental_id`: + - `id`: + - `user_id`: + - `car_id`: + - `created_at`: + - `updated_at`: + - `rental_id`: ### `parking` **Properties** - -- `id`: -- `car_id`: -- `drivingId`: -- `location`: 주차 위치 (주소) -- `latitude`: -- `longitude`: -- `status`: -- `start_date`: -- `end_date`: -- `created_at`: -- `updated_at`: + - `id`: + - `car_id`: + - `drivingId`: + - `location`: 주차 위치 (주소) + - `latitude`: + - `longitude`: + - `status`: + - `start_date`: + - `end_date`: + - `created_at`: + - `updated_at`: ### `parking_snapshot` **Properties** - -- `id`: -- `car_id`: -- `drivingId`: -- `location`: -- `latitude`: -- `longitude`: -- `status`: -- `start_date`: -- `end_date`: -- `created_at`: + - `id`: + - `car_id`: + - `drivingId`: + - `location`: + - `latitude`: + - `longitude`: + - `status`: + - `start_date`: + - `end_date`: + - `created_at`: ### `notification` **Properties** - -- `id`: -- `user_id`: -- `type`: -- `title`: -- `content`: -- `read_at`: -- `created_at`: -- `updated_at`: + - `id`: + - `user_id`: + - `type`: + - `title`: + - `content`: + - `read_at`: + - `created_at`: + - `updated_at`: ### `user_reputation` **Properties** - -- `id`: -- `user_id`: -- `writer_id`: -- `score`: -- `created_at`: -- `updated_at`: + - `id`: + - `user_id`: + - `writer_id`: + - `score`: + - `created_at`: + - `updated_at`: ### `user_reputation_reason` **Properties** - -- `id`: -- `user_reputation_id`: -- `type`: -- `score`: -- `created_at`: + - `id`: + - `user_reputation_id`: + - `type`: + - `score`: + - `created_at`: ### `image` **Properties** - -- `id`: -- `user_id`: -- `type`: -- `url`: -- `created_at`: -- `deleted_at`: + - `id`: + - `user_id`: + - `type`: + - `url`: + - `created_at`: + - `deleted_at`: \ No newline at end of file diff --git a/package.json b/package.json index aa731e7..07f66ab 100644 --- a/package.json +++ b/package.json @@ -37,14 +37,15 @@ "@nestjs/core": "^10.0.0", "@nestjs/jwt": "^10.2.0", "@nestjs/platform-express": "^10.0.0", + "@nestjs/swagger": "^7.3.1", "@prisma/client": "5.13.0", - "prisma": "^5.13.0", "bcrypt": "^5.1.1", "cache-manager": "^5.5.1", "cache-manager-redis-store": "^3.0.1", "cookie-parser": "^1.4.6", "joi": "^17.12.3", "nestjs-twilio": "^4.4.0", + "prisma": "^5.13.0", "reflect-metadata": "^0.2.0", "rxjs": "^7.8.1", "typia": "^5.5.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a8a441a..025506f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,9 @@ importers: '@nestjs/platform-express': specifier: ^10.0.0 version: 10.3.1(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.1) + '@nestjs/swagger': + specifier: ^7.3.1 + version: 7.3.1(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.1(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2) '@prisma/client': specifier: 5.13.0 version: 5.13.0(prisma@5.13.0) @@ -608,6 +611,9 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true + '@microsoft/tsdoc@0.14.2': + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + '@nestia/core@2.6.4': resolution: {integrity: sha512-uqooIDtJfc9UpQRzd92Rc1mFy04KSwWZCVyh0AOf+mTi73BtFSKRfA19d/hn0aidacTJ/t5Y1ugIlF2ehqfMpw==} peerDependencies: @@ -706,6 +712,19 @@ packages: peerDependencies: '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + '@nestjs/mapped-types@2.0.5': + resolution: {integrity: sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + class-transformer: ^0.4.0 || ^0.5.0 + class-validator: ^0.13.0 || ^0.14.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + '@nestjs/platform-express@10.3.1': resolution: {integrity: sha512-Rj21quI5h4Lry7q9an+nO4ADQiQUy9A6XK74o5aTUHo3Ysm25ujqh2NgU4XbT3M2oXU9qzhE59OfhkQ7ZUvTAg==} peerDependencies: @@ -717,6 +736,23 @@ packages: peerDependencies: typescript: '>=4.8.2' + '@nestjs/swagger@7.3.1': + resolution: {integrity: sha512-LUC4mr+5oAleEC/a2j8pNRh1S5xhKXJ1Gal5ZdRjt9XebQgbngXCdW7JTA9WOEcwGtFZN9EnKYdquzH971LZfw==} + peerDependencies: + '@fastify/static': ^6.0.0 || ^7.0.0 + '@nestjs/common': ^9.0.0 || ^10.0.0 + '@nestjs/core': ^9.0.0 || ^10.0.0 + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 || ^0.2.0 + peerDependenciesMeta: + '@fastify/static': + optional: true + class-transformer: + optional: true + class-validator: + optional: true + '@nestjs/testing@10.3.1': resolution: {integrity: sha512-74aSAugWT31jSPnStyRWDXgjHXWO3GYaUfAZ2T7Dml88UGkGy95iwaWgYy7aYM8/xVFKcDYkfL5FAYqZYce/yg==} peerDependencies: @@ -3419,6 +3455,9 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + swagger-ui-dist@5.11.2: + resolution: {integrity: sha512-jQG0cRgJNMZ7aCoiFofnoojeSaa/+KgWaDlfgs8QN+BXoGMpxeMVY5OEnjq4OlNvF3yjftO8c9GRAgcHlO+u7A==} + symbol-observable@4.0.0: resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} engines: {node: '>=0.10'} @@ -4453,6 +4492,8 @@ snapshots: - encoding - supports-color + '@microsoft/tsdoc@0.14.2': {} + '@nestia/core@2.6.4(@nestia/fetcher@2.6.4(typescript@5.4.4))(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.1(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)(rxjs@7.8.1)(typia@5.5.10(typescript@5.4.4))': dependencies: '@nestia/fetcher': 2.6.4(typescript@5.4.4) @@ -4580,6 +4621,11 @@ snapshots: '@types/jsonwebtoken': 9.0.5 jsonwebtoken: 9.0.2 + '@nestjs/mapped-types@2.0.5(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)': + dependencies: + '@nestjs/common': 10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1) + reflect-metadata: 0.2.2 + '@nestjs/platform-express@10.3.1(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.1)': dependencies: '@nestjs/common': 10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -4614,6 +4660,18 @@ snapshots: transitivePeerDependencies: - chokidar + '@nestjs/swagger@7.3.1(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.1(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2)': + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@nestjs/common': 10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.3.1(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/mapped-types': 2.0.5(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(reflect-metadata@0.2.2) + js-yaml: 4.1.0 + lodash: 4.17.21 + path-to-regexp: 3.2.0 + reflect-metadata: 0.2.2 + swagger-ui-dist: 5.11.2 + '@nestjs/testing@10.3.1(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.1(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.1(@nestjs/common@10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.1))': dependencies: '@nestjs/common': 10.3.1(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -7623,6 +7681,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + swagger-ui-dist@5.11.2: {} + symbol-observable@4.0.0: {} synckit@0.8.8: diff --git a/src/main.ts b/src/main.ts index 3e85b60..25d2d34 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,8 +1,11 @@ import { NestFactory } from '@nestjs/core'; +import { SwaggerModule } from '@nestjs/swagger'; import cookieParser from 'cookie-parser'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); + const doc = await import('../packages/api/swagger.json' as any); + SwaggerModule.setup('api-docs', app, doc); app.setGlobalPrefix('api'); app.use(cookieParser()); await app.listen(process.env.PORT || 8000);