Request for Feedback on Improving Efficiency and Ecosystem Usage in TypeScript Code
Hi! I would love to get some feedback from the experts! I want to use Effect more efficiently but not sure where to start. Especially the for loops. Any feedback is great!
const program = Effect.gen(function* () {
const currentDestinations = yield* Effect.promise(() =>
ctx.db
.query("destinations")
.withIndex("by_contact_id", (q) =>
q
.eq("organizationId", ctx.user.defaultOrganizationId!)
.eq("contactId", contactId)
.eq("type", type),
)
.collect(),
).pipe();
const newDestinations = destinations.filter((d) => !d._id);
const existingDestinations = destinations.filter((d) => d._id);
const destinationsToRemove = currentDestinations.filter(
(cd) => !existingDestinations.some((d) => d._id === cd._id),
);
const favoriteDestination =
existingDestinations.find((d) => d.isFavorite) ||
newDestinations.find((d) => d.isFavorite) ||
existingDestinations[0] ||
newDestinations[0];
const updatedDestinations = [
...existingDestinations,
...newDestinations,
].map((d) => ({
...d,
isFavorite: d._id === favoriteDestination?._id,
}));
for (const destination of updatedDestinations.filter((d) => d._id)) {
yield* Effect.promise(() =>
ctx.db.patch(destination._id!, {
value: destination.value,
isFavorite: destination.isFavorite,
}),
);
}
for (const destination of destinationsToRemove) {
yield* Effect.promise(() => ctx.db.delete(destination._id));
}
for (const destination of updatedDestinations.filter((d) => !d._id)) {
yield* Effect.promise(() =>
ctx.db.insert("destinations", {
contactId,
type,
value: destination.value,
isFavorite: destination.isFavorite,
status: "active",
organizationId: ctx.user.defaultOrganizationId!,
}),
);
}
}); const program = Effect.gen(function* () {
const currentDestinations = yield* Effect.promise(() =>
ctx.db
.query("destinations")
.withIndex("by_contact_id", (q) =>
q
.eq("organizationId", ctx.user.defaultOrganizationId!)
.eq("contactId", contactId)
.eq("type", type),
)
.collect(),
).pipe();
const newDestinations = destinations.filter((d) => !d._id);
const existingDestinations = destinations.filter((d) => d._id);
const destinationsToRemove = currentDestinations.filter(
(cd) => !existingDestinations.some((d) => d._id === cd._id),
);
const favoriteDestination =
existingDestinations.find((d) => d.isFavorite) ||
newDestinations.find((d) => d.isFavorite) ||
existingDestinations[0] ||
newDestinations[0];
const updatedDestinations = [
...existingDestinations,
...newDestinations,
].map((d) => ({
...d,
isFavorite: d._id === favoriteDestination?._id,
}));
for (const destination of updatedDestinations.filter((d) => d._id)) {
yield* Effect.promise(() =>
ctx.db.patch(destination._id!, {
value: destination.value,
isFavorite: destination.isFavorite,
}),
);
}
for (const destination of destinationsToRemove) {
yield* Effect.promise(() => ctx.db.delete(destination._id));
}
for (const destination of updatedDestinations.filter((d) => !d._id)) {
yield* Effect.promise(() =>
ctx.db.insert("destinations", {
contactId,
type,
value: destination.value,
isFavorite: destination.isFavorite,
status: "active",
organizationId: ctx.user.defaultOrganizationId!,
}),
);
}
});