src/outbound/nps/nps.service.ts
Properties |
|
Methods |
|
constructor(userRepository: Repository<User>, clientRepository: Repository<Client>)
|
|||||||||
|
Defined in src/outbound/nps/nps.service.ts:13
|
|||||||||
|
Parameters :
|
| Async findClientsByRealm | ||||||
findClientsByRealm(realm: string)
|
||||||
|
Defined in src/outbound/nps/nps.service.ts:54
|
||||||
|
Parameters :
Returns :
Promise<number[]>
|
| Async findEmails | |||
findEmails(undefined)
|
|||
|
Defined in src/outbound/nps/nps.service.ts:21
|
|||
|
Parameters :
Returns :
unknown
|
| Async findUserClientInfo | |||
findUserClientInfo(undefined)
|
|||
|
Defined in src/outbound/nps/nps.service.ts:69
|
|||
|
Parameters :
Returns :
unknown
|
| Private logger |
Default value : new Logger(NpsService.name)
|
|
Defined in src/outbound/nps/nps.service.ts:13
|
import { Injectable, Logger } from '@nestjs/common';
import { ILike, Repository } from 'typeorm';
import { User } from 'src/entities/user';
import { InjectRepository } from '@nestjs/typeorm';
import { Client } from 'src/entities/client';
import { PaginateQuery } from 'src/types/paginate-query';
import { PaginatedResult } from 'src/types/paginated-result';
import { UserClient } from 'src/entities/user-client';
import { JobPosition } from 'src/entities/job-position';
@Injectable()
export class NpsService {
private logger= new Logger(NpsService.name)
constructor(
@InjectRepository(User)
private userRepository: Repository<User>,
@InjectRepository(Client)
private clientRepository: Repository<Client>
) {}
async findEmails({ page = 0, size = 10, email }) {
const _page = Number(page);
const offset = _page * +size;
const queryBuilder = this.userRepository
.createQueryBuilder('u')
.distinct(true)
.select('email')
.orderBy('email')
.limit(+size)
.offset(offset);
if (email) {
queryBuilder.andWhere({ email: ILike('%' + email + '%') });
}
const result = await queryBuilder.getRawMany();
const total = await queryBuilder.getCount();
const emails = result.map((item) => item.email);
const lastPage = Math.ceil(total / +size);
const prevPage = _page < 1 ? null : _page;
return {
content: emails,
size: +size,
totalElements: total,
totalPages: lastPage,
first: !prevPage,
last: lastPage === _page + 1,
number: _page + 1,
numberOfElements: emails.length,
};
}
async findClientsByRealm(realm: string): Promise<number[]> {
const _realmParam = realm.replace('_', ' ');
const queryBuilder = this.clientRepository
.createQueryBuilder('c')
.select(['id', 'name', 'client_type'])
.where({
name: ILike(_realmParam),
});
const content = await queryBuilder.getRawMany();
return content;
}
async findUserClientInfo({ username, realm }) {
const _realmParam = realm.replace('_', ' ');
const clientInfo = await this.clientRepository
.createQueryBuilder('c')
.select(['id', 'client_type'])
.where({
name: ILike(_realmParam),
})
.getRawOne();
const userInfo = await this.userRepository.findOne({
select: ['id', 'jobPositionId'],
where: {
username,
},
});
this.logger.debug('clientInfo >>>', clientInfo)
this.logger.debug('userInfo >>>', userInfo)
return {
userId: userInfo?.id,
jobPositionId: userInfo?.jobPositionId,
clientId: clientInfo?.id,
clientType: clientInfo?.clientType,
};
}
}