feat(shopping): alışverişi tamamla transaction'ı ve karşılaştırma motoru

- tek transaction: stok alımı, fiş kaynaklı fiyat, mağaza başına bölünmüş gider, fiş ekleri, kalanların taşınması
- muadil, markasız ürün tipi ve plansız ekstra satırları; stok → gider kategorisi eşlemesi ve yedek kategori
- compareShopping saf fonksiyonu: aynı/muadil/alınmadı/ekstra, farkın nedenlere tam ayrışması
- tamamlanan listede rapor görüntüsü; testler

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-06 23:57:50 +03:00
parent 3dd9834a3d
commit bd5a20ce64
12 changed files with 1291 additions and 4 deletions
+8
View File
@@ -6,10 +6,12 @@ import { tr } from "@/i18n/tr";
import { fail, type ActionResult } from "@/lib/action-result";
import { getHouseholdActionContext } from "@/lib/dal";
import {
shoppingCompletionSchema,
shoppingItemFormSchema,
shoppingItemUpdateSchema,
shoppingListFormSchema,
} from "@/shared/schemas/shopping";
import { completeShopping } from "./completion";
import {
addShoppingItem,
approveSuggestions,
@@ -118,3 +120,9 @@ export async function dismissSuggestionAction(productTypeId: unknown) {
if (!id.success) return fail(tr.common.notFound);
return run(z.unknown(), null, (u, h) => dismissSuggestion(u, h, id.data));
}
export async function completeShoppingAction(listId: unknown, input: unknown) {
const id = idSchema.safeParse(listId);
if (!id.success) return fail(tr.common.notFound);
return run(shoppingCompletionSchema, input, (u, h, d) => completeShopping(u, h, id.data, d));
}