Files
fabric_trade_server/src/settings/settings.service.ts
T
mohmdsdgandCursor 9f0422c1db Add NestJS fabric trade API with Prisma and Docker
Provide backend for admin and user apps with Postgres, migrations, seed data, and docker-compose for LiteSpeed reverse-proxy deployment.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-05 20:26:39 +03:30

78 lines
2.5 KiB
TypeScript

import { Injectable } from '@nestjs/common';
import { PrismaService } from '../prisma/prisma.service';
import { UpdateSettingsDto } from './dto/settings.dto';
@Injectable()
export class SettingsService {
constructor(private readonly prisma: PrismaService) {}
async get() {
const settings = await this.ensureDefaults();
return this.map(settings);
}
async update(dto: UpdateSettingsDto) {
await this.ensureDefaults();
const settings = await this.prisma.systemSettings.update({
where: { id: 'default' },
data: {
maxMeteragePerInvoice: dto.maxMeteragePerInvoice,
cashInvoiceValidityHours: dto.cashInvoiceValidityHours,
defaultSettlementCheck: dto.defaultSettlementCheck,
defaultSettlementCash: dto.defaultSettlementCash,
smsOrderRegistered: dto.smsOrderRegistered,
smsPaymentReminder: dto.smsPaymentReminder,
smsCheckReview: dto.smsCheckReview,
smsShippingUpdate: dto.smsShippingUpdate,
supportPhone:
dto.supportPhone === undefined
? undefined
: dto.supportPhone?.trim() || null,
supportEmail:
dto.supportEmail === undefined
? undefined
: dto.supportEmail?.trim() || null,
},
});
return this.map(settings);
}
private async ensureDefaults() {
return this.prisma.systemSettings.upsert({
where: { id: 'default' },
create: { id: 'default' },
update: {},
});
}
private map(settings: {
id: string;
maxMeteragePerInvoice: number;
cashInvoiceValidityHours: number;
defaultSettlementCheck: boolean;
defaultSettlementCash: boolean;
smsOrderRegistered: boolean;
smsPaymentReminder: boolean;
smsCheckReview: boolean;
smsShippingUpdate: boolean;
supportPhone: string | null;
supportEmail: string | null;
updatedAt: Date;
}) {
return {
id: settings.id,
maxMeteragePerInvoice: settings.maxMeteragePerInvoice,
cashInvoiceValidityHours: settings.cashInvoiceValidityHours,
defaultSettlementCheck: settings.defaultSettlementCheck,
defaultSettlementCash: settings.defaultSettlementCash,
smsOrderRegistered: settings.smsOrderRegistered,
smsPaymentReminder: settings.smsPaymentReminder,
smsCheckReview: settings.smsCheckReview,
smsShippingUpdate: settings.smsShippingUpdate,
supportPhone: settings.supportPhone,
supportEmail: settings.supportEmail,
updatedAt: settings.updatedAt.toISOString(),
};
}
}