v1.0.11-rc1
This commit is contained in:
1 parent
d5952d82bb
commit
e1456ed4ca
8 files changed
+1315
-501
No files matched your search
+103
-3
@@ -206,6 +206,7 @@ export async function migrate() {
|
||||
await query("ALTER TABLE tickets ADD COLUMN IF NOT EXISTS zammad_state_id BIGINT;");
|
||||
await query("UPDATE tickets SET zammad_state_id = 2 WHERE zammad_state_id = 1;");
|
||||
await query("ALTER TABLE tickets ADD COLUMN IF NOT EXISTS zammad_owner_id BIGINT;");
|
||||
await query("ALTER TABLE tickets ADD COLUMN IF NOT EXISTS user_id BIGINT REFERENCES users(id) ON DELETE SET NULL;");
|
||||
await query("ALTER TABLE tickets ADD COLUMN IF NOT EXISTS zammad_merged_from_ticket_id BIGINT;");
|
||||
await query("ALTER TABLE tickets ADD COLUMN IF NOT EXISTS zammad_merged_from_ticket_number TEXT;");
|
||||
await query("ALTER TABLE tickets ADD COLUMN IF NOT EXISTS zammad_preferences JSONB NOT NULL DEFAULT '{}'::jsonb;");
|
||||
@@ -225,6 +226,55 @@ export async function migrate() {
|
||||
END IF;
|
||||
END $$;
|
||||
`);
|
||||
await query(`
|
||||
WITH unique_zammad_users AS (
|
||||
SELECT zammad_user_id, MIN(id) AS user_id
|
||||
FROM users
|
||||
WHERE role = 'user'
|
||||
AND active
|
||||
AND zammad_user_id IS NOT NULL
|
||||
GROUP BY zammad_user_id
|
||||
HAVING COUNT(*) = 1
|
||||
),
|
||||
zammad_ticket_owners AS (
|
||||
SELECT t.id, uzu.user_id
|
||||
FROM tickets t
|
||||
LEFT JOIN unique_zammad_users uzu ON uzu.zammad_user_id = t.zammad_owner_id
|
||||
WHERE t.zammad_owner_id IS NOT NULL
|
||||
)
|
||||
UPDATE tickets t
|
||||
SET user_id = zto.user_id
|
||||
FROM zammad_ticket_owners zto
|
||||
WHERE t.id = zto.id
|
||||
AND t.user_id IS DISTINCT FROM zto.user_id;
|
||||
`);
|
||||
await query(`
|
||||
UPDATE tickets t
|
||||
SET user_id = owner.user_id
|
||||
FROM (
|
||||
SELECT ticket_id, MIN(user_id) AS user_id
|
||||
FROM projects
|
||||
GROUP BY ticket_id
|
||||
) owner
|
||||
WHERE t.user_id IS NULL
|
||||
AND t.zammad_owner_id IS NULL
|
||||
AND t.id = owner.ticket_id;
|
||||
`);
|
||||
await query(`
|
||||
UPDATE tickets t
|
||||
SET user_id = owner.user_id
|
||||
FROM (
|
||||
SELECT ticket_id, MIN(user_id) AS user_id
|
||||
FROM sessions
|
||||
WHERE user_id IS NOT NULL
|
||||
GROUP BY ticket_id
|
||||
) owner
|
||||
WHERE t.user_id IS NULL
|
||||
AND t.zammad_owner_id IS NULL
|
||||
AND t.id = owner.ticket_id;
|
||||
`);
|
||||
await query("CREATE INDEX IF NOT EXISTS idx_tickets_user ON tickets(user_id);");
|
||||
await query("CREATE INDEX IF NOT EXISTS idx_tickets_zammad_owner ON tickets(zammad_owner_id);");
|
||||
|
||||
await query(`
|
||||
CREATE TABLE IF NOT EXISTS sessions (
|
||||
@@ -708,6 +758,43 @@ export async function migrate() {
|
||||
await query("ALTER TABLE projects ADD COLUMN IF NOT EXISTS closed_at TIMESTAMPTZ;");
|
||||
await query("ALTER TABLE projects ADD COLUMN IF NOT EXISTS close_review_required BOOLEAN NOT NULL DEFAULT false;");
|
||||
await query("ALTER TABLE projects ADD COLUMN IF NOT EXISTS manual_consumption_minutes INTEGER NOT NULL DEFAULT 0;");
|
||||
await query("ALTER TABLE projects ADD COLUMN IF NOT EXISTS zammad_owner_id BIGINT;");
|
||||
await query("ALTER TABLE projects ALTER COLUMN user_id DROP NOT NULL;");
|
||||
await query(`
|
||||
UPDATE projects p
|
||||
SET zammad_owner_id = t.zammad_owner_id
|
||||
FROM tickets t
|
||||
WHERE p.ticket_id = t.id
|
||||
AND p.zammad_owner_id IS NULL
|
||||
AND t.zammad_owner_id IS NOT NULL;
|
||||
`);
|
||||
await query(`
|
||||
UPDATE projects p
|
||||
SET user_id = t.user_id,
|
||||
zammad_owner_id = t.zammad_owner_id
|
||||
FROM tickets t
|
||||
WHERE p.ticket_id = t.id
|
||||
AND t.zammad_owner_id IS NOT NULL
|
||||
AND (
|
||||
p.user_id IS DISTINCT FROM t.user_id
|
||||
OR p.zammad_owner_id IS DISTINCT FROM t.zammad_owner_id
|
||||
)
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM projects existing
|
||||
WHERE existing.ticket_id = p.ticket_id
|
||||
AND existing.id <> p.id
|
||||
AND (
|
||||
(t.user_id IS NOT NULL AND existing.user_id = t.user_id)
|
||||
OR (
|
||||
t.user_id IS NULL
|
||||
AND existing.user_id IS NULL
|
||||
AND existing.zammad_owner_id IS NOT DISTINCT FROM t.zammad_owner_id
|
||||
)
|
||||
)
|
||||
);
|
||||
`);
|
||||
await query("CREATE UNIQUE INDEX IF NOT EXISTS idx_projects_zammad_owner_ticket ON projects(zammad_owner_id, ticket_id) WHERE user_id IS NULL AND zammad_owner_id IS NOT NULL;");
|
||||
await query(`
|
||||
DO $$
|
||||
BEGIN
|
||||
@@ -799,13 +886,26 @@ export async function migrate() {
|
||||
`);
|
||||
|
||||
await query(`
|
||||
INSERT INTO projects (user_id, ticket_id, teamspace_project, description, goals)
|
||||
SELECT DISTINCT s.user_id, s.ticket_id, COALESCE(t.title, ''), '', ''
|
||||
INSERT INTO projects (user_id, zammad_owner_id, ticket_id, teamspace_project, description, goals)
|
||||
SELECT DISTINCT
|
||||
CASE
|
||||
WHEN t.zammad_owner_id IS NOT NULL THEN zammad_owner_user.id
|
||||
ELSE s.user_id
|
||||
END,
|
||||
t.zammad_owner_id,
|
||||
s.ticket_id,
|
||||
COALESCE(t.title, ''),
|
||||
'',
|
||||
''
|
||||
FROM sessions s
|
||||
JOIN tickets t ON t.id = s.ticket_id
|
||||
LEFT JOIN users zammad_owner_user
|
||||
ON zammad_owner_user.role = 'user'
|
||||
AND zammad_owner_user.active
|
||||
AND zammad_owner_user.zammad_user_id = t.zammad_owner_id
|
||||
WHERE s.work_type = 'consulting'
|
||||
AND s.user_id IS NOT NULL
|
||||
ON CONFLICT (user_id, ticket_id) DO NOTHING;
|
||||
ON CONFLICT DO NOTHING;
|
||||
`);
|
||||
|
||||
await query(`
|
||||
|
||||
Reference in new issue
Block a user