From fc37b598ec0bc7e80cb9b49586bece638687bc67 Mon Sep 17 00:00:00 2001 From: Mahdi Date: Sat, 4 Jan 2025 19:22:45 +0330 Subject: [PATCH] Building the user module --- src/modules/users/dto/user.dto.ts | 6 ++++++ src/modules/users/user.entity.ts | 30 ++++++++++++++++++++++++++++ src/modules/users/users.module.ts | 9 +++++++++ src/modules/users/users.providers.ts | 9 +++++++++ src/modules/users/users.service.ts | 23 +++++++++++++++++++++ 5 files changed, 77 insertions(+) create mode 100644 src/modules/users/dto/user.dto.ts create mode 100644 src/modules/users/user.entity.ts create mode 100644 src/modules/users/users.module.ts create mode 100644 src/modules/users/users.providers.ts create mode 100644 src/modules/users/users.service.ts diff --git a/src/modules/users/dto/user.dto.ts b/src/modules/users/dto/user.dto.ts new file mode 100644 index 0000000..441517c --- /dev/null +++ b/src/modules/users/dto/user.dto.ts @@ -0,0 +1,6 @@ +export class UserDto { + readonly name: string; + readonly email: string; + readonly password: string; + readonly gender: string; +} diff --git a/src/modules/users/user.entity.ts b/src/modules/users/user.entity.ts new file mode 100644 index 0000000..7fc2369 --- /dev/null +++ b/src/modules/users/user.entity.ts @@ -0,0 +1,30 @@ +import { Table, Column, Model, DataType } from 'sequelize-typescript'; + +@Table +export class User extends Model { + @Column({ + type: DataType.STRING, + allowNull: false, + }) + name: string; + + @Column({ + type: DataType.STRING, + unique: true, + allowNull: false, + }) + email: string; + + @Column({ + type: DataType.STRING, + allowNull: false, + }) + password: string; + + @Column({ + type: DataType.ENUM, + values: ['male', 'female'], + allowNull: false, + }) + gender: string; +} diff --git a/src/modules/users/users.module.ts b/src/modules/users/users.module.ts new file mode 100644 index 0000000..949e0c8 --- /dev/null +++ b/src/modules/users/users.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { UsersService } from './users.service'; +import { usersProviders } from './users.providers'; + +@Module({ + providers: [UsersService, ...usersProviders], + exports: [UsersService], +}) +export class UsersModule {} diff --git a/src/modules/users/users.providers.ts b/src/modules/users/users.providers.ts new file mode 100644 index 0000000..2b9e27f --- /dev/null +++ b/src/modules/users/users.providers.ts @@ -0,0 +1,9 @@ +import { User } from './user.entity'; +import { USER_REPOSITORY } from '../../core/constants'; + +export const usersProviders = [ + { + provide: USER_REPOSITORY, + useValue: User, + }, +]; diff --git a/src/modules/users/users.service.ts b/src/modules/users/users.service.ts new file mode 100644 index 0000000..94f0006 --- /dev/null +++ b/src/modules/users/users.service.ts @@ -0,0 +1,23 @@ +import { Injectable, Inject } from '@nestjs/common'; +import { User } from './user.entity'; +import { UserDto } from './dto/user.dto'; +import { USER_REPOSITORY } from '../../core/constants'; + +@Injectable() +export class UsersService { + constructor( + @Inject(USER_REPOSITORY) private readonly userRepository: typeof User, + ) {} + + async create(user: UserDto): Promise { + return await this.userRepository.create(user); + } + + async findOneByEmail(email: string): Promise { + return await this.userRepository.findOne({ where: { email } }); + } + + async findOneById(id: number): Promise { + return await this.userRepository.findOne({ where: { id } }); + } +}