afc6da1606
- shared/kakeibo: grup devralma, banka maliyeti, kayıt bazında grup, grup özeti (saf, testli) - kategori ve işlem/kalem modellerine kakeiboGroup ve bankCost; form şemaları - migration 016 varsayılanları doldurur; npm run migrate -- --down <ad> ile geri alma - Kakeibo rapor servisi: tutarlar bütçeyle aynı kaynaktan, grup değiştirmeler taşınır Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
44 lines
1.7 KiB
TypeScript
44 lines
1.7 KiB
TypeScript
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": "" } },
|
||
);
|
||
},
|
||
};
|