1208e2d1eb
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
26 lines
1.1 KiB
TypeScript
26 lines
1.1 KiB
TypeScript
import { model, models, Schema, type InferSchemaType, type Model } from "mongoose";
|
||
import { TRANSACTION_TYPES } from "@/shared/transactions";
|
||
|
||
/** Satıcı / karşı taraf ve "akıllı giriş" kuralı: son kullanılan kategori ve hesap (Bölüm 6.3). */
|
||
const payeeSchema = new Schema(
|
||
{
|
||
householdId: { type: Schema.Types.ObjectId, required: true },
|
||
name: { type: String, required: true, trim: true, maxlength: 80 },
|
||
nameKey: { type: String, required: true },
|
||
lastType: { type: String, enum: TRANSACTION_TYPES, default: "expense" },
|
||
lastCategoryId: { type: Schema.Types.ObjectId, default: null },
|
||
lastAccountId: { type: Schema.Types.ObjectId, default: null },
|
||
useCount: { type: Number, default: 0 },
|
||
lastUsedAt: { type: Date, default: () => new Date() },
|
||
},
|
||
{ timestamps: true, collection: "payees" },
|
||
);
|
||
|
||
payeeSchema.index({ householdId: 1, nameKey: 1 }, { unique: true });
|
||
payeeSchema.index({ householdId: 1, useCount: -1 });
|
||
|
||
export type Payee = InferSchemaType<typeof payeeSchema>;
|
||
|
||
export const PayeeModel: Model<Payee> =
|
||
(models.Payee as Model<Payee> | undefined) ?? model<Payee>("Payee", payeeSchema);
|