src/partnership/partnership.service.ts
Methods |
|
constructor(partnershipRepository: Repository<Partnership>, dataSource: DataSource)
|
|||||||||
|
Defined in src/partnership/partnership.service.ts:8
|
|||||||||
|
Parameters :
|
| Async calculatePartnership | ||||||
calculatePartnership(body: PartnershipBodyArray)
|
||||||
|
Defined in src/partnership/partnership.service.ts:30
|
||||||
|
Parameters :
Returns :
unknown
|
| formatReturnPartnership | ||||
formatReturnPartnership(queryBuilder)
|
||||
|
Defined in src/partnership/partnership.service.ts:20
|
||||
|
Parameters :
Returns :
{ destination: {}; }
|
| Async getPartnershipId | ||||||
getPartnershipId(id: number)
|
||||||
|
Defined in src/partnership/partnership.service.ts:77
|
||||||
|
Parameters :
Returns :
unknown
|
| Async postPartnership | ||||||
postPartnership(partnership: PartnershipDto)
|
||||||
|
Defined in src/partnership/partnership.service.ts:16
|
||||||
|
Parameters :
Returns :
unknown
|
| Async putPartnership | |||||||||
putPartnership(id: number, partnership: PartnershipDto)
|
|||||||||
|
Defined in src/partnership/partnership.service.ts:83
|
|||||||||
|
Parameters :
Returns :
any
|
import { Injectable } from '@nestjs/common';
import { DataSource, Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { PartnershipBodyArray, PartnershipDto } from './dto/partnership.dto';
import { Partnership } from '../entities/partnership';
@Injectable()
export class PartnershipService {
constructor(
@InjectRepository(Partnership)
private partnershipRepository: Repository<Partnership>,
private dataSource: DataSource,
) { }
async postPartnership(partnership: PartnershipDto) {
return await this.partnershipRepository.save(partnership);
}
formatReturnPartnership(queryBuilder) {
let destination = [];
queryBuilder.forEach((element) => {
destination = [...destination, ...element.destination.split(';')];
});
destination = [...new Set(destination)];
if (!destination?.length)
destination = ["ALGAR"]
return { destination };
}
async calculatePartnership(body: PartnershipBodyArray) {
if (body.sender) {
const queryBuilderSender: { destination: string }[] = await this
.dataSource.query(`
with list as (
select distinct
destination
from sender where sender = ${body.sender}
and destination is not null)
select distinct regexp_split_to_table(destination,',') as destination
from list`);
if (queryBuilderSender.length)
return this.formatReturnPartnership(queryBuilderSender);
}
const sPartnership = JSON.stringify(body.partnership);
const queryBuilder = await this.dataSource.query(`
WITH source AS (
SELECT
*
from
json_to_recordset(
'${sPartnership}'
) AS x(fab varchar(20),dis varchar(20))
)
, list as (
select
distinct
c.data_destinations as destination
from clients as c
inner join cnpjs_client as cc on c.id = cc.client_id
inner join source as bc on cc.cnpj = bc.fab where c.data_destinations is not null
union all
select p.data_destinations as destination
from partnership as p
inner join cnpjs_distributor cd on p.distributor_id = p.distributor_id
inner join cnpjs_client as ccp on p.client_id = ccp.client_id
inner join source as b on ccp.cnpj = b.fab
and cd.cnpj = b.dis
where p.data_destinations is not null)
select distinct regexp_split_to_table(destination,',') as destination
from list
`);
return this.formatReturnPartnership(queryBuilder);
}
async getPartnershipId(id: number) {
return await this.partnershipRepository.findOne({
where: { id },
relations: ['category'],
});
}
async putPartnership(id: number, partnership: PartnershipDto) {
await this.partnershipRepository.update(id, partnership);
}
}