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:
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user