Rename Space to Project, add desktop document creation
This commit is contained in:
@@ -1,6 +1,21 @@
|
||||
use sqlx::AnyPool;
|
||||
|
||||
pub async fn init_schema(pool: &AnyPool) {
|
||||
// Rename the legacy "space" tables/columns to the "project" vocabulary on
|
||||
// existing databases. Best-effort: on a fresh database (or one already
|
||||
// migrated) the old names don't exist, so these fail silently and the
|
||||
// CREATE TABLE IF NOT EXISTS statements below take over.
|
||||
let rename_migrations = [
|
||||
"ALTER TABLE IF EXISTS spaces RENAME TO projects",
|
||||
"ALTER TABLE IF EXISTS space_files RENAME TO project_files",
|
||||
"ALTER TABLE IF EXISTS space_collaborators RENAME TO project_collaborators",
|
||||
"ALTER TABLE IF EXISTS project_files RENAME COLUMN space_id TO project_id",
|
||||
"ALTER TABLE IF EXISTS project_collaborators RENAME COLUMN space_id TO project_id",
|
||||
];
|
||||
for stmt in &rename_migrations {
|
||||
let _ = sqlx::query(stmt).execute(pool).await;
|
||||
}
|
||||
|
||||
let statements = [
|
||||
"CREATE TABLE IF NOT EXISTS users (
|
||||
id TEXT PRIMARY KEY,
|
||||
@@ -105,7 +120,7 @@ pub async fn init_schema(pool: &AnyPool) {
|
||||
count INTEGER NOT NULL DEFAULT 1,
|
||||
PRIMARY KEY(key_id, minute)
|
||||
)",
|
||||
"CREATE TABLE IF NOT EXISTS spaces (
|
||||
"CREATE TABLE IF NOT EXISTS projects (
|
||||
id TEXT PRIMARY KEY,
|
||||
owner_id TEXT NOT NULL REFERENCES users(id),
|
||||
folder_id TEXT REFERENCES folders(id),
|
||||
@@ -116,23 +131,23 @@ pub async fn init_schema(pool: &AnyPool) {
|
||||
created_at TEXT DEFAULT to_char(NOW(), 'YYYY-MM-DD HH24:MI:SS'),
|
||||
updated_at TEXT DEFAULT to_char(NOW(), 'YYYY-MM-DD HH24:MI:SS')
|
||||
)",
|
||||
"CREATE TABLE IF NOT EXISTS space_files (
|
||||
"CREATE TABLE IF NOT EXISTS project_files (
|
||||
id TEXT PRIMARY KEY,
|
||||
space_id TEXT NOT NULL REFERENCES spaces(id) ON DELETE CASCADE,
|
||||
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
||||
path TEXT NOT NULL,
|
||||
kind TEXT NOT NULL DEFAULT 'text',
|
||||
content BYTEA,
|
||||
mime_type TEXT NOT NULL DEFAULT 'text/plain',
|
||||
created_at TEXT DEFAULT to_char(NOW(), 'YYYY-MM-DD HH24:MI:SS'),
|
||||
UNIQUE(space_id, path)
|
||||
UNIQUE(project_id, path)
|
||||
)",
|
||||
"CREATE TABLE IF NOT EXISTS space_collaborators (
|
||||
"CREATE TABLE IF NOT EXISTS project_collaborators (
|
||||
id TEXT PRIMARY KEY,
|
||||
space_id TEXT NOT NULL REFERENCES spaces(id) ON DELETE CASCADE,
|
||||
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
||||
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
role TEXT NOT NULL,
|
||||
created_at TEXT DEFAULT to_char(NOW(), 'YYYY-MM-DD HH24:MI:SS'),
|
||||
UNIQUE(space_id, user_id)
|
||||
UNIQUE(project_id, user_id)
|
||||
)",
|
||||
"CREATE TABLE IF NOT EXISTS packages (
|
||||
id TEXT PRIMARY KEY,
|
||||
@@ -181,7 +196,7 @@ pub async fn init_schema(pool: &AnyPool) {
|
||||
"ALTER TABLE documents ADD COLUMN IF NOT EXISTS public_role TEXT",
|
||||
"ALTER TABLE users ADD COLUMN IF NOT EXISTS is_admin BOOLEAN NOT NULL DEFAULT FALSE",
|
||||
"ALTER TABLE users ADD COLUMN IF NOT EXISTS created_at TEXT DEFAULT to_char(NOW(), 'YYYY-MM-DD HH24:MI:SS')",
|
||||
"ALTER TABLE space_files ADD COLUMN IF NOT EXISTS updated_at TEXT DEFAULT to_char(NOW(), 'YYYY-MM-DD HH24:MI:SS')",
|
||||
"ALTER TABLE project_files ADD COLUMN IF NOT EXISTS updated_at TEXT DEFAULT to_char(NOW(), 'YYYY-MM-DD HH24:MI:SS')",
|
||||
];
|
||||
for stmt in &migrations {
|
||||
sqlx::query(stmt).execute(pool).await.unwrap_or_else(|_| Default::default());
|
||||
|
||||
Reference in New Issue
Block a user