|
1 | 1 | import { createStorage } from "unstorage"; |
2 | 2 | import fsLiteDriver from "unstorage/drivers/fs-lite"; |
3 | 3 |
|
4 | | -type User = { |
| 4 | +interface User { |
5 | 5 | id: number; |
6 | | - username: string; |
7 | | - password: string; |
8 | | -}; |
| 6 | + email: string; |
| 7 | + password?: string; |
| 8 | +} |
9 | 9 |
|
10 | | -const storage = createStorage({ |
11 | | - driver: fsLiteDriver({ |
12 | | - base: "./.data" |
13 | | - }) |
14 | | -}); |
15 | | -storage.setItem("users:data", [{ id: 0, username: "kody", password: "twixrox" }]); |
16 | | -storage.setItem("users:counter", 1); |
| 10 | +const storage = createStorage({ driver: fsLiteDriver({ base: "./.data" }) }); |
17 | 11 |
|
18 | | -export const db = { |
19 | | - user: { |
20 | | - async create({ data }: { data: { username: string; password: string } }) { |
21 | | - const [{ value: users }, { value: index }] = await storage.getItems(["users:data", "users:counter"]); |
22 | | - const user = { ...data, id: index as number }; |
23 | | - await Promise.all([ |
24 | | - storage.setItem("users:data", [...(users as User[]), user]), |
25 | | - storage.setItem("users:counter", index as number + 1) |
26 | | - ]); |
27 | | - return user; |
28 | | - }, |
29 | | - async findUnique({ where: { username = undefined, id = undefined } }: { where: { username?: string; id?: number } }) { |
30 | | - const users = await storage.getItem("users:data") as User[]; |
31 | | - if (id !== undefined) { |
32 | | - return users.find(user => user.id === id); |
33 | | - } else { |
34 | | - return users.find(user => user.username === username); |
35 | | - } |
36 | | - } |
37 | | - } |
38 | | -}; |
| 12 | +export async function createUser(data: Pick<User, "email" | "password">) { |
| 13 | + const users = (await storage.getItem<User[]>("users:data")) ?? []; |
| 14 | + const counter = (await storage.getItem<number>("users:counter")) ?? 1; |
| 15 | + const user: User = { id: counter, ...data }; |
| 16 | + await Promise.all([ |
| 17 | + storage.setItem("users:data", [...users, user]), |
| 18 | + storage.setItem("users:counter", counter + 1) |
| 19 | + ]); |
| 20 | + return user; |
| 21 | +} |
| 22 | + |
| 23 | +export async function findUser({ email, id }: { email?: string; id?: number }) { |
| 24 | + const users = (await storage.getItem<User[]>("users:data")) ?? []; |
| 25 | + if (id) return users.find(u => u.id === id); |
| 26 | + if (email) return users.find(u => u.email === email); |
| 27 | + return undefined; |
| 28 | +} |
0 commit comments