131 lines
2.5 KiB
TypeScript
131 lines
2.5 KiB
TypeScript
|
const Redis = require("ioredis");
|
||
|
const redis = new Redis(process.env.REDIS_URI);
|
||
|
|
||
|
type WhatsappData = {
|
||
|
whatsappId: string;
|
||
|
contactId: string;
|
||
|
identifier: string;
|
||
|
value?: string;
|
||
|
};
|
||
|
|
||
|
export async function set(key: string, value: string) {
|
||
|
await redis.set(key, JSON.stringify(value));
|
||
|
}
|
||
|
|
||
|
export async function get(key: string) {
|
||
|
const value: any = await redis.get(key);
|
||
|
return JSON.parse(value);
|
||
|
}
|
||
|
|
||
|
export async function createObject({
|
||
|
whatsappId,
|
||
|
contactId,
|
||
|
identifier,
|
||
|
value
|
||
|
}: WhatsappData) {
|
||
|
const key = `whatsappId:${whatsappId}:contactId:${contactId}:identifier:${identifier}`;
|
||
|
const result = await redis.hmset(
|
||
|
key,
|
||
|
"whatsappId",
|
||
|
whatsappId,
|
||
|
"contactId",
|
||
|
contactId,
|
||
|
"identifier",
|
||
|
identifier,
|
||
|
"value",
|
||
|
value
|
||
|
);
|
||
|
|
||
|
await redis.expire(key, 300);
|
||
|
}
|
||
|
|
||
|
export async function updateObject({
|
||
|
whatsappId,
|
||
|
contactId,
|
||
|
identifier,
|
||
|
value
|
||
|
}: WhatsappData) {
|
||
|
const key = `whatsappId:${whatsappId}:contactId:${contactId}:identifier:${identifier}`;
|
||
|
|
||
|
await redis.hset(key, "value", value);
|
||
|
}
|
||
|
|
||
|
export async function findObject(
|
||
|
whatsappId: string,
|
||
|
contactId: string,
|
||
|
identifier: string
|
||
|
) {
|
||
|
const key = `whatsappId:${whatsappId}:contactId:${contactId}:identifier:${identifier}`;
|
||
|
const result = await redis.hmget(
|
||
|
key,
|
||
|
"whatsappId",
|
||
|
"contactId",
|
||
|
"identifier",
|
||
|
"value"
|
||
|
);
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
export async function deleteObject(
|
||
|
whatsappId: string,
|
||
|
contactId: string,
|
||
|
identifier: string
|
||
|
) {
|
||
|
const key = `whatsappId:${whatsappId}:contactId:${contactId}:identifier:${identifier}`;
|
||
|
const deletedCount = await redis.del(key);
|
||
|
}
|
||
|
|
||
|
export async function deleteKeysWithPattern(
|
||
|
whatsappId: string,
|
||
|
contactId: string
|
||
|
) {
|
||
|
const pattern = `whatsappId:${whatsappId}:contactId:${contactId}:*`;
|
||
|
|
||
|
let cursor = "0";
|
||
|
|
||
|
do {
|
||
|
const [newCursor, keys] = await redis.scan(
|
||
|
cursor,
|
||
|
"MATCH",
|
||
|
pattern,
|
||
|
"COUNT",
|
||
|
"100"
|
||
|
);
|
||
|
|
||
|
for (const key of keys) {
|
||
|
await redis.del(key);
|
||
|
}
|
||
|
|
||
|
cursor = newCursor;
|
||
|
} while (cursor !== "0");
|
||
|
}
|
||
|
|
||
|
export async function getHashesWithPattern(
|
||
|
whatsappId: string,
|
||
|
contactId: string
|
||
|
) {
|
||
|
const pattern = `whatsappId:${whatsappId}:contactId:${contactId}:*`;
|
||
|
|
||
|
let cursor = "0";
|
||
|
const hashes = [];
|
||
|
|
||
|
do {
|
||
|
const [newCursor, keys] = await redis.scan(
|
||
|
cursor,
|
||
|
"MATCH",
|
||
|
pattern,
|
||
|
"COUNT",
|
||
|
"100"
|
||
|
);
|
||
|
|
||
|
for (const key of keys) {
|
||
|
const hash = await redis.hgetall(key);
|
||
|
hashes.push(hash);
|
||
|
}
|
||
|
|
||
|
cursor = newCursor;
|
||
|
} while (cursor !== "0");
|
||
|
|
||
|
return hashes;
|
||
|
}
|