|
|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
import type { RequestHandler } from './$types';
|
|
|
|
|
import { getDb } from '$lib/server/db';
|
|
|
|
|
import { findActiveToken, createCalendarTokenUrl, buildCalendarIcsUrl } from '$lib/server/calendar-tokens';
|
|
|
|
|
import { findActiveToken, createCalendarTokenUrl, buildCalendarIcsUrl, rotateCalendarTokenUrl } from '$lib/server/calendar-tokens';
|
|
|
|
|
|
|
|
|
|
export const GET: RequestHandler = async (event) => {
|
|
|
|
|
// Requiere sesión
|
|
|
|
|
@ -27,30 +27,46 @@ export const GET: RequestHandler = async (event) => {
|
|
|
|
|
|
|
|
|
|
// Personal
|
|
|
|
|
const personalExisting = await findActiveToken('personal', userId, null);
|
|
|
|
|
const personal =
|
|
|
|
|
personalExisting
|
|
|
|
|
? { url: personalExisting.token_plain ? buildCalendarIcsUrl('personal', personalExisting.token_plain) : null }
|
|
|
|
|
: await (async () => {
|
|
|
|
|
const created = await createCalendarTokenUrl('personal', userId, null);
|
|
|
|
|
return { url: created.url };
|
|
|
|
|
})();
|
|
|
|
|
const personal = await (async () => {
|
|
|
|
|
if (personalExisting) {
|
|
|
|
|
if (personalExisting.token_plain) {
|
|
|
|
|
return { url: buildCalendarIcsUrl('personal', personalExisting.token_plain) };
|
|
|
|
|
}
|
|
|
|
|
const rotated = await rotateCalendarTokenUrl('personal', userId, null);
|
|
|
|
|
return { url: rotated.url };
|
|
|
|
|
} else {
|
|
|
|
|
const created = await createCalendarTokenUrl('personal', userId, null);
|
|
|
|
|
return { url: created.url };
|
|
|
|
|
}
|
|
|
|
|
})();
|
|
|
|
|
|
|
|
|
|
// Aggregate (multigrupo)
|
|
|
|
|
const aggregateExisting = await findActiveToken('aggregate', userId, null);
|
|
|
|
|
const aggregate =
|
|
|
|
|
aggregateExisting
|
|
|
|
|
? { url: aggregateExisting.token_plain ? buildCalendarIcsUrl('aggregate', aggregateExisting.token_plain) : null }
|
|
|
|
|
: await (async () => {
|
|
|
|
|
const created = await createCalendarTokenUrl('aggregate', userId, null);
|
|
|
|
|
return { url: created.url };
|
|
|
|
|
})();
|
|
|
|
|
const aggregate = await (async () => {
|
|
|
|
|
if (aggregateExisting) {
|
|
|
|
|
if (aggregateExisting.token_plain) {
|
|
|
|
|
return { url: buildCalendarIcsUrl('aggregate', aggregateExisting.token_plain) };
|
|
|
|
|
}
|
|
|
|
|
const rotated = await rotateCalendarTokenUrl('aggregate', userId, null);
|
|
|
|
|
return { url: rotated.url };
|
|
|
|
|
} else {
|
|
|
|
|
const created = await createCalendarTokenUrl('aggregate', userId, null);
|
|
|
|
|
return { url: created.url };
|
|
|
|
|
}
|
|
|
|
|
})();
|
|
|
|
|
|
|
|
|
|
// Por grupo (B): autogenerar si falta
|
|
|
|
|
const groupFeeds: Array<{ groupId: string; groupName: string | null; url: string | null }> = [];
|
|
|
|
|
for (const g of groups) {
|
|
|
|
|
const ex = await findActiveToken('group', userId, g.id);
|
|
|
|
|
if (ex) {
|
|
|
|
|
const url = ex.token_plain ? buildCalendarIcsUrl('group', ex.token_plain) : null;
|
|
|
|
|
let url: string | null;
|
|
|
|
|
if (ex.token_plain) {
|
|
|
|
|
url = buildCalendarIcsUrl('group', ex.token_plain);
|
|
|
|
|
} else {
|
|
|
|
|
const rotated = await rotateCalendarTokenUrl('group', userId, g.id);
|
|
|
|
|
url = rotated.url;
|
|
|
|
|
}
|
|
|
|
|
groupFeeds.push({ groupId: g.id, groupName: g.name ?? null, url });
|
|
|
|
|
} else {
|
|
|
|
|
const created = await createCalendarTokenUrl('group', userId, g.id);
|
|
|
|
|
|