From 58c9bfa912c04cc2c8021cd6ae574f756a7637b3 Mon Sep 17 00:00:00 2001 From: mahyargdz Date: Sun, 19 Jan 2025 11:42:15 +0330 Subject: [PATCH] chore: add user entity and role entity --- .env.example | 9 +++++ docker-compose.yaml | 36 +++++++++++++++++++ src/modules/users/entities/role.entity.ts | 9 +++++ src/modules/users/entities/user.entity.ts | 17 +++++---- src/modules/users/enums/role.enum.ts | 6 ++++ .../users/providers/users.repository.ts | 2 +- 6 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 .env.example create mode 100644 docker-compose.yaml create mode 100644 src/modules/users/entities/role.entity.ts create mode 100644 src/modules/users/enums/role.enum.ts diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..2f6d057 --- /dev/null +++ b/.env.example @@ -0,0 +1,9 @@ +NODE_ENV=development +PORT=3500 + + +DB_HOST=localhost +DB_PORT=5432 +DB_NAME=danak-dsc +DB_USER=danak +DB_PASS=jkm3q2wux56RHYuTuKN11Too6+4pIpGQj3Q/fkNbahM \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..f978f53 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,36 @@ +services: + pg_db: + image: postgres:alpine + env_file: + - .env + restart: always + container_name: postgres_dsc + ports: + - 54320:5432 + # networks: + # - app_network + volumes: + - postgres_data:/var/lib/postgresql/data + environment: + POSTGRES_PASSWORD: ${DB_PASS} + POSTGRES_USER: ${DB_USER} + POSTGRES_DB: ${DB_NAME} + + + # pgadmin: + # image: dpage/pgadmin4 + # restart: always + # container_name: pgadmin + # ports: + # - 5050:80 + # environment: + # PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL} + # PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD} + # depends_on: + # - pg_db + +volumes: + postgres_data: +# networks: +# app_network: +# driver: bridge \ No newline at end of file diff --git a/src/modules/users/entities/role.entity.ts b/src/modules/users/entities/role.entity.ts new file mode 100644 index 0000000..22398d7 --- /dev/null +++ b/src/modules/users/entities/role.entity.ts @@ -0,0 +1,9 @@ +import { BaseEntity, Column, Entity } from "typeorm"; + +import { RoleEnum } from "../enums/role.enum"; + +@Entity() +export class Role extends BaseEntity { + @Column({ type: "enum", enum: RoleEnum, default: RoleEnum.USER, nullable: false }) + name: RoleEnum; +} diff --git a/src/modules/users/entities/user.entity.ts b/src/modules/users/entities/user.entity.ts index 73570a9..01c6c11 100644 --- a/src/modules/users/entities/user.entity.ts +++ b/src/modules/users/entities/user.entity.ts @@ -1,14 +1,14 @@ -import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; +import { Column, Entity, OneToOne } from "typeorm"; + +import { Role } from "./role.entity"; +import { BaseEntity } from "../../../common/entities/base.entity"; @Entity() -export class User { - @PrimaryGeneratedColumn("uuid") - id: string; - - @Column({ type: "varchar", length: 150, unique: true }) +export class User extends BaseEntity { + @Column({ type: "varchar", length: 150, unique: true, nullable: true }) email: string; - @Column({ type: "varchar", length: 11, unique: true }) + @Column({ type: "varchar", length: 11, unique: true, nullable: true }) phoneNumber: string; @Column({ type: "varchar", length: 150 }) @@ -25,4 +25,7 @@ export class User { @Column({ type: "varchar", length: 100 }) nationalCode: string; + + @OneToOne(() => Role, { eager: true, cascade: true, onDelete: "SET NULL" }) + role: Role; } diff --git a/src/modules/users/enums/role.enum.ts b/src/modules/users/enums/role.enum.ts new file mode 100644 index 0000000..84c40e9 --- /dev/null +++ b/src/modules/users/enums/role.enum.ts @@ -0,0 +1,6 @@ +export enum RoleEnum { + SUPER_ADMIN = "super_admin", + ADMIN = "admin", + USER = "user", + VISITOR = "visitor", +} diff --git a/src/modules/users/providers/users.repository.ts b/src/modules/users/providers/users.repository.ts index 8661a14..058aca8 100644 --- a/src/modules/users/providers/users.repository.ts +++ b/src/modules/users/providers/users.repository.ts @@ -6,7 +6,7 @@ import { User } from "../entities/user.entity"; @Injectable() export class UserRepository extends Repository { - constructor(@InjectRepository(User) private userRepository: Repository) { + constructor(@InjectRepository(User) userRepository: Repository) { super(userRepository.target, userRepository.manager, userRepository.queryRunner); } }