import mongoose, { Schema, model } from "mongoose"; import Secret, { ISecret } from "./secret"; interface ISecretApprovalRequest { secret: mongoose.Types.ObjectId; requestedChanges: ISecret; requestedBy: mongoose.Types.ObjectId; approvers: IApprover[]; status: ApprovalStatus; timestamp: Date; requestType: RequestType; requestId: string; } interface IApprover { userId: mongoose.Types.ObjectId; status: ApprovalStatus; } export enum ApprovalStatus { PENDING = "pending", APPROVED = "approved", REJECTED = "rejected" } export enum RequestType { UPDATE = "update", DELETE = "delete", CREATE = "create" } const approverSchema = new mongoose.Schema({ user: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true, }, status: { type: String, enum: [ApprovalStatus], default: ApprovalStatus.PENDING, }, }); const secretApprovalRequestSchema = new Schema( { secret: { type: mongoose.Schema.Types.ObjectId, ref: "Secret", }, requestedChanges: Secret, requestedBy: { type: mongoose.Schema.Types.ObjectId, ref: "User", }, approvers: [approverSchema], status: { type: String, enum: ApprovalStatus, default: ApprovalStatus.PENDING, }, timestamp: { type: Date, default: Date.now, }, requestType: { type: String, enum: RequestType, required: true, }, requestId: { type: String, required: false, }, }, { timestamps: true, } ); const SecretApprovalRequest = model("SecretApprovalRequest", secretApprovalRequestSchema); export default SecretApprovalRequest;