forked from
haetae.tngl.sh/fanfic-atproto
personal fork for experimenting
1import { column, defineDb, defineTable, NOW } from 'astro:db';
2
3const Users = defineTable({
4 columns: {
5 id: column.number({ primaryKey: true }),
6 nickname: column.text({ unique: true, optional: true }),
7 userDid: column.text({ name: "user_did", unique: true }),
8 joinedAt: column.date({ name: "joined_at", default: NOW }),
9 },
10 indexes: [
11 { on: ["userDid"], unique: true },
12 ],
13});
14
15const Works = defineTable({
16 columns: {
17 id: column.number({ primaryKey: true }),
18 uri: column.text({ unique: true, optional: true }),
19 slug: column.text({ unique: true }),
20 title: column.text(),
21 author: column.text({ references: () => Users.columns.userDid }),
22 content: column.text({ multiline: true }),
23 tags: column.json(),
24 createdAt: column.date({ name: "created_at", default: NOW }),
25 updatedAt: column.date({ name: "updated_at", optional: true }),
26 },
27 indexes: [
28 { on: ["slug", "createdAt"], unique: true },
29 { on: ["uri", "createdAt"], unique: true },
30 ],
31});
32
33const Tags = defineTable({
34 columns: {
35 id: column.number({ primaryKey: true }),
36 type: column.text({ enum: ["character", "relationship", "series", "warnings"] }),
37 label: column.text(),
38 },
39});
40
41export default defineDb({
42 tables: {
43 Users,
44 Works,
45 },
46});
47