SharpieMaster
SharpieMaster
Explore posts from servers
TTCTheo's Typesafe Cult
Created by SharpieMaster on 7/20/2024 in #questions
RRule datetime generation randomly wrong
I am making a project using google calendar. I am using the rrule library to generate dates for event times.
import { z } from "zod";
import { calendar_v3, google } from "googleapis";
import { DateTime } from "luxon";

//...

const rrule = RRule.fromString(event.recurrence[0].split(":")[1]!);
if (!event.start?.dateTime) return null;

const startDateTime = DateTime.fromISO(event.start.dateTime).setZone(
"UTC",
);

rrule.options.dtstart = startDateTime.toJSDate();
rrule.options.tzid = "UTC";
const utcStartTime = startDateTime.toJSDate();

rrule.options.bysecond = [utcStartTime.getUTCSeconds()]; // Never mentioned in the docs, works for some reason
rrule.options.byminute = [utcStartTime.getUTCMinutes()];
rrule.options.byhour = [utcStartTime.getUTCHours()];

const dates = rrule.all((d, i) => {
return i < 20;
});

console.log(dates.map((d) => d.toLocaleString("en-US"))); // log 1

const meetingModifications: calendar_v3.Schema$Event[] = [];
for (const date of dates) {
const eventModificationId = `${meetingLinkCheck.googleCalendarEventId}_${DateTime.fromJSDate(
date,
)
.setZone("UTC")
.toISO()
?.replaceAll("-", "")
.replaceAll(":", "")
.replaceAll(".", "")
.replace("000Z", "Z")}`;
try {
const eventModification = (
await calendar.events.get({
calendarId: "primary",
eventId: eventModificationId,
})
).data;
if (!eventModification) continue;
meetingModifications.push(eventModification);
} catch (error) {
console.log(eventModificationId, date.toLocaleString("en-US")); // log 2
continue;
}
}

meetingModifications.sort((a, b) => {
const dateTimeA = a.start?.dateTime ?? "";
const dateTimeB = b.start?.dateTime ?? "";
return dateTimeA.localeCompare(dateTimeB);
});
import { z } from "zod";
import { calendar_v3, google } from "googleapis";
import { DateTime } from "luxon";

//...

const rrule = RRule.fromString(event.recurrence[0].split(":")[1]!);
if (!event.start?.dateTime) return null;

const startDateTime = DateTime.fromISO(event.start.dateTime).setZone(
"UTC",
);

rrule.options.dtstart = startDateTime.toJSDate();
rrule.options.tzid = "UTC";
const utcStartTime = startDateTime.toJSDate();

rrule.options.bysecond = [utcStartTime.getUTCSeconds()]; // Never mentioned in the docs, works for some reason
rrule.options.byminute = [utcStartTime.getUTCMinutes()];
rrule.options.byhour = [utcStartTime.getUTCHours()];

const dates = rrule.all((d, i) => {
return i < 20;
});

console.log(dates.map((d) => d.toLocaleString("en-US"))); // log 1

const meetingModifications: calendar_v3.Schema$Event[] = [];
for (const date of dates) {
const eventModificationId = `${meetingLinkCheck.googleCalendarEventId}_${DateTime.fromJSDate(
date,
)
.setZone("UTC")
.toISO()
?.replaceAll("-", "")
.replaceAll(":", "")
.replaceAll(".", "")
.replace("000Z", "Z")}`;
try {
const eventModification = (
await calendar.events.get({
calendarId: "primary",
eventId: eventModificationId,
})
).data;
if (!eventModification) continue;
meetingModifications.push(eventModification);
} catch (error) {
console.log(eventModificationId, date.toLocaleString("en-US")); // log 2
continue;
}
}

meetingModifications.sort((a, b) => {
const dateTimeA = a.start?.dateTime ?? "";
const dateTimeB = b.start?.dateTime ?? "";
return dateTimeA.localeCompare(dateTimeB);
});
6 replies
TTCTheo's Typesafe Cult
Created by SharpieMaster on 10/11/2023 in #questions
optimistic update for complex data structure
I am making a recipe website with the t3-stack and I made something that "works" but is not very fast. I am kind of new to web dev with the t3 stack and I need some help
174 replies
TTCTheo's Typesafe Cult
Created by SharpieMaster on 10/8/2023 in #questions
Prisma types and enums with trpc + zod
is it possible to use prisma types and enums with zod, instead of having to manually construct your prisma tables in your trpc router
4 replies
TTCTheo's Typesafe Cult
Created by SharpieMaster on 9/25/2023 in #questions
t3 app router when?
when?
24 replies