Alterado end point api/v1/delivery/schedule para mostrar a capacidade e saldo da capacidade com 3 casas decimais e criado peso adicional para mostrar a data de entrega na abertura da venda

This commit is contained in:
eduardoestevao-appsoluti
2025-03-11 17:16:05 -03:00
parent 62f4c767dd
commit 0936c239b9
180 changed files with 18502 additions and 18441 deletions

View File

@@ -1,48 +1,48 @@
/*
https://docs.nestjs.com/controllers#controllers
*/
import { Body, Controller, Get, Param, Post } from '@nestjs/common';
import { AccessControlService } from './access-control.service';
import { ApiExcludeEndpoint } from '@nestjs/swagger';
@Controller('api/v1/access-control')
export class AccessControlController {
constructor(
private readonly accessControlService: AccessControlService
){}
@Get('modules/:id')
@ApiExcludeEndpoint()
async getModules(@Param('id') id: number) {
return this.accessControlService.getAccessModule(id);
}
@Get('permissionUser/:id')
@ApiExcludeEndpoint()
async getPermissionsUser(@Param('id') id: number) {
return this.accessControlService.getPermissionsUser(id);
}
@Get('pages/:userId/:moduleId')
@ApiExcludeEndpoint()
async getPagesUser(@Param('userId') userId: number, @Param('moduleId') moduleId: number) {
return this.accessControlService.getPagesUser(moduleId, userId);
}
@Get('actions/:userId/:moduleId')
@ApiExcludeEndpoint()
async getActionUser(@Param('userId') userId: number, @Param('moduleId') moduleId: number
) {
return this.accessControlService.getActionsUser(moduleId, userId);
}
@Post('permissionUser/:id')
@ApiExcludeEndpoint()
async updatePermission(@Param('id') userId: number, @Body() data
) {
return this.accessControlService.updatePermissionUser(userId, data);
}
}
/*
https://docs.nestjs.com/controllers#controllers
*/
import { Body, Controller, Get, Param, Post } from '@nestjs/common';
import { AccessControlService } from './access-control.service';
import { ApiExcludeEndpoint } from '@nestjs/swagger';
@Controller('api/v1/access-control')
export class AccessControlController {
constructor(
private readonly accessControlService: AccessControlService
){}
@Get('modules/:id')
@ApiExcludeEndpoint()
async getModules(@Param('id') id: number) {
return this.accessControlService.getAccessModule(id);
}
@Get('permissionUser/:id')
@ApiExcludeEndpoint()
async getPermissionsUser(@Param('id') id: number) {
return this.accessControlService.getPermissionsUser(id);
}
@Get('pages/:userId/:moduleId')
@ApiExcludeEndpoint()
async getPagesUser(@Param('userId') userId: number, @Param('moduleId') moduleId: number) {
return this.accessControlService.getPagesUser(moduleId, userId);
}
@Get('actions/:userId/:moduleId')
@ApiExcludeEndpoint()
async getActionUser(@Param('userId') userId: number, @Param('moduleId') moduleId: number
) {
return this.accessControlService.getActionsUser(moduleId, userId);
}
@Post('permissionUser/:id')
@ApiExcludeEndpoint()
async updatePermission(@Param('id') userId: number, @Body() data
) {
return this.accessControlService.updatePermissionUser(userId, data);
}
}

View File

@@ -1,16 +1,16 @@
import { AccessControlService } from './access-control.service';
import { AccessControlController } from './access-control.controller';
/*
https://docs.nestjs.com/modules
*/
import { Module } from '@nestjs/common';
@Module({
imports: [],
controllers: [
AccessControlController,],
providers: [
AccessControlService,],
})
export class AccessControlModule { }
import { AccessControlService } from './access-control.service';
import { AccessControlController } from './access-control.controller';
/*
https://docs.nestjs.com/modules
*/
import { Module } from '@nestjs/common';
@Module({
imports: [],
controllers: [
AccessControlController,],
providers: [
AccessControlService,],
})
export class AccessControlModule { }

View File

@@ -1,261 +1,261 @@
/*
https://docs.nestjs.com/providers#services
*/
import { Injectable } from '@nestjs/common';
import { connectionOptions } from 'src/configs/typeorm.config';
import { Connection } from 'typeorm';
import { IndexActions } from '../../domain/models/index-action.model';
@Injectable()
export class AccessControlService {
async getAccessModule(id: number) {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = 'SELECT ESTACESSOMODULO.CODMODULO as "moduleId" ' +
' ,ESTACESSOMODULO.CODUSUARIO as "userId" ' +
` ,NVL(ESTACESSOMODULO.ACESSO, 'S') as "access" ` +
' FROM ESTACESSOMODULO ' +
' WHERE ESTACESSOMODULO.CODUSUARIO = :1';
const modules = await queryRunner
.query(sql, [id]);
return modules;
} finally {
await queryRunner.release();
await connection.close();
}
}
async getPagesUser(moduleId: number, userId: number) {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = 'SELECT ESTACESSOATIVIDADE.CODMODULO as "moduleId" ' +
' ,ESTACESSOATIVIDADE.CODPROCESSO as "processId" ' +
' ,ESTACESSOATIVIDADE.CODATIVIDADE as "pageId" ' +
' ,ESTACESSOATIVIDADE.codusuario as "userId" ' +
' ,ESTACESSOATIVIDADE.ACESSO as "access" ' +
' FROM ESTACESSOATIVIDADE ' +
' WHERE ESTACESSOATIVIDADE.CODMODULO = :CODMODULO ' +
' AND ESTACESSOATIVIDADE.CODUSUARIO = :CODUSUARIO ';
const pages = await queryRunner
.query(sql, [moduleId, userId]);
return pages;
} finally {
await queryRunner.release();
await connection.close();
}
}
async getActionsUser(moduleId: number, userId: number) {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = `SELECT ESTACESSOATIVIDADEACAO.CODMODULO as "moduleId"
,ESTACESSOATIVIDADEACAO.CODPROCESSO as "processId"
,ESTACESSOATIVIDADEACAO.CODATIVIDADE as "pageId"
,ESTACESSOATIVIDADEACAO.CODACAO as "actionId"
,ESTACESSOATIVIDADEACAO.codusuario as "userId"
,ESTACESSOATIVIDADEACAO.ACESSO as "access"
FROM ESTACESSOATIVIDADEACAO
WHERE ESTACESSOATIVIDADEACAO.CODMODULO = :CODMODULO
AND ESTACESSOATIVIDADEACAO.CODUSUARIO = :CODUSUARIO`;
const actions = await queryRunner
.query(sql, [moduleId, userId]);
return actions;
} finally {
await queryRunner.release();
await connection.close();
}
}
async getPermissionsUser(userId: number) {
const sqlModules = `SELECT ESTMODULO.codmodulo as "id"
,ESTMODULO.descricao as "text"
,${userId} as "userId"
,NVL(( SELECT ESTACESSOMODULO.ACESSO
FROM ESTACESSOMODULO
WHERE ESTACESSOMODULO.CODMODULO = ESTMODULO.CODMODULO
AND ESTACESSOMODULO.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
FROM ESTMODULO`;
const sqlAtividade = `SELECT ESTATIVIDADE.codmodulo as "moduloId"
,ESTATIVIDADE.CODPROCESSO as "processId"
,ESTATIVIDADE.CODATIVIDADE as "id"
,ESTATIVIDADE.descricao as "text"
,NVL(( SELECT ESTACESSOATIVIDADE.ACESSO
FROM ESTACESSOATIVIDADE
WHERE ESTACESSOATIVIDADE.CODMODULO = ESTATIVIDADE.CODMODULO
AND ESTACESSOATIVIDADE.CODPROCESSO = ESTATIVIDADE.codprocesso
AND ESTACESSOATIVIDADE.CODATIVIDADE = ESTATIVIDADE.CODATIVIDADE
AND ESTACESSOATIVIDADE.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
FROM ESTATIVIDADE`;
const sqlAction = `SELECT estatividadeacao.codmodulo as "moduloId"
,estatividadeacao.CODPROCESSO as "processId"
,estatividadeacao.CODATIVIDADE as "atividadeId"
,estatividadeacao.CODACAO as "Id"
,estatividadeacao.descricao as "text"
,NVL(( SELECT ESTACESSOATIVIDADEACAO.ACESSO
FROM ESTACESSOATIVIDADEACAO
WHERE ESTACESSOATIVIDADEACAO.CODMODULO = estatividadeacao.CODMODULO
AND ESTACESSOATIVIDADEACAO.CODPROCESSO = estatividadeacao.codprocesso
AND ESTACESSOATIVIDADEACAO.CODATIVIDADE = estatividadeacao.CODATIVIDADE
AND ESTACESSOATIVIDADEACAO.CODACAO = estatividadeacao.CODACAO
AND ESTACESSOATIVIDADEACAO.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
FROM estatividadeacao`;
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const modules = await queryRunner.query(sqlModules);
const atividades = await queryRunner.query(sqlAtividade);
const actions = await queryRunner.query(sqlAction);
console.log("acoes:" + JSON.stringify(actions));
console.log("atividaes:" + JSON.stringify(atividades));
const arrayAtividade = [];
atividades.map((atividade) => {
const data = {
...atividade, items: [...actions.filter((a) => a.moduloId == atividade.moduloId
&& a.processId == atividade.processId &&
a.atividadeId == atividade.id)]
}
arrayAtividade.push(data);
});
console.log("atividade acao: " + JSON.stringify(arrayAtividade));
const arrayModules = [];
modules.map((module) => {
const data = {
...module, items: [...arrayAtividade.filter((a) => a.moduloId == module.id)]
}
arrayModules.push(data);
});
return arrayModules;
} finally {
await queryRunner.release();
await connection.close();
}
}
async updatePermissionUser(userId: number, data: any) {
console.log(JSON.stringify(data));
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
const sqlDeletePermissionUser = `BEGIN
DELETE FROM ESTACESSOMODULO WHERE CODUSUARIO = ${userId};
DELETE FROM ESTACESSOATIVIDADE WHERE CODUSUARIO = ${userId};
DELETE FROM ESTACESSOATIVIDADEACAO WHERE CODUSUARIO = ${userId};
END;
`;
await queryRunner.query(sqlDeletePermissionUser);
for (const action of data.actions) {
const sqlCreatePermissionAction = `BEGIN
UPDATE ESTACESSOATIVIDADEACAO SET
ACESSO = 'S'
WHERE CODMODULO = ${action.moduloId} AND CODPROCESSO = ${action.processId}
AND CODATIVIDADE = ${action.atividadeId} AND CODACAO = ${action.Id} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOATIVIDADEACAO ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODACAO, CODUSUARIO, ACESSO )
VALUES ( ${action.moduloId}, ${action.processId}, ${action.atividadeId}, ${action.Id}, ${userId},'S');
END IF;
UPDATE ESTACESSOATIVIDADE SET
ACESSO = 'S'
WHERE CODMODULO = ${action.moduloId} AND CODPROCESSO = ${action.processId}
AND CODATIVIDADE = ${action.atividadeId} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOATIVIDADE ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODUSUARIO, ACESSO )
VALUES ( ${action.moduloId}, ${action.processId}, ${action.atividadeId}, ${userId},'S');
END IF;
UPDATE ESTACESSOMODULO SET
ACESSO = 'S'
WHERE CODMODULO = ${action.moduloId} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOMODULO ( CODMODULO, CODUSUARIO, ACESSO )
VALUES ( ${action.moduloId}, ${userId}, 'S');
END IF;
END; `
await queryRunner.query(sqlCreatePermissionAction);
}
for (const atividade of data.atividades) {
const sqlCreatePermissionAtividade = `BEGIN
UPDATE ESTACESSOATIVIDADE SET
ACESSO = 'S'
WHERE CODMODULO = ${atividade.moduloId} AND CODPROCESSO = ${atividade.processId}
AND CODATIVIDADE = ${atividade.id} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOATIVIDADE ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODUSUARIO, ACESSO )
VALUES ( ${atividade.moduloId}, ${atividade.processId}, ${atividade.id}, ${userId},'S');
END IF;
UPDATE ESTACESSOMODULO SET
ACESSO = 'S'
WHERE CODMODULO = ${atividade.moduloId} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOMODULO ( CODMODULO, CODUSUARIO, ACESSO )
VALUES ( ${atividade.moduloId}, ${userId},'S');
END IF;
END; `;
await queryRunner.query(sqlCreatePermissionAtividade);
}
await queryRunner.commitTransaction();
} catch (err) {
await queryRunner.rollbackTransaction();
console.log(err);
} finally {
await queryRunner.release();
await connection.close();
}
}
}
/*
https://docs.nestjs.com/providers#services
*/
import { Injectable } from '@nestjs/common';
import { connectionOptions } from 'src/configs/typeorm.config';
import { Connection } from 'typeorm';
import { IndexActions } from '../../domain/models/index-action.model';
@Injectable()
export class AccessControlService {
async getAccessModule(id: number) {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = 'SELECT ESTACESSOMODULO.CODMODULO as "moduleId" ' +
' ,ESTACESSOMODULO.CODUSUARIO as "userId" ' +
` ,NVL(ESTACESSOMODULO.ACESSO, 'S') as "access" ` +
' FROM ESTACESSOMODULO ' +
' WHERE ESTACESSOMODULO.CODUSUARIO = :1';
const modules = await queryRunner
.query(sql, [id]);
return modules;
} finally {
await queryRunner.release();
await connection.close();
}
}
async getPagesUser(moduleId: number, userId: number) {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = 'SELECT ESTACESSOATIVIDADE.CODMODULO as "moduleId" ' +
' ,ESTACESSOATIVIDADE.CODPROCESSO as "processId" ' +
' ,ESTACESSOATIVIDADE.CODATIVIDADE as "pageId" ' +
' ,ESTACESSOATIVIDADE.codusuario as "userId" ' +
' ,ESTACESSOATIVIDADE.ACESSO as "access" ' +
' FROM ESTACESSOATIVIDADE ' +
' WHERE ESTACESSOATIVIDADE.CODMODULO = :CODMODULO ' +
' AND ESTACESSOATIVIDADE.CODUSUARIO = :CODUSUARIO ';
const pages = await queryRunner
.query(sql, [moduleId, userId]);
return pages;
} finally {
await queryRunner.release();
await connection.close();
}
}
async getActionsUser(moduleId: number, userId: number) {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = `SELECT ESTACESSOATIVIDADEACAO.CODMODULO as "moduleId"
,ESTACESSOATIVIDADEACAO.CODPROCESSO as "processId"
,ESTACESSOATIVIDADEACAO.CODATIVIDADE as "pageId"
,ESTACESSOATIVIDADEACAO.CODACAO as "actionId"
,ESTACESSOATIVIDADEACAO.codusuario as "userId"
,ESTACESSOATIVIDADEACAO.ACESSO as "access"
FROM ESTACESSOATIVIDADEACAO
WHERE ESTACESSOATIVIDADEACAO.CODMODULO = :CODMODULO
AND ESTACESSOATIVIDADEACAO.CODUSUARIO = :CODUSUARIO`;
const actions = await queryRunner
.query(sql, [moduleId, userId]);
return actions;
} finally {
await queryRunner.release();
await connection.close();
}
}
async getPermissionsUser(userId: number) {
const sqlModules = `SELECT ESTMODULO.codmodulo as "id"
,ESTMODULO.descricao as "text"
,${userId} as "userId"
,NVL(( SELECT ESTACESSOMODULO.ACESSO
FROM ESTACESSOMODULO
WHERE ESTACESSOMODULO.CODMODULO = ESTMODULO.CODMODULO
AND ESTACESSOMODULO.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
FROM ESTMODULO`;
const sqlAtividade = `SELECT ESTATIVIDADE.codmodulo as "moduloId"
,ESTATIVIDADE.CODPROCESSO as "processId"
,ESTATIVIDADE.CODATIVIDADE as "id"
,ESTATIVIDADE.descricao as "text"
,NVL(( SELECT ESTACESSOATIVIDADE.ACESSO
FROM ESTACESSOATIVIDADE
WHERE ESTACESSOATIVIDADE.CODMODULO = ESTATIVIDADE.CODMODULO
AND ESTACESSOATIVIDADE.CODPROCESSO = ESTATIVIDADE.codprocesso
AND ESTACESSOATIVIDADE.CODATIVIDADE = ESTATIVIDADE.CODATIVIDADE
AND ESTACESSOATIVIDADE.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
FROM ESTATIVIDADE`;
const sqlAction = `SELECT estatividadeacao.codmodulo as "moduloId"
,estatividadeacao.CODPROCESSO as "processId"
,estatividadeacao.CODATIVIDADE as "atividadeId"
,estatividadeacao.CODACAO as "Id"
,estatividadeacao.descricao as "text"
,NVL(( SELECT ESTACESSOATIVIDADEACAO.ACESSO
FROM ESTACESSOATIVIDADEACAO
WHERE ESTACESSOATIVIDADEACAO.CODMODULO = estatividadeacao.CODMODULO
AND ESTACESSOATIVIDADEACAO.CODPROCESSO = estatividadeacao.codprocesso
AND ESTACESSOATIVIDADEACAO.CODATIVIDADE = estatividadeacao.CODATIVIDADE
AND ESTACESSOATIVIDADEACAO.CODACAO = estatividadeacao.CODACAO
AND ESTACESSOATIVIDADEACAO.CODUSUARIO = ${userId} AND ROWNUM = 1),'N') as "allow"
FROM estatividadeacao`;
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const modules = await queryRunner.query(sqlModules);
const atividades = await queryRunner.query(sqlAtividade);
const actions = await queryRunner.query(sqlAction);
console.log("acoes:" + JSON.stringify(actions));
console.log("atividaes:" + JSON.stringify(atividades));
const arrayAtividade = [];
atividades.map((atividade) => {
const data = {
...atividade, items: [...actions.filter((a) => a.moduloId == atividade.moduloId
&& a.processId == atividade.processId &&
a.atividadeId == atividade.id)]
}
arrayAtividade.push(data);
});
console.log("atividade acao: " + JSON.stringify(arrayAtividade));
const arrayModules = [];
modules.map((module) => {
const data = {
...module, items: [...arrayAtividade.filter((a) => a.moduloId == module.id)]
}
arrayModules.push(data);
});
return arrayModules;
} finally {
await queryRunner.release();
await connection.close();
}
}
async updatePermissionUser(userId: number, data: any) {
console.log(JSON.stringify(data));
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
try {
const sqlDeletePermissionUser = `BEGIN
DELETE FROM ESTACESSOMODULO WHERE CODUSUARIO = ${userId};
DELETE FROM ESTACESSOATIVIDADE WHERE CODUSUARIO = ${userId};
DELETE FROM ESTACESSOATIVIDADEACAO WHERE CODUSUARIO = ${userId};
END;
`;
await queryRunner.query(sqlDeletePermissionUser);
for (const action of data.actions) {
const sqlCreatePermissionAction = `BEGIN
UPDATE ESTACESSOATIVIDADEACAO SET
ACESSO = 'S'
WHERE CODMODULO = ${action.moduloId} AND CODPROCESSO = ${action.processId}
AND CODATIVIDADE = ${action.atividadeId} AND CODACAO = ${action.Id} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOATIVIDADEACAO ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODACAO, CODUSUARIO, ACESSO )
VALUES ( ${action.moduloId}, ${action.processId}, ${action.atividadeId}, ${action.Id}, ${userId},'S');
END IF;
UPDATE ESTACESSOATIVIDADE SET
ACESSO = 'S'
WHERE CODMODULO = ${action.moduloId} AND CODPROCESSO = ${action.processId}
AND CODATIVIDADE = ${action.atividadeId} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOATIVIDADE ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODUSUARIO, ACESSO )
VALUES ( ${action.moduloId}, ${action.processId}, ${action.atividadeId}, ${userId},'S');
END IF;
UPDATE ESTACESSOMODULO SET
ACESSO = 'S'
WHERE CODMODULO = ${action.moduloId} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOMODULO ( CODMODULO, CODUSUARIO, ACESSO )
VALUES ( ${action.moduloId}, ${userId}, 'S');
END IF;
END; `
await queryRunner.query(sqlCreatePermissionAction);
}
for (const atividade of data.atividades) {
const sqlCreatePermissionAtividade = `BEGIN
UPDATE ESTACESSOATIVIDADE SET
ACESSO = 'S'
WHERE CODMODULO = ${atividade.moduloId} AND CODPROCESSO = ${atividade.processId}
AND CODATIVIDADE = ${atividade.id} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOATIVIDADE ( CODMODULO, CODPROCESSO, CODATIVIDADE, CODUSUARIO, ACESSO )
VALUES ( ${atividade.moduloId}, ${atividade.processId}, ${atividade.id}, ${userId},'S');
END IF;
UPDATE ESTACESSOMODULO SET
ACESSO = 'S'
WHERE CODMODULO = ${atividade.moduloId} AND CODUSUARIO = ${userId};
IF SQL%ROWCOUNT = 0 THEN
INSERT INTO ESTACESSOMODULO ( CODMODULO, CODUSUARIO, ACESSO )
VALUES ( ${atividade.moduloId}, ${userId},'S');
END IF;
END; `;
await queryRunner.query(sqlCreatePermissionAtividade);
}
await queryRunner.commitTransaction();
} catch (err) {
await queryRunner.rollbackTransaction();
console.log(err);
} finally {
await queryRunner.release();
await connection.close();
}
}
}

View File

@@ -1,132 +1,132 @@
import { ResultModel } from '../../domain/models/result.model';
import { UserModel } from '../../domain/models/user.model';
import { RoleInterceptor } from '../interceptors/role.interceptor';
import { JwtAuthGuard } from '../guards/auth.guard';
import { AuthService } from '../services/auth.service';
import { UserService } from '../services/user.service';
import { Body, Controller, Get, HttpException, HttpStatus, Param, Post, Req, UseGuards, UseInterceptors } from "@nestjs/common";
import { Guid } from 'guid-typescript';
import { ResetPasswordModel } from 'src/domain/models/reset-password.model';
import { ChangePasswordModel } from 'src/domain/models/change-password.model';
import { CreateUserModel } from 'src/domain/models/create-user.model';
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
@ApiTags('Autenticação')
@Controller('api/v1/auth')
export class UserController {
constructor(private authService: AuthService,
private userService: UserService) { }
/**
* Realiza a autenticação do usuário para acesso a vendaweb.
* @@example { email: "exemplo@exemplo.com", password: "123456"}
*/
@Get('users')
async getUsers() {
return this.userService.findAll();
}
@Post('login')
async login(@Body() model: UserModel): Promise<any> {
const userDb = await this.userService.authenticate(model);
if (!userDb)
throw new HttpException(new ResultModel(false, 'Usuário ou senha inválidos.', null, null), HttpStatus.UNAUTHORIZED);
if (userDb.blocked == "S")
throw new HttpException(new ResultModel(false, 'Usuário inativo.', null, null), HttpStatus.UNAUTHORIZED);
if (model.application == "SALE" && userDb.seller == 0)
throw new HttpException(new ResultModel(false, 'Usuário sem vendedor informado .', null, null), HttpStatus.UNAUTHORIZED);
if (model.application == "SALE" && (userDb.codigoFilial == null || userDb.codigoFilial == ''))
throw new HttpException(new ResultModel(false, 'Usuário sem filial informada.', null, null), HttpStatus.UNAUTHORIZED);
const token = await this.authService.createToken(userDb.username, userDb.email, '', [userDb.sectorId, userDb.sectorManagerId]);
return new ResultModel(true, null, {
"id": userDb.id, "username": userDb.userName, "email": userDb.email,
"store": userDb.codigoFilial, "name": userDb.nomeFilial, "seller": userDb.seller,
"deliveryTime": userDb.deliveryTime, "supervisorId": userDb.supervisorId, "token": token
}, null);
}
@Post('create')
async createUser(@Body() model: CreateUserModel): Promise<any> {
const result = await this.userService.create(model);
console.log(result);
return result;
/*if (!userDb)
throw new HttpException(new ResultModel(false, 'Usuário ou senha inválidos.', null, null), HttpStatus.UNAUTHORIZED);
if (userDb.blocked == "S")
throw new HttpException(new ResultModel(false, 'Usuário inativo.', null, null), HttpStatus.UNAUTHORIZED);
const token = await this.authService.createToken(userDb.username, userDb.email, '', [userDb.role, model.application]);
return new ResultModel(true, null, {"username": userDb.username, "email": userDb.email, "token": token}, null);*/
}
@Post('reset-password')
async resetPassword(@Body() model: ResetPasswordModel): Promise<any> {
try {
//TODO: Enviar email com a senha
const password = Guid.create.toString().substring(0, 8).replace('-', '');
await this.userService.update(model.email, password);
return new ResultModel(true, 'Uma nova senha foi enviada para seu e-mail.', null, null);
} catch (error) {
throw new HttpException(new ResultModel(false, 'Não foi possível restaurar sua senha', null, null), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@Post('change-password')
@UseGuards(JwtAuthGuard)
async changePassword(@Req() request, @Body() model: ChangePasswordModel): Promise<any> {
try {
//TODO: Encriptar senha
//TODO: Validar usuario
await this.userService.update(request.user.email, model.newPassword);
return new ResultModel(true, 'Sua senha foi alterada com sucesso', null, null);
} catch (error) {
throw new HttpException(new ResultModel(false, 'Não foi possível alterar sua senha', null, null), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@Get('discount-user/:id')
async discountAuthorization(@Param('id') id: number): Promise<any> {
const user = await this.userService.discountUser(id);
console.log(user);
return new ResultModel(true, null, user, null);
}
@Post('refresh')
@UseGuards(JwtAuthGuard)
async refreshToken(@Req() request): Promise<any> {
const token = await this.authService.createToken(request.user.username, request.user.email, request.user.image, request.user.roles);
return new ResultModel(true, null, token, null);
}
@Post('authenticate')
@ApiExcludeEndpoint()
async authenticate(@Body() model: UserModel): Promise<any> {
const userDb = await this.userService.authenticate(model);
console.log(userDb);
if (!userDb)
throw new HttpException(new ResultModel(false, 'Usuário ou senha inválidos.', null, null), HttpStatus.UNAUTHORIZED);
if (userDb.blocked == "S")
throw new HttpException(new ResultModel(false, 'Usuário inativo.', null, null), HttpStatus.UNAUTHORIZED);
return new ResultModel(true, null, {
"id": userDb.id, "username": userDb.userName, "email": userDb.email,
"store": userDb.codigoFilial, "seller": userDb.seller, "discountPercent": userDb.discountPercent,
"sectorId": userDb.sectorId, "sectorManagerId": userDb.sectorManagerId
}, null);
}
@Get('')
@UseGuards(JwtAuthGuard)
@UseInterceptors(new RoleInterceptor(['admin']))
findAll() {
return [];
}
import { ResultModel } from '../../domain/models/result.model';
import { UserModel } from '../../domain/models/user.model';
import { RoleInterceptor } from '../interceptors/role.interceptor';
import { JwtAuthGuard } from '../guards/auth.guard';
import { AuthService } from '../services/auth.service';
import { UserService } from '../services/user.service';
import { Body, Controller, Get, HttpException, HttpStatus, Param, Post, Req, UseGuards, UseInterceptors } from "@nestjs/common";
import { Guid } from 'guid-typescript';
import { ResetPasswordModel } from 'src/domain/models/reset-password.model';
import { ChangePasswordModel } from 'src/domain/models/change-password.model';
import { CreateUserModel } from 'src/domain/models/create-user.model';
import { ApiExcludeEndpoint, ApiTags } from '@nestjs/swagger';
@ApiTags('Autenticação')
@Controller('api/v1/auth')
export class UserController {
constructor(private authService: AuthService,
private userService: UserService) { }
/**
* Realiza a autenticação do usuário para acesso a vendaweb.
* @@example { email: "exemplo@exemplo.com", password: "123456"}
*/
@Get('users')
async getUsers() {
return this.userService.findAll();
}
@Post('login')
async login(@Body() model: UserModel): Promise<any> {
const userDb = await this.userService.authenticate(model);
if (!userDb)
throw new HttpException(new ResultModel(false, 'Usuário ou senha inválidos.', null, null), HttpStatus.UNAUTHORIZED);
if (userDb.blocked == "S")
throw new HttpException(new ResultModel(false, 'Usuário inativo.', null, null), HttpStatus.UNAUTHORIZED);
if (model.application == "SALE" && userDb.seller == 0)
throw new HttpException(new ResultModel(false, 'Usuário sem vendedor informado .', null, null), HttpStatus.UNAUTHORIZED);
if (model.application == "SALE" && (userDb.codigoFilial == null || userDb.codigoFilial == ''))
throw new HttpException(new ResultModel(false, 'Usuário sem filial informada.', null, null), HttpStatus.UNAUTHORIZED);
const token = await this.authService.createToken(userDb.username, userDb.email, '', [userDb.sectorId, userDb.sectorManagerId]);
return new ResultModel(true, null, {
"id": userDb.id, "username": userDb.userName, "email": userDb.email,
"store": userDb.codigoFilial, "name": userDb.nomeFilial, "seller": userDb.seller,
"deliveryTime": userDb.deliveryTime, "supervisorId": userDb.supervisorId, "token": token
}, null);
}
@Post('create')
async createUser(@Body() model: CreateUserModel): Promise<any> {
const result = await this.userService.create(model);
console.log(result);
return result;
/*if (!userDb)
throw new HttpException(new ResultModel(false, 'Usuário ou senha inválidos.', null, null), HttpStatus.UNAUTHORIZED);
if (userDb.blocked == "S")
throw new HttpException(new ResultModel(false, 'Usuário inativo.', null, null), HttpStatus.UNAUTHORIZED);
const token = await this.authService.createToken(userDb.username, userDb.email, '', [userDb.role, model.application]);
return new ResultModel(true, null, {"username": userDb.username, "email": userDb.email, "token": token}, null);*/
}
@Post('reset-password')
async resetPassword(@Body() model: ResetPasswordModel): Promise<any> {
try {
//TODO: Enviar email com a senha
const password = Guid.create.toString().substring(0, 8).replace('-', '');
await this.userService.update(model.email, password);
return new ResultModel(true, 'Uma nova senha foi enviada para seu e-mail.', null, null);
} catch (error) {
throw new HttpException(new ResultModel(false, 'Não foi possível restaurar sua senha', null, null), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@Post('change-password')
@UseGuards(JwtAuthGuard)
async changePassword(@Req() request, @Body() model: ChangePasswordModel): Promise<any> {
try {
//TODO: Encriptar senha
//TODO: Validar usuario
await this.userService.update(request.user.email, model.newPassword);
return new ResultModel(true, 'Sua senha foi alterada com sucesso', null, null);
} catch (error) {
throw new HttpException(new ResultModel(false, 'Não foi possível alterar sua senha', null, null), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@Get('discount-user/:id')
async discountAuthorization(@Param('id') id: number): Promise<any> {
const user = await this.userService.discountUser(id);
console.log(user);
return new ResultModel(true, null, user, null);
}
@Post('refresh')
@UseGuards(JwtAuthGuard)
async refreshToken(@Req() request): Promise<any> {
const token = await this.authService.createToken(request.user.username, request.user.email, request.user.image, request.user.roles);
return new ResultModel(true, null, token, null);
}
@Post('authenticate')
@ApiExcludeEndpoint()
async authenticate(@Body() model: UserModel): Promise<any> {
const userDb = await this.userService.authenticate(model);
console.log(userDb);
if (!userDb)
throw new HttpException(new ResultModel(false, 'Usuário ou senha inválidos.', null, null), HttpStatus.UNAUTHORIZED);
if (userDb.blocked == "S")
throw new HttpException(new ResultModel(false, 'Usuário inativo.', null, null), HttpStatus.UNAUTHORIZED);
return new ResultModel(true, null, {
"id": userDb.id, "username": userDb.userName, "email": userDb.email,
"store": userDb.codigoFilial, "seller": userDb.seller, "discountPercent": userDb.discountPercent,
"sectorId": userDb.sectorId, "sectorManagerId": userDb.sectorManagerId
}, null);
}
@Get('')
@UseGuards(JwtAuthGuard)
@UseInterceptors(new RoleInterceptor(['admin']))
findAll() {
return [];
}
}

View File

@@ -1,17 +1,17 @@
import { AuthGuard } from '@nestjs/passport';
import { ExecutionContext, Injectable, UnauthorizedException } from "@nestjs/common";
@Injectable()
export class JwtAuthGuard extends AuthGuard() {
canActivate(context: ExecutionContext) {
return super.canActivate(context);
}
handleRequest(err: any, user: any, info: any) {
if (err || !user) {
throw err || new UnauthorizedException();
}
return user;
}
import { AuthGuard } from '@nestjs/passport';
import { ExecutionContext, Injectable, UnauthorizedException } from "@nestjs/common";
@Injectable()
export class JwtAuthGuard extends AuthGuard() {
canActivate(context: ExecutionContext) {
return super.canActivate(context);
}
handleRequest(err: any, user: any, info: any) {
if (err || !user) {
throw err || new UnauthorizedException();
}
return user;
}
}

View File

@@ -1,32 +1,32 @@
import { HttpStatus } from '@nestjs/common';
import { ResultModel } from './../../domain/models/result.model';
import { HttpException } from '@nestjs/common';
import { JwtPayload } from './../interfaces/jwt-payload.interface';
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class RoleInterceptor implements NestInterceptor {
constructor(private roles: string[]){}
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const payload: JwtPayload = context.switchToHttp().getRequest().user;
console.log(payload);
let hasRole = false;
payload.roles.forEach((role) => {
if (this.roles.includes(role))
hasRole = true;
});
if (!hasRole) {
throw new HttpException(
new ResultModel(false, 'Acesso não autorizado', null, null),
HttpStatus.FORBIDDEN
)
}
return next
.handle();
}
}
import { HttpStatus } from '@nestjs/common';
import { ResultModel } from './../../domain/models/result.model';
import { HttpException } from '@nestjs/common';
import { JwtPayload } from './../interfaces/jwt-payload.interface';
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class RoleInterceptor implements NestInterceptor {
constructor(private roles: string[]){}
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const payload: JwtPayload = context.switchToHttp().getRequest().user;
console.log(payload);
let hasRole = false;
payload.roles.forEach((role) => {
if (this.roles.includes(role))
hasRole = true;
});
if (!hasRole) {
throw new HttpException(
new ResultModel(false, 'Acesso não autorizado', null, null),
HttpStatus.FORBIDDEN
)
}
return next
.handle();
}
}

View File

@@ -1,8 +1,8 @@
export interface JwtPayload {
username: string;
email: string;
image: string;
sectorId: string;
sectorManagerId: string;
roles: string[];
export interface JwtPayload {
username: string;
email: string;
image: string;
sectorId: string;
sectorManagerId: string;
roles: string[];
}

View File

@@ -1,24 +1,24 @@
import { Injectable } from '@nestjs/common';
import { JwtPayload } from './../interfaces/jwt-payload.interface';
import { JwtService, JwtSignOptions } from "@nestjs/jwt";
import { UserService } from './user.service';
@Injectable()
export class AuthService {
constructor(
private readonly accountService: UserService,
private readonly jwtService: JwtService,
){}
async createToken(username: string, email: string, image: string, roles: string[]) {
const user: JwtPayload = { username: username, email: email, image: image, sectorId: roles[0], sectorManagerId: roles[1], roles: [], }
const options: JwtSignOptions = {expiresIn: "1h"};
return this.jwtService.sign(user, options);
}
async validateUser(payload: JwtPayload): Promise<any> {
//return await this.accountService.findOneByUsername(payload.username);
return payload;
}
import { Injectable } from '@nestjs/common';
import { JwtPayload } from './../interfaces/jwt-payload.interface';
import { JwtService, JwtSignOptions } from "@nestjs/jwt";
import { UserService } from './user.service';
@Injectable()
export class AuthService {
constructor(
private readonly accountService: UserService,
private readonly jwtService: JwtService,
){}
async createToken(username: string, email: string, image: string, roles: string[]) {
const user: JwtPayload = { username: username, email: email, image: image, sectorId: roles[0], sectorManagerId: roles[1], roles: [], }
const options: JwtSignOptions = {expiresIn: "1h"};
return this.jwtService.sign(user, options);
}
async validateUser(payload: JwtPayload): Promise<any> {
//return await this.accountService.findOneByUsername(payload.username);
return payload;
}
}

View File

@@ -1,197 +1,197 @@
import { UserModel } from '../../domain/models/user.model';
import { HttpException, HttpStatus, Injectable } from "@nestjs/common";
import { User } from 'src/domain/entity/tables/estusuario.enity';
import { Connection, getConnection } from 'typeorm';
import md5 = require('md5');
import { CreateUserModel } from 'src/domain/models/create-user.model';
import { Pcempr } from '../../domain/entity/tables/pcempr.entity';
import { connectionOptions } from 'src/configs/typeorm.config';
@Injectable()
export class UserService {
async create(data: CreateUserModel): Promise<User> {
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const user = await queryRunner.manager
.getRepository(User)
.createQueryBuilder('estusuario')
.where("\"estusuario\".email = :email", { email: data.email })
.getOne();
if (user != null) {
throw new HttpException("Já existe um usuário cadastrado no sistema com este email", HttpStatus.BAD_REQUEST);
}
} catch (err) {
throw err;
} finally {
await queryRunner.release();
}
const newUser = new User();
newUser.username = data.userName;
newUser.password = md5(data.password).toUpperCase();
newUser.email = data.email;
newUser.role = data.application;
newUser.blocked = "N";
newUser.registration = data.registration;
await getConnection()
.createQueryBuilder()
.insert()
.into(User)
.values(newUser)
.execute();
return newUser;
}
async findAll() {
const sqlUsers = `SELECT PCEMPR.MATRICULA as "userId"
,PCEMPR.NOME||' ('||PCEMPR.MATRICULA||')' as "name"
,PCEMPR.USUARIOBD as "userBD"
,PCEMPR.CODFILIAL as "storeId"
,PCEMPR.FUNCAO as "function"
,PCSETOR.DESCRICAO as "sector"
FROM PCEMPR, PCSETOR
WHERE PCEMPR.CODSETOR = PCSETOR.CODSETOR
AND PCEMPR.DTDEMISSAO IS NULL
ORDER BY PCEMPR.NOME`;
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
return await queryRunner.query(sqlUsers);
} finally {
await queryRunner.release();
}
}
async authenticate(user: UserModel): Promise<any> {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = 'SELECT PCEMPR.matricula as \"id\" ' +
' ,PCEMPR.usuariobd as \"userName\" ' +
' ,PCEMPR.codfilial as \"codigoFilial\" ' +
' ,PCFILIAL.fantasia as \"nomeFilial\" ' +
' ,PCEMPR.codusur as \"seller\" ' +
' ,NVL(PCEMPR.percdesc,0) as \"discountPercent\" ' +
' ,NVL(PCEMPR.codsetor,0) as \"sectorId\" ' +
' ,NVL(PCPARAMFILIAL.valor,0) as \"sectorManagerId\" ' +
' ,( SELECT PCUSUARI.CODSUPERVISOR FROM PCUSUARI WHERE PCUSUARI.CODUSUR = PCEMPR.CODUSUR ) as \"supervisorId\" ' +
' ,( SELECT NVL(P.valor,0) FROM PCPARAMFILIAL P WHERE P.CODFILIAL = \'99\' AND ' +
' P.NOME = \'CON_PRAZOENTREGA\' ) as \"deliveryTime\" ' +
' FROM PCEMPR, PCFILIAL, PCPARAMFILIAL ' +
' WHERE PCEMPR.CODFILIAL = PCFILIAL.CODIGO (+)' +
' AND PCPARAMFILIAL.CODFILIAL = \'99\' ' +
' AND PCPARAMFILIAL.NOME = \'CON_CODSETORGERENTELOJA\' ' +
' AND PCEMPR.EMAIL = :username AND PCEMPR.SENHABD = CRYPT(:password, USUARIOBD)';
const users = await queryRunner.manager
.query(sql, [user.email, user.password]);
if (users.length == 0) {
return null;
}
// const sqlDiasUteis = 'SELECT ( mv_prox_diautil( (TRUNC(SYSDATE) + :1) + COUNT(1), :2 ) - TRUNC(SYSDATE) ) as "days" ' +
// ' FROM MVDIASUTEIS ' +
// ' WHERE MVDIASUTEIS.CODFILIAL = :3 ' +
// ` AND MVDIASUTEIS.diaentrega = 'N' ` +
// ` AND MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + :4 `;
// const sqlDiasUteis = `SELECT CASE WHEN mv_prox_diautil(TRUNC(SYSDATE), :1) > TRUNC(SYSDATE) THEN
// ( ( mv_prox_diautil((mv_prox_diautil(TRUNC(SYSDATE), :2) + :3) + COUNT(1), :4 ) - (mv_prox_diautil(TRUNC(SYSDATE), :5)) ) - 1 )
// ELSE ( mv_prox_diautil((mv_prox_diautil(TRUNC(SYSDATE), :6) + :7) + COUNT(1), :8 ) - (mv_prox_diautil(TRUNC(SYSDATE), :9)) ) END as "days"
// FROM MVDIASUTEIS
// WHERE MVDIASUTEIS.CODFILIAL = :10
// AND MVDIASUTEIS.diaentrega = 'N'
// AND MVDIASUTEIS.data BETWEEN mv_prox_diautil(TRUNC(SYSDATE), :11) AND mv_prox_diautil(TRUNC(SYSDATE), :12) + :13`;
// const deliveryDays = await queryRunner.manager
// .query(sqlDiasUteis, ['6',
// '6', Number.parseInt(users[0].deliveryTime), '6', '6',
// '6', Number.parseInt(users[0].deliveryTime), '6', '6',
// '6',
// '6', '6', Number.parseInt(users[0].deliveryTime)
// ]);
const sqlDiasEntrega = `SELECT ( MAX(MVDIASUTEIS.DATA) - TRUNC(SYSDATE) ) as "days"
FROM MVDIASUTEIS
WHERE MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE)
AND TRUNC(SYSDATE) + :dias`;
const sqlDiasSemEntrega = `SELECT GREATEST(COUNT(1) - 1,0) as "daysNoDelivery"
FROM MVDIASUTEIS
WHERE MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE)
AND TRUNC(SYSDATE) + :dias
AND MVDIASUTEIS.DIAENTREGA = 'N'`;
const deliveryDays2 = await queryRunner.manager
.query(sqlDiasEntrega, [Number.parseInt(users[0].deliveryTime)]);
const noDeliveryDays = await queryRunner.manager
.query(sqlDiasSemEntrega, [Number.parseInt(users[0].deliveryTime)]);
const days = Number.parseInt(deliveryDays2[0].days) +
( noDeliveryDays.length > 0 ? Number.parseInt(noDeliveryDays[0].daysNoDelivery) : 0 );
const userDb = users[0];
console.log(userDb);
if (!isNaN(days)) {
userDb.deliveryTime = days; // deliveryDays[0].days;
}
console.log(days);
console.log(userDb);
return userDb;
} finally {
await queryRunner.release();
await connection.close();
}
}
async discountUser(userId: number): Promise<any> {
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
return await queryRunner.manager
.getRepository(Pcempr)
.createQueryBuilder('pcempr')
.select("NVL(\"pcempr\".percdesc,0) as \"discountUser\"")
.where("MATRICULA = :userId", { userId })
.getRawOne(); //...authUser,
} finally {
await queryRunner.release();
}
}
async update(email: string, newPassword: string) {
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
return await queryRunner.manager
.createQueryBuilder()
.update(User)
.set({ password: newPassword })
.where("EMAIL = :email", { email })
.execute();
} finally {
await queryRunner.release();
}
}
import { UserModel } from '../../domain/models/user.model';
import { HttpException, HttpStatus, Injectable } from "@nestjs/common";
import { User } from 'src/domain/entity/tables/estusuario.enity';
import { Connection, getConnection } from 'typeorm';
import md5 = require('md5');
import { CreateUserModel } from 'src/domain/models/create-user.model';
import { Pcempr } from '../../domain/entity/tables/pcempr.entity';
import { connectionOptions } from 'src/configs/typeorm.config';
@Injectable()
export class UserService {
async create(data: CreateUserModel): Promise<User> {
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const user = await queryRunner.manager
.getRepository(User)
.createQueryBuilder('estusuario')
.where("\"estusuario\".email = :email", { email: data.email })
.getOne();
if (user != null) {
throw new HttpException("Já existe um usuário cadastrado no sistema com este email", HttpStatus.BAD_REQUEST);
}
} catch (err) {
throw err;
} finally {
await queryRunner.release();
}
const newUser = new User();
newUser.username = data.userName;
newUser.password = md5(data.password).toUpperCase();
newUser.email = data.email;
newUser.role = data.application;
newUser.blocked = "N";
newUser.registration = data.registration;
await getConnection()
.createQueryBuilder()
.insert()
.into(User)
.values(newUser)
.execute();
return newUser;
}
async findAll() {
const sqlUsers = `SELECT PCEMPR.MATRICULA as "userId"
,PCEMPR.NOME||' ('||PCEMPR.MATRICULA||')' as "name"
,PCEMPR.USUARIOBD as "userBD"
,PCEMPR.CODFILIAL as "storeId"
,PCEMPR.FUNCAO as "function"
,PCSETOR.DESCRICAO as "sector"
FROM PCEMPR, PCSETOR
WHERE PCEMPR.CODSETOR = PCSETOR.CODSETOR
AND PCEMPR.DTDEMISSAO IS NULL
ORDER BY PCEMPR.NOME`;
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
return await queryRunner.query(sqlUsers);
} finally {
await queryRunner.release();
}
}
async authenticate(user: UserModel): Promise<any> {
const connection = new Connection(connectionOptions);
await connection.connect();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
const sql = 'SELECT PCEMPR.matricula as \"id\" ' +
' ,PCEMPR.usuariobd as \"userName\" ' +
' ,PCEMPR.codfilial as \"codigoFilial\" ' +
' ,PCFILIAL.fantasia as \"nomeFilial\" ' +
' ,PCEMPR.codusur as \"seller\" ' +
' ,NVL(PCEMPR.percdesc,0) as \"discountPercent\" ' +
' ,NVL(PCEMPR.codsetor,0) as \"sectorId\" ' +
' ,NVL(PCPARAMFILIAL.valor,0) as \"sectorManagerId\" ' +
' ,( SELECT PCUSUARI.CODSUPERVISOR FROM PCUSUARI WHERE PCUSUARI.CODUSUR = PCEMPR.CODUSUR ) as \"supervisorId\" ' +
' ,( SELECT NVL(P.valor,0) FROM PCPARAMFILIAL P WHERE P.CODFILIAL = \'99\' AND ' +
' P.NOME = \'CON_PRAZOENTREGA\' ) as \"deliveryTime\" ' +
' FROM PCEMPR, PCFILIAL, PCPARAMFILIAL ' +
' WHERE PCEMPR.CODFILIAL = PCFILIAL.CODIGO (+)' +
' AND PCPARAMFILIAL.CODFILIAL = \'99\' ' +
' AND PCPARAMFILIAL.NOME = \'CON_CODSETORGERENTELOJA\' ' +
' AND PCEMPR.EMAIL = :username AND PCEMPR.SENHABD = CRYPT(:password, USUARIOBD)';
const users = await queryRunner.manager
.query(sql, [user.email, user.password]);
if (users.length == 0) {
return null;
}
// const sqlDiasUteis = 'SELECT ( mv_prox_diautil( (TRUNC(SYSDATE) + :1) + COUNT(1), :2 ) - TRUNC(SYSDATE) ) as "days" ' +
// ' FROM MVDIASUTEIS ' +
// ' WHERE MVDIASUTEIS.CODFILIAL = :3 ' +
// ` AND MVDIASUTEIS.diaentrega = 'N' ` +
// ` AND MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + :4 `;
// const sqlDiasUteis = `SELECT CASE WHEN mv_prox_diautil(TRUNC(SYSDATE), :1) > TRUNC(SYSDATE) THEN
// ( ( mv_prox_diautil((mv_prox_diautil(TRUNC(SYSDATE), :2) + :3) + COUNT(1), :4 ) - (mv_prox_diautil(TRUNC(SYSDATE), :5)) ) - 1 )
// ELSE ( mv_prox_diautil((mv_prox_diautil(TRUNC(SYSDATE), :6) + :7) + COUNT(1), :8 ) - (mv_prox_diautil(TRUNC(SYSDATE), :9)) ) END as "days"
// FROM MVDIASUTEIS
// WHERE MVDIASUTEIS.CODFILIAL = :10
// AND MVDIASUTEIS.diaentrega = 'N'
// AND MVDIASUTEIS.data BETWEEN mv_prox_diautil(TRUNC(SYSDATE), :11) AND mv_prox_diautil(TRUNC(SYSDATE), :12) + :13`;
// const deliveryDays = await queryRunner.manager
// .query(sqlDiasUteis, ['6',
// '6', Number.parseInt(users[0].deliveryTime), '6', '6',
// '6', Number.parseInt(users[0].deliveryTime), '6', '6',
// '6',
// '6', '6', Number.parseInt(users[0].deliveryTime)
// ]);
const sqlDiasEntrega = `SELECT ( MAX(MVDIASUTEIS.DATA) - TRUNC(SYSDATE) ) as "days"
FROM MVDIASUTEIS
WHERE MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE)
AND TRUNC(SYSDATE) + :dias`;
const sqlDiasSemEntrega = `SELECT GREATEST(COUNT(1) - 1,0) as "daysNoDelivery"
FROM MVDIASUTEIS
WHERE MVDIASUTEIS.data BETWEEN TRUNC(SYSDATE)
AND TRUNC(SYSDATE) + :dias
AND MVDIASUTEIS.DIAENTREGA = 'N'`;
const deliveryDays2 = await queryRunner.manager
.query(sqlDiasEntrega, [Number.parseInt(users[0].deliveryTime)]);
const noDeliveryDays = await queryRunner.manager
.query(sqlDiasSemEntrega, [Number.parseInt(users[0].deliveryTime)]);
const days = Number.parseInt(deliveryDays2[0].days) +
( noDeliveryDays.length > 0 ? Number.parseInt(noDeliveryDays[0].daysNoDelivery) : 0 );
const userDb = users[0];
console.log(userDb);
if (!isNaN(days)) {
userDb.deliveryTime = days; // deliveryDays[0].days;
}
console.log(days);
console.log(userDb);
return userDb;
} finally {
await queryRunner.release();
await connection.close();
}
}
async discountUser(userId: number): Promise<any> {
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
return await queryRunner.manager
.getRepository(Pcempr)
.createQueryBuilder('pcempr')
.select("NVL(\"pcempr\".percdesc,0) as \"discountUser\"")
.where("MATRICULA = :userId", { userId })
.getRawOne(); //...authUser,
} finally {
await queryRunner.release();
}
}
async update(email: string, newPassword: string) {
const connection = getConnection();
const queryRunner = connection.createQueryRunner();
await queryRunner.connect();
try {
return await queryRunner.manager
.createQueryBuilder()
.update(User)
.set({ password: newPassword })
.where("EMAIL = :email", { email })
.execute();
} finally {
await queryRunner.release();
}
}
}

View File

@@ -1,24 +1,24 @@
import { JwtPayload } from './../interfaces/jwt-payload.interface';
import { Injectable, UnauthorizedException } from "@nestjs/common";
import { PassportStrategy } from "@nestjs/passport";
import { AuthService } from "../services/auth.service";
import { ExtractJwt, Strategy } from 'passport-jwt';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(private readonly authService: AuthService){
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKeyProvider: '4557C0D7-DFB0-40DA-BF83-91A75103F7A9', //secretOrKey
})
}
async validate(payload: JwtPayload) {
const user = await this.authService.validateUser(payload);
if (!user) {
throw new UnauthorizedException();
}
return user;
}
import { JwtPayload } from './../interfaces/jwt-payload.interface';
import { Injectable, UnauthorizedException } from "@nestjs/common";
import { PassportStrategy } from "@nestjs/passport";
import { AuthService } from "../services/auth.service";
import { ExtractJwt, Strategy } from 'passport-jwt';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor(private readonly authService: AuthService){
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKeyProvider: '4557C0D7-DFB0-40DA-BF83-91A75103F7A9', //secretOrKey
})
}
async validate(payload: JwtPayload) {
const user = await this.authService.validateUser(payload);
if (!user) {
throw new UnauthorizedException();
}
return user;
}
}