Files
hereconnect/services/message-delivery-method-web-push/src/serviceSeqTracker.ts
T

44 lines
1013 B
TypeScript
Raw Normal View History

2024-11-27 15:57:11 +02:00
import { serviceDb, type ServiceDoc } from "./dbs";
export class ServiceSeqTracker {
/**
* @param _id
* @constructor
*/
static async Init(_id: string) {
const serviceDoc = await serviceDb.get(_id).catch((error) => {
2024-11-27 15:57:11 +02:00
if (error.name === "not_found") {
return {
_id,
2024-11-27 15:57:11 +02:00
lastSeq: "0",
};
}
throw error; // Re-throw other errors
});
return new ServiceSeqTracker(serviceDoc);
}
2024-11-27 15:57:11 +02:00
private constructor(private serviceDoc: ServiceDoc) {}
2024-11-27 15:57:11 +02:00
get lastSeq() {
2024-11-27 15:57:11 +02:00
return this.serviceDoc.lastSeq;
}
checkNextSeq(seq: number | string) {
if (!this.serviceDoc) {
}
2024-11-27 15:57:11 +02:00
const next = parseInt(seq as string, 10);
const current = parseInt(this.serviceDoc.lastSeq as string, 10);
if (next < current) {
throw new Error(
`Sequence number is too old: ${seq} (${next} < ${current})`,
);
}
}
saveSeq(seq: number | string) {
this.serviceDoc.lastSeq = seq;
return serviceDb.put(this.serviceDoc);
}
}