feat(reminders): получатели в отложенных/входящих, приватные сообщения чата, календарь, бейдж уведомлений
This commit is contained in:
@@ -170,7 +170,20 @@ homeRouter.get('/api/home/inbox',
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM task_reminders tr_snooze
|
||||
WHERE tr_snooze.task_id = t.id
|
||||
AND tr_snooze.created_by_user_id = $2
|
||||
AND (
|
||||
tr_snooze.created_by_user_id = $2
|
||||
OR tr_snooze.recipients @> jsonb_build_array(jsonb_build_object('type', 'user', 'userId', $2))
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM jsonb_array_elements(tr_snooze.recipients) r_el
|
||||
WHERE r_el ->> 'type' = 'role'
|
||||
AND r_el ->> 'role' = (SELECT app_role FROM users WHERE id = $2)
|
||||
)
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM jsonb_array_elements(tr_snooze.recipients) r_el
|
||||
WHERE r_el ->> 'type' = 'orgRole'
|
||||
AND EXISTS (SELECT 1 FROM role_members rm WHERE rm.role_id = (r_el ->> 'roleId')::int AND rm.user_id = $2)
|
||||
)
|
||||
)
|
||||
AND tr_snooze.remind_at > NOW()
|
||||
AND tr_snooze.is_sent = false
|
||||
)
|
||||
@@ -217,7 +230,20 @@ homeRouter.get('/api/home/inbox',
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM task_reminders tr_snooze
|
||||
WHERE tr_snooze.task_id = t.id
|
||||
AND tr_snooze.created_by_user_id = $2
|
||||
AND (
|
||||
tr_snooze.created_by_user_id = $2
|
||||
OR tr_snooze.recipients @> jsonb_build_array(jsonb_build_object('type', 'user', 'userId', $2))
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM jsonb_array_elements(tr_snooze.recipients) r_el
|
||||
WHERE r_el ->> 'type' = 'role'
|
||||
AND r_el ->> 'role' = (SELECT app_role FROM users WHERE id = $2)
|
||||
)
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM jsonb_array_elements(tr_snooze.recipients) r_el
|
||||
WHERE r_el ->> 'type' = 'orgRole'
|
||||
AND EXISTS (SELECT 1 FROM role_members rm WHERE rm.role_id = (r_el ->> 'roleId')::int AND rm.user_id = $2)
|
||||
)
|
||||
)
|
||||
AND tr_snooze.remind_at > NOW()
|
||||
AND tr_snooze.is_sent = false
|
||||
)
|
||||
@@ -400,7 +426,20 @@ homeRouter.get('/api/home/inbox/count',
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM task_reminders tr_snooze
|
||||
WHERE tr_snooze.task_id = s.task_id
|
||||
AND tr_snooze.created_by_user_id = $2
|
||||
AND (
|
||||
tr_snooze.created_by_user_id = $2
|
||||
OR tr_snooze.recipients @> jsonb_build_array(jsonb_build_object('type', 'user', 'userId', $2))
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM jsonb_array_elements(tr_snooze.recipients) r_el
|
||||
WHERE r_el ->> 'type' = 'role'
|
||||
AND r_el ->> 'role' = (SELECT app_role FROM users WHERE id = $2)
|
||||
)
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM jsonb_array_elements(tr_snooze.recipients) r_el
|
||||
WHERE r_el ->> 'type' = 'orgRole'
|
||||
AND EXISTS (SELECT 1 FROM role_members rm WHERE rm.role_id = (r_el ->> 'roleId')::int AND rm.user_id = $2)
|
||||
)
|
||||
)
|
||||
AND tr_snooze.remind_at > NOW()
|
||||
AND tr_snooze.is_sent = false
|
||||
)
|
||||
@@ -448,14 +487,29 @@ homeRouter.get('/api/home/snoozed',
|
||||
t.updated_at AS "updatedAt",
|
||||
t.due_date AS "dueDate",
|
||||
t.is_completed AS "isCompleted",
|
||||
MIN(tr.remind_at) OVER (PARTITION BY t.id) AS "remindAt"
|
||||
MIN(tr.remind_at) OVER (PARTITION BY t.id) AS "remindAt",
|
||||
CONCAT(cu.first_name, ' ', cu.last_name) AS "createdByName"
|
||||
FROM task_reminders tr
|
||||
JOIN tasks t ON t.id = tr.task_id AND t.organization_id = $1
|
||||
JOIN forms f ON f.id = t.form_id
|
||||
JOIN form_statuses fs ON fs.id = t.current_status_id
|
||||
LEFT JOIN users u ON u.id = t.assigned_to
|
||||
LEFT JOIN users cu ON cu.id = tr.created_by_user_id
|
||||
WHERE tr.organization_id = $1
|
||||
AND tr.created_by_user_id = $2
|
||||
AND (
|
||||
tr.created_by_user_id = $2
|
||||
OR tr.recipients @> jsonb_build_array(jsonb_build_object('type', 'user', 'userId', $2))
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM jsonb_array_elements(tr.recipients) r_el
|
||||
WHERE r_el ->> 'type' = 'role'
|
||||
AND r_el ->> 'role' = (SELECT app_role FROM users WHERE id = $2)
|
||||
)
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM jsonb_array_elements(tr.recipients) r_el
|
||||
WHERE r_el ->> 'type' = 'orgRole'
|
||||
AND EXISTS (SELECT 1 FROM role_members rm WHERE rm.role_id = (r_el ->> 'roleId')::int AND rm.user_id = $2)
|
||||
)
|
||||
)
|
||||
AND tr.remind_at > NOW()
|
||||
AND tr.is_sent = false
|
||||
AND ($3 = '' OR t.title ILIKE '%' || $3 || '%')
|
||||
@@ -468,7 +522,20 @@ homeRouter.get('/api/home/snoozed',
|
||||
FROM task_reminders tr
|
||||
JOIN tasks t ON t.id = tr.task_id AND t.organization_id = $1
|
||||
WHERE tr.organization_id = $1
|
||||
AND tr.created_by_user_id = $2
|
||||
AND (
|
||||
tr.created_by_user_id = $2
|
||||
OR tr.recipients @> jsonb_build_array(jsonb_build_object('type', 'user', 'userId', $2))
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM jsonb_array_elements(tr.recipients) r_el
|
||||
WHERE r_el ->> 'type' = 'role'
|
||||
AND r_el ->> 'role' = (SELECT app_role FROM users WHERE id = $2)
|
||||
)
|
||||
OR EXISTS (
|
||||
SELECT 1 FROM jsonb_array_elements(tr.recipients) r_el
|
||||
WHERE r_el ->> 'type' = 'orgRole'
|
||||
AND EXISTS (SELECT 1 FROM role_members rm WHERE rm.role_id = (r_el ->> 'roleId')::int AND rm.user_id = $2)
|
||||
)
|
||||
)
|
||||
AND tr.remind_at > NOW()
|
||||
AND tr.is_sent = false
|
||||
AND ($3 = '' OR t.title ILIKE '%' || $3 || '%')
|
||||
|
||||
Reference in New Issue
Block a user