-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathnote.server.ts
61 lines (56 loc) · 1.48 KB
/
note.server.ts
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
import type { Note } from "~/db.server";
import { e, client } from "~/db.server";
export function User(id: string) {
return e.select(e.User, (user) => ({
filter: e.op(user.id, "=", e.uuid(id)),
}));
}
export async function getNote(params: { id: string; userId: string }) {
const userNotes = e.select(e.Note, (note) => ({
filter: e.op(note.user, "=", User(params.userId)),
}));
const note = e
.select(userNotes, (note) => ({
...e.Note["*"],
filter: e.op(note.id, "=", e.uuid(params.id)),
}))
.run(client);
return note;
}
export async function getNoteListItems(params: { userId: string }) {
const notes = await e
.select(e.Note, (note) => ({
id: true,
title: true,
order_by: { expression: note.createdAt, direction: e.DESC },
filter: e.op(note.user, "=", User(params.userId)),
}))
.run(client);
return notes;
}
export async function createNote({
body,
title,
userId,
}: Pick<Note, "body" | "title"> & {
userId: string;
}) {
const insertNote = e.insert(e.Note, {
title,
body,
user: User(userId),
});
return await e.select(insertNote, () => ({ ...e.Note["*"] })).run(client);
}
export async function deleteNote(params: { id: string; userId: string }) {
const deleted = await e
.delete(e.Note, (note) => ({
filter: e.op(
e.op(note.id, "=", e.uuid(params.id)),
"and",
e.op(note.user, "=", User(params.userId))
),
}))
.run(client);
return deleted.length;
}