rwadurian/backend/services/admin-service/src/pre-planting/pre-planting-config.service.ts

111 lines
2.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Injectable, Logger } from '@nestjs/common';
import { PrismaService } from '../infrastructure/persistence/prisma/prisma.service';
@Injectable()
export class PrePlantingConfigService {
private readonly logger = new Logger(PrePlantingConfigService.name);
constructor(private readonly prisma: PrismaService) {}
async getConfig(): Promise<{
isActive: boolean;
activatedAt: Date | null;
}> {
const config = await this.prisma.prePlantingConfig.findFirst({
orderBy: { updatedAt: 'desc' },
});
if (!config) {
return { isActive: false, activatedAt: null };
}
return {
isActive: config.isActive,
activatedAt: config.activatedAt,
};
}
/**
* 获取预种协议文本(从 system_configs 表读取)
*/
async getAgreement(): Promise<string | null> {
const config = await this.prisma.systemConfig.findUnique({
where: { key: 'pre_planting_agreement' },
});
return config?.value ?? null;
}
/**
* 更新预种协议文本upsert 到 system_configs 表)
*/
async updateAgreement(text: string, updatedBy?: string): Promise<{ text: string }> {
await this.prisma.systemConfig.upsert({
where: { key: 'pre_planting_agreement' },
create: {
key: 'pre_planting_agreement',
value: text,
description: '预种计划购买协议文本',
updatedBy: updatedBy || null,
},
update: {
value: text,
updatedBy: updatedBy || null,
},
});
this.logger.log(`[PRE-PLANTING] Agreement text updated by ${updatedBy || 'unknown'}`);
return { text };
}
async updateConfig(
isActive: boolean,
updatedBy?: string,
): Promise<{
isActive: boolean;
activatedAt: Date | null;
}> {
const existing = await this.prisma.prePlantingConfig.findFirst({
orderBy: { updatedAt: 'desc' },
});
const activatedAt = isActive ? new Date() : null;
if (existing) {
const updated = await this.prisma.prePlantingConfig.update({
where: { id: existing.id },
data: {
isActive,
activatedAt: isActive ? (existing.activatedAt || activatedAt) : existing.activatedAt,
updatedBy: updatedBy || null,
},
});
this.logger.log(
`[PRE-PLANTING] Config updated: isActive=${updated.isActive} by ${updatedBy || 'unknown'}`,
);
return {
isActive: updated.isActive,
activatedAt: updated.activatedAt,
};
}
const created = await this.prisma.prePlantingConfig.create({
data: {
isActive,
activatedAt,
updatedBy: updatedBy || null,
},
});
this.logger.log(
`[PRE-PLANTING] Config created: isActive=${created.isActive} by ${updatedBy || 'unknown'}`,
);
return {
isActive: created.isActive,
activatedAt: created.activatedAt,
};
}
}