penisularhr / src / modules / admin-config / admin-config.service.ts
admin-config.service.ts
Raw
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { type FindOptionsWhere, Repository } from 'typeorm';

import { AdminConfigNotFoundException } from '../../exceptions';
import { AdminConfigEntity } from './admin-config..entity';
import { type UpdateAdminConfigDto } from './dtos/update-admin-config.dto';

@Injectable()
export class AdminConfigService {
  constructor(
    @InjectRepository(AdminConfigEntity)
    private adminConfigRepository: Repository<AdminConfigEntity>,
  ) {}

  async findOne(
    findData?: FindOptionsWhere<AdminConfigEntity>,
  ): Promise<AdminConfigEntity> {
    const queryBuilder =
      this.adminConfigRepository.createQueryBuilder('adminConfig');

    if (findData) {
      queryBuilder.where(findData);
    }

    const returnEntity = await queryBuilder.getOne();

    if (!returnEntity) {
      throw new AdminConfigNotFoundException();
    }

    return returnEntity;
  }

  async updateAdminConfig(
    adminConfigEntity: AdminConfigEntity,
    dto: UpdateAdminConfigDto,
  ): Promise<AdminConfigEntity> {
    const {
      restDayWagesRequiredDaysInWeek,
      advanceRequiredDays,
      advanceRequiredWages,
      advanceAmount,
      advanceLastExecutionDate,
    } = dto;

    if (restDayWagesRequiredDaysInWeek !== undefined) {
      adminConfigEntity.restDayWagesRequiredDaysInWeek =
        restDayWagesRequiredDaysInWeek;
    }

    if (advanceRequiredDays !== undefined) {
      adminConfigEntity.advanceRequiredDays = advanceRequiredDays;
    }

    if (advanceRequiredWages !== undefined) {
      adminConfigEntity.advanceRequiredWages = advanceRequiredWages;
    }

    if (advanceAmount !== undefined) {
      adminConfigEntity.advanceAmount = advanceAmount;
    }

    if (advanceLastExecutionDate !== undefined) {
      adminConfigEntity.advanceLastExecutionDate = advanceLastExecutionDate;
    }

    await this.adminConfigRepository.save(adminConfigEntity);

    return adminConfigEntity;
  }
}