From 0adc3d20279b4d1054f742ff6f8418eb73e10827 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sun, 12 Feb 2023 23:20:27 -0800 Subject: [PATCH] create secret approval data model --- backend/src/models/secretApprovalRequest.ts | 84 +++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 backend/src/models/secretApprovalRequest.ts diff --git a/backend/src/models/secretApprovalRequest.ts b/backend/src/models/secretApprovalRequest.ts new file mode 100644 index 000000000..42828c9ee --- /dev/null +++ b/backend/src/models/secretApprovalRequest.ts @@ -0,0 +1,84 @@ +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; +} + +enum ApprovalStatus { + PENDING = 'pending', + APPROVED = 'approved', + REJECTED = 'rejected' +} + +enum RequestType { + UPDATE = 'update', + DELETE = 'delete', + CREATE = 'create' +} + +const approverSchema = new mongoose.Schema({ + userId: { + 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;