crunch-node/schema.sql

123 lines
4.4 KiB
SQL

-- SQL Schema for Crunch
-- Note all dates must be in epoch seconds to allow for sqlite comparison
-- User table
DROP TABLE IF EXISTS "users";
CREATE TABLE "users" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"username" TEXT NOT NULL UNIQUE,
"password" TEXT NOT NULL, -- sha256 hash of plaintext password + salt
"salt" TEXT NOT NULL, -- salt that is appended to the password
"email" TEXT UNIQUE,
"displayName" TEXT,
"createDate" TEXT
);
-- Content Tables
DROP TABLE IF EXISTS "posts";
CREATE TABLE "posts" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"title" TEXT, -- The title of the post
"slug" TEXT NOT NULL, -- A slug form of the title or id
"markdown" TEXT NOT NULL, -- The post content in markdown format
"postDate" INTEGER, -- The date that the post should go live and be sorted by
"updatedDate" INTEGER, -- The date that the post was last updated
"createDate" INTEGER NOT NULL, -- The date the post was created
"lastBuildDate" INTEGER, -- The date this post was last built
"lastUpload" INTEGER -- The date the post was last uploaded
);
DROP TABLE IF EXISTS "galleries";
CREATE TABLE "galleries" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"title" TEXT, -- The title of the gallery
"slug" TEXT NOT NULL UNIQUE, -- A slug form of the title or id
"description" TEXT NOT NULL, -- The gallery description in markdown format
"postDate" INTEGER, -- The date that the gallery should go live and be sorted by
"updatedDate" INTEGER, -- The date that the gallery was last updated
"createDate" INTEGER NOT NULL, -- The date the gallery was created
"lastBuildDate" INTEGER, -- The date this gallery was last built
"lastUpload" INTEGER -- The date the gallery was last uploaded
);
DROP TABLE IF EXISTS "photos";
CREATE TABLE "photos" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"path" TEXT NOT NULL, -- The path of the photo location on disk
"title" TEXT, -- The title of the photo
"slug" TEXT NOT NULL UNIQUE, -- A slug form of the title or id
"description" TEXT, -- The photo description in markdown format
"photoDate" INTEGER, -- The date that the photo should go live and be sorted by
"updatedDate" INTEGER, -- The date that the photo was last updated
"createDate" INTEGER NOT NULL, -- The date the photo was created
"lastBuildDate" INTEGER, -- The date this photo was last built
"lastUpload" INTEGER -- The date the photo was last uploaded
);
DROP TABLE IF EXISTS "galleryPhotos";
CREATE TABLE "galleryPhotos" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"galleryId" INTEGER NOT NULL, -- the id of the gallery
"photoId" INTEGER NOT NULL, -- the id of the photo
FOREIGN KEY(galleryId) REFERENCES galleries(id),
FOREIGN KEY(photoId) REFERENCES photos(id)
);
DROP TABLE IF EXISTS "categories";
CREATE TABLE "categories" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"name" TEXT NOT NULL, -- The name of this category
"slug" TEXT NOT NULL UNIQUE, -- A slug form of the name or id
"description" TEXT, -- A brief description of the category in markdown
"createDate" INTEGER NOT NULL -- The date the category was created
);
INSERT INTO "categories" VALUES (1, "Uncategorized", "uncategorized", "Uncategorized posts", (strftime('%s','now')*1000));
DROP TABLE IF EXISTS "categoryPosts";
CREATE TABLE "categoryPosts" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"categoryId" INTEGER NOT NULL, -- the id of the category
"postId" INTEGER NOT NULL, -- the id of the post
FOREIGN KEY(categoryId) REFERENCES categories(id),
FOREIGN KEY(postId) REFERENCES posts(id)
);
DROP TABLE IF EXISTS "tags";
CREATE TABLE "tags" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"name" TEXT NOT NULL, -- The name of this tag
"slug" TEXT NOT NULL UNIQUE, -- A slug form of the name or id
"createDate" INTEGER NOT NULL -- The date the tag was created
);
DROP TABLE IF EXISTS "postTags";
CREATE TABLE "postTags" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"postId" INTEGER NOT NULL, -- the id of the post
"tagId" INTEGER NOT NULL, -- the id of the tag
FOREIGN KEY(postId) REFERENCES posts(id),
FOREIGN KEY(tagId) REFERENCES tags(id)
);
DROP TABLE IF EXISTS "photoTags";
CREATE TABLE "photoTags" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"photoId" INTEGER NOT NULL, -- the id of the photo
"tagId" INTEGER NOT NULL, -- the id of the tag
FOREIGN KEY(photoId) REFERENCES photos(id),
FOREIGN KEY(tagId) REFERENCES tags(id)
);