-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase-setup-environments.sql
More file actions
205 lines (179 loc) · 6.97 KB
/
database-setup-environments.sql
File metadata and controls
205 lines (179 loc) · 6.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
-- Database Setup Script for All Environments
-- Creates tables and loads sample data for local, dev, and prod databases
-- Common table creation script
\set ON_ERROR_STOP on
-- Function to create tables in a database
CREATE OR REPLACE FUNCTION create_tables_for_db(db_name text) RETURNS void AS $$
BEGIN
-- This would be executed in each database
RAISE NOTICE 'Creating tables for database: %', db_name;
END;
$$ LANGUAGE plpgsql;
-- Create tables for LOCAL environment
\c poc_local
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
environment VARCHAR(20) DEFAULT 'local',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS worlds (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
owner_id INTEGER REFERENCES users(id),
environment VARCHAR(20) DEFAULT 'local',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS stories (
id SERIAL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
content TEXT,
world_id INTEGER REFERENCES worlds(id),
environment VARCHAR(20) DEFAULT 'local',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS ai_cost_logs (
id SERIAL PRIMARY KEY,
model_name VARCHAR(100) NOT NULL,
prompt_tokens INTEGER DEFAULT 0,
completion_tokens INTEGER DEFAULT 0,
total_tokens INTEGER DEFAULT 0,
estimated_cost DECIMAL(10,6) DEFAULT 0.0,
environment VARCHAR(20) DEFAULT 'local',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Insert LOCAL sample data
INSERT INTO users (username, email, password_hash, environment)
VALUES
('local_user', 'user@local.com', 'hashed_password_local', 'local'),
('test_local', 'test@local.com', 'hashed_password_test', 'local')
ON CONFLICT (username) DO NOTHING;
INSERT INTO worlds (name, description, owner_id, environment)
VALUES
('Local Fantasy World', 'A fantasy world for local development', 1, 'local'),
('Local Sci-Fi World', 'A sci-fi world for local testing', 1, 'local')
ON CONFLICT DO NOTHING;
INSERT INTO stories (title, content, world_id, environment)
VALUES
('The Local Adventure', 'A story for local development testing...', 1, 'local'),
('Local Space Odyssey', 'Testing story in local environment...', 2, 'local')
ON CONFLICT DO NOTHING;
-- Create tables for DEV environment
\c poc_dev
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
environment VARCHAR(20) DEFAULT 'dev',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS worlds (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
owner_id INTEGER REFERENCES users(id),
environment VARCHAR(20) DEFAULT 'dev',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS stories (
id SERIAL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
content TEXT,
world_id INTEGER REFERENCES worlds(id),
environment VARCHAR(20) DEFAULT 'dev',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS ai_cost_logs (
id SERIAL PRIMARY KEY,
model_name VARCHAR(100) NOT NULL,
prompt_tokens INTEGER DEFAULT 0,
completion_tokens INTEGER DEFAULT 0,
total_tokens INTEGER DEFAULT 0,
estimated_cost DECIMAL(10,6) DEFAULT 0.0,
environment VARCHAR(20) DEFAULT 'dev',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Insert DEV sample data
INSERT INTO users (username, email, password_hash, environment)
VALUES
('dev_user', 'user@dev.com', 'hashed_password_dev', 'dev'),
('qa_tester', 'qa@dev.com', 'hashed_password_qa', 'dev'),
('dev_admin', 'admin@dev.com', 'hashed_password_admin', 'dev')
ON CONFLICT (username) DO NOTHING;
INSERT INTO worlds (name, description, owner_id, environment)
VALUES
('Development Fantasy World', 'Main testing world for dev environment', 1, 'dev'),
('QA Testing World', 'World for QA testing scenarios', 2, 'dev'),
('Integration Test World', 'World for integration testing', 3, 'dev')
ON CONFLICT DO NOTHING;
INSERT INTO stories (title, content, world_id, environment)
VALUES
('Dev Story Alpha', 'Development story for testing features...', 1, 'dev'),
('QA Test Case 001', 'Story used for QA validation...', 2, 'dev'),
('Integration Test Story', 'Story for testing integrations...', 3, 'dev')
ON CONFLICT DO NOTHING;
-- Create tables for PROD environment
\c poc_prod
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
environment VARCHAR(20) DEFAULT 'prod',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS worlds (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
owner_id INTEGER REFERENCES users(id),
environment VARCHAR(20) DEFAULT 'prod',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS stories (
id SERIAL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
content TEXT,
world_id INTEGER REFERENCES worlds(id),
environment VARCHAR(20) DEFAULT 'prod',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS ai_cost_logs (
id SERIAL PRIMARY KEY,
model_name VARCHAR(100) NOT NULL,
prompt_tokens INTEGER DEFAULT 0,
completion_tokens INTEGER DEFAULT 0,
total_tokens INTEGER DEFAULT 0,
estimated_cost DECIMAL(10,6) DEFAULT 0.0,
environment VARCHAR(20) DEFAULT 'prod',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Insert PROD sample data (minimal for production)
INSERT INTO users (username, email, password_hash, environment)
VALUES
('demo_user', 'demo@production.com', 'hashed_password_prod', 'prod'),
('admin', 'admin@production.com', 'hashed_password_admin_prod', 'prod')
ON CONFLICT (username) DO NOTHING;
INSERT INTO worlds (name, description, owner_id, environment)
VALUES
('Argentquest Chronicles', 'The official production world', 2, 'prod'),
('Demo World', 'A demonstration world for new users', 1, 'prod')
ON CONFLICT DO NOTHING;
INSERT INTO stories (title, content, world_id, environment)
VALUES
('Welcome to Argentquest', 'An introductory story for new users...', 2, 'prod'),
('Demo Adventure', 'A sample story showing platform capabilities...', 1, 'prod')
ON CONFLICT DO NOTHING;