cmap functions, email, architecture documentation.

This commit is contained in:
2026-08-18 03:33:10 +02:00
parent 12f1ed2764
commit 63b7ca0853
33 changed files with 3974 additions and 80 deletions
+68 -1
View File
@@ -20,7 +20,7 @@
;; Supporting functions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define current-schema-version 9)
(define current-schema-version 11)
(define schema-1-statements
(list
@@ -323,6 +323,67 @@ SQL
"CREATE INDEX IF NOT EXISTS concept_maps_title_idx ON concept_maps(lower(title))")
(record-schema-version! db 9))
(define (migrate-9->10! db)
(query-exec db "ALTER TABLE users ADD COLUMN IF NOT EXISTS email TEXT")
(query-exec db
"CREATE UNIQUE INDEX IF NOT EXISTS users_email_unique_idx ON users(lower(email)) WHERE email IS NOT NULL")
(query-exec db
#<<SQL
CREATE TABLE IF NOT EXISTS password_reset_tokens (
token_hash TEXT PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
created_at BIGINT NOT NULL,
expires_at BIGINT NOT NULL,
used_at BIGINT
)
SQL
)
(query-exec db
#<<SQL
CREATE TABLE IF NOT EXISTS wiki_settings (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
updated_at BIGINT NOT NULL
)
SQL
)
(query-exec db
"CREATE INDEX IF NOT EXISTS password_reset_tokens_user_idx ON password_reset_tokens(user_id, expires_at DESC)")
(query-exec db
"CREATE INDEX IF NOT EXISTS password_reset_tokens_expires_idx ON password_reset_tokens(expires_at)")
(record-schema-version! db 10))
(define (migrate-10->11! db)
(query-exec db
#<<SQL
CREATE TABLE IF NOT EXISTS concept_map_versions (
id BIGSERIAL PRIMARY KEY,
concept_map_id BIGINT NOT NULL REFERENCES concept_maps(id) ON DELETE CASCADE,
version BIGINT NOT NULL,
title TEXT NOT NULL,
document JSONB NOT NULL,
author TEXT NOT NULL,
action TEXT NOT NULL,
summary TEXT NOT NULL,
created_at BIGINT NOT NULL,
UNIQUE(concept_map_id, version)
)
SQL
)
(query-exec db
"CREATE INDEX IF NOT EXISTS concept_map_versions_map_idx ON concept_map_versions(concept_map_id, version DESC)")
(query-exec db
#<<SQL
INSERT INTO concept_map_versions
(concept_map_id, version, title, document, author, action, summary, created_at)
SELECT id, current_version, title, document, updated_by, 'snapshot',
'Current state when CMap history was enabled', updated_at
FROM concept_maps
ON CONFLICT (concept_map_id, version) DO NOTHING
SQL
)
(record-schema-version! db 11))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; goal : Bring a racket-wiki PostgreSQL database to the current schema.
; pre : db is a writable PostgreSQL connection and config identifies the
@@ -361,6 +422,12 @@ SQL
(define after-page-aliases (database-schema-version db))
(when (= after-page-aliases 8)
(migrate-8->9! db))
(define after-concept-maps (database-schema-version db))
(when (= after-concept-maps 9)
(migrate-9->10! db))
(define after-user-profiles (database-schema-version db))
(when (= after-user-profiles 10)
(migrate-10->11! db))
(define resulting-version (database-schema-version db))
(when (> resulting-version current-schema-version)
(error 'migrate-database!