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:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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 { }
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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 [];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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[];
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user