diff --git a/server/src/db/models/Monitor.ts b/server/src/db/models/Monitor.ts index a92e9331c..e6bffddd8 100644 --- a/server/src/db/models/Monitor.ts +++ b/server/src/db/models/Monitor.ts @@ -18,11 +18,12 @@ type CheckSnapshotDocument = Omit & { createdAt: Dat type MonitorDocumentBase = Omit< Monitor, - "id" | "userId" | "teamId" | "notifications" | "selectedDisks" | "statusWindow" | "recentChecks" | "createdAt" | "updatedAt" + "id" | "userId" | "teamId" | "notifications" | "tags" | "selectedDisks" | "statusWindow" | "recentChecks" | "createdAt" | "updatedAt" > & { statusWindow: boolean[]; recentChecks: CheckSnapshotDocument[]; notifications: Types.ObjectId[]; + tags: Types.ObjectId[]; selectedDisks: string[]; matchMethod?: MonitorMatchMethod; }; @@ -284,6 +285,12 @@ const MonitorSchema = new Schema( ref: "Notification", }, ], + tags: [ + { + type: Schema.Types.ObjectId, + ref: "Tag", + }, + ], secret: { type: String, }, diff --git a/server/src/db/models/Tag.ts b/server/src/db/models/Tag.ts new file mode 100644 index 000000000..df77aa7ab --- /dev/null +++ b/server/src/db/models/Tag.ts @@ -0,0 +1,33 @@ +import { Schema, model, type Types } from "mongoose"; +import type { Tag as TagEntity } from "@/types/index.js"; + +type TagDocumentBase = Omit; + +interface TagDocument extends TagDocumentBase { + _id: Types.ObjectId; + teamId: Types.ObjectId; + createdAt: Date; + updatedAt: Date; +} + +const TagSchema = new Schema( + { + teamId: { + type: Schema.Types.ObjectId, + ref: "Team", + immutable: true, + required: true, + }, + name: { type: String, required: true }, + color: { type: String, required: true, default: "#13715B" }, + }, + { timestamps: true } +); + +TagSchema.index({ teamId: 1, name: 1 }, { unique: true }); + +const TagModel = model("Tag", TagSchema); + +export type { TagDocument }; +export { TagModel }; +export default TagModel; diff --git a/server/src/db/models/index.ts b/server/src/db/models/index.ts index d4c8f1a3b..f0647f9eb 100644 --- a/server/src/db/models/index.ts +++ b/server/src/db/models/index.ts @@ -39,3 +39,5 @@ export { default as GeoCheckModel } from "@/db/models/GeoCheck.js"; export * from "@/db/models/DLQItem.js"; export { default as DLQItemModel } from "@/db/models/DLQItem.js"; +export * from "@/db/models/Tag.js"; +export { default as TagModel } from "@/db/models/Tag.js";