-
Notifications
You must be signed in to change notification settings - Fork 232
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add IncidentLog and ScheduledMaintenanceLog tables with migrations
- Loading branch information
Showing
9 changed files
with
1,459 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,394 @@ | ||
import Alert from "./Alert"; | ||
import Project from "./Project"; | ||
import User from "./User"; | ||
import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel"; | ||
import Route from "../../Types/API/Route"; | ||
import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl"; | ||
import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl"; | ||
import CanAccessIfCanReadOn from "../../Types/Database/CanAccessIfCanReadOn"; | ||
import ColumnType from "../../Types/Database/ColumnType"; | ||
import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint"; | ||
import EnableDocumentation from "../../Types/Database/EnableDocumentation"; | ||
import EnableWorkflow from "../../Types/Database/EnableWorkflow"; | ||
import TableColumn from "../../Types/Database/TableColumn"; | ||
import TableColumnType from "../../Types/Database/TableColumnType"; | ||
import TableMetadata from "../../Types/Database/TableMetadata"; | ||
import TenantColumn from "../../Types/Database/TenantColumn"; | ||
import IconProp from "../../Types/Icon/IconProp"; | ||
import ObjectID from "../../Types/ObjectID"; | ||
import Permission from "../../Types/Permission"; | ||
import { Column, Entity, Index, JoinColumn, ManyToOne } from "typeorm"; | ||
|
||
export enum AlertLogEvent { | ||
PublicNote = "PublicNote", | ||
SubscriberEmailSent = "SubscriberEmailSent", | ||
OwnerEmailSent = "OwnerEmailSent", | ||
AlertCreated = "AlertCreated", | ||
AlertAcknowledged = "AlertAcknowledged", | ||
AlertResolved = "AlertResolved", | ||
PrivateNote = "PrivateNote", | ||
} | ||
|
||
@EnableDocumentation() | ||
@CanAccessIfCanReadOn("alert") | ||
@TenantColumn("projectId") | ||
@TableAccessControl({ | ||
create: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.CreateAlertLog, | ||
], | ||
read: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.ReadAlertLog, | ||
], | ||
delete: [], | ||
update: [], | ||
}) | ||
@EnableWorkflow({ | ||
create: true, | ||
delete: true, | ||
update: true, | ||
read: true, | ||
}) | ||
@CrudApiEndpoint(new Route("/alert-log")) | ||
@Entity({ | ||
name: "AlertLog", | ||
}) | ||
@TableMetadata({ | ||
tableName: "AlertLog", | ||
singularName: "Alert Log", | ||
pluralName: "Alert Logs", | ||
icon: IconProp.List, | ||
tableDescription: | ||
"Log of the entire alert state change. This is a log of all the alert state changes, public notes, more etc.", | ||
}) | ||
export default class AlertLog extends BaseModel { | ||
@ColumnAccessControl({ | ||
create: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.CreateAlertLog, | ||
], | ||
read: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.ReadAlertLog, | ||
], | ||
update: [], | ||
}) | ||
@TableColumn({ | ||
manyToOneRelationColumn: "projectId", | ||
type: TableColumnType.Entity, | ||
modelType: Project, | ||
title: "Project", | ||
description: "Relation to Project Resource in which this object belongs", | ||
}) | ||
@ManyToOne( | ||
() => { | ||
return Project; | ||
}, | ||
{ | ||
eager: false, | ||
nullable: true, | ||
onDelete: "CASCADE", | ||
orphanedRowAction: "nullify", | ||
}, | ||
) | ||
@JoinColumn({ name: "projectId" }) | ||
public project?: Project = undefined; | ||
|
||
@ColumnAccessControl({ | ||
create: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.CreateAlertLog, | ||
], | ||
read: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.ReadAlertLog, | ||
], | ||
update: [], | ||
}) | ||
@Index() | ||
@TableColumn({ | ||
type: TableColumnType.ObjectID, | ||
required: true, | ||
canReadOnRelationQuery: true, | ||
title: "Project ID", | ||
description: "ID of your OneUptime Project in which this object belongs", | ||
}) | ||
@Column({ | ||
type: ColumnType.ObjectID, | ||
nullable: false, | ||
transformer: ObjectID.getDatabaseTransformer(), | ||
}) | ||
public projectId?: ObjectID = undefined; | ||
|
||
@ColumnAccessControl({ | ||
create: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.CreateAlertLog, | ||
], | ||
read: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.ReadAlertLog, | ||
], | ||
update: [], | ||
}) | ||
@TableColumn({ | ||
manyToOneRelationColumn: "alertId", | ||
type: TableColumnType.Entity, | ||
modelType: Alert, | ||
title: "Alert", | ||
description: "Relation to Alert in which this resource belongs", | ||
}) | ||
@ManyToOne( | ||
() => { | ||
return Alert; | ||
}, | ||
{ | ||
eager: false, | ||
nullable: true, | ||
onDelete: "CASCADE", | ||
orphanedRowAction: "nullify", | ||
}, | ||
) | ||
@JoinColumn({ name: "alertId" }) | ||
public alert?: Alert = undefined; | ||
|
||
@ColumnAccessControl({ | ||
create: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.CreateAlertLog, | ||
], | ||
read: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.ReadAlertLog, | ||
], | ||
update: [], | ||
}) | ||
@Index() | ||
@TableColumn({ | ||
type: TableColumnType.ObjectID, | ||
required: true, | ||
title: "Alert ID", | ||
description: "Relation to Alert ID in which this resource belongs", | ||
}) | ||
@Column({ | ||
type: ColumnType.ObjectID, | ||
nullable: false, | ||
transformer: ObjectID.getDatabaseTransformer(), | ||
}) | ||
public alertId?: ObjectID = undefined; | ||
|
||
@ColumnAccessControl({ | ||
create: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.CreateAlertLog, | ||
], | ||
read: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.ReadAlertLog, | ||
], | ||
update: [], | ||
}) | ||
@TableColumn({ | ||
manyToOneRelationColumn: "createdByUserId", | ||
type: TableColumnType.Entity, | ||
modelType: User, | ||
title: "Created by User", | ||
description: | ||
"Relation to User who created this object (if this object was created by a User)", | ||
}) | ||
@ManyToOne( | ||
() => { | ||
return User; | ||
}, | ||
{ | ||
eager: false, | ||
nullable: true, | ||
onDelete: "SET NULL", | ||
orphanedRowAction: "nullify", | ||
}, | ||
) | ||
@JoinColumn({ name: "createdByUserId" }) | ||
public createdByUser?: User = undefined; | ||
|
||
@ColumnAccessControl({ | ||
create: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.CreateAlertLog, | ||
], | ||
read: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.ReadAlertLog, | ||
], | ||
update: [], | ||
}) | ||
@TableColumn({ | ||
type: TableColumnType.ObjectID, | ||
title: "Created by User ID", | ||
description: | ||
"User ID who created this object (if this object was created by a User)", | ||
}) | ||
@Column({ | ||
type: ColumnType.ObjectID, | ||
nullable: true, | ||
transformer: ObjectID.getDatabaseTransformer(), | ||
}) | ||
public createdByUserId?: ObjectID = undefined; | ||
|
||
@ColumnAccessControl({ | ||
create: [], | ||
read: [], | ||
update: [], | ||
}) | ||
@TableColumn({ | ||
manyToOneRelationColumn: "deletedByUserId", | ||
type: TableColumnType.Entity, | ||
title: "Deleted by User", | ||
description: | ||
"Relation to User who deleted this object (if this object was deleted by a User)", | ||
}) | ||
@ManyToOne( | ||
() => { | ||
return User; | ||
}, | ||
{ | ||
cascade: false, | ||
eager: false, | ||
nullable: true, | ||
onDelete: "SET NULL", | ||
orphanedRowAction: "nullify", | ||
}, | ||
) | ||
@JoinColumn({ name: "deletedByUserId" }) | ||
public deletedByUser?: User = undefined; | ||
|
||
@ColumnAccessControl({ | ||
create: [], | ||
read: [], | ||
update: [], | ||
}) | ||
@TableColumn({ | ||
type: TableColumnType.ObjectID, | ||
title: "Deleted by User ID", | ||
description: | ||
"User ID who deleted this object (if this object was deleted by a User)", | ||
}) | ||
@Column({ | ||
type: ColumnType.ObjectID, | ||
nullable: true, | ||
transformer: ObjectID.getDatabaseTransformer(), | ||
}) | ||
public deletedByUserId?: ObjectID = undefined; | ||
|
||
@ColumnAccessControl({ | ||
create: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.CreateAlertLog, | ||
], | ||
read: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.ReadAlertLog, | ||
], | ||
update: [], | ||
}) | ||
@TableColumn({ | ||
type: TableColumnType.Markdown, | ||
required: true, | ||
title: "Log (in Markdown)", | ||
description: "Log of the entire alert state change in Markdown", | ||
}) | ||
@Column({ | ||
type: ColumnType.Markdown, | ||
nullable: false, | ||
unique: false, | ||
}) | ||
public logInMarkdown?: string = undefined; | ||
|
||
@ColumnAccessControl({ | ||
create: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.CreateAlertLog, | ||
], | ||
read: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.ReadAlertLog, | ||
], | ||
update: [], | ||
}) | ||
@TableColumn({ | ||
type: TableColumnType.Markdown, | ||
required: true, | ||
title: "More Information (in Markdown)", | ||
description: "More information in Markdown", | ||
}) | ||
@Column({ | ||
type: ColumnType.Markdown, | ||
nullable: false, | ||
unique: false, | ||
}) | ||
public moreInformationInMarkdown?: string = undefined; | ||
|
||
@ColumnAccessControl({ | ||
create: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.CreateAlertLog, | ||
], | ||
read: [ | ||
Permission.ProjectOwner, | ||
Permission.ProjectAdmin, | ||
Permission.ProjectMember, | ||
Permission.ReadAlertLog, | ||
], | ||
update: [], | ||
}) | ||
@TableColumn({ | ||
type: TableColumnType.ShortText, | ||
required: true, | ||
title: "Alert Log Event", | ||
description: "Alert Log Event", | ||
}) | ||
@Column({ | ||
type: ColumnType.ShortText, | ||
nullable: false, | ||
unique: false, | ||
}) | ||
public alertLogEvent?: AlertLogEvent = undefined; | ||
} |
Oops, something went wrong.