Убран лишний код. Скорректированы docker и package файлы. Переработано взаимодействие с бд - упрощена логика. #1

Merged
APervov merged 12 commits from dev into main 2026-07-01 19:07:59 +00:00
Showing only changes of commit 8819adf42b - Show all commits

View File

@@ -25,7 +25,12 @@ export class IngestService {

так как у createdAt на уровне БД установлено автоприсвоение NOW, то достаточно

        INSERT INTO current (edge, tag, value, "updatedAt")
        VALUES ($1, $2, $3, NOW())
        ON CONFLICT (edge, tag)
        DO UPDATE SET
          value = $3,
          "updatedAt" = NOW()

(только проверь)

так как у createdAt на уровне БД установлено автоприсвоение NOW, то достаточно ```sql INSERT INTO current (edge, tag, value, "updatedAt") VALUES ($1, $2, $3, NOW()) ON CONFLICT (edge, tag) DO UPDATE SET value = $3, "updatedAt" = NOW() ``` (только проверь)
this.assertBatchSize(points.length); this.assertBatchSize(points.length);
const normalized = points.map((point) => this.normalizePoint(point)); const normalized: NormalizedPoint[] = points.map((point) => ({
edge: point.edge,
tag: point.tag,
value: point.value,
time: new Date((point.time ?? point.timestamp) as string | number),
}));
await this.db.query( await this.db.query(
` `
@@ -88,34 +93,4 @@ export class IngestService {
} }

это избыточная валидация,
давай считать, что мы в mqtt-ingest всё делаем хорошо (передаём время нормально сразу)
а если мы делаем там не хорошо - то это достойно возникновения исключения

это избыточная валидация, давай считать, что мы в mqtt-ingest всё делаем хорошо (передаём время нормально сразу) а если мы делаем там не хорошо - то это достойно возникновения исключения
} }
/** Приводит входной DTO к нормализованному виду для вставки в history. */
private normalizePoint(point: IngestPointDto): NormalizedPoint {
const time = this.parsePointTime(point);
return {
edge: point.edge,
tag: point.tag,
value: point.value,
time,
};
}
/** Принимает ISO-время или миллисекунды Unix и отклоняет точки без валидного времени. */
private parsePointTime(point: IngestPointDto): Date {
if (point.time) {
const date = new Date(point.time);
if (!Number.isNaN(date.getTime())) {
return date;
}
}
if (point.timestamp !== undefined) {
const date = new Date(point.timestamp);
if (!Number.isNaN(date.getTime())) {
return date;
}
}
throw new BadRequestException('Each point must contain valid time or timestamp.');
}
} }