import type { Types } from "mongoose"; import { createTransaction } from "@/features/transactions/service"; import { AccountModel } from "@/models/account"; import { CategoryModel } from "@/models/category"; import { TransactionModel } from "@/models/transaction"; import { todayIstanbul } from "@/shared/dates"; import { addDays } from "@/shared/recurrence"; /** * Örnek taksitli kart harcamaları (Faz 7b): bir kısmı gerçekleşmiş, kalanı planlı taksitler. * İdempotent: aynı satıcıyla taksit planı varsa atlanır. */ const PURCHASES = [ { payee: "Hepsiburada", description: "Çamaşır makinesi", amountMinor: 18_000_00, count: 9, daysAgo: 75, category: "ev", by: "admin", }, { payee: "Teknosa", description: "Telefon", amountMinor: 12_000_00, count: 6, daysAgo: 20, category: "diger-gider", by: "emre", }, ]; export async function seedInstallments( householdId: Types.ObjectId, userIds: Map, ): Promise { const today = todayIstanbul(); const card = await AccountModel.findOne({ householdId, name: "Garanti Bonus" }).lean(); if (!card) return 0; let created = 0; for (const p of PURCHASES) { const exists = await TransactionModel.exists({ householdId, payeeName: p.payee, "installment.planId": { $type: "objectId" }, }); if (exists) continue; const category = await CategoryModel.findOne({ householdId, defaultKey: p.category }).lean(); const r = await createTransaction(userIds.get(p.by)!, String(householdId), { type: "expense", amount: p.amountMinor, date: addDays(today, -p.daysAgo), accountId: String(card._id), toAccountId: null, categoryId: String(category!._id), splits: [], payee: p.payee, description: p.description, tags: [], installments: p.count, attachmentIds: [], }); if (!r.ok) throw new Error(`Seed taksiti oluşturulamadı (${p.payee}): ${r.error}`); created++; } return created; }