WIP on uploads (#2)
- Add data types and fields - Implement in both RethinkDB and SQLite - Add uploads to backup/restore - Add empty upload folder to project - Add indexes to SQLite tables (#15)
This commit is contained in:
@@ -36,6 +36,7 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
member _.TagMap = SQLiteTagMapData conn
|
||||
member _.Theme = SQLiteThemeData conn
|
||||
member _.ThemeAsset = SQLiteThemeAssetData conn
|
||||
member _.Upload = SQLiteUploadData conn
|
||||
member _.WebLog = SQLiteWebLogData conn
|
||||
member _.WebLogUser = SQLiteWebLogUserData conn
|
||||
|
||||
@@ -48,8 +49,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating theme table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE theme (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE theme (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
version TEXT NOT NULL)"""
|
||||
@@ -58,8 +59,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating theme_template table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE theme_template (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE theme_template (
|
||||
theme_id TEXT NOT NULL REFERENCES theme (id),
|
||||
name TEXT NOT NULL,
|
||||
template TEXT NOT NULL,
|
||||
@@ -69,8 +70,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating theme_asset table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE theme_asset (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE theme_asset (
|
||||
theme_id TEXT NOT NULL REFERENCES theme (id),
|
||||
path TEXT NOT NULL,
|
||||
updated_on TEXT NOT NULL,
|
||||
@@ -83,10 +84,11 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating web_log table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE web_log (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE web_log (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
slug TEXT NOT NULL,
|
||||
subtitle TEXT,
|
||||
default_page TEXT NOT NULL,
|
||||
posts_per_page INTEGER NOT NULL,
|
||||
@@ -94,30 +96,33 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
url_base TEXT NOT NULL,
|
||||
time_zone TEXT NOT NULL,
|
||||
auto_htmx INTEGER NOT NULL DEFAULT 0,
|
||||
uploads TEXT NOT NULL,
|
||||
feed_enabled INTEGER NOT NULL DEFAULT 0,
|
||||
feed_name TEXT NOT NULL,
|
||||
items_in_feed INTEGER,
|
||||
category_enabled INTEGER NOT NULL DEFAULT 0,
|
||||
tag_enabled INTEGER NOT NULL DEFAULT 0,
|
||||
copyright TEXT)"""
|
||||
copyright TEXT);
|
||||
CREATE INDEX web_log_theme_idx ON web_log (theme_id)"""
|
||||
do! write cmd
|
||||
match! tableExists "web_log_feed" with
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating web_log_feed table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE web_log_feed (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE web_log_feed (
|
||||
id TEXT PRIMARY KEY,
|
||||
web_log_id TEXT NOT NULL REFERENCES web_log (id),
|
||||
source TEXT NOT NULL,
|
||||
path TEXT NOT NULL)"""
|
||||
path TEXT NOT NULL);
|
||||
CREATE INDEX web_log_feed_web_log_idx ON web_log_feed (web_log_id)"""
|
||||
do! write cmd
|
||||
match! tableExists "web_log_feed_podcast" with
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating web_log_feed_podcast table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE web_log_feed_podcast (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE web_log_feed_podcast (
|
||||
feed_id TEXT PRIMARY KEY REFERENCES web_log_feed (id),
|
||||
title TEXT NOT NULL,
|
||||
subtitle TEXT,
|
||||
@@ -142,14 +147,15 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating category table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE category (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE category (
|
||||
id TEXT PRIMARY KEY,
|
||||
web_log_id TEXT NOT NULL REFERENCES web_log (id),
|
||||
name TEXT NOT NULL,
|
||||
slug TEXT NOT NULL,
|
||||
description TEXT,
|
||||
parent_id TEXT)"""
|
||||
parent_id TEXT);
|
||||
CREATE INDEX category_web_log_idx ON category (web_log_id)"""
|
||||
do! write cmd
|
||||
|
||||
// Web log user table
|
||||
@@ -157,8 +163,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating web_log_user table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE web_log_user (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE web_log_user (
|
||||
id TEXT PRIMARY KEY,
|
||||
web_log_id TEXT NOT NULL REFERENCES web_log (id),
|
||||
user_name TEXT NOT NULL,
|
||||
@@ -168,7 +174,9 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
password_hash TEXT NOT NULL,
|
||||
salt TEXT NOT NULL,
|
||||
url TEXT,
|
||||
authorization_level TEXT NOT NULL)"""
|
||||
authorization_level TEXT NOT NULL);
|
||||
CREATE INDEX web_log_user_web_log_idx ON web_log_user (web_log_id);
|
||||
CREATE INDEX web_log_user_user_name_idx ON web_log_user (web_log_id, user_name)"""
|
||||
do! write cmd
|
||||
|
||||
// Page tables
|
||||
@@ -176,8 +184,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating page table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE page (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE page (
|
||||
id TEXT PRIMARY KEY,
|
||||
web_log_id TEXT NOT NULL REFERENCES web_log (id),
|
||||
author_id TEXT NOT NULL REFERENCES web_log_user (id),
|
||||
@@ -187,14 +195,17 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
updated_on TEXT NOT NULL,
|
||||
show_in_page_list INTEGER NOT NULL DEFAULT 0,
|
||||
template TEXT,
|
||||
page_text TEXT NOT NULL)"""
|
||||
page_text TEXT NOT NULL);
|
||||
CREATE INDEX page_web_log_idx ON page (web_log_id);
|
||||
CREATE INDEX page_author_idx ON page (author_id);
|
||||
CREATE INDEX page_permalink_idx ON page (web_log_id, permalink)"""
|
||||
do! write cmd
|
||||
match! tableExists "page_meta" with
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating page_meta table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE page_meta (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE page_meta (
|
||||
page_id TEXT NOT NULL REFERENCES page (id),
|
||||
name TEXT NOT NULL,
|
||||
value TEXT NOT NULL,
|
||||
@@ -204,8 +215,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating page_permalink table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE page_permalink (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE page_permalink (
|
||||
page_id TEXT NOT NULL REFERENCES page (id),
|
||||
permalink TEXT NOT NULL,
|
||||
PRIMARY KEY (page_id, permalink))"""
|
||||
@@ -214,8 +225,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating page_revision table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE page_revision (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE page_revision (
|
||||
page_id TEXT NOT NULL REFERENCES page (id),
|
||||
as_of TEXT NOT NULL,
|
||||
revision_text TEXT NOT NULL,
|
||||
@@ -227,8 +238,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating post table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE post (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE post (
|
||||
id TEXT PRIMARY KEY,
|
||||
web_log_id TEXT NOT NULL REFERENCES web_log (id),
|
||||
author_id TEXT NOT NULL REFERENCES web_log_user (id),
|
||||
@@ -238,24 +249,29 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
published_on TEXT,
|
||||
updated_on TEXT NOT NULL,
|
||||
template TEXT,
|
||||
post_text TEXT NOT NULL)"""
|
||||
post_text TEXT NOT NULL);
|
||||
CREATE INDEX post_web_log_idx ON post (web_log_id);
|
||||
CREATE INDEX post_author_idx ON post (author_id);
|
||||
CREATE INDEX post_status_idx ON post (web_log_id, status, updated_on);
|
||||
CREATE INDEX post_permalink_idx ON post (web_log_id, permalink)"""
|
||||
do! write cmd
|
||||
match! tableExists "post_category" with
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating post_category table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE post_category (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE post_category (
|
||||
post_id TEXT NOT NULL REFERENCES post (id),
|
||||
category_id TEXT NOT NULL REFERENCES category (id),
|
||||
PRIMARY KEY (post_id, category_id))"""
|
||||
PRIMARY KEY (post_id, category_id));
|
||||
CREATE INDEX post_category_category_idx ON post_category (category_id)"""
|
||||
do! write cmd
|
||||
match! tableExists "post_episode" with
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating post_episode table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE post_episode (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE post_episode (
|
||||
post_id TEXT PRIMARY KEY REFERENCES post(id),
|
||||
media TEXT NOT NULL,
|
||||
length INTEGER NOT NULL,
|
||||
@@ -279,8 +295,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating post_tag table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE post_tag (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE post_tag (
|
||||
post_id TEXT NOT NULL REFERENCES post (id),
|
||||
tag TEXT NOT NULL,
|
||||
PRIMARY KEY (post_id, tag))"""
|
||||
@@ -289,8 +305,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating post_meta table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE post_meta (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE post_meta (
|
||||
post_id TEXT NOT NULL REFERENCES post (id),
|
||||
name TEXT NOT NULL,
|
||||
value TEXT NOT NULL,
|
||||
@@ -300,8 +316,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating post_permalink table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE post_permalink (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE post_permalink (
|
||||
post_id TEXT NOT NULL REFERENCES post (id),
|
||||
permalink TEXT NOT NULL,
|
||||
PRIMARY KEY (post_id, permalink))"""
|
||||
@@ -310,8 +326,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating post_revision table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE post_revision (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE post_revision (
|
||||
post_id TEXT NOT NULL REFERENCES post (id),
|
||||
as_of TEXT NOT NULL,
|
||||
revision_text TEXT NOT NULL,
|
||||
@@ -321,8 +337,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating post_comment table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE post_comment (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE post_comment (
|
||||
id TEXT PRIMARY KEY,
|
||||
post_id TEXT NOT NULL REFERENCES post(id),
|
||||
in_reply_to_id TEXT,
|
||||
@@ -331,7 +347,8 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
url TEXT,
|
||||
status TEXT NOT NULL,
|
||||
posted_on TEXT NOT NULL,
|
||||
comment_text TEXT NOT NULL)"""
|
||||
comment_text TEXT NOT NULL);
|
||||
CREATE INDEX post_comment_post_idx ON post_comment (post_id)"""
|
||||
do! write cmd
|
||||
|
||||
// Tag map table
|
||||
@@ -339,11 +356,28 @@ type SQLiteData (conn : SqliteConnection, log : ILogger<SQLiteData>) =
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating tag_map table..."
|
||||
cmd.CommandText <-
|
||||
"""CREATE TABLE tag_map (
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE tag_map (
|
||||
id TEXT PRIMARY KEY,
|
||||
web_log_id TEXT NOT NULL REFERENCES web_log (id),
|
||||
tag TEXT NOT NULL,
|
||||
url_value TEXT NOT NULL)"""
|
||||
url_value TEXT NOT NULL);
|
||||
CREATE INDEX tag_map_web_log_idx ON tag_map (web_log_id)"""
|
||||
do! write cmd
|
||||
|
||||
// Uploaded file table
|
||||
match! tableExists "upload" with
|
||||
| true -> ()
|
||||
| false ->
|
||||
log.LogInformation "Creating upload table..."
|
||||
cmd.CommandText <- """
|
||||
CREATE TABLE upload (
|
||||
id TEXT PRIMARY KEY,
|
||||
web_log_id TEXT NOT NULL REFERENCES web_log (id),
|
||||
path TEXT NOT NULL,
|
||||
updated_on TEXT NOT NULL,
|
||||
data BLOB NOT NULL);
|
||||
CREATE INDEX upload_web_log_idx ON upload (web_log_id);
|
||||
CREATE INDEX upload_path_idx ON upload (web_log_id, path)"""
|
||||
do! write cmd
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user