@mdguggenbichler/slugbase-core 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/backend/dist/db/schema.sql +176 -0
- package/backend/index.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
-- Users table
|
|
2
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
3
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
4
|
+
email VARCHAR(255) UNIQUE NOT NULL,
|
|
5
|
+
name VARCHAR(255) NOT NULL,
|
|
6
|
+
user_key VARCHAR(255) UNIQUE NOT NULL,
|
|
7
|
+
password_hash VARCHAR(255),
|
|
8
|
+
is_admin BOOLEAN DEFAULT FALSE,
|
|
9
|
+
oidc_sub VARCHAR(255),
|
|
10
|
+
oidc_provider VARCHAR(255),
|
|
11
|
+
language VARCHAR(10) DEFAULT 'en',
|
|
12
|
+
theme VARCHAR(10) DEFAULT 'auto',
|
|
13
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
-- OIDC providers table
|
|
17
|
+
CREATE TABLE IF NOT EXISTS oidc_providers (
|
|
18
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
19
|
+
provider_key VARCHAR(255) UNIQUE NOT NULL,
|
|
20
|
+
client_id TEXT NOT NULL,
|
|
21
|
+
client_secret TEXT NOT NULL,
|
|
22
|
+
issuer_url TEXT NOT NULL,
|
|
23
|
+
scopes TEXT NOT NULL,
|
|
24
|
+
auto_create_users BOOLEAN DEFAULT TRUE,
|
|
25
|
+
default_role VARCHAR(50) DEFAULT 'user',
|
|
26
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
-- Folders table
|
|
30
|
+
CREATE TABLE IF NOT EXISTS folders (
|
|
31
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
32
|
+
user_id VARCHAR(255) NOT NULL,
|
|
33
|
+
name VARCHAR(255) NOT NULL,
|
|
34
|
+
icon VARCHAR(50),
|
|
35
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
36
|
+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
37
|
+
UNIQUE(user_id, name)
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
-- Tags table
|
|
41
|
+
CREATE TABLE IF NOT EXISTS tags (
|
|
42
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
43
|
+
user_id VARCHAR(255) NOT NULL,
|
|
44
|
+
name VARCHAR(255) NOT NULL,
|
|
45
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
46
|
+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
47
|
+
UNIQUE(user_id, name)
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
-- Bookmarks table
|
|
51
|
+
CREATE TABLE IF NOT EXISTS bookmarks (
|
|
52
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
53
|
+
user_id VARCHAR(255) NOT NULL,
|
|
54
|
+
title TEXT NOT NULL,
|
|
55
|
+
url TEXT NOT NULL,
|
|
56
|
+
slug VARCHAR(255),
|
|
57
|
+
forwarding_enabled BOOLEAN DEFAULT FALSE,
|
|
58
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
59
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
60
|
+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
61
|
+
UNIQUE(slug)
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
-- Bookmark folders junction table (many-to-many)
|
|
65
|
+
CREATE TABLE IF NOT EXISTS bookmark_folders (
|
|
66
|
+
bookmark_id VARCHAR(255) NOT NULL,
|
|
67
|
+
folder_id VARCHAR(255) NOT NULL,
|
|
68
|
+
PRIMARY KEY (bookmark_id, folder_id),
|
|
69
|
+
FOREIGN KEY (bookmark_id) REFERENCES bookmarks(id) ON DELETE CASCADE,
|
|
70
|
+
FOREIGN KEY (folder_id) REFERENCES folders(id) ON DELETE CASCADE
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
-- Bookmark tags junction table
|
|
74
|
+
CREATE TABLE IF NOT EXISTS bookmark_tags (
|
|
75
|
+
bookmark_id VARCHAR(255) NOT NULL,
|
|
76
|
+
tag_id VARCHAR(255) NOT NULL,
|
|
77
|
+
PRIMARY KEY (bookmark_id, tag_id),
|
|
78
|
+
FOREIGN KEY (bookmark_id) REFERENCES bookmarks(id) ON DELETE CASCADE,
|
|
79
|
+
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
-- Teams table
|
|
83
|
+
CREATE TABLE IF NOT EXISTS teams (
|
|
84
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
85
|
+
name VARCHAR(255) UNIQUE NOT NULL,
|
|
86
|
+
description TEXT,
|
|
87
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
-- Team memberships junction table
|
|
91
|
+
CREATE TABLE IF NOT EXISTS team_members (
|
|
92
|
+
user_id VARCHAR(255) NOT NULL,
|
|
93
|
+
team_id VARCHAR(255) NOT NULL,
|
|
94
|
+
PRIMARY KEY (user_id, team_id),
|
|
95
|
+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
96
|
+
FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE CASCADE
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
-- Bookmark team shares junction table
|
|
100
|
+
CREATE TABLE IF NOT EXISTS bookmark_team_shares (
|
|
101
|
+
bookmark_id VARCHAR(255) NOT NULL,
|
|
102
|
+
team_id VARCHAR(255) NOT NULL,
|
|
103
|
+
PRIMARY KEY (bookmark_id, team_id),
|
|
104
|
+
FOREIGN KEY (bookmark_id) REFERENCES bookmarks(id) ON DELETE CASCADE,
|
|
105
|
+
FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE CASCADE
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
-- Folder team shares junction table
|
|
109
|
+
CREATE TABLE IF NOT EXISTS folder_team_shares (
|
|
110
|
+
folder_id VARCHAR(255) NOT NULL,
|
|
111
|
+
team_id VARCHAR(255) NOT NULL,
|
|
112
|
+
PRIMARY KEY (folder_id, team_id),
|
|
113
|
+
FOREIGN KEY (folder_id) REFERENCES folders(id) ON DELETE CASCADE,
|
|
114
|
+
FOREIGN KEY (team_id) REFERENCES teams(id) ON DELETE CASCADE
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
-- Bookmark user shares junction table
|
|
118
|
+
CREATE TABLE IF NOT EXISTS bookmark_user_shares (
|
|
119
|
+
bookmark_id VARCHAR(255) NOT NULL,
|
|
120
|
+
user_id VARCHAR(255) NOT NULL,
|
|
121
|
+
PRIMARY KEY (bookmark_id, user_id),
|
|
122
|
+
FOREIGN KEY (bookmark_id) REFERENCES bookmarks(id) ON DELETE CASCADE,
|
|
123
|
+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
-- Folder user shares junction table
|
|
127
|
+
CREATE TABLE IF NOT EXISTS folder_user_shares (
|
|
128
|
+
folder_id VARCHAR(255) NOT NULL,
|
|
129
|
+
user_id VARCHAR(255) NOT NULL,
|
|
130
|
+
PRIMARY KEY (folder_id, user_id),
|
|
131
|
+
FOREIGN KEY (folder_id) REFERENCES folders(id) ON DELETE CASCADE,
|
|
132
|
+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
-- System initialization flag
|
|
136
|
+
CREATE TABLE IF NOT EXISTS system_config (
|
|
137
|
+
key VARCHAR(255) PRIMARY KEY,
|
|
138
|
+
value TEXT NOT NULL
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
-- Password reset tokens table
|
|
142
|
+
CREATE TABLE IF NOT EXISTS password_reset_tokens (
|
|
143
|
+
id VARCHAR(255) PRIMARY KEY,
|
|
144
|
+
user_id VARCHAR(255) NOT NULL,
|
|
145
|
+
token VARCHAR(255) UNIQUE NOT NULL,
|
|
146
|
+
expires_at TIMESTAMP NOT NULL,
|
|
147
|
+
used BOOLEAN DEFAULT FALSE,
|
|
148
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
149
|
+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
-- Index for password reset tokens
|
|
153
|
+
CREATE INDEX IF NOT EXISTS idx_password_reset_tokens_token ON password_reset_tokens(token);
|
|
154
|
+
CREATE INDEX IF NOT EXISTS idx_password_reset_tokens_user ON password_reset_tokens(user_id);
|
|
155
|
+
CREATE INDEX IF NOT EXISTS idx_password_reset_tokens_expires ON password_reset_tokens(expires_at);
|
|
156
|
+
|
|
157
|
+
-- Indexes for performance
|
|
158
|
+
CREATE INDEX IF NOT EXISTS idx_bookmarks_user_id ON bookmarks(user_id);
|
|
159
|
+
CREATE INDEX IF NOT EXISTS idx_bookmarks_slug ON bookmarks(slug);
|
|
160
|
+
CREATE INDEX IF NOT EXISTS idx_bookmarks_user_slug ON bookmarks(user_id, slug);
|
|
161
|
+
CREATE INDEX IF NOT EXISTS idx_folders_user_id ON folders(user_id);
|
|
162
|
+
CREATE INDEX IF NOT EXISTS idx_tags_user_id ON tags(user_id);
|
|
163
|
+
CREATE INDEX IF NOT EXISTS idx_users_user_key ON users(user_key);
|
|
164
|
+
CREATE INDEX IF NOT EXISTS idx_users_oidc ON users(oidc_sub, oidc_provider);
|
|
165
|
+
CREATE INDEX IF NOT EXISTS idx_team_members_user ON team_members(user_id);
|
|
166
|
+
CREATE INDEX IF NOT EXISTS idx_team_members_team ON team_members(team_id);
|
|
167
|
+
CREATE INDEX IF NOT EXISTS idx_bookmark_team_shares_bookmark ON bookmark_team_shares(bookmark_id);
|
|
168
|
+
CREATE INDEX IF NOT EXISTS idx_bookmark_team_shares_team ON bookmark_team_shares(team_id);
|
|
169
|
+
CREATE INDEX IF NOT EXISTS idx_folder_team_shares_folder ON folder_team_shares(folder_id);
|
|
170
|
+
CREATE INDEX IF NOT EXISTS idx_folder_team_shares_team ON folder_team_shares(team_id);
|
|
171
|
+
CREATE INDEX IF NOT EXISTS idx_bookmark_folders_bookmark ON bookmark_folders(bookmark_id);
|
|
172
|
+
CREATE INDEX IF NOT EXISTS idx_bookmark_folders_folder ON bookmark_folders(folder_id);
|
|
173
|
+
CREATE INDEX IF NOT EXISTS idx_bookmark_user_shares_bookmark ON bookmark_user_shares(bookmark_id);
|
|
174
|
+
CREATE INDEX IF NOT EXISTS idx_bookmark_user_shares_user ON bookmark_user_shares(user_id);
|
|
175
|
+
CREATE INDEX IF NOT EXISTS idx_folder_user_shares_folder ON folder_user_shares(folder_id);
|
|
176
|
+
CREATE INDEX IF NOT EXISTS idx_folder_user_shares_user ON folder_user_shares(user_id);
|
package/backend/index.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
export { getConfig } from './dist/config.js';
|
|
7
|
-
export { createDbPool
|
|
7
|
+
export { createDbPool } from './dist/db/pool.js';
|
|
8
|
+
export { setDb, initDatabase, getDb, getDbType, query, queryOne, execute, isInitialized } from './dist/db/index.js';
|
|
8
9
|
export { runMigrations } from './dist/db/migrations/index.js';
|
|
9
10
|
export { createApp } from './dist/app-factory.js';
|
|
10
11
|
export { registerCoreRoutes } from './dist/register-routes.js';
|
|
@@ -13,4 +14,3 @@ export { loadOIDCStrategies } from './dist/auth/oidc.js';
|
|
|
13
14
|
export { validateEnvironmentVariables } from './dist/utils/env-validation.js';
|
|
14
15
|
export { errorHandler, notFoundHandler } from './dist/middleware/error-handler.js';
|
|
15
16
|
export { requireAuth } from './dist/middleware/auth.js';
|
|
16
|
-
export { isInitialized } from './dist/db/index.js';
|