Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | 26x 3x 2x 2x 2x 2x 3x 3x 1x 3x 3x 3x 3x 3x | import { eq, sql, asc, gt } from "drizzle-orm";
import type { DrizzleD1Database } from "drizzle-orm/d1";
import * as schema from "../../db/schema";
import type { WaMessage, NewWaMessage } from "../../db/schema";
export class WaMessagesDal {
constructor(private db: DrizzleD1Database<typeof schema>) {}
async findByConversationId(
conversationId: number,
offset = 0,
limit = 50,
): Promise<WaMessage[]> {
return this.db
.select()
.from(schema.waMessages)
.where(eq(schema.waMessages.conversationId, conversationId))
.orderBy(asc(schema.waMessages.dateCreated))
.limit(limit)
.offset(offset);
}
async findByWamid(wamid: string): Promise<WaMessage | undefined> {
const result = await this.db
.select()
.from(schema.waMessages)
.where(eq(schema.waMessages.wamid, wamid))
.limit(1);
return result[0];
}
async create(data: NewWaMessage): Promise<WaMessage> {
const result = await this.db
.insert(schema.waMessages)
.values(data)
.returning();
return result[0];
}
async updateStatus(
wamid: string,
status: string,
errorCode?: string,
): Promise<void> {
const updateData: Record<string, unknown> = {
status,
dateUpdated: new Date(),
};
if (errorCode) {
updateData.errorCode = errorCode;
}
await this.db
.update(schema.waMessages)
.set(updateData)
.where(eq(schema.waMessages.wamid, wamid));
}
async countToday(): Promise<number> {
const todayStart = new Date();
todayStart.setHours(0, 0, 0, 0);
const result = await this.db
.select({ count: sql<number>`count(*)` })
.from(schema.waMessages)
.where(gt(schema.waMessages.dateCreated, todayStart));
return result[0]?.count ?? 0;
}
}
|