Files
Aissa 5d60d33db1 Platform bundle: marketing publish, IT ops, packaging, agents mesh.
Volledige Foodlinkk Command Center uitbreiding met social automatisering,
reclamefolder filters, Proxmox monitoring en documentatie.
2026-06-09 00:41:27 +00:00

75 lines
2.6 KiB
SQL

-- Foodlinkk 2nd brain: emails, agenda, LLM memory
CREATE TABLE IF NOT EXISTS emails (
id SERIAL PRIMARY KEY,
message_id TEXT UNIQUE NOT NULL,
thread_id TEXT,
client_id INT REFERENCES clients(id) ON DELETE SET NULL,
deal_id INT REFERENCES deals(id) ON DELETE SET NULL,
direction VARCHAR(8) NOT NULL CHECK (direction IN ('in', 'out')),
from_addr TEXT,
to_addrs TEXT[] DEFAULT '{}',
cc_addrs TEXT[] DEFAULT '{}',
subject TEXT,
body_text TEXT,
body_html TEXT,
received_at TIMESTAMPTZ,
sent_at TIMESTAMPTZ,
is_read BOOLEAN DEFAULT FALSE,
labels TEXT[] DEFAULT '{}',
raw_headers JSONB DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_emails_received ON emails(received_at DESC);
CREATE INDEX IF NOT EXISTS idx_emails_client ON emails(client_id);
CREATE INDEX IF NOT EXISTS idx_emails_from ON emails(from_addr);
CREATE TABLE IF NOT EXISTS calendar_events (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL,
description TEXT,
starts_at TIMESTAMPTZ NOT NULL,
ends_at TIMESTAMPTZ,
client_id INT REFERENCES clients(id) ON DELETE SET NULL,
deal_id INT REFERENCES deals(id) ON DELETE SET NULL,
location TEXT,
source VARCHAR(32) DEFAULT 'manual',
external_id TEXT,
all_day BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_calendar_starts ON calendar_events(starts_at);
CREATE TABLE IF NOT EXISTS llm_memory (
id SERIAL PRIMARY KEY,
category VARCHAR(64) NOT NULL DEFAULT 'fact',
subject TEXT,
content TEXT NOT NULL,
client_id INT REFERENCES clients(id) ON DELETE SET NULL,
deal_id INT REFERENCES deals(id) ON DELETE SET NULL,
source VARCHAR(64) DEFAULT 'herman',
metadata JSONB DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_llm_memory_category ON llm_memory(category);
CREATE INDEX IF NOT EXISTS idx_llm_memory_updated ON llm_memory(updated_at DESC);
-- Seed: deal deadlines als agenda-items (zichtbaar in ochtendbericht)
INSERT INTO calendar_events (title, starts_at, ends_at, deal_id, source, description)
SELECT
'Deadline: ' || d.title,
d.deadline::timestamptz,
d.deadline::timestamptz + INTERVAL '1 hour',
d.id,
'deal_deadline',
COALESCE(d.next_action, '')
FROM deals d
WHERE d.deadline IS NOT NULL
AND d.stage NOT IN ('won', 'lost')
AND NOT EXISTS (
SELECT 1 FROM calendar_events ce
WHERE ce.deal_id = d.id AND ce.source = 'deal_deadline'
);