From 5090e185b185e8a2e069d95531d798e9045f56ac Mon Sep 17 00:00:00 2001 From: David Cramer Date: Fri, 22 Dec 2023 17:12:00 -0800 Subject: [PATCH] Handle outages with Faktory --- apps/server/src/trpc/routes/bottleCreate.ts | 11 ++++++++++- apps/server/src/trpc/routes/bottleUpdate.ts | 14 ++++++++++++-- apps/server/src/trpc/routes/entityCreate.ts | 11 ++++++++++- apps/server/src/trpc/routes/entityMerge.ts | 11 ++++++++++- apps/server/src/trpc/routes/entityUpdate.ts | 14 ++++++++++++-- apps/server/src/trpc/routes/tastingCreate.ts | 14 ++++++++++++-- 6 files changed, 66 insertions(+), 9 deletions(-) diff --git a/apps/server/src/trpc/routes/bottleCreate.ts b/apps/server/src/trpc/routes/bottleCreate.ts index 7d20d6343..64d7af3f9 100644 --- a/apps/server/src/trpc/routes/bottleCreate.ts +++ b/apps/server/src/trpc/routes/bottleCreate.ts @@ -9,6 +9,7 @@ import { import pushJob from "@peated/server/jobs"; import { upsertEntity } from "@peated/server/lib/db"; import { notEmpty } from "@peated/server/lib/filter"; +import { logError } from "@peated/server/lib/log"; import { normalizeBottleName } from "@peated/server/lib/normalize"; import { BottleInputSchema } from "@peated/server/schemas"; import { serialize } from "@peated/server/serializers"; @@ -161,7 +162,15 @@ export default authedProcedure }); } - await pushJob("GenerateBottleDetails", { bottleId: bottle.id }); + try { + await pushJob("GenerateBottleDetails", { bottleId: bottle.id }); + } catch (err) { + logError(err, { + bottle: { + id: bottle.id, + }, + }); + } return await serialize(BottleSerializer, bottle, ctx.user); }); diff --git a/apps/server/src/trpc/routes/bottleUpdate.ts b/apps/server/src/trpc/routes/bottleUpdate.ts index 3095952e7..13e229a86 100644 --- a/apps/server/src/trpc/routes/bottleUpdate.ts +++ b/apps/server/src/trpc/routes/bottleUpdate.ts @@ -8,6 +8,7 @@ import { } from "@peated/server/db/schema"; import pushJob from "@peated/server/jobs"; import { notEmpty } from "@peated/server/lib/filter"; +import { logError } from "@peated/server/lib/log"; import { normalizeBottleName } from "@peated/server/lib/normalize"; import { BottleInputSchema } from "@peated/server/schemas"; import { serialize } from "@peated/server/serializers"; @@ -279,8 +280,17 @@ export default modProcedure !newBottle.description || !newBottle.tastingNotes || newBottle.suggestedTags.length === 0 - ) - await pushJob("GenerateBottleDetails", { bottleId: bottle.id }); + ) { + try { + await pushJob("GenerateBottleDetails", { bottleId: bottle.id }); + } catch (err) { + logError(err, { + bottle: { + id: bottle.id, + }, + }); + } + } return await serialize(BottleSerializer, newBottle, ctx.user); }); diff --git a/apps/server/src/trpc/routes/entityCreate.ts b/apps/server/src/trpc/routes/entityCreate.ts index 52fc12e33..e3c560c4f 100644 --- a/apps/server/src/trpc/routes/entityCreate.ts +++ b/apps/server/src/trpc/routes/entityCreate.ts @@ -2,6 +2,7 @@ import { db } from "@peated/server/db"; import type { NewEntity } from "@peated/server/db/schema"; import { changes, entities } from "@peated/server/db/schema"; import pushJob from "@peated/server/jobs"; +import { logError } from "@peated/server/lib/log"; import { EntityInputSchema } from "@peated/server/schemas"; import { serialize } from "@peated/server/serializers"; import { EntitySerializer } from "@peated/server/serializers/entity"; @@ -68,7 +69,15 @@ export default authedProcedure }); } - await pushJob("GenerateEntityDetails", { entityId: entity.id }); + try { + await pushJob("GenerateEntityDetails", { entityId: entity.id }); + } catch (err) { + logError(err, { + entity: { + id: entity.id, + }, + }); + } return await serialize(EntitySerializer, entity, ctx.user); }); diff --git a/apps/server/src/trpc/routes/entityMerge.ts b/apps/server/src/trpc/routes/entityMerge.ts index 6a5cee8ac..0f16462ad 100644 --- a/apps/server/src/trpc/routes/entityMerge.ts +++ b/apps/server/src/trpc/routes/entityMerge.ts @@ -6,6 +6,7 @@ import { entities, } from "@peated/server/db/schema"; import pushJob from "@peated/server/jobs"; +import { logError } from "@peated/server/lib/log"; import { serialize } from "@peated/server/serializers"; import { EntitySerializer } from "@peated/server/serializers/entity"; import { TRPCError } from "@trpc/server"; @@ -116,7 +117,15 @@ export default modProcedure const toEntity = input.direction === "mergeInto" ? otherEntity : rootEntity; const newEntity = await mergeEntitiesInto(toEntity, fromEntity); - await pushJob("GenerateEntityDetails", { entityId: toEntity.id }); + try { + await pushJob("GenerateEntityDetails", { entityId: toEntity.id }); + } catch (err) { + logError(err, { + entity: { + id: toEntity.id, + }, + }); + } return await serialize(EntitySerializer, newEntity, ctx.user); }); diff --git a/apps/server/src/trpc/routes/entityUpdate.ts b/apps/server/src/trpc/routes/entityUpdate.ts index 307cfa60a..c0ac0dd96 100644 --- a/apps/server/src/trpc/routes/entityUpdate.ts +++ b/apps/server/src/trpc/routes/entityUpdate.ts @@ -3,6 +3,7 @@ import type { Entity } from "@peated/server/db/schema"; import { changes, entities } from "@peated/server/db/schema"; import pushJob from "@peated/server/jobs"; import { arraysEqual } from "@peated/server/lib/equals"; +import { logError } from "@peated/server/lib/log"; import { EntityInputSchema } from "@peated/server/schemas"; import { serialize } from "@peated/server/serializers"; import { EntitySerializer } from "@peated/server/serializers/entity"; @@ -98,8 +99,17 @@ export default modProcedure }); } - if (newEntity.name !== entity.name || !newEntity.description) - await pushJob("GenerateEntityDetails", { entityId: entity.id }); + if (newEntity.name !== entity.name || !newEntity.description) { + try { + await pushJob("GenerateEntityDetails", { entityId: entity.id }); + } catch (err) { + logError(err, { + entity: { + id: entity.id, + }, + }); + } + } return await serialize(EntitySerializer, newEntity, ctx.user); }); diff --git a/apps/server/src/trpc/routes/tastingCreate.ts b/apps/server/src/trpc/routes/tastingCreate.ts index 2ea09b989..7a8c24a5a 100644 --- a/apps/server/src/trpc/routes/tastingCreate.ts +++ b/apps/server/src/trpc/routes/tastingCreate.ts @@ -15,6 +15,7 @@ import pushJob from "@peated/server/jobs"; import { checkBadges } from "@peated/server/lib/badges"; import { isDistantFuture, isDistantPast } from "@peated/server/lib/dates"; import { notEmpty } from "@peated/server/lib/filter"; +import { logError } from "@peated/server/lib/log"; import { TastingInputSchema } from "@peated/server/schemas"; import { serialize } from "@peated/server/serializers"; import { TastingSerializer } from "@peated/server/serializers/tasting"; @@ -203,8 +204,17 @@ export default authedProcedure }); } - if (!ctx.user.private) - await pushJob("NotifyDiscordOnTasting", { tastingId: tasting.id }); + if (!ctx.user.private) { + try { + await pushJob("NotifyDiscordOnTasting", { tastingId: tasting.id }); + } catch (err) { + logError(err, { + tasting: { + id: tasting.id, + }, + }); + } + } return await serialize(TastingSerializer, tasting, ctx.user); });