Убран лишний код. Скорректированы docker и package файлы. Переработано взаимодействие с бд - упрощена логика. #1
@@ -25,7 +25,12 @@ export class IngestService {
|
|||||||
|
|
||||||
|
|
|||||||
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 {
|
|||||||
}
|
}
|
||||||
|
NBizyaev
commented
это избыточная валидация, это избыточная валидация,
давай считать, что мы в 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.');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user
так как у createdAt на уровне БД установлено автоприсвоение NOW, то достаточно
(только проверь)