diff --git a/src/backend/YesChef.Api/Program.cs b/src/backend/YesChef.Api/Program.cs index f423e82..371775e 100644 --- a/src/backend/YesChef.Api/Program.cs +++ b/src/backend/YesChef.Api/Program.cs @@ -1,5 +1,6 @@ using System.Security.Claims; using System.Text; +using System.Text.Json.Serialization; using System.Threading.RateLimiting; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.RateLimiting; @@ -20,6 +21,9 @@ using YesChef.Api.Features.Units; var builder = WebApplication.CreateBuilder(args); +builder.Services.ConfigureHttpJsonOptions(o => + o.SerializerOptions.Converters.Add(new JsonStringEnumConverter())); + builder.Services.AddDbContext(options => options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection"))); diff --git a/src/frontend/src/lib/units.svelte.ts b/src/frontend/src/lib/units.svelte.ts index f28ae16..5435d12 100644 --- a/src/frontend/src/lib/units.svelte.ts +++ b/src/frontend/src/lib/units.svelte.ts @@ -1,3 +1,4 @@ +import { untrack } from 'svelte'; import { api } from '$lib/api'; export type UnitKind = 'Global' | 'Family'; @@ -24,7 +25,10 @@ let error = $state(null); export const units = { get all() { if (cache === null && !loading) { - void load(); + // Use untrack so the load() side-effect (which mutates $state) is + // not flagged as an illegal mutation when this getter is read inside + // a $derived expression. + untrack(() => void load()); } return cache ?? []; },