-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstore.ts
More file actions
63 lines (50 loc) · 1.71 KB
/
store.ts
File metadata and controls
63 lines (50 loc) · 1.71 KB
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
import { eq } from "drizzle-orm";
import { SqlContext } from "../../db/db.js";
import { CreateEvent, EventId, EventsQueryFilter, UpdateEvent } from "./schema.js";
import { eventsTable } from "../../db/schema.js";
export const eventStore = {
async create({ db, data }: { db: SqlContext; data: CreateEvent }) {
const [newEvent] = await db.insert(eventsTable).values(data).returning();
return newEvent;
},
async update({ db, data }: { db: SqlContext; data: UpdateEvent }) {
const { id, ...updateData } = data;
const [updatedEvent] = await db
.update(eventsTable)
.set({
...updateData,
})
.where(eq(eventsTable.id, id))
.returning();
return updatedEvent;
},
async delete({ db, data }: { db: SqlContext; data: EventId }) {
const { id } = data;
const result = await db.delete(eventsTable).where(eq(eventsTable.id, id)).returning();
return result[0];
},
async get({ db, filters }: { db: SqlContext; filters: EventsQueryFilter }) {
const { page, limit, state } = filters;
const offset = (page - 1) * limit;
return db
.select()
.from(eventsTable)
.where(state ? eq(eventsTable.state, state) : undefined)
.limit(limit)
.offset(offset)
.orderBy(eventsTable.date);
},
async findById({ db, data }: { db: SqlContext; data: EventId }) {
const { id } = data;
const result = await db.select().from(eventsTable).where(eq(eventsTable.id, id));
return result[0];
},
async findByIdForUpdate({ tx, data }: { tx: SqlContext; data: EventId }) {
const [event] = await tx
.select()
.from(eventsTable)
.where(eq(eventsTable.id, data.id))
.for("update");
return event;
},
};