ppob-backend/src/users/users.controller.ts
2021-12-20 12:13:48 +07:00

233 lines
5.5 KiB
TypeScript

import {
Body,
Controller,
Delete,
Get,
HttpStatus,
Param,
ParseUUIDPipe,
Post,
Put,
Query,
Request,
} from '@nestjs/common';
import { UsersService } from './users.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { Public } from '../auth/public.decorator';
import { CreateSupplierDto } from './dto/create-supplier.dto';
import { SupplierService } from './supplier/supplier.service';
import { PartnerService } from './partner/partner.service';
import { CreatePartnerDto } from './dto/create-partner.dto';
import { UpdatePartnerDto } from './dto/update-partner.dto';
import { UpdateSupplierDto } from './dto/update-supplier.dto';
@Controller({
path: 'users',
version: '1',
})
export class UsersController {
constructor(
private readonly usersService: UsersService,
private readonly supplierService: SupplierService,
private readonly partnerService: PartnerService,
) {}
@Post()
async create(@Request() req, @Body() createUserDto: CreateUserDto) {
return {
data: await this.usersService.create(createUserDto, req.user),
statusCode: HttpStatus.CREATED,
message: 'success',
};
}
@Post('supplier')
async createSupplier(@Body() createPartnerDto: CreateSupplierDto) {
return {
data: await this.supplierService.create(createPartnerDto),
statusCode: HttpStatus.CREATED,
message: 'success',
};
}
@Get('supplier/:id/:type')
async updateSupplier(
@Param('id', ParseUUIDPipe) id: string,
@Param('type') type: string,
) {
return {
data: await this.supplierService.setStatus(id, type),
statusCode: HttpStatus.CREATED,
message: 'success',
};
}
@Put('supplier/:id')
async setStatusSupplier(
@Param('id', ParseUUIDPipe) id: string,
@Body() updatePartnerDto: UpdateSupplierDto,
) {
return {
data: await this.supplierService.update(id, updatePartnerDto),
statusCode: HttpStatus.CREATED,
message: 'success',
};
}
@Post('partner')
async createPartner(
@Request() req,
@Body() createPartnerDto: CreatePartnerDto,
) {
return {
data: await this.partnerService.create(createPartnerDto, req.user),
statusCode: HttpStatus.CREATED,
message: 'success',
};
}
@Get('partner/:id/:type')
async setStatusPartner(
@Param('id', ParseUUIDPipe) id: string,
@Param('type') type: string,
) {
return {
data: await this.partnerService.setStatus(id, type),
statusCode: HttpStatus.CREATED,
message: 'success',
};
}
@Put('partner/:id')
async updatePartner(
@Param('id', ParseUUIDPipe) id: string,
@Request() req,
@Body() updatePartnerDto: UpdatePartnerDto,
) {
return {
data: await this.partnerService.update(id, updatePartnerDto, req.user),
statusCode: HttpStatus.CREATED,
message: 'success',
};
}
@Get()
async findAll(@Request() req, @Query('page') page: number) {
const data = await this.usersService.findAll(page, req.user.userId);
return {
...data,
statusCode: HttpStatus.OK,
message: 'success',
};
}
@Public()
@Get('supplier')
async findAllSupplier(@Query('page') page: number) {
const data = await this.supplierService.findAllSupplier(page);
return {
...data,
statusCode: HttpStatus.OK,
message: 'success',
};
}
@Get('partner')
async findAllPartner(@Query('page') page: number) {
const [data, count] = await this.partnerService.findAllPartner(page);
return {
data,
count,
statusCode: HttpStatus.OK,
message: 'success',
};
}
@Get('find-by-supperior')
async findBySuperrior(@Request() req, @Query('page') page: number) {
const data = await this.usersService.findBySuperrior(req.user.userId, page);
return {
...data,
statusCode: HttpStatus.OK,
message: 'success',
};
}
@Get('find-by-roles/:id')
async findByRoles(
@Param('id', ParseUUIDPipe) id: string,
@Query('page') page: number,
) {
const [data, count] = await this.usersService.findByRoles(id, page);
return {
data,
count,
statusCode: HttpStatus.OK,
message: 'success',
};
}
@Get(':id')
async findOne(@Param('id', ParseUUIDPipe) id: string) {
return {
data: await this.usersService.findOne(id),
statusCode: HttpStatus.OK,
message: 'success',
};
}
@Get(':id/:type')
async setStatusMembership(
@Param('id', ParseUUIDPipe) id: string,
@Param('type') type: string,
) {
return {
data: await this.usersService.setStatus(id, type),
statusCode: HttpStatus.CREATED,
message: 'success',
};
}
@Put(':id')
async update(
@Param('id', ParseUUIDPipe) id: string,
@Request() req,
@Body() updateUserDto: UpdateUserDto,
) {
return {
data: await this.usersService.update(id, updateUserDto, req.user),
statusCode: HttpStatus.OK,
message: 'success',
};
}
@Put('change-password/:id')
async updatePassword(
@Param('id', ParseUUIDPipe) id: string,
@Request() req,
@Body() updateUserDto: UpdateUserDto,
) {
return {
data: await this.usersService.updatePassword(id, updateUserDto, req.user),
statusCode: HttpStatus.OK,
message: 'success',
};
}
@Delete(':id')
async remove(@Param('id', ParseUUIDPipe) id: string) {
await this.usersService.remove(id);
return {
statusCode: HttpStatus.OK,
message: 'success',
};
}
}