Skip to content

Commit f518cd1

Browse files
Merge pull request #277 from ahmadogo/feat/supplierModule
Implemented Supplier Module
2 parents e9be435 + e57045c commit f518cd1

File tree

9 files changed

+174
-6
lines changed

9 files changed

+174
-6
lines changed

backend/package-lock.json

Lines changed: 23 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,16 @@
2323
"@nestjs/common": "^10.0.0",
2424
"@nestjs/config": "^3.0.0",
2525
"@nestjs/core": "^10.0.0",
26+
"@nestjs/mapped-types": "*",
2627
"@nestjs/platform-express": "^10.0.0",
27-
"@nestjs/typeorm": "^10.0.0",
28+
"@nestjs/typeorm": "^10.0.2",
2829
"class-transformer": "^0.5.1",
2930
"class-validator": "^0.14.0",
3031
"nestjs-i18n": "^10.5.1",
3132
"pg": "^8.11.3",
3233
"reflect-metadata": "^0.2.0",
3334
"rxjs": "^7.8.1",
34-
"typeorm": "^0.3.17"
35+
"typeorm": "^0.3.27"
3536
},
3637
"devDependencies": {
3738
"@nestjs/cli": "^10.0.0",

backend/src/app.module.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { Module } from '@nestjs/common';
2-
import { TypeOrmModule } from '@nestjs/typeorm';
32
import { ConfigModule, ConfigService } from '@nestjs/config';
43
import { AppController } from './app.controller';
54
import { AppService } from './app.service';
@@ -16,7 +15,6 @@ import { User } from './users/entities/user.entity';
1615
ConfigModule.forRoot({
1716
isGlobal: true,
1817
}),
19-
2018
TypeOrmModule.forRootAsync({
2119
imports: [ConfigModule],
2220
useFactory: (configService: ConfigService) => ({
@@ -31,6 +29,7 @@ import { User } from './users/entities/user.entity';
3129
}),
3230
inject: [ConfigService],
3331
}),
32+
3433
AssetCategoriesModule,
3534
DepartmentsModule,
3635
AssetTransfersModule,
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { IsEmail, IsNotEmpty, IsOptional, IsString } from 'class-validator';
2+
3+
export class CreateSupplierDto {
4+
@IsString()
5+
@IsNotEmpty()
6+
name: string;
7+
8+
@IsOptional()
9+
@IsString()
10+
contactInfo?: string;
11+
12+
@IsOptional()
13+
@IsString()
14+
address?: string;
15+
16+
@IsEmail()
17+
email: string;
18+
19+
@IsString()
20+
phone: string;
21+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { PartialType } from '@nestjs/mapped-types';
2+
import { CreateSupplierDto } from './create-supplier.dto';
3+
4+
export class UpdateSupplierDto extends PartialType(CreateSupplierDto) {}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm';
2+
3+
@Entity('suppliers')
4+
export class Supplier {
5+
@PrimaryGeneratedColumn('uuid')
6+
id: string;
7+
8+
@Column()
9+
name: string;
10+
11+
@Column({ nullable: true })
12+
contactInfo: string;
13+
14+
@Column({ nullable: true })
15+
address: string;
16+
17+
@Column({ unique: true })
18+
email: string;
19+
20+
@Column()
21+
phone: string;
22+
23+
// This should be uncommented when the Asset entity is created
24+
// @OneToMany(() => Asset, (asset) => asset.supplier)
25+
// assets: Asset[];
26+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {
2+
Controller,
3+
Get,
4+
Post,
5+
Body,
6+
Param,
7+
Put,
8+
Delete,
9+
} from '@nestjs/common';
10+
import { SuppliersService } from './suppliers.service';
11+
import { CreateSupplierDto } from './dto/create-supplier.dto';
12+
import { UpdateSupplierDto } from './dto/update-supplier.dto';
13+
14+
@Controller('suppliers')
15+
export class SuppliersController {
16+
constructor(private readonly suppliersService: SuppliersService) {}
17+
18+
@Post()
19+
create(@Body() dto: CreateSupplierDto) {
20+
return this.suppliersService.create(dto);
21+
}
22+
23+
@Get()
24+
findAll() {
25+
return this.suppliersService.findAll();
26+
}
27+
28+
@Get(':id')
29+
findOne(@Param('id') id: string) {
30+
return this.suppliersService.findOne(id);
31+
}
32+
33+
@Put(':id')
34+
update(@Param('id') id: string, @Body() dto: UpdateSupplierDto) {
35+
return this.suppliersService.update(id, dto);
36+
}
37+
38+
@Delete(':id')
39+
remove(@Param('id') id: string) {
40+
return this.suppliersService.remove(id);
41+
}
42+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Module } from '@nestjs/common';
2+
import { SuppliersService } from './suppliers.service';
3+
import { SuppliersController } from './suppliers.controller';
4+
import { TypeOrmModule } from '@nestjs/typeorm';
5+
import { Supplier } from './entities/supplier.entity';
6+
7+
@Module({
8+
imports: [TypeOrmModule.forFeature([Supplier])],
9+
controllers: [SuppliersController],
10+
providers: [SuppliersService],
11+
})
12+
export class SuppliersModule {}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { Injectable, NotFoundException } from '@nestjs/common';
2+
import { InjectRepository } from '@nestjs/typeorm';
3+
import { Repository } from 'typeorm';
4+
import { CreateSupplierDto } from './dto/create-supplier.dto';
5+
import { UpdateSupplierDto } from './dto/update-supplier.dto';
6+
import { Supplier } from './entities/supplier.entity';
7+
8+
@Injectable()
9+
export class SuppliersService {
10+
constructor(
11+
@InjectRepository(Supplier)
12+
private suppliersRepo: Repository<Supplier>,
13+
) {}
14+
15+
create(dto: CreateSupplierDto): Promise<Supplier> {
16+
const supplier = this.suppliersRepo.create(dto);
17+
return this.suppliersRepo.save(supplier);
18+
}
19+
20+
findAll(): Promise<Supplier[]> {
21+
return this.suppliersRepo.find({ relations: ['assets'] });
22+
}
23+
24+
public async findOne(id: string): Promise<Supplier> {
25+
const supplier = await this.suppliersRepo.findOne({
26+
where: { id },
27+
relations: ['assets'],
28+
});
29+
if (!supplier) throw new NotFoundException(`Supplier ${id} not found`);
30+
return supplier;
31+
}
32+
33+
public async update(id: string, dto: UpdateSupplierDto): Promise<Supplier> {
34+
const supplier = await this.findOne(id);
35+
Object.assign(supplier, dto);
36+
return this.suppliersRepo.save(supplier);
37+
}
38+
39+
public async remove(id: string): Promise<void> {
40+
await this.suppliersRepo.delete(id);
41+
}
42+
}

0 commit comments

Comments
 (0)