Skip to content

Commit

Permalink
add the last module, departments module
Browse files Browse the repository at this point in the history
  • Loading branch information
ikhsanalatsary committed Dec 9, 2023
1 parent dca1cdf commit 3a9166b
Show file tree
Hide file tree
Showing 8 changed files with 166 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/departments/departments.controller.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { Test, TestingModule } from '@nestjs/testing';
import { DepartmentsController } from './departments.controller';
import { DepartmentsService } from './departments.service';

describe('DepartmentsController', () => {
let controller: DepartmentsController;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [DepartmentsController],
providers: [DepartmentsService],
}).compile();

controller = module.get<DepartmentsController>(DepartmentsController);
});

it('should be defined', () => {
expect(controller).toBeDefined();
});
});
34 changes: 34 additions & 0 deletions src/departments/departments.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { DepartmentsService } from './departments.service';
import { CreateDepartmentDto } from './dto/create-department.dto';
import { UpdateDepartmentDto } from './dto/update-department.dto';

@Controller('departments')
export class DepartmentsController {
constructor(private readonly departmentsService: DepartmentsService) {}

@Post()
create(@Body() createDepartmentDto: CreateDepartmentDto) {
return this.departmentsService.create(createDepartmentDto);
}

@Get()
findAll() {
return this.departmentsService.findAll();
}

@Get(':id')
findOne(@Param('id') id: string) {
return this.departmentsService.findOne(+id);
}

@Patch(':id')
update(@Param('id') id: string, @Body() updateDepartmentDto: UpdateDepartmentDto) {
return this.departmentsService.update(+id, updateDepartmentDto);
}

@Delete(':id')
remove(@Param('id') id: string) {
return this.departmentsService.remove(+id);
}
}
12 changes: 12 additions & 0 deletions src/departments/departments.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Module } from '@nestjs/common';
import { DepartmentsService } from './departments.service';
import { DepartmentsController } from './departments.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Department } from './entities/department.entity';

@Module({
imports: [TypeOrmModule.forFeature([Department])],
controllers: [DepartmentsController],
providers: [DepartmentsService],
})
export class DepartmentsModule {}
18 changes: 18 additions & 0 deletions src/departments/departments.service.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { DepartmentsService } from './departments.service';

describe('DepartmentsService', () => {
let service: DepartmentsService;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [DepartmentsService],
}).compile();

service = module.get<DepartmentsService>(DepartmentsService);
});

it('should be defined', () => {
expect(service).toBeDefined();
});
});
37 changes: 37 additions & 0 deletions src/departments/departments.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Injectable } from '@nestjs/common';
import { CreateDepartmentDto } from './dto/create-department.dto';
import { UpdateDepartmentDto } from './dto/update-department.dto';
import { Repository } from 'typeorm';
import { Department } from './entities/department.entity';
import { InjectRepository } from '@nestjs/typeorm';

@Injectable()
export class DepartmentsService {
constructor(
@InjectRepository(Department)
private readonly departmentRepository: Repository<Department>,
) {}

async create(createDepartmentDto: CreateDepartmentDto) {
const department = this.departmentRepository.create(createDepartmentDto);
return this.departmentRepository.save(department);
}

async findAll() {
return this.departmentRepository.find();
}

async findOne(id: number) {
return this.departmentRepository.findOne({ where: { id } });
}

async update(id: number, updateDepartmentDto: UpdateDepartmentDto) {
const department = this.departmentRepository.create(updateDepartmentDto);
await this.departmentRepository.update(id, department);
return this.findOne(id);
}

async remove(id: number) {
return this.departmentRepository.delete(id);
}
}
16 changes: 16 additions & 0 deletions src/departments/dto/create-department.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { IsNotEmpty, IsNumber, IsString } from 'class-validator';

export interface IDepartment {
name: string;
employer_id: number;
}

export class CreateDepartmentDto implements IDepartment {
@IsString()
@IsNotEmpty()
name: string;

@IsNumber()
@IsNotEmpty()
employer_id: number;
}
4 changes: 4 additions & 0 deletions src/departments/dto/update-department.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { PartialType } from '@nestjs/mapped-types';
import { CreateDepartmentDto } from './create-department.dto';

export class UpdateDepartmentDto extends PartialType(CreateDepartmentDto) {}
25 changes: 25 additions & 0 deletions src/departments/entities/department.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import {
Column,
CreateDateColumn,
Entity,
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm';

@Entity({ name: 'departments' })
export class Department {
@PrimaryGeneratedColumn()
id: number;

@Column()
name: string;

@Column()
employer_id: number;

@CreateDateColumn()
created_at: Date;

@UpdateDateColumn()
updated_at: Date;
}

0 comments on commit 3a9166b

Please sign in to comment.