-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinit-db.sql
More file actions
161 lines (148 loc) · 5.02 KB
/
init-db.sql
File metadata and controls
161 lines (148 loc) · 5.02 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
-- Création de la base de données SQLite pour Decidoo
-- Table users
CREATE TABLE IF NOT EXISTS users (
id TEXT PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
name TEXT,
password TEXT,
emailVerified DATETIME,
image TEXT,
createdAt DATETIME DEFAULT CURRENT_TIMESTAMP,
updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Table accounts (NextAuth)
CREATE TABLE IF NOT EXISTS accounts (
id TEXT PRIMARY KEY,
userId TEXT NOT NULL,
type TEXT NOT NULL,
provider TEXT NOT NULL,
providerAccountId TEXT NOT NULL,
refresh_token TEXT,
access_token TEXT,
expires_at INTEGER,
token_type TEXT,
scope TEXT,
id_token TEXT,
session_state TEXT,
FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE,
UNIQUE(provider, providerAccountId)
);
-- Table sessions (NextAuth)
CREATE TABLE IF NOT EXISTS sessions (
id TEXT PRIMARY KEY,
sessionToken TEXT UNIQUE NOT NULL,
userId TEXT NOT NULL,
expires DATETIME NOT NULL,
FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE
);
-- Table organizations
CREATE TABLE IF NOT EXISTS organizations (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
slug TEXT UNIQUE NOT NULL,
createdAt DATETIME DEFAULT CURRENT_TIMESTAMP,
updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Table organization_members
CREATE TABLE IF NOT EXISTS organization_members (
id TEXT PRIMARY KEY,
role TEXT DEFAULT 'MEMBER' NOT NULL,
joinedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
userId TEXT NOT NULL,
organizationId TEXT NOT NULL,
FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (organizationId) REFERENCES organizations(id) ON DELETE CASCADE,
UNIQUE(userId, organizationId)
);
-- Table teams
CREATE TABLE IF NOT EXISTS teams (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
organizationId TEXT NOT NULL,
createdAt DATETIME DEFAULT CURRENT_TIMESTAMP,
updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (organizationId) REFERENCES organizations(id) ON DELETE CASCADE
);
-- Table team_members
CREATE TABLE IF NOT EXISTS team_members (
id TEXT PRIMARY KEY,
organizationMemberId TEXT NOT NULL,
teamId TEXT NOT NULL,
joinedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (organizationMemberId) REFERENCES organization_members(id) ON DELETE CASCADE,
FOREIGN KEY (teamId) REFERENCES teams(id) ON DELETE CASCADE,
UNIQUE(organizationMemberId, teamId)
);
-- Table decisions
CREATE TABLE IF NOT EXISTS decisions (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
description TEXT NOT NULL,
context TEXT,
decisionType TEXT NOT NULL,
status TEXT DEFAULT 'DRAFT' NOT NULL,
result TEXT,
resultDetails TEXT,
createdAt DATETIME DEFAULT CURRENT_TIMESTAMP,
updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
startDate DATETIME,
endDate DATETIME,
decidedAt DATETIME,
creatorId TEXT NOT NULL,
organizationId TEXT NOT NULL,
teamId TEXT,
FOREIGN KEY (creatorId) REFERENCES users(id),
FOREIGN KEY (organizationId) REFERENCES organizations(id) ON DELETE CASCADE,
FOREIGN KEY (teamId) REFERENCES teams(id) ON DELETE SET NULL
);
-- Table votes
CREATE TABLE IF NOT EXISTS votes (
id TEXT PRIMARY KEY,
value TEXT NOT NULL,
weight INTEGER DEFAULT 1,
comment TEXT,
createdAt DATETIME DEFAULT CURRENT_TIMESTAMP,
updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
userId TEXT NOT NULL,
decisionId TEXT NOT NULL,
FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (decisionId) REFERENCES decisions(id) ON DELETE CASCADE,
UNIQUE(userId, decisionId)
);
-- Table comments
CREATE TABLE IF NOT EXISTS comments (
id TEXT PRIMARY KEY,
content TEXT NOT NULL,
createdAt DATETIME DEFAULT CURRENT_TIMESTAMP,
updatedAt DATETIME DEFAULT CURRENT_TIMESTAMP,
userId TEXT NOT NULL,
decisionId TEXT NOT NULL,
parentId TEXT,
FOREIGN KEY (userId) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (decisionId) REFERENCES decisions(id) ON DELETE CASCADE,
FOREIGN KEY (parentId) REFERENCES comments(id)
);
-- Table tags
CREATE TABLE IF NOT EXISTS tags (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
color TEXT DEFAULT '#3B82F6',
createdAt DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- Table decision_tags
CREATE TABLE IF NOT EXISTS decision_tags (
decisionId TEXT NOT NULL,
tagId TEXT NOT NULL,
PRIMARY KEY (decisionId, tagId),
FOREIGN KEY (decisionId) REFERENCES decisions(id) ON DELETE CASCADE,
FOREIGN KEY (tagId) REFERENCES tags(id) ON DELETE CASCADE
);
-- Indexes pour améliorer les performances
CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
CREATE INDEX IF NOT EXISTS idx_sessions_token ON sessions(sessionToken);
CREATE INDEX IF NOT EXISTS idx_decisions_creator ON decisions(creatorId);
CREATE INDEX IF NOT EXISTS idx_decisions_org ON decisions(organizationId);
CREATE INDEX IF NOT EXISTS idx_votes_user ON votes(userId);
CREATE INDEX IF NOT EXISTS idx_votes_decision ON votes(decisionId);