commit
This commit is contained in:
197
src/Auth/services/user.service.ts
Normal file
197
src/Auth/services/user.service.ts
Normal file
@@ -0,0 +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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user