refazendo o order service
This commit is contained in:
@@ -1,25 +1,26 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule, ConfigService } from '@nestjs/config';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { createOracleConfig } from './core/configs/typeorm.oracle.config';
|
||||
import { createPostgresConfig } from './core/configs/typeorm.postgres.config';
|
||||
import { LogisticModule } from './logistic/logistic.module';
|
||||
import { OrdersPaymentModule } from './orders-payment/orders-payment.module';
|
||||
import { ProductsModule } from './products/products.module';
|
||||
import { AuthModule } from './auth/auth/auth.module';
|
||||
import { DataConsultModule } from './data-consult/data-consult.module';
|
||||
import { OrdersModule } from './orders/orders.module';
|
||||
import { OcorrencesController } from './crm/occurrences/ocorrences.controller';
|
||||
import { OccurrencesModule } from './crm/occurrences/occurrences.module';
|
||||
import { ReasonTableModule } from './crm/reason-table/reason-table.module';
|
||||
import { NegotiationsModule } from './crm/negotiations/negotiations.module';
|
||||
import { HttpModule } from '@nestjs/axios';
|
||||
import { LogisticController } from './logistic/logistic.controller';
|
||||
import { LogisticService } from './logistic/logistic.service';
|
||||
import { LoggerModule } from './Log/logger.module';
|
||||
import { UsersModule } from './auth/users/users.module';
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule, ConfigService } from '@nestjs/config';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { createOracleConfig } from './core/configs/typeorm.oracle.config';
|
||||
import { createPostgresConfig } from './core/configs/typeorm.postgres.config';
|
||||
import { LogisticModule } from './logistic/logistic.module';
|
||||
import { OrdersPaymentModule } from './orders-payment/orders-payment.module';
|
||||
import { ProductsModule } from './products/products.module';
|
||||
import { AuthModule } from './auth/auth/auth.module';
|
||||
import { DataConsultModule } from './data-consult/data-consult.module';
|
||||
import { OrdersModule } from './orders/modules/orders.module';
|
||||
import { OcorrencesController } from './crm/occurrences/ocorrences.controller';
|
||||
import { OccurrencesModule } from './crm/occurrences/occurrences.module';
|
||||
import { ReasonTableModule } from './crm/reason-table/reason-table.module';
|
||||
import { NegotiationsModule } from './crm/negotiations/negotiations.module';
|
||||
import { HttpModule } from '@nestjs/axios';
|
||||
import { LogisticController } from './logistic/logistic.controller';
|
||||
import { LogisticService } from './logistic/logistic.service';
|
||||
import { LoggerModule } from './Log/logger.module';
|
||||
import { UsersModule } from './auth/users/users.module';
|
||||
|
||||
@Module({
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
UsersModule,
|
||||
ConfigModule.forRoot({ isGlobal: true }),
|
||||
@@ -36,6 +37,7 @@ import { UsersModule } from './auth/users/users.module';
|
||||
LogisticModule,
|
||||
OrdersPaymentModule,
|
||||
HttpModule,
|
||||
OrdersModule,
|
||||
NegotiationsModule,
|
||||
OccurrencesModule,
|
||||
ReasonTableModule,
|
||||
@@ -45,7 +47,7 @@ import { UsersModule } from './auth/users/users.module';
|
||||
AuthModule,
|
||||
OrdersModule,
|
||||
],
|
||||
controllers: [OcorrencesController, LogisticController],
|
||||
providers: [ LogisticService],
|
||||
})
|
||||
export class AppModule {}
|
||||
controllers: [OcorrencesController, LogisticController ],
|
||||
providers: [ LogisticService, ],
|
||||
})
|
||||
export class AppModule {}
|
||||
|
||||
22
src/common/response.interceptor.ts
Normal file
22
src/common/response.interceptor.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
// common/interceptors/response.interceptor.ts
|
||||
import {
|
||||
CallHandler,
|
||||
ExecutionContext,
|
||||
Injectable,
|
||||
NestInterceptor,
|
||||
} from '@nestjs/common';
|
||||
import { Observable } from 'rxjs';
|
||||
import { map } from 'rxjs/operators';
|
||||
import { ResultModel } from '../shared/ResultModel';
|
||||
|
||||
@Injectable()
|
||||
export class ResponseInterceptor<T> implements NestInterceptor<T, ResultModel<T>> {
|
||||
intercept(context: ExecutionContext, next: CallHandler<T>): Observable<ResultModel<T>> {
|
||||
return next.handle().pipe(
|
||||
map((data) => {
|
||||
return ResultModel.success(data);
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,6 @@ export class DataConsultRepository {
|
||||
const likeFilter = filter.toUpperCase().replace('@', '%') + '%';
|
||||
|
||||
const queries = [
|
||||
// Busca por código (apenas números)
|
||||
{
|
||||
sql: `
|
||||
SELECT PCCLIENT.CODCLI as "id",
|
||||
@@ -84,7 +83,6 @@ export class DataConsultRepository {
|
||||
`,
|
||||
params: [cleanedNumeric],
|
||||
},
|
||||
// Busca por CNPJ/CPF limpo
|
||||
{
|
||||
sql: `
|
||||
SELECT PCCLIENT.CODCLI as "id",
|
||||
@@ -96,7 +94,6 @@ export class DataConsultRepository {
|
||||
`,
|
||||
params: [cleanedNumeric],
|
||||
},
|
||||
// Busca por nome do cliente
|
||||
{
|
||||
sql: `
|
||||
SELECT PCCLIENT.CODCLI as "id",
|
||||
@@ -122,7 +119,7 @@ export class DataConsultRepository {
|
||||
|
||||
|
||||
async findProducts(filter: string): Promise<ProductDto[]> {
|
||||
const cleanedFilter = filter.replace(/[^\d]/g, ''); // apenas números
|
||||
const cleanedFilter = filter.replace(/[^\d]/g, '');
|
||||
const likeFilter = filter + '%';
|
||||
|
||||
const queries = [
|
||||
|
||||
@@ -1,11 +1,14 @@
|
||||
import { NestFactory } from '@nestjs/core';
|
||||
import { AppModule } from './app.module';
|
||||
import { ValidationPipe } from '@nestjs/common';
|
||||
import { ResponseInterceptor } from './common/response.interceptor';
|
||||
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
|
||||
|
||||
async function bootstrap() {
|
||||
const app = await NestFactory.create(AppModule);
|
||||
|
||||
app.useGlobalInterceptors(new ResponseInterceptor());
|
||||
|
||||
|
||||
app.useGlobalPipes(
|
||||
new ValidationPipe({
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
import { Injectable, NotFoundException } from '@nestjs/common';
|
||||
import { InvoiceRepository } from '../repositories/invoice.repository';
|
||||
import { InvoiceDto } from '../dto/invoice.dto';
|
||||
|
||||
@Injectable()
|
||||
export class InvoiceService {
|
||||
constructor(private readonly invoiceRepo: InvoiceRepository) {}
|
||||
|
||||
async getInvoiceByChave(chavenfe: string): Promise<InvoiceDto> {
|
||||
const invoice = await this.invoiceRepo.findInvoiceByChave(chavenfe);
|
||||
if (!invoice) {
|
||||
throw new NotFoundException('Nota fiscal não localizada.');
|
||||
}
|
||||
|
||||
const itens = await this.invoiceRepo.findInvoiceItems(invoice.transactionId);
|
||||
return {
|
||||
...invoice,
|
||||
itens,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
///← Orquestra operações de pedido
|
||||
|
||||
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
export class InvoiceItemDto {
|
||||
productId: number;
|
||||
productName: string;
|
||||
package: string;
|
||||
qt: number;
|
||||
ean: string;
|
||||
multiple: number;
|
||||
productType: string;
|
||||
image: string | null;
|
||||
}
|
||||
|
||||
export class InvoiceDto {
|
||||
storeId: number;
|
||||
invoiceDate: Date;
|
||||
orderId: number;
|
||||
invoiceId: number;
|
||||
transactionId: number;
|
||||
customerId: number;
|
||||
customer: string;
|
||||
sellerId: number;
|
||||
sellerName: string;
|
||||
itensQt: number;
|
||||
itens: InvoiceItemDto[];
|
||||
}
|
||||
|
||||
@@ -7,35 +7,20 @@ https://docs.nestjs.com/controllers#controllers
|
||||
|
||||
import { Body, Controller, Get, Param, Post, Query } from '@nestjs/common';
|
||||
import { OrdersService } from './orders.service';
|
||||
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
|
||||
import { AuthGuard } from '@nestjs/passport';
|
||||
import { UseGuards } from '@nestjs/common';
|
||||
import { ApiOperation } from '@nestjs/swagger';
|
||||
import { InvoiceService } from './application/invoice.service';
|
||||
import { InvoiceDto } from './dto/invoice.dto';
|
||||
|
||||
|
||||
|
||||
@ApiTags('Invoice')
|
||||
@ApiBearerAuth()
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@Controller('api/v1/invoice')
|
||||
@Controller('api/v1/orders')
|
||||
export class OrdersController {
|
||||
|
||||
constructor(
|
||||
private readonly ordersService: OrdersService,
|
||||
private readonly invoiceService: InvoiceService,
|
||||
) {}
|
||||
|
||||
constructor( private readonly ordersService: OrdersService) {}
|
||||
|
||||
@Get('find')
|
||||
findOrders(@Query() query) {
|
||||
return this.ordersService.findOrders(query);
|
||||
}
|
||||
|
||||
@Get(':chavenfe')
|
||||
async getByChave(@Param('chavenfe') chavenfe: string): Promise<InvoiceDto> {
|
||||
return this.invoiceService.getInvoiceByChave(chavenfe);
|
||||
@Get('invoice/:chavenfe')
|
||||
findInvoice(@Param('chavenfe') chavenfe: string) {
|
||||
return this.ordersService.findInvoice(chavenfe);
|
||||
}
|
||||
|
||||
@Get('itens/:id')
|
||||
|
||||
@@ -1,27 +1,19 @@
|
||||
/* eslint-disable prettier/prettier */
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
|
||||
import { OrdersService } from './orders.service';
|
||||
import { InvoiceRepository } from './repositories/invoice.repository';
|
||||
import { InvoiceService } from './application/invoice.service';
|
||||
import { OrdersController } from './orders.controller';
|
||||
/*
|
||||
https://docs.nestjs.com/modules
|
||||
*/
|
||||
|
||||
import { Module } from '@nestjs/common';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
ConfigModule,
|
||||
TypeOrmModule,
|
||||
],
|
||||
imports: [],
|
||||
controllers: [
|
||||
OrdersController,
|
||||
],
|
||||
OrdersController,],
|
||||
providers: [
|
||||
OrdersService,
|
||||
InvoiceService,
|
||||
InvoiceRepository,
|
||||
],
|
||||
OrdersService,],
|
||||
})
|
||||
export class OrdersModule {}
|
||||
export class OrdersModule { }
|
||||
@@ -7,14 +7,12 @@ https://docs.nestjs.com/providers#services
|
||||
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
||||
import { createOracleConfig } from '../core/configs/typeorm.oracle.config';
|
||||
import { DataSource } from 'typeorm';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
|
||||
@Injectable()
|
||||
export class OrdersService {
|
||||
constructor(private readonly configService: ConfigService) {}
|
||||
|
||||
async findOrders(query) {
|
||||
const dataSource = new DataSource(createOracleConfig(this.configService));
|
||||
const dataSource = new DataSource(createOracleConfig);
|
||||
await dataSource.initialize();
|
||||
const queryRunner = dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
@@ -230,7 +228,7 @@ export class OrdersService {
|
||||
}
|
||||
|
||||
async findInvoice(chavenfe: string) {
|
||||
const dataSource = new DataSource(createOracleConfig(this.configService));
|
||||
const dataSource = new DataSource(typeOrmConfig);
|
||||
await dataSource.initialize();
|
||||
const queryRunner = dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
@@ -291,7 +289,7 @@ export class OrdersService {
|
||||
|
||||
|
||||
async getItens(orderId: string) {
|
||||
const dataSource = new DataSource(createOracleConfig(this.configService));
|
||||
const dataSource = new DataSource(typeOrmConfig);
|
||||
await dataSource.initialize();
|
||||
const queryRunner = dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
@@ -335,7 +333,7 @@ export class OrdersService {
|
||||
}
|
||||
|
||||
async getCutItens(orderId: string) {
|
||||
const dataSource = new DataSource(createOracleConfig(this.configService));
|
||||
const dataSource = new DataSource(typeOrmConfig);
|
||||
await dataSource.initialize();
|
||||
const queryRunner = dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
@@ -362,7 +360,7 @@ export class OrdersService {
|
||||
}
|
||||
|
||||
async getOrderDelivery(orderId: string){
|
||||
const dataSource = new DataSource(createOracleConfig(this.configService));
|
||||
const dataSource = new DataSource(typeOrmConfig);
|
||||
await dataSource.initialize();
|
||||
const queryRunner = dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
@@ -423,7 +421,7 @@ export class OrdersService {
|
||||
|
||||
|
||||
async getTransfer(orderId: number) {
|
||||
const dataSource = new DataSource(createOracleConfig(this.configService));
|
||||
const dataSource = new DataSource(typeOrmConfig);
|
||||
await dataSource.initialize();
|
||||
const queryRunner = dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
@@ -456,7 +454,7 @@ export class OrdersService {
|
||||
}
|
||||
|
||||
async getStatusOrder(orderId: number) {
|
||||
const dataSource = new DataSource(createOracleConfig(this.configService));
|
||||
const dataSource = new DataSource(typeOrmConfig);
|
||||
await dataSource.initialize();
|
||||
const queryRunner = dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
@@ -604,7 +602,7 @@ export class OrdersService {
|
||||
|
||||
|
||||
async createInvoiceCheck(invoice: any) {
|
||||
const dataSource = new DataSource(createOracleConfig(this.configService));
|
||||
const dataSource = new DataSource(typeOrmConfig);
|
||||
await dataSource.initialize();
|
||||
const queryRunner = dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { DataSource } from 'typeorm';
|
||||
import { InjectDataSource } from '@nestjs/typeorm';
|
||||
|
||||
@Injectable()
|
||||
export class InvoiceRepository {
|
||||
constructor(
|
||||
@InjectDataSource() private readonly dataSource: DataSource,
|
||||
) {}
|
||||
|
||||
async findInvoiceByChave(chavenfe: string) {
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
try {
|
||||
const sql = `
|
||||
SELECT
|
||||
pcnfsaid.codfilial AS "storeId",
|
||||
pcnfsaid.dtsaida AS "invoiceDate",
|
||||
pcnfsaid.numped AS "orderId",
|
||||
pcnfsaid.numnota AS "invoiceId",
|
||||
pcnfsaid.numtransvenda AS "transactionId",
|
||||
pcnfsaid.codcli AS "customerId",
|
||||
pcclient.cliente AS "customer",
|
||||
pcnfsaid.codusur AS "sellerId",
|
||||
pcusuari.nome AS "sellerName",
|
||||
(
|
||||
SELECT SUM(pcmov.qt)
|
||||
FROM pcmov
|
||||
WHERE pcmov.numtransvenda = pcnfsaid.numtransvenda
|
||||
) AS "itensQt",
|
||||
NULL AS "itens"
|
||||
FROM pcnfsaid, pcclient, pcusuari
|
||||
WHERE
|
||||
pcnfsaid.codcli = pcclient.codcli
|
||||
AND pcnfsaid.codusur = pcusuari.codusur
|
||||
AND pcnfsaid.chavenfe = :chavenfe
|
||||
`;
|
||||
return await queryRunner.manager.query(sql, [chavenfe]);
|
||||
} finally {
|
||||
await queryRunner.release();
|
||||
}
|
||||
}
|
||||
|
||||
async findInvoiceItems(transactionId: number) {
|
||||
const queryRunner = this.dataSource.createQueryRunner();
|
||||
await queryRunner.connect();
|
||||
try {
|
||||
const sql = `
|
||||
SELECT
|
||||
pcmov.codprod AS "productId",
|
||||
pcprodut.descricao AS "productName",
|
||||
pcprodut.embalagem AS "package",
|
||||
pcmov.qt AS "qt",
|
||||
pcprodut.codauxiliar AS "ean",
|
||||
pcprodut.multiplo AS "multiple",
|
||||
pcprodut.tipoproduto AS "productType",
|
||||
REPLACE(
|
||||
CASE
|
||||
WHEN INSTR(PCPRODUT.URLIMAGEM, ';') > 0 THEN
|
||||
SUBSTR(PCPRODUT.URLIMAGEM, 1, INSTR(PCPRODUT.URLIMAGEM, ';') - 1)
|
||||
WHEN PCPRODUT.URLIMAGEM IS NOT NULL THEN
|
||||
PCPRODUT.URLIMAGEM
|
||||
ELSE NULL
|
||||
END,
|
||||
'167.249.211.178:8001',
|
||||
'10.1.1.191'
|
||||
) AS "image"
|
||||
FROM pcmov, pcprodut
|
||||
WHERE
|
||||
pcmov.codprod = pcprodut.codprod
|
||||
AND pcmov.numtransvenda = :transactionId
|
||||
`;
|
||||
return await queryRunner.manager.query(sql, [transactionId]);
|
||||
} finally {
|
||||
await queryRunner.release();
|
||||
}
|
||||
}
|
||||
}
|
||||
17
src/shared/ResultModel.ts
Normal file
17
src/shared/ResultModel.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
export class ResultModel<T> {
|
||||
constructor(
|
||||
public success: boolean,
|
||||
public message?: string,
|
||||
public data?: T,
|
||||
public error?: any
|
||||
) {}
|
||||
|
||||
static success<T>(data?: T, message?: string): ResultModel<T> {
|
||||
return new ResultModel<T>(true, message, data);
|
||||
}
|
||||
|
||||
static failure<T>(message: string, error?: any): ResultModel<T> {
|
||||
return new ResultModel<T>(false, message, undefined, error);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user