@sudobility/entity_service 1.0.5 → 1.0.7
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.
|
@@ -73,6 +73,21 @@ async function createEntityTables(client, prefix, indexPrefix) {
|
|
|
73
73
|
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
|
74
74
|
UNIQUE(entity_id, user_id)
|
|
75
75
|
)
|
|
76
|
+
`);
|
|
77
|
+
// Add is_active column if it doesn't exist (for upgrading existing tables)
|
|
78
|
+
await client.unsafe(`
|
|
79
|
+
DO $$
|
|
80
|
+
BEGIN
|
|
81
|
+
IF NOT EXISTS (
|
|
82
|
+
SELECT 1 FROM information_schema.columns
|
|
83
|
+
WHERE table_schema = '${prefix.replace('.', '')}'
|
|
84
|
+
AND table_name = 'entity_members'
|
|
85
|
+
AND column_name = 'is_active'
|
|
86
|
+
) THEN
|
|
87
|
+
ALTER TABLE ${prefix}entity_members
|
|
88
|
+
ADD COLUMN is_active BOOLEAN NOT NULL DEFAULT true;
|
|
89
|
+
END IF;
|
|
90
|
+
END $$;
|
|
76
91
|
`);
|
|
77
92
|
await client.unsafe(`
|
|
78
93
|
CREATE UNIQUE INDEX IF NOT EXISTS ${indexPrefix}_entity_members_entity_user_idx
|
|
@@ -162,22 +177,55 @@ async function addEntityIdToProjects(client, prefix, indexPrefix) {
|
|
|
162
177
|
*/
|
|
163
178
|
async function migrateUsersToPersonalEntities(client, prefix) {
|
|
164
179
|
console.log('Migrating users to personal entities...');
|
|
165
|
-
//
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
AND NOT EXISTS (
|
|
173
|
-
SELECT 1 FROM ${prefix}entity_members em
|
|
174
|
-
INNER JOIN ${prefix}entities e ON em.entity_id = e.id
|
|
175
|
-
WHERE em.user_id = u.firebase_uid
|
|
176
|
-
AND em.role = 'admin'
|
|
177
|
-
AND em.is_active = true
|
|
178
|
-
AND e.entity_type = 'personal'
|
|
179
|
-
)
|
|
180
|
+
// Check if user_settings table exists and has firebase_uid column
|
|
181
|
+
const schemaName = prefix.replace('.', '');
|
|
182
|
+
const settingsColumnCheck = await client.unsafe(`
|
|
183
|
+
SELECT column_name FROM information_schema.columns
|
|
184
|
+
WHERE table_schema = '${schemaName}'
|
|
185
|
+
AND table_name = 'user_settings'
|
|
186
|
+
AND column_name IN ('firebase_uid', 'user_id')
|
|
180
187
|
`);
|
|
188
|
+
const settingsHasFirebaseUid = settingsColumnCheck.some((c) => c.column_name === 'firebase_uid');
|
|
189
|
+
const settingsHasUserId = settingsColumnCheck.some((c) => c.column_name === 'user_id');
|
|
190
|
+
const settingsJoinColumn = settingsHasFirebaseUid ? 'firebase_uid' : (settingsHasUserId ? 'user_id' : null);
|
|
191
|
+
// Build query based on whether user_settings exists and which column it has
|
|
192
|
+
let usersQuery;
|
|
193
|
+
if (settingsJoinColumn) {
|
|
194
|
+
usersQuery = `
|
|
195
|
+
SELECT u.firebase_uid, u.email, u.display_name,
|
|
196
|
+
COALESCE(s.organization_path, SUBSTRING(MD5(RANDOM()::TEXT) FROM 1 FOR 8)) as slug_source
|
|
197
|
+
FROM ${prefix}users u
|
|
198
|
+
LEFT JOIN ${prefix}user_settings s ON u.firebase_uid = s.${settingsJoinColumn}
|
|
199
|
+
WHERE u.firebase_uid IS NOT NULL
|
|
200
|
+
AND NOT EXISTS (
|
|
201
|
+
SELECT 1 FROM ${prefix}entity_members em
|
|
202
|
+
INNER JOIN ${prefix}entities e ON em.entity_id = e.id
|
|
203
|
+
WHERE em.user_id = u.firebase_uid
|
|
204
|
+
AND em.role = 'admin'
|
|
205
|
+
AND em.is_active = true
|
|
206
|
+
AND e.entity_type = 'personal'
|
|
207
|
+
)
|
|
208
|
+
`;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// No user_settings table or no matching column - just use users table
|
|
212
|
+
usersQuery = `
|
|
213
|
+
SELECT u.firebase_uid, u.email, u.display_name,
|
|
214
|
+
SUBSTRING(MD5(RANDOM()::TEXT) FROM 1 FOR 8) as slug_source
|
|
215
|
+
FROM ${prefix}users u
|
|
216
|
+
WHERE u.firebase_uid IS NOT NULL
|
|
217
|
+
AND NOT EXISTS (
|
|
218
|
+
SELECT 1 FROM ${prefix}entity_members em
|
|
219
|
+
INNER JOIN ${prefix}entities e ON em.entity_id = e.id
|
|
220
|
+
WHERE em.user_id = u.firebase_uid
|
|
221
|
+
AND em.role = 'admin'
|
|
222
|
+
AND em.is_active = true
|
|
223
|
+
AND e.entity_type = 'personal'
|
|
224
|
+
)
|
|
225
|
+
`;
|
|
226
|
+
}
|
|
227
|
+
// Get users without personal entities (check via entity_members with role = 'admin')
|
|
228
|
+
const usersWithoutEntities = await client.unsafe(usersQuery);
|
|
181
229
|
let migratedCount = 0;
|
|
182
230
|
for (const user of usersWithoutEntities) {
|
|
183
231
|
// Generate a unique slug (8 chars, lowercase alphanumeric)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"001_add_entities.d.ts","sourceRoot":"","sources":["../../src/migrations/001_add_entities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,MAAM,EAAE,UAAU,CAAC,cAAc,UAAU,CAAC,CAAC,CAAC;IAC9C,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB/E;
|
|
1
|
+
{"version":3,"file":"001_add_entities.d.ts","sourceRoot":"","sources":["../../src/migrations/001_add_entities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,MAAM,EAAE,UAAU,CAAC,cAAc,UAAU,CAAC,CAAC,CAAC;IAC9C,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB/E;AAqUD;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBpF"}
|
|
@@ -73,6 +73,21 @@ async function createEntityTables(client, prefix, indexPrefix) {
|
|
|
73
73
|
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
|
74
74
|
UNIQUE(entity_id, user_id)
|
|
75
75
|
)
|
|
76
|
+
`);
|
|
77
|
+
// Add is_active column if it doesn't exist (for upgrading existing tables)
|
|
78
|
+
await client.unsafe(`
|
|
79
|
+
DO $$
|
|
80
|
+
BEGIN
|
|
81
|
+
IF NOT EXISTS (
|
|
82
|
+
SELECT 1 FROM information_schema.columns
|
|
83
|
+
WHERE table_schema = '${prefix.replace('.', '')}'
|
|
84
|
+
AND table_name = 'entity_members'
|
|
85
|
+
AND column_name = 'is_active'
|
|
86
|
+
) THEN
|
|
87
|
+
ALTER TABLE ${prefix}entity_members
|
|
88
|
+
ADD COLUMN is_active BOOLEAN NOT NULL DEFAULT true;
|
|
89
|
+
END IF;
|
|
90
|
+
END $$;
|
|
76
91
|
`);
|
|
77
92
|
await client.unsafe(`
|
|
78
93
|
CREATE UNIQUE INDEX IF NOT EXISTS ${indexPrefix}_entity_members_entity_user_idx
|
|
@@ -162,22 +177,55 @@ async function addEntityIdToProjects(client, prefix, indexPrefix) {
|
|
|
162
177
|
*/
|
|
163
178
|
async function migrateUsersToPersonalEntities(client, prefix) {
|
|
164
179
|
console.log('Migrating users to personal entities...');
|
|
165
|
-
//
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
AND NOT EXISTS (
|
|
173
|
-
SELECT 1 FROM ${prefix}entity_members em
|
|
174
|
-
INNER JOIN ${prefix}entities e ON em.entity_id = e.id
|
|
175
|
-
WHERE em.user_id = u.firebase_uid
|
|
176
|
-
AND em.role = 'admin'
|
|
177
|
-
AND em.is_active = true
|
|
178
|
-
AND e.entity_type = 'personal'
|
|
179
|
-
)
|
|
180
|
+
// Check if user_settings table exists and has firebase_uid column
|
|
181
|
+
const schemaName = prefix.replace('.', '');
|
|
182
|
+
const settingsColumnCheck = await client.unsafe(`
|
|
183
|
+
SELECT column_name FROM information_schema.columns
|
|
184
|
+
WHERE table_schema = '${schemaName}'
|
|
185
|
+
AND table_name = 'user_settings'
|
|
186
|
+
AND column_name IN ('firebase_uid', 'user_id')
|
|
180
187
|
`);
|
|
188
|
+
const settingsHasFirebaseUid = settingsColumnCheck.some((c) => c.column_name === 'firebase_uid');
|
|
189
|
+
const settingsHasUserId = settingsColumnCheck.some((c) => c.column_name === 'user_id');
|
|
190
|
+
const settingsJoinColumn = settingsHasFirebaseUid ? 'firebase_uid' : (settingsHasUserId ? 'user_id' : null);
|
|
191
|
+
// Build query based on whether user_settings exists and which column it has
|
|
192
|
+
let usersQuery;
|
|
193
|
+
if (settingsJoinColumn) {
|
|
194
|
+
usersQuery = `
|
|
195
|
+
SELECT u.firebase_uid, u.email, u.display_name,
|
|
196
|
+
COALESCE(s.organization_path, SUBSTRING(MD5(RANDOM()::TEXT) FROM 1 FOR 8)) as slug_source
|
|
197
|
+
FROM ${prefix}users u
|
|
198
|
+
LEFT JOIN ${prefix}user_settings s ON u.firebase_uid = s.${settingsJoinColumn}
|
|
199
|
+
WHERE u.firebase_uid IS NOT NULL
|
|
200
|
+
AND NOT EXISTS (
|
|
201
|
+
SELECT 1 FROM ${prefix}entity_members em
|
|
202
|
+
INNER JOIN ${prefix}entities e ON em.entity_id = e.id
|
|
203
|
+
WHERE em.user_id = u.firebase_uid
|
|
204
|
+
AND em.role = 'admin'
|
|
205
|
+
AND em.is_active = true
|
|
206
|
+
AND e.entity_type = 'personal'
|
|
207
|
+
)
|
|
208
|
+
`;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// No user_settings table or no matching column - just use users table
|
|
212
|
+
usersQuery = `
|
|
213
|
+
SELECT u.firebase_uid, u.email, u.display_name,
|
|
214
|
+
SUBSTRING(MD5(RANDOM()::TEXT) FROM 1 FOR 8) as slug_source
|
|
215
|
+
FROM ${prefix}users u
|
|
216
|
+
WHERE u.firebase_uid IS NOT NULL
|
|
217
|
+
AND NOT EXISTS (
|
|
218
|
+
SELECT 1 FROM ${prefix}entity_members em
|
|
219
|
+
INNER JOIN ${prefix}entities e ON em.entity_id = e.id
|
|
220
|
+
WHERE em.user_id = u.firebase_uid
|
|
221
|
+
AND em.role = 'admin'
|
|
222
|
+
AND em.is_active = true
|
|
223
|
+
AND e.entity_type = 'personal'
|
|
224
|
+
)
|
|
225
|
+
`;
|
|
226
|
+
}
|
|
227
|
+
// Get users without personal entities (check via entity_members with role = 'admin')
|
|
228
|
+
const usersWithoutEntities = await client.unsafe(usersQuery);
|
|
181
229
|
let migratedCount = 0;
|
|
182
230
|
for (const user of usersWithoutEntities) {
|
|
183
231
|
// Generate a unique slug (8 chars, lowercase alphanumeric)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"001_add_entities.js","sourceRoot":"","sources":["../../src/migrations/001_add_entities.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAiBH,gDAuBC;
|
|
1
|
+
{"version":3,"file":"001_add_entities.js","sourceRoot":"","sources":["../../src/migrations/001_add_entities.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sudobility/entity_service",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "Shared entity/organization management library for multi-tenant workspaces",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
"build:cjs-rename": "find dist -name '*.js' -not -name '*.cjs' -exec sh -c 'cp \"$1\" \"${1%.js}.cjs\"' _ {} \\;",
|
|
31
31
|
"clean": "rm -rf dist",
|
|
32
32
|
"dev": "bunx tsc --watch",
|
|
33
|
-
"test": "
|
|
33
|
+
"test": "vitest run",
|
|
34
|
+
"test:watch": "vitest",
|
|
34
35
|
"lint": "bunx eslint src/",
|
|
35
36
|
"lint:fix": "bunx eslint src/ --fix",
|
|
36
37
|
"typecheck": "bunx tsc --noEmit",
|
|
@@ -59,6 +60,7 @@
|
|
|
59
60
|
"hono": "^4.0.0"
|
|
60
61
|
},
|
|
61
62
|
"devDependencies": {
|
|
63
|
+
"vitest": "^4.0.4",
|
|
62
64
|
"@sudobility/types": "^1.9.43",
|
|
63
65
|
"@types/bun": "latest",
|
|
64
66
|
"@types/node": "^24.0.0",
|