File

src/outbound/nps/nps.service.ts

Index

Properties
Methods

Constructor

constructor(userRepository: Repository<User>, clientRepository: Repository<Client>)
Parameters :
Name Type Optional
userRepository Repository<User> No
clientRepository Repository<Client> No

Methods

Async findClientsByRealm
findClientsByRealm(realm: string)
Parameters :
Name Type Optional
realm string No
Returns : Promise<number[]>
Async findEmails
findEmails(undefined)
Parameters :
Name Optional
No
Returns : unknown
Async findUserClientInfo
findUserClientInfo(undefined)
Parameters :
Name Optional
No
Returns : unknown

Properties

Private logger
Default value : new Logger(NpsService.name)
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,
    };
  }
}

results matching ""

    No results matching ""