create qr-codes by tg bot
This commit is contained in:
@@ -0,0 +1 @@
|
||||
dist
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "@hereconnect/lib-service-seq-tracker",
|
||||
"version": "1.0.0",
|
||||
"main": "src/serviceSeqTracker.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./src/serviceSeqTracker.ts",
|
||||
"default": "./src/serviceSeqTracker.ts"
|
||||
}
|
||||
},
|
||||
"files": ["src/**/*"],
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"lint": "tsc --noEmit src/serviceSeqTracker.ts",
|
||||
"build": "pnpm run lint"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "~5.6.3",
|
||||
"@types/node": "^20.17.6",
|
||||
"@types/pouchdb-core": "^7.0.15"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
import { type defaults as PouchDB } from "pouchdb-core";
|
||||
|
||||
export interface ServiceSeqTrackerDocument {
|
||||
lastSeq: string | number;
|
||||
}
|
||||
|
||||
export type ServiceSeqTrackerDatabase =
|
||||
PouchDB.Database<ServiceSeqTrackerDocument>;
|
||||
|
||||
export class ServiceSeqTracker {
|
||||
/**
|
||||
* @param _id
|
||||
* @param serviceSeqTrackerDb
|
||||
* @constructor
|
||||
*/
|
||||
static async Init(
|
||||
_id: string,
|
||||
serviceSeqTrackerDb: ServiceSeqTrackerDatabase,
|
||||
) {
|
||||
const doc = await serviceSeqTrackerDb.get(_id).catch((error) => {
|
||||
if (error.name === "not_found") {
|
||||
return {
|
||||
_id,
|
||||
lastSeq: "0",
|
||||
};
|
||||
}
|
||||
throw error; // Re-throw other errors
|
||||
});
|
||||
return new ServiceSeqTracker(doc, serviceSeqTrackerDb);
|
||||
}
|
||||
|
||||
private constructor(
|
||||
private doc: ServiceSeqTrackerDocument,
|
||||
private serviceSeqTrackerDb: ServiceSeqTrackerDatabase,
|
||||
) {}
|
||||
|
||||
get lastSeq() {
|
||||
return this.doc.lastSeq;
|
||||
}
|
||||
|
||||
checkNextSeq(seq: number | string) {
|
||||
if (!this.doc) {
|
||||
}
|
||||
const next = parseInt(seq as string, 10);
|
||||
const current = parseInt(this.doc.lastSeq as string, 10);
|
||||
if (next < current) {
|
||||
throw new Error(
|
||||
`Sequence number is too old: ${seq} (${next} < ${current})`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
saveSeq(seq: number | string) {
|
||||
this.doc.lastSeq = seq;
|
||||
return this.serviceSeqTrackerDb.put(this.doc);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"declaration": true,
|
||||
"emitDeclarationOnly": true,
|
||||
"outDir": "./dist",
|
||||
"strict": true,
|
||||
"types": ["node"]
|
||||
},
|
||||
"include": ["index.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user