From f0cea15a4f85b47bf13b6db392f4ff97449d53c2 Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Tue, 1 Nov 2022 00:16:38 +0700 Subject: feat: More models and schema changes --- code/api/src/Data/Database/BaseWithOwner.cs | 2 ++ code/api/src/Data/Database/Customer/Customer.cs | 4 +-- code/api/src/Data/Database/MainAppDatabase.cs | 31 ++++++++++++++++++ code/api/src/Data/Database/Todo/Todo.cs | 22 +++++++------ code/api/src/Data/Database/Todo/TodoCollection.cs | 11 +++++++ .../Database/Todo/TodoCollectionAccessControl.cs | 12 +++++++ code/api/src/Data/Database/Todo/TodoComment.cs | 7 ++-- code/api/src/Data/Database/Todo/TodoProject.cs | 8 ----- .../Data/Database/Todo/TodoProjectAccessControl.cs | 11 ------- code/api/src/Data/Database/Todo/TodoStatus.cs | 37 ---------------------- code/api/src/Data/Enums/TodoClosingStatement.cs | 13 ++++++++ code/api/src/Data/Enums/TodoVisibility.cs | 2 +- 12 files changed, 89 insertions(+), 71 deletions(-) create mode 100644 code/api/src/Data/Database/Todo/TodoCollection.cs create mode 100644 code/api/src/Data/Database/Todo/TodoCollectionAccessControl.cs delete mode 100644 code/api/src/Data/Database/Todo/TodoProject.cs delete mode 100644 code/api/src/Data/Database/Todo/TodoProjectAccessControl.cs delete mode 100644 code/api/src/Data/Database/Todo/TodoStatus.cs create mode 100644 code/api/src/Data/Enums/TodoClosingStatement.cs (limited to 'code/api/src/Data') diff --git a/code/api/src/Data/Database/BaseWithOwner.cs b/code/api/src/Data/Database/BaseWithOwner.cs index 84b5bfe..ad9b33a 100644 --- a/code/api/src/Data/Database/BaseWithOwner.cs +++ b/code/api/src/Data/Database/BaseWithOwner.cs @@ -16,6 +16,8 @@ public class BaseWithOwner : Base public Guid? ModifiedBy { get; private set; } public Guid? CreatedBy { get; private set; } public Guid? DeletedBy { get; private set; } + public User OwningUser { get; set; } + public Tenant OwningTenant { get; set; } public void SetDeleted(Guid userId) { DeletedBy = userId; diff --git a/code/api/src/Data/Database/Customer/Customer.cs b/code/api/src/Data/Database/Customer/Customer.cs index f9953da..8e153c6 100644 --- a/code/api/src/Data/Database/Customer/Customer.cs +++ b/code/api/src/Data/Database/Customer/Customer.cs @@ -4,7 +4,7 @@ public class Customer : BaseWithOwner { public Customer() { } public Customer(LoggedInUserModel loggedInUserModel) : base(loggedInUserModel) { } - + public string CustomerNumber { get; set; } public string Name { get; set; } public string Description { get; set; } @@ -20,7 +20,7 @@ public class Customer : BaseWithOwner public string DefaultReference { get; set; } public string Website { get; set; } public string Currency { get; set; } - + public Guid? OwnerId { get; set; } public User Owner { get; set; } public ICollection Groups { get; set; } public ICollection Contacts { get; set; } diff --git a/code/api/src/Data/Database/MainAppDatabase.cs b/code/api/src/Data/Database/MainAppDatabase.cs index b529791..d6409e6 100644 --- a/code/api/src/Data/Database/MainAppDatabase.cs +++ b/code/api/src/Data/Database/MainAppDatabase.cs @@ -20,6 +20,11 @@ public class MainAppDatabase : DbContext, IDataProtectionKeyContext public DbSet CustomersContacts { get; set; } public DbSet CustomerEvents { get; set; } public DbSet CustomerGroups { get; set; } + public DbSet TodoLabels { get; set; } + public DbSet TodoProjectAccessControls { get; set; } + public DbSet TodoProjects { get; set; } + public DbSet TodoComments { get; set; } + public DbSet Todos { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity(e => { @@ -79,6 +84,32 @@ public class MainAppDatabase : DbContext, IDataProtectionKeyContext e.HasMany(n => n.Customers); e.ToTable("customer_groups"); }); + modelBuilder.Entity(e => { + e.HasOne(n => n.Collection); + e.HasOne(n => n.AssignedTo); + e.HasOne(n => n.ClosedBy); + e.HasMany(n => n.Labels); + e.HasMany(n => n.Comments); + e.ToTable("todos"); + }); + modelBuilder.Entity(e => { + e.HasOne(n => n.Project); + e.HasMany(n => n.AccessControls); + e.ToTable("todo_collections"); + }); + modelBuilder.Entity(e => { + e.HasOne(n => n.Todo); + e.ToTable("todo_comments"); + }); + modelBuilder.Entity(e => { + e.HasOne(n => n.Todo); + e.ToTable("todo_labels"); + }); + modelBuilder.Entity(e => { + e.HasOne(n => n.User); + e.HasOne(n => n.Collection); + e.ToTable("todo_collection_access_controls"); + }); base.OnModelCreating(modelBuilder); } diff --git a/code/api/src/Data/Database/Todo/Todo.cs b/code/api/src/Data/Database/Todo/Todo.cs index 5fe3c9a..2d7f109 100644 --- a/code/api/src/Data/Database/Todo/Todo.cs +++ b/code/api/src/Data/Database/Todo/Todo.cs @@ -2,12 +2,16 @@ namespace IOL.GreatOffice.Api.Data.Database; public class Todo : BaseWithOwner { - public int PublicId { get; set; } - public TodoStatus Status { get; set; } - public TodoProject Project { get; set; } - public Guid? AssignedUserId { get; set; } - public string Title { get; set; } - public string Description { get; set; } - public ICollection Labels { get; set; } - public ICollection Comments { get; set; } -} + public string PublicId { get; set; } + public Guid? AssignedToId { get; set; } + public Guid? ClosedById { get; set; } + public Guid CollectionId { get; set; } + public DateTime? ClosedAt { get; set; } + public string Title { get; set; } + public string Description { get; set; } + public ICollection Labels { get; set; } + public ICollection Comments { get; set; } + public User AssignedTo { get; set; } + public User ClosedBy { get; set; } + public TodoCollection Collection { get; set; } +} \ No newline at end of file diff --git a/code/api/src/Data/Database/Todo/TodoCollection.cs b/code/api/src/Data/Database/Todo/TodoCollection.cs new file mode 100644 index 0000000..470e5e7 --- /dev/null +++ b/code/api/src/Data/Database/Todo/TodoCollection.cs @@ -0,0 +1,11 @@ +namespace IOL.GreatOffice.Api.Data.Database; + +public class TodoCollection : BaseWithOwner +{ + public string Name { get; set; } + public string Description { get; set; } + public TodoVisibility Visibility { get; set; } + public Guid? ProjectId { get; set; } + public Project Project { get; set; } + public ICollection AccessControls { get; set; } +} \ No newline at end of file diff --git a/code/api/src/Data/Database/Todo/TodoCollectionAccessControl.cs b/code/api/src/Data/Database/Todo/TodoCollectionAccessControl.cs new file mode 100644 index 0000000..1676c06 --- /dev/null +++ b/code/api/src/Data/Database/Todo/TodoCollectionAccessControl.cs @@ -0,0 +1,12 @@ +namespace IOL.GreatOffice.Api.Data.Database; + +public class TodoCollectionAccessControl : Base +{ + public TodoCollection Collection { get; set; } + public User User { get; set; } + public Guid? UserId { get; set; } + public bool CanBrowse { get; set; } + public bool CanSubmit { get; set; } + public bool CanComment { get; set; } + public bool CanEdit { get; set; } +} \ No newline at end of file diff --git a/code/api/src/Data/Database/Todo/TodoComment.cs b/code/api/src/Data/Database/Todo/TodoComment.cs index 44dcbed..32ac3a3 100644 --- a/code/api/src/Data/Database/Todo/TodoComment.cs +++ b/code/api/src/Data/Database/Todo/TodoComment.cs @@ -2,6 +2,7 @@ namespace IOL.GreatOffice.Api.Data.Database; public class TodoComment : BaseWithOwner { - public string Value { get; set; } - public Todo Todo { get; set; } -} + public string Value { get; set; } + public Todo Todo { get; set; } + public TodoClosingStatement? ClosingStatement { get; set; } +} \ No newline at end of file diff --git a/code/api/src/Data/Database/Todo/TodoProject.cs b/code/api/src/Data/Database/Todo/TodoProject.cs deleted file mode 100644 index 5e22bbe..0000000 --- a/code/api/src/Data/Database/Todo/TodoProject.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace IOL.GreatOffice.Api.Data.Database; - -public class TodoProject : BaseWithOwner -{ - public string Name { get; set; } - public TodoVisibility Visibility { get; set; } - public Guid? ProjectId { get; set; } -} \ No newline at end of file diff --git a/code/api/src/Data/Database/Todo/TodoProjectAccessControl.cs b/code/api/src/Data/Database/Todo/TodoProjectAccessControl.cs deleted file mode 100644 index 964f831..0000000 --- a/code/api/src/Data/Database/Todo/TodoProjectAccessControl.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace IOL.GreatOffice.Api.Data.Database; - -public class TodoProjectAccessControl -{ - public TodoProject Project { get; set; } - public Guid? UserId { get; set; } - public bool Browse { get; set; } - public bool Submit { get; set; } - public bool Comment { get; set; } - public bool Edit { get; set; } -} diff --git a/code/api/src/Data/Database/Todo/TodoStatus.cs b/code/api/src/Data/Database/Todo/TodoStatus.cs deleted file mode 100644 index 9ace7d0..0000000 --- a/code/api/src/Data/Database/Todo/TodoStatus.cs +++ /dev/null @@ -1,37 +0,0 @@ -namespace IOL.GreatOffice.Api.Data.Database; - -public class TodoStatus : BaseWithOwner -{ - public string Name { get; set; } - public string Color { get; set; } - public Todo Todo { get; set; } - - public static List GetDefaultStatusSetForTenant(Guid tenantId) { - return new List() { - new() { - Name = "Reported", - }, - new() { - Name = "Resolved", - }, - new() { - Name = "Fixed", - }, - new() { - Name = "Implemented", - }, - new() { - Name = "Won't fix", - }, - new() { - Name = "By design", - }, - new() { - Name = "Invalid", - }, - new() { - Name = "Duplicate", - } - }; - } -} diff --git a/code/api/src/Data/Enums/TodoClosingStatement.cs b/code/api/src/Data/Enums/TodoClosingStatement.cs new file mode 100644 index 0000000..d838031 --- /dev/null +++ b/code/api/src/Data/Enums/TodoClosingStatement.cs @@ -0,0 +1,13 @@ +namespace IOL.GreatOffice.Api.Data.Enums; + +public enum TodoClosingStatement +{ + REPORTED, + RESOLVED, + FIXED, + IMPLEMENTED, + WONT_FIX, + BY_DESIGN, + INVALID, + DUPLICATE +} \ No newline at end of file diff --git a/code/api/src/Data/Enums/TodoVisibility.cs b/code/api/src/Data/Enums/TodoVisibility.cs index 8581ba9..2c8fa83 100644 --- a/code/api/src/Data/Enums/TodoVisibility.cs +++ b/code/api/src/Data/Enums/TodoVisibility.cs @@ -5,6 +5,6 @@ public enum TodoVisibility { PRIVATE = 0, UNLISTED = 1, - TENANT_WIDE = 2, + INTERNAL = 2, PUBLIC = 3, } \ No newline at end of file -- cgit v1.3