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) => { if (error.name === "not_found") { return { _id, lastSeq: "0", }; } throw error; // Re-throw other errors }); return new ServiceSeqTracker(serviceDoc); } private constructor(private serviceDoc: ServiceDoc) {} get lastSeq() { return this.serviceDoc.lastSeq; } checkNextSeq(seq: number | string) { if (!this.serviceDoc) { } 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); } }