Browse Source

ADD: [manufacturer] dto

portowyi 2 years ago
parent
commit
2683ffcbc8

+ 13 - 0
.env

@@ -0,0 +1,13 @@
+TYPEORM_CONNECTION=postgres
+TYPEORM_HOST=localhost
+TYPEORM_USERNAME=admin
+TYPEORM_PASSWORD=admin
+TYPEORM_DATABASE=price-management
+TYPEORM_PORT=5432
+TYPEORM_SYNCHRONIZE=false
+TYPEORM_LOGGING=true
+TYPEORM_ENTITIES=dist/**/*.entity.js
+TYPEORM_MIGRATIONS=dist/migrations/*.js
+TYPEORM_MIGRATIONS_DIR=src/migrations
+TYPEORM_MIGRATIONS_RUN=false
+TYPEORM_MIGRATIONS_TABLE_NAME=migrations

+ 5 - 1
package.json

@@ -17,7 +17,11 @@
     "test:watch": "jest --watch",
     "test:cov": "jest --coverage",
     "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
-    "test:e2e": "jest --config ./test/jest-e2e.json"
+    "test:e2e": "jest --config ./test/jest-e2e.json",
+    "typeorm:cli": "npm run build && typeorm -d dist/db/data-source.js",
+    "migration:generate": "npm run typeorm:cli -- migration:generate",
+    "migration:run": "npm run typeorm:cli -- migration:run",
+    "migration:revert": "npm run typeorm:cli -- migration:revert"
   },
   "dependencies": {
     "@nestjs/common": "^10.0.0",

+ 2 - 2
src/app.module.ts

@@ -1,10 +1,10 @@
 import { Module } from '@nestjs/common';
-import { typeOrmModuleOptions } from './config/db-config';
 import { TypeOrmModule } from '@nestjs/typeorm';
 import { ManufacturerModule } from './manufacturer/manufacturer.module';
+import { dataSourceOptions } from './db/data-source';
 
 @Module({
-  imports: [TypeOrmModule.forRoot(typeOrmModuleOptions), ManufacturerModule],
+  imports: [TypeOrmModule.forRoot(dataSourceOptions), ManufacturerModule],
   controllers: [],
   providers: [],
 })

+ 0 - 14
src/config/db-config.ts

@@ -1,14 +0,0 @@
-import { TypeOrmModuleOptions } from '@nestjs/typeorm';
-const entities = [];
-
-export const typeOrmModuleOptions: TypeOrmModuleOptions = {
-  type: 'postgres',
-  host: 'localhost',
-  port: 5432,
-  username: 'admin',
-  password: 'admin',
-  database: 'price-management',
-  entities: entities,
-  migrations: ['dist/config/migrations/*.js'],
-  synchronize: false,
-};

+ 27 - 0
src/db/data-source.ts

@@ -0,0 +1,27 @@
+import { DataSource, DataSourceOptions } from 'typeorm';
+
+export const dataSourceOptions: DataSourceOptions = {
+  type: 'postgres',
+  host: 'db',
+  port: 5432,
+  username: 'admin',
+  password: 'admin',
+  database: 'price-management',
+  entities: ['dist/**/*.entity.js'],
+  migrations: ['dist/db/migrations/*.js'],
+  synchronize: false,
+};
+
+const dataSource = new DataSource({
+  type: 'postgres',
+  host: 'localhost',
+  port: 5432,
+  username: 'admin',
+  password: 'admin',
+  database: 'price-management',
+  entities: ['dist/**/*.entity.js'],
+  migrations: ['dist/db/migrations/*.js'],
+  synchronize: false,
+});
+
+export default dataSource;

+ 15 - 0
src/db/migrations/1696964733568-Init.ts

@@ -0,0 +1,15 @@
+import { MigrationInterface, QueryRunner } from 'typeorm';
+
+export class Init1696964733568 implements MigrationInterface {
+  name = 'Init1696964733568';
+
+  public async up(queryRunner: QueryRunner): Promise<void> {
+    await queryRunner.query(
+      `CREATE TABLE "manufacturer" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "name" character varying NOT NULL, "code" character varying NOT NULL, "created_at" TIMESTAMP NOT NULL DEFAULT now(), "updated_at" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT "UQ_a8a7848058d77812b7edbd89a43" UNIQUE ("code"), CONSTRAINT "PK_81fc5abca8ed2f6edc79b375eeb" PRIMARY KEY ("id"))`,
+    );
+  }
+
+  public async down(queryRunner: QueryRunner): Promise<void> {
+    await queryRunner.query(`DROP TABLE "manufacturer"`);
+  }
+}

+ 24 - 0
src/manufacturer/manufacturer.controller.ts

@@ -0,0 +1,24 @@
+import { Body, Controller, Get, Param, Post } from '@nestjs/common';
+import { ManufacturerDto } from './dto/manufacturer.dto';
+import { ManufacturerService } from './manufacturer.service';
+import { Manufacturer } from './manufacturer.entity';
+
+@Controller('manufacturer')
+export class ManufacturerController {
+  constructor(private readonly manufacturerService: ManufacturerService) {}
+
+  @Post('/array')
+  create(@Body() manufacturerDtoArray: ManufacturerDto[]): Promise<void> {
+    return this.manufacturerService.create(manufacturerDtoArray);
+  }
+
+  @Post()
+  createOne(@Body() manufacturerDto: ManufacturerDto): Promise<Manufacturer> {
+    return this.manufacturerService.createOne(manufacturerDto);
+  }
+
+  @Get(':id')
+  findById(@Param('id') id: string): Promise<Manufacturer> {
+    return this.manufacturerService.fineById(id);
+  }
+}

+ 5 - 0
src/manufacturer/manufacturer.entity.ts

@@ -0,0 +1,5 @@
+import { BaseEntity } from '../base-entity/base.entity';
+import { Entity } from 'typeorm';
+
+@Entity()
+export class Manufacturer extends BaseEntity {}

+ 9 - 1
src/manufacturer/manufacturer.module.ts

@@ -1,4 +1,12 @@
 import { Module } from '@nestjs/common';
+import { ManufacturerController } from './manufacturer.controller';
+import { ManufacturerService } from './manufacturer.service';
+import { TypeOrmModule } from '@nestjs/typeorm';
+import { Manufacturer } from './manufacturer.entity';
 
-@Module({})
+@Module({
+  imports: [TypeOrmModule.forFeature([Manufacturer])],
+  controllers: [ManufacturerController],
+  providers: [ManufacturerService],
+})
 export class ManufacturerModule {}

+ 6 - 0
src/manufacturer/manufacturer.repository.ts

@@ -0,0 +1,6 @@
+import { Repository } from 'typeorm';
+import { Manufacturer } from './manufacturer.entity';
+
+export interface ManufacturerRepository extends Repository<Manufacturer> {
+  this: Repository<Manufacturer>;
+}

+ 59 - 0
src/manufacturer/manufacturer.service.ts

@@ -0,0 +1,59 @@
+import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
+import { InjectRepository } from '@nestjs/typeorm';
+import { Manufacturer } from './manufacturer.entity';
+import { ManufacturerRepository } from './manufacturer.repository';
+import { ManufacturerDto } from './dto/manufacturer.dto';
+
+@Injectable()
+export class ManufacturerService {
+  constructor(
+    @InjectRepository(Manufacturer)
+    private readonly manufacturerRepository: ManufacturerRepository,
+  ) {}
+
+  async create(manufacturerDto: ManufacturerDto[]): Promise<void> {
+    const manufacturerArray: Manufacturer[] = manufacturerDto.map(
+      ({ id, name, code }) => {
+        return this.manufacturerRepository.create({
+          id,
+          name,
+          code,
+        });
+      },
+    );
+
+    try {
+      await this.manufacturerRepository.save(manufacturerArray);
+    } catch (err) {
+      throw new HttpException(
+        {
+          status: HttpStatus.INTERNAL_SERVER_ERROR,
+          error: 'This is a custom message',
+        },
+        HttpStatus.FORBIDDEN,
+        {
+          cause: err,
+        },
+      );
+    }
+  }
+
+  async createOne(manufacturerDto: ManufacturerDto): Promise<Manufacturer> {
+    const { id, name, code } = { ...manufacturerDto };
+    const manufacturer: Manufacturer = this.manufacturerRepository.create({
+      id,
+      name,
+      code,
+    });
+
+    return await this.manufacturerRepository.save(manufacturer);
+  }
+
+  async fineById(id: string): Promise<Manufacturer | null> {
+    return await this.manufacturerRepository.findOneOrFail({
+      where: {
+        id: id,
+      },
+    });
+  }
+}