80 lines
2.8 KiB
MySQL
80 lines
2.8 KiB
MySQL
|
|
CREATE TABLE `post_tags` (
|
||
|
|
`post_id` text NOT NULL,
|
||
|
|
`tag_id` text NOT NULL,
|
||
|
|
PRIMARY KEY(`post_id`, `tag_id`),
|
||
|
|
FOREIGN KEY (`post_id`) REFERENCES `posts`(`id`) ON UPDATE no action ON DELETE cascade,
|
||
|
|
FOREIGN KEY (`tag_id`) REFERENCES `tags`(`id`) ON UPDATE no action ON DELETE cascade
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE `posts` (
|
||
|
|
`id` text PRIMARY KEY NOT NULL,
|
||
|
|
`slug` text NOT NULL,
|
||
|
|
`title` text NOT NULL,
|
||
|
|
`summary` text DEFAULT '' NOT NULL,
|
||
|
|
`body_md` text NOT NULL,
|
||
|
|
`author_id` text,
|
||
|
|
`published_at` integer,
|
||
|
|
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
||
|
|
`updated_at` integer DEFAULT (unixepoch()) NOT NULL,
|
||
|
|
FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE set null
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX `posts_slug_unique` ON `posts` (`slug`);--> statement-breakpoint
|
||
|
|
CREATE TABLE `project_links` (
|
||
|
|
`id` text PRIMARY KEY NOT NULL,
|
||
|
|
`project_id` text NOT NULL,
|
||
|
|
`kind` text NOT NULL,
|
||
|
|
`label` text NOT NULL,
|
||
|
|
`url` text NOT NULL,
|
||
|
|
`position` integer DEFAULT 0 NOT NULL,
|
||
|
|
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE cascade
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE `project_tags` (
|
||
|
|
`project_id` text NOT NULL,
|
||
|
|
`tag_id` text NOT NULL,
|
||
|
|
PRIMARY KEY(`project_id`, `tag_id`),
|
||
|
|
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE cascade,
|
||
|
|
FOREIGN KEY (`tag_id`) REFERENCES `tags`(`id`) ON UPDATE no action ON DELETE cascade
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE `projects` (
|
||
|
|
`id` text PRIMARY KEY NOT NULL,
|
||
|
|
`slug` text NOT NULL,
|
||
|
|
`title` text NOT NULL,
|
||
|
|
`summary` text NOT NULL,
|
||
|
|
`body_md` text DEFAULT '' NOT NULL,
|
||
|
|
`cover_url` text,
|
||
|
|
`author_id` text,
|
||
|
|
`status` text DEFAULT 'published' NOT NULL,
|
||
|
|
`created_at` integer DEFAULT (unixepoch()) NOT NULL,
|
||
|
|
`updated_at` integer DEFAULT (unixepoch()) NOT NULL,
|
||
|
|
FOREIGN KEY (`author_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE set null
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX `projects_slug_unique` ON `projects` (`slug`);--> statement-breakpoint
|
||
|
|
CREATE TABLE `sessions` (
|
||
|
|
`id` text PRIMARY KEY NOT NULL,
|
||
|
|
`user_id` text NOT NULL,
|
||
|
|
`expires_at` integer NOT NULL,
|
||
|
|
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE TABLE `tags` (
|
||
|
|
`id` text PRIMARY KEY NOT NULL,
|
||
|
|
`name` text NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX `tags_name_unique` ON `tags` (`name`);--> statement-breakpoint
|
||
|
|
CREATE TABLE `users` (
|
||
|
|
`id` text PRIMARY KEY NOT NULL,
|
||
|
|
`gitea_id` integer NOT NULL,
|
||
|
|
`username` text NOT NULL,
|
||
|
|
`name` text,
|
||
|
|
`email` text,
|
||
|
|
`avatar_url` text,
|
||
|
|
`role` text DEFAULT 'editor' NOT NULL,
|
||
|
|
`created_at` integer DEFAULT (unixepoch()) NOT NULL
|
||
|
|
);
|
||
|
|
--> statement-breakpoint
|
||
|
|
CREATE UNIQUE INDEX `users_gitea_id_unique` ON `users` (`gitea_id`);
|