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