245 lines
9.9 KiB
TypeScript
245 lines
9.9 KiB
TypeScript
import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
|
|
import { PrismaService } from '../prisma/prisma.service';
|
|
import type { ApplicationListQuery, CreateSignatureMaterialDto, CreateSmsApplicationDto, CreateSmsDrainageInfoDto, CreateSmsSignatureDto, CreateSmsSignatureOptions, CreateSmsTemplateDto, CreateSmsTemplateOptions, DrainageInfoListQuery, GatewayDownstreamConnectionEventDto, ReplaceApplicationRouteRulesDto, ReviewDto, SignatureListQuery, StatusChangeDto, TemplateListQuery, UpdateSmsApplicationDto, UpdateSmsDrainageInfoDto, UpdateSmsSignatureDto, UpdateSmsTemplateDto } from './sms-config.contracts';
|
|
import { SmsApplicationConfigService } from './application-config.service';
|
|
import { SmsApplicationLifecycleService } from './application-lifecycle.service';
|
|
import { SmsAuditService } from './audit.service';
|
|
import { SmsDrainageService } from './drainage.service';
|
|
import { SmsReportValidationService } from './report-validation.service';
|
|
import { SmsSignatureService } from './signature.service';
|
|
import { SmsTemplateService } from './template.service';
|
|
|
|
/**
|
|
* Stable compatibility facade for SMS configuration.
|
|
* R3 moves business behavior into focused domain services while callers keep this API.
|
|
*/
|
|
@Injectable()
|
|
export class SmsConfigService implements OnModuleInit, OnModuleDestroy {
|
|
private readonly lifecycle: SmsApplicationLifecycleService;
|
|
private readonly applications: SmsApplicationConfigService;
|
|
private readonly reportValidation: SmsReportValidationService;
|
|
private readonly audit: SmsAuditService;
|
|
private readonly signatures: SmsSignatureService;
|
|
private readonly drainage: SmsDrainageService;
|
|
private readonly templates: SmsTemplateService;
|
|
|
|
constructor(prisma: PrismaService) {
|
|
this.lifecycle = new SmsApplicationLifecycleService(prisma);
|
|
this.applications = new SmsApplicationConfigService(prisma, this.lifecycle);
|
|
this.reportValidation = new SmsReportValidationService(prisma, this.applications);
|
|
this.audit = new SmsAuditService(prisma, this.lifecycle, this.reportValidation);
|
|
this.signatures = new SmsSignatureService(prisma, this.reportValidation, this.audit);
|
|
this.drainage = new SmsDrainageService(prisma, this.reportValidation, this.audit);
|
|
this.templates = new SmsTemplateService(prisma, this.audit);
|
|
}
|
|
|
|
onModuleInit() {
|
|
return this.lifecycle.onModuleInit();
|
|
}
|
|
|
|
onModuleDestroy() {
|
|
return this.lifecycle.onModuleDestroy();
|
|
}
|
|
|
|
async listApplications(queryOrTenantId?: string | ApplicationListQuery) {
|
|
return this.applications.listApplications(queryOrTenantId);
|
|
}
|
|
|
|
async listApplicationsPage(query: ApplicationListQuery) {
|
|
return this.applications.listApplicationsPage(query);
|
|
}
|
|
|
|
listApplicationOptions(tenantId?: string) {
|
|
return this.applications.listApplicationOptions(tenantId);
|
|
}
|
|
|
|
async getApplication(applicationId: string, tenantId?: string) {
|
|
return this.applications.getApplication(applicationId, tenantId);
|
|
}
|
|
|
|
async getApplicationReportFields(applicationId?: string, reportType?: 'signature' | 'drainage') {
|
|
return this.applications.getApplicationReportFields(applicationId, reportType);
|
|
}
|
|
|
|
async getClientApplicationReportFields(applicationId?: string, reportType?: 'signature' | 'drainage') {
|
|
return this.applications.getClientApplicationReportFields(applicationId, reportType);
|
|
}
|
|
|
|
async createApplication(data: CreateSmsApplicationDto) {
|
|
return this.applications.createApplication(data);
|
|
}
|
|
|
|
async updateApplication(applicationId: string, data: UpdateSmsApplicationDto) {
|
|
return this.applications.updateApplication(applicationId, data);
|
|
}
|
|
|
|
async replaceApplicationRouteRules(applicationId: string, data: ReplaceApplicationRouteRulesDto) {
|
|
return this.applications.replaceApplicationRouteRules(applicationId, data);
|
|
}
|
|
|
|
async resetApplicationSecret(applicationId: string, data: StatusChangeDto = {}) {
|
|
return this.applications.resetApplicationSecret(applicationId, data);
|
|
}
|
|
|
|
async changeApplicationStatus(applicationId: string, data: StatusChangeDto) {
|
|
return this.lifecycle.changeApplicationStatus(applicationId, data);
|
|
}
|
|
|
|
async getApplicationDeactivationPreview(applicationId: string) {
|
|
return this.lifecycle.getApplicationDeactivationPreview(applicationId);
|
|
}
|
|
|
|
async listApplicationConnections(applicationId: string) {
|
|
return this.lifecycle.listApplicationConnections(applicationId);
|
|
}
|
|
|
|
async getApplicationCmppParams(applicationId: string, tenantId?: string) {
|
|
return this.applications.getApplicationCmppParams(applicationId, tenantId);
|
|
}
|
|
|
|
async recordDownstreamConnectionEvent(data: GatewayDownstreamConnectionEventDto) {
|
|
return this.lifecycle.recordDownstreamConnectionEvent(data);
|
|
}
|
|
|
|
async markTimedOutDownstreamConnections(now = new Date()) {
|
|
return this.lifecycle.markTimedOutDownstreamConnections(now);
|
|
}
|
|
|
|
async listSignatures(queryOrTenantId?: string | SignatureListQuery) {
|
|
return this.signatures.listSignatures(queryOrTenantId);
|
|
}
|
|
|
|
async listSignaturesPage(query: SignatureListQuery) {
|
|
return this.signatures.listSignaturesPage(query);
|
|
}
|
|
|
|
listSignatureOptions(tenantId?: string) {
|
|
return this.signatures.listSignatureOptions(tenantId);
|
|
}
|
|
|
|
async listClientSignatures(tenantId?: string, signatureId?: string, query: { keyword?: string; applicationId?: string; status?: string; page?: number; pageSize?: number } = {}) {
|
|
return this.signatures.listClientSignatures(tenantId, signatureId, query);
|
|
}
|
|
|
|
async getClientSignatureView(signatureId: string, tenantId?: string) {
|
|
return this.signatures.getClientSignatureView(signatureId, tenantId);
|
|
}
|
|
|
|
async getClientSignatureWorkspace(tenantId?: string, query: { keyword?: string; applicationId?: string; status?: string; page?: number; pageSize?: number } = {}) {
|
|
return this.signatures.getClientSignatureWorkspace(tenantId, query);
|
|
}
|
|
|
|
async listClientDrainageInfos(tenantId?: string, itemId?: string) {
|
|
return this.drainage.listClientDrainageInfos(tenantId, itemId);
|
|
}
|
|
|
|
async getClientDrainageInfoView(itemId: string, tenantId?: string) {
|
|
return this.drainage.getClientDrainageInfoView(itemId, tenantId);
|
|
}
|
|
|
|
async createSignature(data: CreateSmsSignatureDto, options: CreateSmsSignatureOptions = {}) {
|
|
return this.signatures.createSignature(data, options);
|
|
}
|
|
|
|
async updateSignature(signatureId: string, data: UpdateSmsSignatureDto, tenantId?: string) {
|
|
return this.signatures.updateSignature(signatureId, data, tenantId);
|
|
}
|
|
|
|
async updateClientSignature(signatureId: string, data: UpdateSmsSignatureDto, tenantId?: string) {
|
|
return this.signatures.updateClientSignature(signatureId, data, tenantId);
|
|
}
|
|
|
|
listDrainageInfos(query: DrainageInfoListQuery = {}) {
|
|
return this.drainage.listDrainageInfos(query);
|
|
}
|
|
|
|
async createDrainageInfo(signatureId: string, data: CreateSmsDrainageInfoDto, options: CreateSmsSignatureOptions = {}, tenantId?: string) {
|
|
return this.drainage.createDrainageInfo(signatureId, data, options, tenantId);
|
|
}
|
|
|
|
async updateDrainageInfo(itemId: string, data: UpdateSmsDrainageInfoDto, options: CreateSmsSignatureOptions = {}, tenantId?: string) {
|
|
return this.drainage.updateDrainageInfo(itemId, data, options, tenantId);
|
|
}
|
|
|
|
approveDrainageInfo(itemId: string, data: ReviewDto) {
|
|
return this.drainage.approveDrainageInfo(itemId, data);
|
|
}
|
|
|
|
rejectDrainageInfo(itemId: string, data: ReviewDto) {
|
|
return this.drainage.rejectDrainageInfo(itemId, data);
|
|
}
|
|
|
|
async changeDrainageInfoStatus(itemId: string, data: StatusChangeDto, tenantId?: string) {
|
|
return this.drainage.changeDrainageInfoStatus(itemId, data, tenantId);
|
|
}
|
|
|
|
createSignatureMaterial(data: CreateSignatureMaterialDto) {
|
|
return this.signatures.createSignatureMaterial(data);
|
|
}
|
|
|
|
async submitSignature(signatureId: string, tenantId?: string) {
|
|
return this.signatures.submitSignature(signatureId, tenantId);
|
|
}
|
|
|
|
listTemplates(queryOrTenantId?: string | TemplateListQuery) {
|
|
return this.templates.listTemplates(queryOrTenantId);
|
|
}
|
|
|
|
async listTemplatesPage(query: TemplateListQuery) {
|
|
return this.templates.listTemplatesPage(query);
|
|
}
|
|
|
|
listClientTemplates(tenantId: string | undefined, includeHistory = false) {
|
|
return this.templates.listClientTemplates(tenantId, includeHistory);
|
|
}
|
|
|
|
async createTemplate(data: CreateSmsTemplateDto, options: CreateSmsTemplateOptions = {}) {
|
|
return this.templates.createTemplate(data, options);
|
|
}
|
|
|
|
async updateTemplate(templateId: string, data: UpdateSmsTemplateDto, tenantId?: string) {
|
|
return this.templates.updateTemplate(templateId, data, tenantId);
|
|
}
|
|
|
|
async updateClientTemplate(templateId: string, data: UpdateSmsTemplateDto, tenantId?: string) {
|
|
return this.templates.updateClientTemplate(templateId, data, tenantId);
|
|
}
|
|
|
|
async submitTemplate(templateId: string, tenantId?: string) {
|
|
return this.templates.submitTemplate(templateId, tenantId);
|
|
}
|
|
|
|
listAuditRecords(targetType?: string, targetId?: string) {
|
|
return this.audit.listAuditRecords(targetType, targetId);
|
|
}
|
|
|
|
approveSignature(signatureId: string, data: ReviewDto) {
|
|
return this.audit.approveSignature(signatureId, data);
|
|
}
|
|
|
|
rejectSignature(signatureId: string, data: ReviewDto) {
|
|
return this.audit.rejectSignature(signatureId, data);
|
|
}
|
|
|
|
approveTemplate(templateId: string, data: ReviewDto) {
|
|
return this.audit.approveTemplate(templateId, data);
|
|
}
|
|
|
|
rejectTemplate(templateId: string, data: ReviewDto) {
|
|
return this.audit.rejectTemplate(templateId, data);
|
|
}
|
|
|
|
async changeSignatureStatus(signatureId: string, data: StatusChangeDto, tenantId?: string) {
|
|
return this.audit.changeSignatureStatus(signatureId, data, tenantId);
|
|
}
|
|
|
|
async changeTemplateStatus(templateId: string, data: StatusChangeDto, tenantId?: string) {
|
|
return this.audit.changeTemplateStatus(templateId, data, tenantId);
|
|
}
|
|
|
|
/** Preserves the existing private test seam while the implementation lives in the lifecycle domain. */
|
|
private runApplicationDisableScan() {
|
|
return this.lifecycle.runApplicationDisableScan();
|
|
}
|
|
}
|