@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.
@@ -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, setDb, initDatabase, getDb, getDbType, query, queryOne, execute } from './dist/db/index.js';
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';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mdguggenbichler/slugbase-core",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "SlugBase core: backend and frontend entrypoints for self-hosted and cloud apps",
5
5
  "type": "module",
6
6
  "exports": {