151 lines
4.3 KiB
SQL
151 lines
4.3 KiB
SQL
-- ============================================
|
|
-- Script d'exploration des duplications de calendriers et événements
|
|
-- ============================================
|
|
|
|
-- 1. Lister tous les calendriers "Privée" avec leurs détails
|
|
SELECT
|
|
c.id,
|
|
c.name,
|
|
c.color,
|
|
c.description,
|
|
c."userId",
|
|
c."missionId",
|
|
c."createdAt",
|
|
c."updatedAt",
|
|
cs.id as "syncConfigId",
|
|
cs.provider,
|
|
cs."externalCalendarId",
|
|
cs."syncEnabled",
|
|
cs."lastSyncAt",
|
|
mc.email as "mailCredentialEmail",
|
|
(SELECT COUNT(*) FROM "Event" e WHERE e."calendarId" = c.id) as "eventCount"
|
|
FROM "Calendar" c
|
|
LEFT JOIN "CalendarSync" cs ON cs."calendarId" = c.id
|
|
LEFT JOIN "MailCredentials" mc ON mc.id = cs."mailCredentialId"
|
|
WHERE c.name = 'Privée'
|
|
ORDER BY c."createdAt" DESC;
|
|
|
|
-- 2. Voir tous les événements "Vendredi saint" avec leurs calendriers
|
|
SELECT
|
|
e.id,
|
|
e.title,
|
|
e."calendarId",
|
|
c.name as "calendarName",
|
|
e."externalEventId",
|
|
e.start,
|
|
e.end,
|
|
e."isAllDay",
|
|
e."createdAt",
|
|
e."updatedAt"
|
|
FROM "Event" e
|
|
JOIN "Calendar" c ON c.id = e."calendarId"
|
|
WHERE e.title = 'Vendredi saint'
|
|
ORDER BY e.start, c.name;
|
|
|
|
-- 3. Identifier les événements en double par externalEventId (même événement dans plusieurs calendriers)
|
|
SELECT
|
|
e."externalEventId",
|
|
e.title,
|
|
COUNT(*) as "occurrenceCount",
|
|
STRING_AGG(DISTINCT c.id::text, ', ') as "calendarIds",
|
|
STRING_AGG(DISTINCT c.name, ', ') as "calendarNames",
|
|
MIN(e.start) as "earliestStart",
|
|
MAX(e.start) as "latestStart"
|
|
FROM "Event" e
|
|
JOIN "Calendar" c ON c.id = e."calendarId"
|
|
WHERE e."externalEventId" IS NOT NULL
|
|
AND e."externalEventId" != ''
|
|
GROUP BY e."externalEventId", e.title
|
|
HAVING COUNT(*) > 1
|
|
ORDER BY "occurrenceCount" DESC, e.title;
|
|
|
|
-- 4. Voir les détails complets des événements en double
|
|
SELECT
|
|
e.id,
|
|
e.title,
|
|
e."externalEventId",
|
|
e."calendarId",
|
|
c.name as "calendarName",
|
|
c."userId",
|
|
e.start,
|
|
e.end,
|
|
e."isAllDay",
|
|
e."createdAt",
|
|
e."updatedAt"
|
|
FROM "Event" e
|
|
JOIN "Calendar" c ON c.id = e."calendarId"
|
|
WHERE e."externalEventId" IN (
|
|
SELECT "externalEventId"
|
|
FROM "Event"
|
|
WHERE "externalEventId" IS NOT NULL
|
|
AND "externalEventId" != ''
|
|
GROUP BY "externalEventId"
|
|
HAVING COUNT(*) > 1
|
|
)
|
|
ORDER BY e."externalEventId", e."calendarId", e.start;
|
|
|
|
-- 5. Compter les événements par calendrier "Privée"
|
|
SELECT
|
|
c.id as "calendarId",
|
|
c.name,
|
|
COUNT(e.id) as "totalEvents",
|
|
COUNT(CASE WHEN e."externalEventId" IS NOT NULL THEN 1 END) as "eventsWithExternalId",
|
|
COUNT(CASE WHEN e."externalEventId" IS NULL THEN 1 END) as "eventsWithoutExternalId"
|
|
FROM "Calendar" c
|
|
LEFT JOIN "Event" e ON e."calendarId" = c.id
|
|
WHERE c.name = 'Privée'
|
|
GROUP BY c.id, c.name
|
|
ORDER BY "totalEvents" DESC;
|
|
|
|
-- 6. Voir les événements "TEST de connaissances" (celui qui apparaît en double dans les logs)
|
|
SELECT
|
|
e.id,
|
|
e.title,
|
|
e."externalEventId",
|
|
e."calendarId",
|
|
c.name as "calendarName",
|
|
e.start,
|
|
e.end,
|
|
e."createdAt"
|
|
FROM "Event" e
|
|
JOIN "Calendar" c ON c.id = e."calendarId"
|
|
WHERE e.title LIKE '%TEST de connaissances%'
|
|
OR e."externalEventId" = 'AAMkADg2NjBjMDUwLTJlMzYtNDBlZi1iNzE4LTA5YWFiYTdhMWJmYwBGAAAAAABiHJmWOydNSY0OtAePspbBBwBWDBinTymARZbnqCRYQq7IAAAAAAENAABWDBinTymARZbnqCRYQq7IAAMGtqjeAAA='
|
|
ORDER BY e."calendarId", e.start;
|
|
|
|
-- 7. Lister tous les CalendarSync pour les calendriers "Privée"
|
|
SELECT
|
|
cs.id,
|
|
cs."calendarId",
|
|
c.name as "calendarName",
|
|
cs.provider,
|
|
cs."externalCalendarId",
|
|
cs."syncEnabled",
|
|
cs."lastSyncAt",
|
|
cs."syncFrequency",
|
|
cs."lastSyncError",
|
|
mc.email as "mailCredentialEmail"
|
|
FROM "CalendarSync" cs
|
|
JOIN "Calendar" c ON c.id = cs."calendarId"
|
|
LEFT JOIN "MailCredentials" mc ON mc.id = cs."mailCredentialId"
|
|
WHERE c.name = 'Privée'
|
|
ORDER BY cs."createdAt" DESC;
|
|
|
|
-- 8. Trouver les événements sans externalEventId dans les calendriers Microsoft
|
|
SELECT
|
|
e.id,
|
|
e.title,
|
|
e."calendarId",
|
|
c.name as "calendarName",
|
|
e.start,
|
|
e.end,
|
|
e."createdAt",
|
|
cs.provider
|
|
FROM "Event" e
|
|
JOIN "Calendar" c ON c.id = e."calendarId"
|
|
LEFT JOIN "CalendarSync" cs ON cs."calendarId" = c.id
|
|
WHERE c.name = 'Privée'
|
|
AND (e."externalEventId" IS NULL OR e."externalEventId" = '')
|
|
AND cs.provider = 'microsoft'
|
|
ORDER BY e.start DESC;
|