feat: configured database and user entity
This commit is contained in:
+14
-1
@@ -1,9 +1,22 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { AppController } from './app.controller';
|
||||
import { AppService } from './app.service';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { ConfigModule, ConfigService } from '@nestjs/config';
|
||||
import Joi from 'joi';
|
||||
import { validationSchema } from './config/config.validation';
|
||||
import { UsersModule } from './users/users.module';
|
||||
import { databaseConfig } from './config/typeorm.config';
|
||||
|
||||
@Module({
|
||||
imports: [],
|
||||
imports: [
|
||||
ConfigModule.forRoot({
|
||||
isGlobal: true,
|
||||
validationSchema
|
||||
}),
|
||||
TypeOrmModule.forRootAsync(databaseConfig()),
|
||||
UsersModule
|
||||
],
|
||||
controllers: [AppController],
|
||||
providers: [AppService],
|
||||
})
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
import {
|
||||
CreateDateColumn,
|
||||
PrimaryGeneratedColumn,
|
||||
UpdateDateColumn,
|
||||
} from 'typeorm';
|
||||
|
||||
export abstract class BaseEntity {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@CreateDateColumn({type: 'timestamptz'})
|
||||
createdAt: Date;
|
||||
|
||||
@UpdateDateColumn({type: 'timestamptz'})
|
||||
updatedAt: Date;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import * as Joi from 'joi';
|
||||
|
||||
export const validationSchema = Joi.object({
|
||||
DB_HOST: Joi.string().required(),
|
||||
DB_PORT: Joi.number().required(),
|
||||
DB_USER: Joi.string().required(),
|
||||
DB_PASSWORD: Joi.string().required(),
|
||||
DB_NAME: Joi.string().required(),
|
||||
});
|
||||
@@ -0,0 +1,21 @@
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import { TypeOrmModuleAsyncOptions } from '@nestjs/typeorm';
|
||||
|
||||
export function databaseConfig(): TypeOrmModuleAsyncOptions {
|
||||
return {
|
||||
inject: [ConfigService],
|
||||
useFactory: (config: ConfigService) => ({
|
||||
type: 'postgres',
|
||||
host: config.getOrThrow<string>('DB_HOST'),
|
||||
port: config.getOrThrow<number>('DB_PORT'),
|
||||
username: config.getOrThrow<string>('DB_USER'),
|
||||
password: config.getOrThrow<string>('DB_PASSWORD'),
|
||||
database: config.getOrThrow<string>('DB_NAME'),
|
||||
|
||||
synchronize: true,
|
||||
autoLoadEntities: true,
|
||||
|
||||
logging: true,
|
||||
}),
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
import { Controller } from '@nestjs/common';
|
||||
|
||||
@Controller('users')
|
||||
export class UsersController {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import { Entity, Column } from "typeorm";
|
||||
import { BaseEntity } from "src/common/entities/base.entity";
|
||||
|
||||
@Entity('users')
|
||||
export class User extends BaseEntity {
|
||||
@Column({type: 'varchar', length: 20})
|
||||
firstName: string;
|
||||
|
||||
@Column({type: 'varchar', length: 20})
|
||||
lastName: string;
|
||||
|
||||
@Column({unique: true, type: 'varchar', length: 100})
|
||||
email: string;
|
||||
|
||||
@Column({unique: true, type: 'varchar', length: 11})
|
||||
phone: string;
|
||||
|
||||
@Column({
|
||||
select: false
|
||||
})
|
||||
password: string;
|
||||
|
||||
@Column({
|
||||
name: 'refresh_token',
|
||||
nullable: true,
|
||||
select: false
|
||||
})
|
||||
refreshToken: string;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { UserRepository } from '../repositories/user.repository';
|
||||
|
||||
@Injectable()
|
||||
export class UsersService {
|
||||
constructor(
|
||||
private readonly userRepository: UserRepository
|
||||
) {}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
import { Repository } from "typeorm";
|
||||
import { User } from "../entities/user.entity";
|
||||
import { InjectRepository } from "@nestjs/typeorm";
|
||||
import { Injectable } from "@nestjs/common";
|
||||
|
||||
@Injectable()
|
||||
export class UserRepository extends Repository<User> {
|
||||
constructor(@InjectRepository(User) userRepository: Repository<User>) {
|
||||
super(userRepository.target, userRepository.manager, userRepository.queryRunner);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { UsersController } from './controllers/users.controller';
|
||||
import { UsersService } from './providers/users.service';
|
||||
import { UserRepository } from './repositories/user.repository';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { User } from './entities/user.entity';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
TypeOrmModule.forFeature([User])
|
||||
],
|
||||
controllers: [UsersController],
|
||||
providers: [UsersService, UserRepository],
|
||||
exports: [UsersService]
|
||||
})
|
||||
export class UsersModule {}
|
||||
Reference in New Issue
Block a user