import { defaultKakeibo } from "@/features/categories/service"; import { CategoryModel } from "@/models/category"; import { TransactionModel } from "@/models/transaction"; import type { Migration } from "./types"; /** * Kakeibo dört grup (Faz 16): gider kategorilerine `kakeiboGroup` ve `bankCost`. Varsayılan * kategoriler beceri eşlemesine göre doldurulur; kullanıcının kategorileri grupsuz kalır (arayüz * "grup seç" uyarısı gösterir). Alanı zaten olan kategoriye dokunulmaz. Hiçbir kategori silinmez. * Geri alma: alanlar kaldırılır (npm run migrate -- --down 016-kakeibo-groups). */ export const migration: Migration = { name: "016-kakeibo-groups", description: "gider kategorilerine Kakeibo grubu ve banka maliyeti; varsayılanlar dolduruldu", async up() { const defaults = await CategoryModel.find({ kind: "expense", defaultKey: { $type: "string" }, kakeiboGroup: { $exists: false }, }) .select({ defaultKey: 1 }) .lean<{ _id: unknown; defaultKey: string }[]>(); const ops = defaults.map((c) => ({ updateOne: { filter: { _id: c._id }, update: { $set: defaultKakeibo(c.defaultKey) } }, })); if (ops.length) await CategoryModel.bulkWrite(ops); await CategoryModel.updateMany( { kakeiboGroup: { $exists: false } }, { $set: { kakeiboGroup: null, bankCost: false } }, ); }, async down() { await CategoryModel.updateMany({}, { $unset: { kakeiboGroup: "", bankCost: "" } }); await TransactionModel.updateMany( { kakeiboGroup: { $exists: true } }, { $unset: { kakeiboGroup: "" } }, ); await TransactionModel.updateMany( { "splits.kakeiboGroup": { $exists: true } }, { $unset: { "splits.$[].kakeiboGroup": "" } }, ); }, };