mirror of
https://git.coastit.co.za/caitlin/CRM_ENVR.git
synced 2026-07-10 19:17:16 +02:00
adbcc4b9af
feat: implement conversations API with message retrieval and posting feat: add avatar URL handling for users and update user role definitions feat: create chat system tables in the database with initial seed data fix: update user roles from "sales_user" to "sales" for consistency chore: add middleware for system API route access fixed fuckups on john's side, added a benchmark Made Graphs actualy load from database and realtime data, graphs will update and percentages will be mathematically made, and made realtime added chatcart edits, made graphs glow. added in some little small home feeling fuctions added in a slide show, in login with qoutes from creators because i want to leave a print on it saying we made this shit, we built it brick for brick login page added qoutes some random, and made them shuffle from left to right one dissapears other come in adding shape to the textbox for the qoutes Fixed my chat fuckups when it comes to chats
81 lines
4.5 KiB
SQL
81 lines
4.5 KiB
SQL
-- ============================================================================
|
|
-- Chat System: conversations, participants, and messages
|
|
-- ============================================================================
|
|
|
|
CREATE TABLE IF NOT EXISTS conversations (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS conversation_participants (
|
|
conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
joined_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
PRIMARY KEY (conversation_id, user_id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS messages (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
sender_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
content TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ,
|
|
deleted_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_messages_conversation_id ON messages(conversation_id);
|
|
CREATE INDEX IF NOT EXISTS idx_messages_created_at ON messages(created_at);
|
|
CREATE INDEX IF NOT EXISTS idx_conversation_participants_user_id ON conversation_participants(user_id);
|
|
|
|
-- Seed conversations between superadmin and other users
|
|
INSERT INTO conversations (id, created_at) VALUES
|
|
('c0000000-0000-0000-0000-000000000001', NOW() - INTERVAL '2 hours'),
|
|
('c0000000-0000-0000-0000-000000000002', NOW() - INTERVAL '1 hour'),
|
|
('c0000000-0000-0000-0000-000000000003', NOW() - INTERVAL '30 minutes')
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
-- Add participants (superadmin + each sales/dev user)
|
|
INSERT INTO conversation_participants (conversation_id, user_id) VALUES
|
|
('c0000000-0000-0000-0000-000000000001', '00000000-0000-0000-0000-000000000001'),
|
|
('c0000000-0000-0000-0000-000000000001', '00000000-0000-0000-0000-000000000003'),
|
|
('c0000000-0000-0000-0000-000000000002', '00000000-0000-0000-0000-000000000001'),
|
|
('c0000000-0000-0000-0000-000000000002', '00000000-0000-0000-0000-000000000004'),
|
|
('c0000000-0000-0000-0000-000000000003', '00000000-0000-0000-0000-000000000001'),
|
|
('c0000000-0000-0000-0000-000000000003', '00000000-0000-0000-0000-000000000002')
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
-- Seed some messages
|
|
INSERT INTO messages (id, conversation_id, sender_id, content, created_at) VALUES
|
|
('00000000-0000-0000-0000-000000000101', 'c0000000-0000-0000-0000-000000000001',
|
|
'00000000-0000-0000-0000-000000000003', 'Hey! Just finalized the TechCorp deal.',
|
|
NOW() - INTERVAL '2 hours'),
|
|
('00000000-0000-0000-0000-000000000102', 'c0000000-0000-0000-0000-000000000001',
|
|
'00000000-0000-0000-0000-000000000001', 'Great work! What were the final terms?',
|
|
NOW() - INTERVAL '105 minutes'),
|
|
('00000000-0000-0000-0000-000000000103', 'c0000000-0000-0000-0000-000000000001',
|
|
'00000000-0000-0000-0000-000000000003', '3-year enterprise license, 15% discount. They signed this morning.',
|
|
NOW() - INTERVAL '100 minutes'),
|
|
('00000000-0000-0000-0000-000000000104', 'c0000000-0000-0000-0000-000000000002',
|
|
'00000000-0000-0000-0000-000000000004', 'The API integration tests are passing on staging.',
|
|
NOW() - INTERVAL '50 minutes'),
|
|
('00000000-0000-0000-0000-000000000105', 'c0000000-0000-0000-0000-000000000002',
|
|
'00000000-0000-0000-0000-000000000001', 'Great, when can we deploy to production?',
|
|
NOW() - INTERVAL '45 minutes'),
|
|
('00000000-0000-0000-0000-000000000106', 'c0000000-0000-0000-0000-000000000002',
|
|
'00000000-0000-0000-0000-000000000004', 'Tomorrow morning after final review.',
|
|
NOW() - INTERVAL '40 minutes'),
|
|
('00000000-0000-0000-0000-000000000107', 'c0000000-0000-0000-0000-000000000003',
|
|
'00000000-0000-0000-0000-000000000002', 'New report shows 23% increase in lead conversion this quarter.',
|
|
NOW() - INTERVAL '25 minutes'),
|
|
('00000000-0000-0000-0000-000000000108', 'c0000000-0000-0000-0000-000000000003',
|
|
'00000000-0000-0000-0000-000000000001', 'That is excellent! Let us discuss in the next team meeting.',
|
|
NOW() - INTERVAL '20 minutes')
|
|
ON CONFLICT DO NOTHING;
|
|
|
|
-- Update conversation timestamps
|
|
UPDATE conversations SET updated_at = NOW() - INTERVAL '20 minutes' WHERE id = 'c0000000-0000-0000-0000-000000000003';
|
|
UPDATE conversations SET updated_at = NOW() - INTERVAL '40 minutes' WHERE id = 'c0000000-0000-0000-0000-000000000002';
|
|
UPDATE conversations SET updated_at = NOW() - INTERVAL '100 minutes' WHERE id = 'c0000000-0000-0000-0000-000000000001';
|