#19 — link_url on campaign variants (migration 019) - ADD COLUMN link_url TEXT on campaign_variants - create_variant, upsert_variant, update_variant all carry link_url - RedditClient.post() supports kind=link when link_url set + body empty - RedditPostStrategy passes link_url from extra dict - poster.py merges link_url from variant into extra (same as slug/tags) - API VariantCreate/VariantUpdate schemas include link_url - CampaignDetail: link_url field in Add Variant form with copy button; link_url shown in variant list with clickable link + copy button - Variant button disabled if neither body nor link_url is set #18 — Multi-user team accounts (migrations 020-022) - 020: team_accounts table (display_name, platform, username, session_file) - 021: opportunities.assigned_to + post_as FK → team_accounts - 022: posts.posted_by_account_id FK → team_accounts - Store: list/get/get_by_username/create_team_account, assign_opportunity - API: GET/POST /api/v1/team; POST /api/v1/team/{id}/assign - config.py: sessions_dir added; reddit_session_file now points to sessions/alan_reddit.json (backward compat path kept) - scripts/migrate_sessions.py: one-shot move session.json → sessions/alan_reddit.json + creates placeholder files for future accounts - manage.sh: build (VITE_BASE_URL=/magpie/ npm build), serve (static), migrate-sessions subcommands added; login updated to new session path - Caddy: @magpie_no_session gate + handle /magpie/api* and /magpie* blocks added to menagerie.circuitforge.tech site block
16 lines
917 B
SQL
16 lines
917 B
SQL
-- Migration 020: Team accounts table
|
|
-- Tracks all posting identities across platforms (personal and official).
|
|
-- session_file is an absolute path to the session JSON; NULL for accounts
|
|
-- that post manually (Neon) or whose sessions haven't been established yet.
|
|
CREATE TABLE IF NOT EXISTS team_accounts (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
display_name TEXT NOT NULL,
|
|
platform TEXT NOT NULL, -- reddit | lemmy | mastodon | bluesky
|
|
username TEXT NOT NULL, -- u/pyr0ball, @cf@floss.social, etc.
|
|
account_type TEXT NOT NULL DEFAULT 'personal', -- personal | official
|
|
session_file TEXT, -- absolute path; NULL = manual posting only
|
|
active INTEGER NOT NULL DEFAULT 1,
|
|
notes TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
UNIQUE(platform, username)
|
|
);
|