File

apps/recallassess/recallassess-api/src/api/admin/system-setting/system-setting.service.ts

Description

SystemSettingService

Admin API — System Setting (System Setting). Business Logic Service for RecallAssess.

Extends

BNestBaseModuleService

Index

Methods

Methods

Async add
add(data: any)

Override add method to log creation

Parameters :
Name Type Optional
data any No
Returns : Promise<any>
Async delete
delete(id: number)

Override delete method to log deletion

Parameters :
Name Type Optional
id number No
Returns : Promise<any>
Async save
save(id: number, data: any)

Override save method to log update

Parameters :
Name Type Optional
id number No
data any No
Returns : Promise<any>
import { BNestBaseModuleService } from "@bish-nest/core/data/module-service/base-module.service";
import { BNestPrismaService } from "@bish-nest/core/services";
import { Injectable, NotFoundException } from "@nestjs/common";

/**
 * SystemSettingService
 *
 * Admin API — System Setting (System Setting). Business Logic Service for RecallAssess.
 */


@Injectable()
export class SystemSettingService extends BNestBaseModuleService {
  /**
   * Override add method to log creation
   */
  async add(data: any): Promise<any> {
    // Validate unique key constraint
    if (data.key) {
      const existingSetting = await this.prisma.client.systemSetting.findUnique({
        where: { key: data.key },
      });

      if (existingSetting) {
        throw new Error(`System setting with key '${data.key}' already exists`);
      }
    }

    // Validate key is not empty
    if (!data.key || data.key === '') {
      throw new Error('System setting key cannot be empty');
    }

    // Validate value is not empty
    if (!data.value || data.value === '') {
      throw new Error('System setting value cannot be empty');
    }

    // Filter out display-only audit fields (keep user relationships for database)
    const filteredData = { ...data };
    delete filteredData.user_name_created_by;
    delete filteredData.user_name_updated_by;

    return super.add(filteredData);
  }

  /**
   * Override save method to log update
   */
  async save(id: number, data: any): Promise<any> {
    // Get old data before update
    const oldSystemSetting = await this.prisma.client.systemSetting.findUnique({
      where: { id },
    });

    if (!oldSystemSetting) {
      throw new NotFoundException(`System setting with ID ${id} not found`);
    }

    // Validate unique key constraint if key is being updated
    if (data.key && data.key !== oldSystemSetting.key) {
      const existingSetting = await this.prisma.client.systemSetting.findUnique({
        where: { key: data.key },
      });

      if (existingSetting && existingSetting.id !== id) {
        throw new Error(`System setting with key '${data.key}' already exists`);
      }
    }

    // Validate key is not empty
    if (data.key === '') {
      throw new Error('System setting key cannot be empty');
    }

    // Validate value is not empty
    if (data.value === '') {
      throw new Error('System setting value cannot be empty');
    }

    // Filter out display-only audit fields (keep userUpdatedBy for database)
    const filteredData = { ...data };
    delete filteredData.user_name_created_by;
    delete filteredData.user_name_updated_by;

    return super.save(id, filteredData);
  }

  /**
   * Override delete method to log deletion
   */
  async delete(id: number): Promise<any> {
    // Get data before deletion
    const systemSetting = await this.prisma.client.systemSetting.findUnique({
      where: { id },
    });

    if (!systemSetting) {
      throw new NotFoundException(`System setting with ID ${id} not found`);
    }

    return super.delete(id);
  }
}

results matching ""

    No results matching ""