From 9357cbe026ac95dc77bdd389bc5aac20a7bb0ac9 Mon Sep 17 00:00:00 2001 From: minhtrannhat Date: Mon, 16 Dec 2024 12:00:00 -0500 Subject: [PATCH] feat(domain): add domain entities and enums --- src/IncidentOps.Domain/Entities/Incident.cs | 19 +++++++++++++++++++ .../Entities/IncidentEvent.cs | 13 +++++++++++++ .../Entities/NotificationAttempt.cs | 12 ++++++++++++ .../Entities/NotificationTarget.cs | 15 +++++++++++++++ src/IncidentOps.Domain/Entities/Org.cs | 10 ++++++++++ src/IncidentOps.Domain/Entities/OrgMember.cs | 13 +++++++++++++ .../Entities/RefreshToken.cs | 12 ++++++++++++ src/IncidentOps.Domain/Entities/Service.cs | 12 ++++++++++++ src/IncidentOps.Domain/Entities/User.cs | 11 +++++++++++ .../Enums/IncidentEventType.cs | 13 +++++++++++++ .../Enums/IncidentStatus.cs | 9 +++++++++ .../Enums/NotificationTargetType.cs | 8 ++++++++ src/IncidentOps.Domain/Enums/OrgRole.cs | 8 ++++++++ .../IncidentOps.Domain.csproj | 13 +++++++++++++ 14 files changed, 168 insertions(+) create mode 100644 src/IncidentOps.Domain/Entities/Incident.cs create mode 100644 src/IncidentOps.Domain/Entities/IncidentEvent.cs create mode 100644 src/IncidentOps.Domain/Entities/NotificationAttempt.cs create mode 100644 src/IncidentOps.Domain/Entities/NotificationTarget.cs create mode 100644 src/IncidentOps.Domain/Entities/Org.cs create mode 100644 src/IncidentOps.Domain/Entities/OrgMember.cs create mode 100644 src/IncidentOps.Domain/Entities/RefreshToken.cs create mode 100644 src/IncidentOps.Domain/Entities/Service.cs create mode 100644 src/IncidentOps.Domain/Entities/User.cs create mode 100644 src/IncidentOps.Domain/Enums/IncidentEventType.cs create mode 100644 src/IncidentOps.Domain/Enums/IncidentStatus.cs create mode 100644 src/IncidentOps.Domain/Enums/NotificationTargetType.cs create mode 100644 src/IncidentOps.Domain/Enums/OrgRole.cs create mode 100644 src/IncidentOps.Domain/IncidentOps.Domain.csproj diff --git a/src/IncidentOps.Domain/Entities/Incident.cs b/src/IncidentOps.Domain/Entities/Incident.cs new file mode 100644 index 0000000..b883600 --- /dev/null +++ b/src/IncidentOps.Domain/Entities/Incident.cs @@ -0,0 +1,19 @@ +using IncidentOps.Domain.Enums; + +namespace IncidentOps.Domain.Entities; + +public class Incident +{ + public Guid Id { get; set; } + public Guid OrgId { get; set; } + public Guid ServiceId { get; set; } + public required string Title { get; set; } + public string? Description { get; set; } + public IncidentStatus Status { get; set; } + public int Version { get; set; } + public Guid? AssignedToUserId { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime? AcknowledgedAt { get; set; } + public DateTime? MitigatedAt { get; set; } + public DateTime? ResolvedAt { get; set; } +} diff --git a/src/IncidentOps.Domain/Entities/IncidentEvent.cs b/src/IncidentOps.Domain/Entities/IncidentEvent.cs new file mode 100644 index 0000000..b8def78 --- /dev/null +++ b/src/IncidentOps.Domain/Entities/IncidentEvent.cs @@ -0,0 +1,13 @@ +using IncidentOps.Domain.Enums; + +namespace IncidentOps.Domain.Entities; + +public class IncidentEvent +{ + public Guid Id { get; set; } + public Guid IncidentId { get; set; } + public IncidentEventType EventType { get; set; } + public Guid? ActorUserId { get; set; } + public string? Payload { get; set; } + public DateTime CreatedAt { get; set; } +} diff --git a/src/IncidentOps.Domain/Entities/NotificationAttempt.cs b/src/IncidentOps.Domain/Entities/NotificationAttempt.cs new file mode 100644 index 0000000..7ba6e05 --- /dev/null +++ b/src/IncidentOps.Domain/Entities/NotificationAttempt.cs @@ -0,0 +1,12 @@ +namespace IncidentOps.Domain.Entities; + +public class NotificationAttempt +{ + public Guid Id { get; set; } + public Guid IncidentId { get; set; } + public Guid TargetId { get; set; } + public bool Success { get; set; } + public string? ErrorMessage { get; set; } + public int AttemptNumber { get; set; } + public DateTime CreatedAt { get; set; } +} diff --git a/src/IncidentOps.Domain/Entities/NotificationTarget.cs b/src/IncidentOps.Domain/Entities/NotificationTarget.cs new file mode 100644 index 0000000..20e4612 --- /dev/null +++ b/src/IncidentOps.Domain/Entities/NotificationTarget.cs @@ -0,0 +1,15 @@ +using IncidentOps.Domain.Enums; + +namespace IncidentOps.Domain.Entities; + +public class NotificationTarget +{ + public Guid Id { get; set; } + public Guid OrgId { get; set; } + public required string Name { get; set; } + public NotificationTargetType TargetType { get; set; } + public required string Configuration { get; set; } + public bool IsEnabled { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime? UpdatedAt { get; set; } +} diff --git a/src/IncidentOps.Domain/Entities/Org.cs b/src/IncidentOps.Domain/Entities/Org.cs new file mode 100644 index 0000000..e68df82 --- /dev/null +++ b/src/IncidentOps.Domain/Entities/Org.cs @@ -0,0 +1,10 @@ +namespace IncidentOps.Domain.Entities; + +public class Org +{ + public Guid Id { get; set; } + public required string Name { get; set; } + public required string Slug { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime? UpdatedAt { get; set; } +} diff --git a/src/IncidentOps.Domain/Entities/OrgMember.cs b/src/IncidentOps.Domain/Entities/OrgMember.cs new file mode 100644 index 0000000..5fba399 --- /dev/null +++ b/src/IncidentOps.Domain/Entities/OrgMember.cs @@ -0,0 +1,13 @@ +using IncidentOps.Domain.Enums; + +namespace IncidentOps.Domain.Entities; + +public class OrgMember +{ + public Guid Id { get; set; } + public Guid OrgId { get; set; } + public Guid UserId { get; set; } + public OrgRole Role { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime? UpdatedAt { get; set; } +} diff --git a/src/IncidentOps.Domain/Entities/RefreshToken.cs b/src/IncidentOps.Domain/Entities/RefreshToken.cs new file mode 100644 index 0000000..afd67d8 --- /dev/null +++ b/src/IncidentOps.Domain/Entities/RefreshToken.cs @@ -0,0 +1,12 @@ +namespace IncidentOps.Domain.Entities; + +public class RefreshToken +{ + public Guid Id { get; set; } + public Guid UserId { get; set; } + public required string TokenHash { get; set; } + public Guid ActiveOrgId { get; set; } + public DateTime ExpiresAt { get; set; } + public DateTime? RevokedAt { get; set; } + public DateTime CreatedAt { get; set; } +} diff --git a/src/IncidentOps.Domain/Entities/Service.cs b/src/IncidentOps.Domain/Entities/Service.cs new file mode 100644 index 0000000..2391d5d --- /dev/null +++ b/src/IncidentOps.Domain/Entities/Service.cs @@ -0,0 +1,12 @@ +namespace IncidentOps.Domain.Entities; + +public class Service +{ + public Guid Id { get; set; } + public Guid OrgId { get; set; } + public required string Name { get; set; } + public required string Slug { get; set; } + public string? Description { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime? UpdatedAt { get; set; } +} diff --git a/src/IncidentOps.Domain/Entities/User.cs b/src/IncidentOps.Domain/Entities/User.cs new file mode 100644 index 0000000..3edd362 --- /dev/null +++ b/src/IncidentOps.Domain/Entities/User.cs @@ -0,0 +1,11 @@ +namespace IncidentOps.Domain.Entities; + +public class User +{ + public Guid Id { get; set; } + public required string Email { get; set; } + public required string PasswordHash { get; set; } + public required string DisplayName { get; set; } + public DateTime CreatedAt { get; set; } + public DateTime? UpdatedAt { get; set; } +} diff --git a/src/IncidentOps.Domain/Enums/IncidentEventType.cs b/src/IncidentOps.Domain/Enums/IncidentEventType.cs new file mode 100644 index 0000000..230c226 --- /dev/null +++ b/src/IncidentOps.Domain/Enums/IncidentEventType.cs @@ -0,0 +1,13 @@ +namespace IncidentOps.Domain.Enums; + +public enum IncidentEventType +{ + Created, + Acknowledged, + Mitigated, + Resolved, + Comment, + NotificationSent, + NotificationFailed, + EscalationTriggered +} diff --git a/src/IncidentOps.Domain/Enums/IncidentStatus.cs b/src/IncidentOps.Domain/Enums/IncidentStatus.cs new file mode 100644 index 0000000..d23d792 --- /dev/null +++ b/src/IncidentOps.Domain/Enums/IncidentStatus.cs @@ -0,0 +1,9 @@ +namespace IncidentOps.Domain.Enums; + +public enum IncidentStatus +{ + Triggered, + Acknowledged, + Mitigated, + Resolved +} diff --git a/src/IncidentOps.Domain/Enums/NotificationTargetType.cs b/src/IncidentOps.Domain/Enums/NotificationTargetType.cs new file mode 100644 index 0000000..9834bff --- /dev/null +++ b/src/IncidentOps.Domain/Enums/NotificationTargetType.cs @@ -0,0 +1,8 @@ +namespace IncidentOps.Domain.Enums; + +public enum NotificationTargetType +{ + Webhook, + Email, + Slack +} diff --git a/src/IncidentOps.Domain/Enums/OrgRole.cs b/src/IncidentOps.Domain/Enums/OrgRole.cs new file mode 100644 index 0000000..d3962a6 --- /dev/null +++ b/src/IncidentOps.Domain/Enums/OrgRole.cs @@ -0,0 +1,8 @@ +namespace IncidentOps.Domain.Enums; + +public enum OrgRole +{ + Viewer, + Member, + Admin +} diff --git a/src/IncidentOps.Domain/IncidentOps.Domain.csproj b/src/IncidentOps.Domain/IncidentOps.Domain.csproj new file mode 100644 index 0000000..99ca63e --- /dev/null +++ b/src/IncidentOps.Domain/IncidentOps.Domain.csproj @@ -0,0 +1,13 @@ + + + + + + + + net10.0 + enable + enable + + +