Add AI auto-check worker, share link message/link fields, and update journal/settings UI
This commit is contained in:
+30
@@ -29,11 +29,24 @@ CREATE TABLE IF NOT EXISTS entries (
|
||||
student_name VARCHAR(150) NOT NULL,
|
||||
group_id INT NOT NULL REFERENCES groups(id),
|
||||
description TEXT NOT NULL,
|
||||
description_original TEXT,
|
||||
description_ai TEXT,
|
||||
ai_status VARCHAR(20) NOT NULL DEFAULT 'pending',
|
||||
ai_checked_at TIMESTAMPTZ,
|
||||
ai_error TEXT,
|
||||
photo_path VARCHAR(255),
|
||||
deleted_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
ALTER TABLE entries ADD COLUMN IF NOT EXISTS description_original TEXT;
|
||||
ALTER TABLE entries ADD COLUMN IF NOT EXISTS description_ai TEXT;
|
||||
ALTER TABLE entries ADD COLUMN IF NOT EXISTS ai_status VARCHAR(20) NOT NULL DEFAULT 'pending';
|
||||
ALTER TABLE entries ADD COLUMN IF NOT EXISTS ai_checked_at TIMESTAMPTZ;
|
||||
ALTER TABLE entries ADD COLUMN IF NOT EXISTS ai_error TEXT;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_entries_ai_pending ON entries(id) WHERE ai_status = 'pending' AND deleted_at IS NULL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS settings (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT
|
||||
@@ -41,6 +54,10 @@ CREATE TABLE IF NOT EXISTS settings (
|
||||
|
||||
INSERT INTO settings (key, value) VALUES ('spam_interval_min', '30')
|
||||
ON CONFLICT (key) DO NOTHING;
|
||||
INSERT INTO settings (key, value) VALUES ('ai_prompt', 'Ты — редактор текстов для педагогического журнала. Исправь грамматические, орфографические и пунктуационные ошибки. Сохрани смысл и стиль. Верни ТОЛЬКО исправленный текст, без пояснений.')
|
||||
ON CONFLICT (key) DO NOTHING;
|
||||
INSERT INTO settings (key, value) VALUES ('ai_autocheck_enabled', 'true')
|
||||
ON CONFLICT (key) DO NOTHING;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS share_links (
|
||||
id SERIAL PRIMARY KEY,
|
||||
@@ -53,6 +70,8 @@ CREATE TABLE IF NOT EXISTS share_links (
|
||||
anonymize_names BOOLEAN DEFAULT false,
|
||||
expires_at TIMESTAMPTZ,
|
||||
access_password_hash VARCHAR(255),
|
||||
message TEXT,
|
||||
link_url VARCHAR(500),
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
@@ -86,6 +105,17 @@ CREATE TABLE IF NOT EXISTS project_files (
|
||||
detached_at TIMESTAMPTZ
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS entry_photos (
|
||||
id SERIAL PRIMARY KEY,
|
||||
entry_id INT NOT NULL REFERENCES entries(id) ON DELETE CASCADE,
|
||||
photo_path VARCHAR(255) NOT NULL,
|
||||
caption TEXT,
|
||||
sort_order INT DEFAULT 0,
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_entry_photos_entry_id ON entry_photos(entry_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
username VARCHAR(100) NOT NULL UNIQUE,
|
||||
|
||||
@@ -13,6 +13,8 @@ CREATE TABLE IF NOT EXISTS settings (
|
||||
|
||||
INSERT INTO settings (key, value) VALUES ('spam_interval_min', '30')
|
||||
ON CONFLICT (key) DO NOTHING;
|
||||
INSERT INTO settings (key, value) VALUES ('ai_prompt', 'Ты — редактор текстов для педагогического журнала. Исправь грамматические, орфографические и пунктуационные ошибки. Сохрани смысл и стиль. Верни ТОЛЬКО исправленный текст, без пояснений.')
|
||||
ON CONFLICT (key) DO NOTHING;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS share_links (
|
||||
id SERIAL PRIMARY KEY,
|
||||
@@ -25,6 +27,9 @@ CREATE TABLE IF NOT EXISTS share_links (
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
ALTER TABLE share_links ADD COLUMN IF NOT EXISTS message TEXT;
|
||||
ALTER TABLE share_links ADD COLUMN IF NOT EXISTS link_url VARCHAR(500);
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
INSERT INTO students (name)
|
||||
@@ -48,7 +53,37 @@ CREATE UNIQUE INDEX IF NOT EXISTS project_files_token_key ON project_files(token
|
||||
ALTER TABLE project_files ALTER COLUMN entry_id DROP NOT NULL;
|
||||
ALTER TABLE project_files ADD COLUMN IF NOT EXISTS detached_at TIMESTAMPTZ;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS entry_photos (
|
||||
id SERIAL PRIMARY KEY,
|
||||
entry_id INT NOT NULL REFERENCES entries(id) ON DELETE CASCADE,
|
||||
photo_path VARCHAR(255) NOT NULL,
|
||||
caption TEXT,
|
||||
sort_order INT DEFAULT 0,
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_entry_photos_entry_id ON entry_photos(entry_id);
|
||||
|
||||
ALTER TABLE entries ADD COLUMN IF NOT EXISTS deleted_at TIMESTAMPTZ;
|
||||
ALTER TABLE entries ADD COLUMN IF NOT EXISTS description_original TEXT;
|
||||
ALTER TABLE entries ADD COLUMN IF NOT EXISTS description_ai TEXT;
|
||||
ALTER TABLE entries ADD COLUMN IF NOT EXISTS ai_status VARCHAR(20) NOT NULL DEFAULT 'pending';
|
||||
ALTER TABLE entries ADD COLUMN IF NOT EXISTS ai_checked_at TIMESTAMPTZ;
|
||||
ALTER TABLE entries ADD COLUMN IF NOT EXISTS ai_error TEXT;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_entries_ai_pending ON entries(id) WHERE ai_status = 'pending' AND deleted_at IS NULL;
|
||||
|
||||
INSERT INTO settings (key, value) VALUES ('ai_autocheck_enabled', 'true')
|
||||
ON CONFLICT (key) DO NOTHING;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT 1 FROM settings WHERE key = 'ai_autocheck_migrated') THEN
|
||||
UPDATE entries SET description_original = description WHERE description_original IS NULL;
|
||||
UPDATE entries SET ai_status = 'skipped' WHERE ai_status = 'pending';
|
||||
INSERT INTO settings (key, value) VALUES ('ai_autocheck_migrated', '1');
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS branches (
|
||||
id SERIAL PRIMARY KEY,
|
||||
@@ -105,3 +140,10 @@ CREATE TABLE IF NOT EXISTS group_photos (
|
||||
ALTER TABLE group_photos ADD COLUMN IF NOT EXISTS sort_order INT DEFAULT 0;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_group_photos_group_id ON group_photos(group_id);
|
||||
|
||||
UPDATE entries e SET photo_path = p.photo_path
|
||||
FROM (
|
||||
SELECT DISTINCT ON (entry_id) entry_id, photo_path
|
||||
FROM entry_photos ORDER BY entry_id, sort_order, id
|
||||
) p
|
||||
WHERE e.photo_path IS NULL AND p.entry_id = e.id;
|
||||
|
||||
@@ -14,4 +14,8 @@ ALTER TABLE share_links ADD COLUMN IF NOT EXISTS access_password_hash VARCHAR(25
|
||||
-- UPDATE share_links SET expires_at = created_at + interval '7 days' WHERE expires_at IS NULL;
|
||||
|
||||
-- 5. Add index for cleanup of expired links
|
||||
CREATE INDEX IF NOT EXISTS idx_share_links_expires_at ON share_links(expires_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_share_links_expires_at ON share_links(expires_at);
|
||||
|
||||
-- 6. Add public message and external link shown on the share page
|
||||
ALTER TABLE share_links ADD COLUMN IF NOT EXISTS message TEXT;
|
||||
ALTER TABLE share_links ADD COLUMN IF NOT EXISTS link_url VARCHAR(500);
|
||||
Reference in New Issue
Block a user