From 86fa3ec192a55caa6a0a4b43382ac1c5c2862836 Mon Sep 17 00:00:00 2001 From: Vladyslav Shchepotin Date: Fri, 19 Feb 2021 00:46:55 +0200 Subject: [PATCH] refactor: :art: refactor code --- .eslintrc.js | 5 + env-example | 1 + migrations/1604164774154-CreateUser.ts | 105 ++++++++++++------ seeds/20200615162100-role.seed.ts | 2 +- seeds/20200616115700-status.seed.ts | 2 +- seeds/20200626123300-admin.seed.ts | 2 +- seeds/20201028093400-user.seed.ts | 2 +- src/app.module.ts | 11 +- src/apple/apple.service.ts | 2 +- src/auth/auth.dto.ts | 4 +- src/auth/auth.module.ts | 6 +- src/auth/auth.service.ts | 6 +- .../{ => strategies}/anonymous.strategy.ts | 2 +- src/auth/{ => strategies}/jwt.strategy.ts | 4 +- src/config/app.config.ts | 1 + src/config/database.config.ts | 1 + src/facebook/facebook.service.ts | 4 +- .../{ => interfaces}/facebook.interface.ts | 0 src/files/files.module.ts | 2 +- src/google/google.service.ts | 2 +- src/main.ts | 2 +- .../{ => interfaces}/social.interface.ts | 0 src/twitter/twitter.service.ts | 2 +- src/users/user.entity.ts | 4 +- src/utils/serializer.interceptor.ts | 5 +- .../{ => validators}/is-exists.validator.ts | 0 .../is-not-exists.validator.ts | 0 27 files changed, 110 insertions(+), 67 deletions(-) rename src/auth/{ => strategies}/anonymous.strategy.ts (78%) rename src/auth/{ => strategies}/jwt.strategy.ts (89%) rename src/facebook/{ => interfaces}/facebook.interface.ts (100%) rename src/social/{ => interfaces}/social.interface.ts (100%) rename src/utils/{ => validators}/is-exists.validator.ts (100%) rename src/utils/{ => validators}/is-not-exists.validator.ts (100%) diff --git a/.eslintrc.js b/.eslintrc.js index 99687af1a..a49089e83 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -22,5 +22,10 @@ module.exports = { '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/no-explicit-any': 2, + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': ['error'], + 'require-await': 'off', + '@typescript-eslint/require-await': 'error', + '@typescript-eslint/no-floating-promises': 'error', }, }; diff --git a/env-example b/env-example index fe5d87dce..6247cfa8a 100644 --- a/env-example +++ b/env-example @@ -13,6 +13,7 @@ DATABASE_USERNAME=root DATABASE_PASSWORD=secret DATABASE_NAME=api DATABASE_SYNCHRONIZE=false +DATABASE_MAX_CONNECTIONS=100 # Support "local", "s3" FILE_DRIVER=local diff --git a/migrations/1604164774154-CreateUser.ts b/migrations/1604164774154-CreateUser.ts index e98b0c874..afec9b075 100644 --- a/migrations/1604164774154-CreateUser.ts +++ b/migrations/1604164774154-CreateUser.ts @@ -1,40 +1,75 @@ -import {MigrationInterface, QueryRunner} from "typeorm"; +import { MigrationInterface, QueryRunner } from 'typeorm'; export class CreateUser1604164774154 implements MigrationInterface { - name = 'CreateUser1604164774154' + name = 'CreateUser1604164774154'; - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(`CREATE TABLE "file" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "path" character varying NOT NULL, CONSTRAINT "PK_36b46d232307066b3a2c9ea3a1d" PRIMARY KEY ("id"))`); - await queryRunner.query(`CREATE TABLE "role" ("id" integer NOT NULL, "name" character varying NOT NULL, CONSTRAINT "PK_b36bcfe02fc8de3c57a8b2391c2" PRIMARY KEY ("id"))`); - await queryRunner.query(`CREATE TABLE "status" ("id" integer NOT NULL, "name" character varying NOT NULL, CONSTRAINT "PK_e12743a7086ec826733f54e1d95" PRIMARY KEY ("id"))`); - await queryRunner.query(`CREATE TABLE "user" ("id" SERIAL NOT NULL, "email" character varying, "password" character varying, "provider" character varying NOT NULL DEFAULT 'email', "socialId" character varying, "firstName" character varying, "lastName" character varying, "hash" character varying, "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP, "photoId" uuid, "roleId" integer, "statusId" integer, CONSTRAINT "UQ_e12875dfb3b1d92d7d7c5377e22" UNIQUE ("email"), CONSTRAINT "PK_cace4a159ff9f2512dd42373760" PRIMARY KEY ("id"))`); - await queryRunner.query(`CREATE INDEX "IDX_9bd2fe7a8e694dedc4ec2f666f" ON "user" ("socialId") `); - await queryRunner.query(`CREATE INDEX "IDX_58e4dbff0e1a32a9bdc861bb29" ON "user" ("firstName") `); - await queryRunner.query(`CREATE INDEX "IDX_f0e1b4ecdca13b177e2e3a0613" ON "user" ("lastName") `); - await queryRunner.query(`CREATE INDEX "IDX_e282acb94d2e3aec10f480e4f6" ON "user" ("hash") `); - await queryRunner.query(`CREATE TABLE "forgot" ("id" SERIAL NOT NULL, "hash" character varying NOT NULL, "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP, "userId" integer, CONSTRAINT "PK_087959f5bb89da4ce3d763eab75" PRIMARY KEY ("id"))`); - await queryRunner.query(`CREATE INDEX "IDX_df507d27b0fb20cd5f7bef9b9a" ON "forgot" ("hash") `); - await queryRunner.query(`ALTER TABLE "user" ADD CONSTRAINT "FK_75e2be4ce11d447ef43be0e374f" FOREIGN KEY ("photoId") REFERENCES "file"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`); - await queryRunner.query(`ALTER TABLE "user" ADD CONSTRAINT "FK_c28e52f758e7bbc53828db92194" FOREIGN KEY ("roleId") REFERENCES "role"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`); - await queryRunner.query(`ALTER TABLE "user" ADD CONSTRAINT "FK_dc18daa696860586ba4667a9d31" FOREIGN KEY ("statusId") REFERENCES "status"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`); - await queryRunner.query(`ALTER TABLE "forgot" ADD CONSTRAINT "FK_31f3c80de0525250f31e23a9b83" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(`ALTER TABLE "forgot" DROP CONSTRAINT "FK_31f3c80de0525250f31e23a9b83"`); - await queryRunner.query(`ALTER TABLE "user" DROP CONSTRAINT "FK_dc18daa696860586ba4667a9d31"`); - await queryRunner.query(`ALTER TABLE "user" DROP CONSTRAINT "FK_c28e52f758e7bbc53828db92194"`); - await queryRunner.query(`ALTER TABLE "user" DROP CONSTRAINT "FK_75e2be4ce11d447ef43be0e374f"`); - await queryRunner.query(`DROP INDEX "IDX_df507d27b0fb20cd5f7bef9b9a"`); - await queryRunner.query(`DROP TABLE "forgot"`); - await queryRunner.query(`DROP INDEX "IDX_e282acb94d2e3aec10f480e4f6"`); - await queryRunner.query(`DROP INDEX "IDX_f0e1b4ecdca13b177e2e3a0613"`); - await queryRunner.query(`DROP INDEX "IDX_58e4dbff0e1a32a9bdc861bb29"`); - await queryRunner.query(`DROP INDEX "IDX_9bd2fe7a8e694dedc4ec2f666f"`); - await queryRunner.query(`DROP TABLE "user"`); - await queryRunner.query(`DROP TABLE "status"`); - await queryRunner.query(`DROP TABLE "role"`); - await queryRunner.query(`DROP TABLE "file"`); - } + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TABLE "file" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "path" character varying NOT NULL, CONSTRAINT "PK_36b46d232307066b3a2c9ea3a1d" PRIMARY KEY ("id"))`, + ); + await queryRunner.query( + `CREATE TABLE "role" ("id" integer NOT NULL, "name" character varying NOT NULL, CONSTRAINT "PK_b36bcfe02fc8de3c57a8b2391c2" PRIMARY KEY ("id"))`, + ); + await queryRunner.query( + `CREATE TABLE "status" ("id" integer NOT NULL, "name" character varying NOT NULL, CONSTRAINT "PK_e12743a7086ec826733f54e1d95" PRIMARY KEY ("id"))`, + ); + await queryRunner.query( + `CREATE TABLE "user" ("id" SERIAL NOT NULL, "email" character varying, "password" character varying, "provider" character varying NOT NULL DEFAULT 'email', "socialId" character varying, "firstName" character varying, "lastName" character varying, "hash" character varying, "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP, "photoId" uuid, "roleId" integer, "statusId" integer, CONSTRAINT "UQ_e12875dfb3b1d92d7d7c5377e22" UNIQUE ("email"), CONSTRAINT "PK_cace4a159ff9f2512dd42373760" PRIMARY KEY ("id"))`, + ); + await queryRunner.query( + `CREATE INDEX "IDX_9bd2fe7a8e694dedc4ec2f666f" ON "user" ("socialId") `, + ); + await queryRunner.query( + `CREATE INDEX "IDX_58e4dbff0e1a32a9bdc861bb29" ON "user" ("firstName") `, + ); + await queryRunner.query( + `CREATE INDEX "IDX_f0e1b4ecdca13b177e2e3a0613" ON "user" ("lastName") `, + ); + await queryRunner.query( + `CREATE INDEX "IDX_e282acb94d2e3aec10f480e4f6" ON "user" ("hash") `, + ); + await queryRunner.query( + `CREATE TABLE "forgot" ("id" SERIAL NOT NULL, "hash" character varying NOT NULL, "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "deletedAt" TIMESTAMP, "userId" integer, CONSTRAINT "PK_087959f5bb89da4ce3d763eab75" PRIMARY KEY ("id"))`, + ); + await queryRunner.query( + `CREATE INDEX "IDX_df507d27b0fb20cd5f7bef9b9a" ON "forgot" ("hash") `, + ); + await queryRunner.query( + `ALTER TABLE "user" ADD CONSTRAINT "FK_75e2be4ce11d447ef43be0e374f" FOREIGN KEY ("photoId") REFERENCES "file"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`, + ); + await queryRunner.query( + `ALTER TABLE "user" ADD CONSTRAINT "FK_c28e52f758e7bbc53828db92194" FOREIGN KEY ("roleId") REFERENCES "role"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`, + ); + await queryRunner.query( + `ALTER TABLE "user" ADD CONSTRAINT "FK_dc18daa696860586ba4667a9d31" FOREIGN KEY ("statusId") REFERENCES "status"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`, + ); + await queryRunner.query( + `ALTER TABLE "forgot" ADD CONSTRAINT "FK_31f3c80de0525250f31e23a9b83" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`, + ); + } + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "forgot" DROP CONSTRAINT "FK_31f3c80de0525250f31e23a9b83"`, + ); + await queryRunner.query( + `ALTER TABLE "user" DROP CONSTRAINT "FK_dc18daa696860586ba4667a9d31"`, + ); + await queryRunner.query( + `ALTER TABLE "user" DROP CONSTRAINT "FK_c28e52f758e7bbc53828db92194"`, + ); + await queryRunner.query( + `ALTER TABLE "user" DROP CONSTRAINT "FK_75e2be4ce11d447ef43be0e374f"`, + ); + await queryRunner.query(`DROP INDEX "IDX_df507d27b0fb20cd5f7bef9b9a"`); + await queryRunner.query(`DROP TABLE "forgot"`); + await queryRunner.query(`DROP INDEX "IDX_e282acb94d2e3aec10f480e4f6"`); + await queryRunner.query(`DROP INDEX "IDX_f0e1b4ecdca13b177e2e3a0613"`); + await queryRunner.query(`DROP INDEX "IDX_58e4dbff0e1a32a9bdc861bb29"`); + await queryRunner.query(`DROP INDEX "IDX_9bd2fe7a8e694dedc4ec2f666f"`); + await queryRunner.query(`DROP TABLE "user"`); + await queryRunner.query(`DROP TABLE "status"`); + await queryRunner.query(`DROP TABLE "role"`); + await queryRunner.query(`DROP TABLE "file"`); + } } diff --git a/seeds/20200615162100-role.seed.ts b/seeds/20200615162100-role.seed.ts index a1d14ca6d..ec2f97dab 100644 --- a/seeds/20200615162100-role.seed.ts +++ b/seeds/20200615162100-role.seed.ts @@ -4,7 +4,7 @@ import { Role } from 'src/roles/role.entity'; import { RoleEnum } from 'src/roles/roles.enum'; export default class CreateRole implements Seeder { - public async run(factory: Factory, connection: Connection): Promise { + public async run(factory: Factory, connection: Connection): Promise { const countUser = await connection .createQueryBuilder() .select() diff --git a/seeds/20200616115700-status.seed.ts b/seeds/20200616115700-status.seed.ts index 225bb98a7..d38368674 100644 --- a/seeds/20200616115700-status.seed.ts +++ b/seeds/20200616115700-status.seed.ts @@ -4,7 +4,7 @@ import { Status } from 'src/statuses/status.entity'; import { StatusEnum } from 'src/statuses/statuses.enum'; export default class CreateStatus implements Seeder { - public async run(factory: Factory, connection: Connection): Promise { + public async run(factory: Factory, connection: Connection): Promise { const count = await connection .createQueryBuilder() .select() diff --git a/seeds/20200626123300-admin.seed.ts b/seeds/20200626123300-admin.seed.ts index faee09538..655f0e65a 100644 --- a/seeds/20200626123300-admin.seed.ts +++ b/seeds/20200626123300-admin.seed.ts @@ -6,7 +6,7 @@ import { StatusEnum } from '../src/statuses/statuses.enum'; import { plainToClass } from 'class-transformer'; export default class CreateAdmin implements Seeder { - public async run(factory: Factory, connection: Connection): Promise { + public async run(factory: Factory, connection: Connection): Promise { const countAdmin = await connection .createQueryBuilder() .select() diff --git a/seeds/20201028093400-user.seed.ts b/seeds/20201028093400-user.seed.ts index 74c3620ff..26223b625 100644 --- a/seeds/20201028093400-user.seed.ts +++ b/seeds/20201028093400-user.seed.ts @@ -6,7 +6,7 @@ import { StatusEnum } from '../src/statuses/statuses.enum'; import { plainToClass } from 'class-transformer'; export default class CreateAdmin implements Seeder { - public async run(factory: Factory, connection: Connection): Promise { + public async run(factory: Factory, connection: Connection): Promise { const countUser = await connection .createQueryBuilder() .select() diff --git a/src/app.module.ts b/src/app.module.ts index 729e784fb..6462b41a2 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -45,7 +45,7 @@ import { HeaderResolver } from 'nestjs-i18n'; TypeOrmModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], - useFactory: async (configService: ConfigService) => + useFactory: (configService: ConfigService) => ({ type: configService.get('database.type'), url: configService.get('database.url'), @@ -67,7 +67,7 @@ import { HeaderResolver } from 'nestjs-i18n'; extra: { // based on https://node-postgres.com/api/pool // max connection pool size - max: 100, + max: configService.get('database.maxConnections'), }, } as ConnectionOptions), }), @@ -92,7 +92,10 @@ import { HeaderResolver } from 'nestjs-i18n'; )}" <${configService.get('mail.defaultEmail')}>`, }, template: { - dir: path.join(process.env.PWD, 'mail-templates'), + dir: path.join( + configService.get('app.workingDirectory'), + 'mail-templates', + ), adapter: new HandlebarsAdapter(), options: { strict: true, @@ -104,7 +107,7 @@ import { HeaderResolver } from 'nestjs-i18n'; useFactory: (configService: ConfigService) => ({ fallbackLanguage: configService.get('app.fallbackLanguage'), parserOptions: { - path: path.join(process.env.PWD, 'i18n'), + path: path.join(configService.get('app.workingDirectory'), 'i18n'), }, }), parser: I18nJsonParser, diff --git a/src/apple/apple.service.ts b/src/apple/apple.service.ts index dca573bda..e140a25c3 100644 --- a/src/apple/apple.service.ts +++ b/src/apple/apple.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import appleSigninAuth from 'apple-signin-auth'; import { ConfigService } from '@nestjs/config'; import { Tokens } from '../social/tokens'; -import { SocialInterface } from '../social/social.interface'; +import { SocialInterface } from '../social/interfaces/social.interface'; @Injectable() export class AppleService { diff --git a/src/auth/auth.dto.ts b/src/auth/auth.dto.ts index 2733bbc50..1208d9340 100644 --- a/src/auth/auth.dto.ts +++ b/src/auth/auth.dto.ts @@ -6,8 +6,8 @@ import { MinLength, Validate, } from 'class-validator'; -import { IsNotExist } from '../utils/is-not-exists.validator'; -import { IsExist } from '../utils/is-exists.validator'; +import { IsNotExist } from '../utils/validators/is-not-exists.validator'; +import { IsExist } from '../utils/validators/is-exists.validator'; import { FileEntity } from '../files/file.entity'; import { Tokens } from 'src/social/tokens'; import { AuthProvidersEnum } from './auth-providers.enum'; diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index b81cd0c51..2d7c018cb 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -3,11 +3,11 @@ import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { PassportModule } from '@nestjs/passport'; import { JwtModule } from '@nestjs/jwt'; -import { JwtStrategy } from './jwt.strategy'; +import { JwtStrategy } from './strategies/jwt.strategy'; import { TypeOrmModule } from '@nestjs/typeorm'; import { User } from '../users/user.entity'; import { ConfigModule, ConfigService } from '@nestjs/config'; -import { AnonymousStrategy } from './anonymous.strategy'; +import { AnonymousStrategy } from './strategies/anonymous.strategy'; import { Forgot } from 'src/forgot/forgot.entity'; import { AppleModule } from 'src/apple/apple.module'; import { FacebookModule } from 'src/facebook/facebook.module'; @@ -28,7 +28,7 @@ import { UsersModule } from 'src/users/users.module'; JwtModule.registerAsync({ imports: [ConfigModule], inject: [ConfigService], - useFactory: async (configService: ConfigService) => ({ + useFactory: (configService: ConfigService) => ({ secret: configService.get('auth.secret'), signOptions: { expiresIn: configService.get('auth.expires'), diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index e4eb133dc..3154efbda 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -24,7 +24,7 @@ import { AuthProvidersEnum } from './auth-providers.enum'; import { AppleService } from 'src/apple/apple.service'; import { FacebookService } from 'src/facebook/facebook.service'; import { GoogleService } from 'src/google/google.service'; -import { SocialInterface } from 'src/social/social.interface'; +import { SocialInterface } from 'src/social/interfaces/social.interface'; import { TwitterService } from 'src/twitter/twitter.service'; import { I18nService } from 'nestjs-i18n'; @@ -243,7 +243,7 @@ export class AuthService { user.status = plainToClass(Status, { id: StatusEnum.active, }); - user.save(); + await user.save(); } async forgotPassword(email: string): Promise { @@ -316,7 +316,7 @@ export class AuthService { const user = forgot.user; user.password = password; - user.save(); + await user.save(); await this.forgotRepository.softDelete(forgot.id); } diff --git a/src/auth/anonymous.strategy.ts b/src/auth/strategies/anonymous.strategy.ts similarity index 78% rename from src/auth/anonymous.strategy.ts rename to src/auth/strategies/anonymous.strategy.ts index be0417d1c..d21bfc736 100644 --- a/src/auth/anonymous.strategy.ts +++ b/src/auth/strategies/anonymous.strategy.ts @@ -8,7 +8,7 @@ export class AnonymousStrategy extends PassportStrategy(Strategy) { super(); } - public async validate(payload: unknown, request: unknown): Promise { + public validate(payload: unknown, request: unknown): unknown { return request; } } diff --git a/src/auth/jwt.strategy.ts b/src/auth/strategies/jwt.strategy.ts similarity index 89% rename from src/auth/jwt.strategy.ts rename to src/auth/strategies/jwt.strategy.ts index bbd45b343..acab172fa 100644 --- a/src/auth/jwt.strategy.ts +++ b/src/auth/strategies/jwt.strategy.ts @@ -2,7 +2,7 @@ import { ExtractJwt, Strategy } from 'passport-jwt'; import { Injectable, UnauthorizedException } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; import { PassportStrategy } from '@nestjs/passport'; -import { User } from '../users/user.entity'; +import { User } from '../../users/user.entity'; import { ConfigService } from '@nestjs/config'; type JwtPayload = Pick & { iat: number; exp: number }; @@ -19,7 +19,7 @@ export class JwtStrategy extends PassportStrategy(Strategy) { }); } - public async validate(payload: JwtPayload) { + public validate(payload: JwtPayload) { if (!payload.id) { throw new UnauthorizedException(); } diff --git a/src/config/app.config.ts b/src/config/app.config.ts index 8d9cf6cc1..859bf51d7 100644 --- a/src/config/app.config.ts +++ b/src/config/app.config.ts @@ -3,6 +3,7 @@ import { registerAs } from '@nestjs/config'; export default registerAs('app', () => ({ nodeEnv: process.env.NODE_ENV, name: process.env.APP_NAME, + workingDirectory: process.env.PWD, frontendDomain: process.env.FRONTEND_DOMAIN, backendDomain: process.env.BACKEND_DOMAIN, port: parseInt(process.env.APP_PORT || process.env.PORT, 10) || 3000, diff --git a/src/config/database.config.ts b/src/config/database.config.ts index 8140e6f93..b6bd3bb5b 100644 --- a/src/config/database.config.ts +++ b/src/config/database.config.ts @@ -9,4 +9,5 @@ export default registerAs('database', () => ({ name: process.env.DATABASE_NAME, username: process.env.DATABASE_USERNAME, synchronize: process.env.DATABASE_SYNCHRONIZE === 'true', + maxConnections: parseInt(process.env.DATABASE_MAX_CONNECTIONS, 10) || 100, })); diff --git a/src/facebook/facebook.service.ts b/src/facebook/facebook.service.ts index ecaefd795..96a5886bf 100644 --- a/src/facebook/facebook.service.ts +++ b/src/facebook/facebook.service.ts @@ -2,8 +2,8 @@ import { Injectable } from '@nestjs/common'; import { Facebook } from 'fb'; import { ConfigService } from '@nestjs/config'; import { Tokens } from '../social/tokens'; -import { SocialInterface } from '../social/social.interface'; -import { FacebookInterface } from './facebook.interface'; +import { SocialInterface } from '../social/interfaces/social.interface'; +import { FacebookInterface } from './interfaces/facebook.interface'; @Injectable() export class FacebookService { diff --git a/src/facebook/facebook.interface.ts b/src/facebook/interfaces/facebook.interface.ts similarity index 100% rename from src/facebook/facebook.interface.ts rename to src/facebook/interfaces/facebook.interface.ts diff --git a/src/files/files.module.ts b/src/files/files.module.ts index 1c1e833a6..6bfbde3e6 100644 --- a/src/files/files.module.ts +++ b/src/files/files.module.ts @@ -16,7 +16,7 @@ import { FilesService } from './files.service'; MulterModule.registerAsync({ imports: [ConfigModule], inject: [ConfigService], - useFactory: async (configService: ConfigService) => { + useFactory: (configService: ConfigService) => { const storages = { local: () => diskStorage({ diff --git a/src/google/google.service.ts b/src/google/google.service.ts index 9447aee99..102a3814c 100644 --- a/src/google/google.service.ts +++ b/src/google/google.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { OAuth2Client } from 'google-auth-library'; import { Tokens } from '../social/tokens'; -import { SocialInterface } from '../social/social.interface'; +import { SocialInterface } from '../social/interfaces/social.interface'; @Injectable() export class GoogleService { diff --git a/src/main.ts b/src/main.ts index b263ac71c..12523491f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -58,4 +58,4 @@ async function bootstrap() { await app.listen(configService.get('app.port')); } -bootstrap(); +void bootstrap(); diff --git a/src/social/social.interface.ts b/src/social/interfaces/social.interface.ts similarity index 100% rename from src/social/social.interface.ts rename to src/social/interfaces/social.interface.ts diff --git a/src/twitter/twitter.service.ts b/src/twitter/twitter.service.ts index 9bcdc2f89..0890aaeb8 100644 --- a/src/twitter/twitter.service.ts +++ b/src/twitter/twitter.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import * as Twitter from 'twitter'; import { Tokens } from '../social/tokens'; -import { SocialInterface } from '../social/social.interface'; +import { SocialInterface } from '../social/interfaces/social.interface'; @Injectable() export class TwitterService { diff --git a/src/users/user.entity.ts b/src/users/user.entity.ts index 0c62b89bc..e8f4688b8 100644 --- a/src/users/user.entity.ts +++ b/src/users/user.entity.ts @@ -16,9 +16,9 @@ import { ApiProperty } from '@nestjs/swagger'; import { Role } from '../roles/role.entity'; import { IsEmail, IsNotEmpty, MinLength, Validate } from 'class-validator'; import { Status } from '../statuses/status.entity'; -import { IsNotExist } from '../utils/is-not-exists.validator'; +import { IsNotExist } from '../utils/validators/is-not-exists.validator'; import { FileEntity } from '../files/file.entity'; -import { IsExist } from '../utils/is-exists.validator'; +import { IsExist } from '../utils/validators/is-exists.validator'; import * as bcrypt from 'bcryptjs'; import { EntityHelper } from 'src/utils/entity-helper'; import { AuthProvidersEnum } from 'src/auth/auth-providers.enum'; diff --git a/src/utils/serializer.interceptor.ts b/src/utils/serializer.interceptor.ts index e474c94db..1ea78a8be 100644 --- a/src/utils/serializer.interceptor.ts +++ b/src/utils/serializer.interceptor.ts @@ -12,10 +12,7 @@ import deepMapObject from './deep-map-object'; @Injectable() export class SerializerInterceptor implements NestInterceptor { - async intercept( - context: ExecutionContext, - next: CallHandler, - ): Promise> { + intercept(context: ExecutionContext, next: CallHandler): Observable { return next.handle().pipe( map(data => { return deepMapObject(data, value => { diff --git a/src/utils/is-exists.validator.ts b/src/utils/validators/is-exists.validator.ts similarity index 100% rename from src/utils/is-exists.validator.ts rename to src/utils/validators/is-exists.validator.ts diff --git a/src/utils/is-not-exists.validator.ts b/src/utils/validators/is-not-exists.validator.ts similarity index 100% rename from src/utils/is-not-exists.validator.ts rename to src/utils/validators/is-not-exists.validator.ts