aboutsummaryrefslogtreecommitdiffstats
path: root/code/api
diff options
context:
space:
mode:
Diffstat (limited to 'code/api')
-rw-r--r--code/api/src/Data/Database/MainAppDatabase.cs11
-rw-r--r--code/api/src/Migrations/20221114034213_RemoveTimeTracker.Designer.cs1589
-rw-r--r--code/api/src/Migrations/20221114034213_RemoveTimeTracker.cs177
3 files changed, 1766 insertions, 11 deletions
diff --git a/code/api/src/Data/Database/MainAppDatabase.cs b/code/api/src/Data/Database/MainAppDatabase.cs
index d6409e6..41d62a7 100644
--- a/code/api/src/Data/Database/MainAppDatabase.cs
+++ b/code/api/src/Data/Database/MainAppDatabase.cs
@@ -1,4 +1,3 @@
-using IOL.GreatOffice.Api.Endpoints.V1.Projects;
using Microsoft.AspNetCore.DataProtection.EntityFrameworkCore;
namespace IOL.GreatOffice.Api.Data.Database;
@@ -8,9 +7,6 @@ public class MainAppDatabase : DbContext, IDataProtectionKeyContext
public MainAppDatabase(DbContextOptions<MainAppDatabase> options) : base(options) { }
public DbSet<User> Users { get; set; }
public DbSet<ForgotPasswordRequest> ForgotPasswordRequests { get; set; }
- public DbSet<TimeLabel> TimeLabels { get; set; }
- public DbSet<TimeEntry> TimeEntries { get; set; }
- public DbSet<TimeCategory> TimeCategories { get; set; }
public DbSet<ApiAccessToken> AccessTokens { get; set; }
public DbSet<Tenant> Tenants { get; set; }
public DbSet<DataProtectionKey> DataProtectionKeys { get; set; }
@@ -35,13 +31,6 @@ public class MainAppDatabase : DbContext, IDataProtectionKeyContext
e.HasOne(c => c.User);
e.ToTable("forgot_password_requests");
});
- modelBuilder.Entity<TimeCategory>(e => { e.ToTable("time_categories"); });
- modelBuilder.Entity<TimeLabel>(e => { e.ToTable("time_labels"); });
- modelBuilder.Entity<TimeEntry>(e => {
- e.HasOne(c => c.Category);
- e.HasMany(c => c.Labels);
- e.ToTable("time_entries");
- });
modelBuilder.Entity<ApiAccessToken>(e => {
e.HasOne(n => n.User);
e.ToTable("api_access_tokens");
diff --git a/code/api/src/Migrations/20221114034213_RemoveTimeTracker.Designer.cs b/code/api/src/Migrations/20221114034213_RemoveTimeTracker.Designer.cs
new file mode 100644
index 0000000..c649575
--- /dev/null
+++ b/code/api/src/Migrations/20221114034213_RemoveTimeTracker.Designer.cs
@@ -0,0 +1,1589 @@
+// <auto-generated />
+using System;
+using IOL.GreatOffice.Api.Data.Database;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace IOL.GreatOffice.Api.Migrations
+{
+ [DbContext(typeof(MainAppDatabase))]
+ [Migration("20221114034213_RemoveTimeTracker")]
+ partial class RemoveTimeTracker
+ {
+ /// <inheritdoc />
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "7.0.0")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("CustomerCustomerGroup", b =>
+ {
+ b.Property<Guid>("CustomersId")
+ .HasColumnType("uuid")
+ .HasColumnName("customers_id");
+
+ b.Property<Guid>("GroupsId")
+ .HasColumnType("uuid")
+ .HasColumnName("groups_id");
+
+ b.HasKey("CustomersId", "GroupsId")
+ .HasName("pk_customer_customer_group");
+
+ b.HasIndex("GroupsId")
+ .HasDatabaseName("ix_customer_customer_group_groups_id");
+
+ b.ToTable("customer_customer_group", (string)null);
+ });
+
+ modelBuilder.Entity("CustomerProject", b =>
+ {
+ b.Property<Guid>("CustomersId")
+ .HasColumnType("uuid")
+ .HasColumnName("customers_id");
+
+ b.Property<Guid>("ProjectsId")
+ .HasColumnType("uuid")
+ .HasColumnName("projects_id");
+
+ b.HasKey("CustomersId", "ProjectsId")
+ .HasName("pk_customer_project");
+
+ b.HasIndex("ProjectsId")
+ .HasDatabaseName("ix_customer_project_projects_id");
+
+ b.ToTable("customer_project", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.ApiAccessToken", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<bool>("AllowCreate")
+ .HasColumnType("boolean")
+ .HasColumnName("allow_create");
+
+ b.Property<bool>("AllowDelete")
+ .HasColumnType("boolean")
+ .HasColumnName("allow_delete");
+
+ b.Property<bool>("AllowRead")
+ .HasColumnType("boolean")
+ .HasColumnName("allow_read");
+
+ b.Property<bool>("AllowUpdate")
+ .HasColumnType("boolean")
+ .HasColumnName("allow_update");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<DateTime>("ExpiryDate")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("expiry_date");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_api_access_tokens");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_api_access_tokens_user_id");
+
+ b.ToTable("api_access_tokens", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Customer", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<string>("Address1")
+ .HasColumnType("text")
+ .HasColumnName("address1");
+
+ b.Property<string>("Address2")
+ .HasColumnType("text")
+ .HasColumnName("address2");
+
+ b.Property<string>("Country")
+ .HasColumnType("text")
+ .HasColumnName("country");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid?>("CreatedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("created_by");
+
+ b.Property<string>("Currency")
+ .HasColumnType("text")
+ .HasColumnName("currency");
+
+ b.Property<string>("CustomerNumber")
+ .HasColumnType("text")
+ .HasColumnName("customer_number");
+
+ b.Property<string>("DefaultReference")
+ .HasColumnType("text")
+ .HasColumnName("default_reference");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<Guid?>("DeletedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("deleted_by");
+
+ b.Property<string>("Description")
+ .HasColumnType("text")
+ .HasColumnName("description");
+
+ b.Property<string>("Email")
+ .HasColumnType("text")
+ .HasColumnName("email");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ModifiedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("modified_by");
+
+ b.Property<string>("Name")
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property<string>("ORGNumber")
+ .HasColumnType("text")
+ .HasColumnName("org_number");
+
+ b.Property<Guid?>("OwnerId")
+ .HasColumnType("uuid")
+ .HasColumnName("owner_id");
+
+ b.Property<string>("Phone")
+ .HasColumnType("text")
+ .HasColumnName("phone");
+
+ b.Property<string>("PostalCity")
+ .HasColumnType("text")
+ .HasColumnName("postal_city");
+
+ b.Property<string>("PostalCode")
+ .HasColumnType("text")
+ .HasColumnName("postal_code");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.Property<string>("VATNumber")
+ .HasColumnType("text")
+ .HasColumnName("vat_number");
+
+ b.Property<string>("Website")
+ .HasColumnType("text")
+ .HasColumnName("website");
+
+ b.HasKey("Id")
+ .HasName("pk_customers");
+
+ b.HasIndex("OwnerId")
+ .HasDatabaseName("ix_customers_owner_id");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_customers_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_customers_user_id");
+
+ b.ToTable("customers", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.CustomerContact", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid?>("CreatedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("created_by");
+
+ b.Property<Guid?>("CustomerId")
+ .HasColumnType("uuid")
+ .HasColumnName("customer_id");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<Guid?>("DeletedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("deleted_by");
+
+ b.Property<string>("Email")
+ .HasColumnType("text")
+ .HasColumnName("email");
+
+ b.Property<string>("FirstName")
+ .HasColumnType("text")
+ .HasColumnName("first_name");
+
+ b.Property<string>("LastName")
+ .HasColumnType("text")
+ .HasColumnName("last_name");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ModifiedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("modified_by");
+
+ b.Property<string>("Note")
+ .HasColumnType("text")
+ .HasColumnName("note");
+
+ b.Property<string>("Phone")
+ .HasColumnType("text")
+ .HasColumnName("phone");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.Property<string>("WorkTitle")
+ .HasColumnType("text")
+ .HasColumnName("work_title");
+
+ b.HasKey("Id")
+ .HasName("pk_customer_contacts");
+
+ b.HasIndex("CustomerId")
+ .HasDatabaseName("ix_customer_contacts_customer_id");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_customer_contacts_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_customer_contacts_user_id");
+
+ b.ToTable("customer_contacts", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.CustomerEvent", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid?>("CreatedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("created_by");
+
+ b.Property<Guid?>("CustomerId")
+ .HasColumnType("uuid")
+ .HasColumnName("customer_id");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<Guid?>("DeletedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("deleted_by");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ModifiedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("modified_by");
+
+ b.Property<string>("Note")
+ .HasColumnType("text")
+ .HasColumnName("note");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<string>("Title")
+ .HasColumnType("text")
+ .HasColumnName("title");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_customer_events");
+
+ b.HasIndex("CustomerId")
+ .HasDatabaseName("ix_customer_events_customer_id");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_customer_events_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_customer_events_user_id");
+
+ b.ToTable("customer_events", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.CustomerGroup", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid?>("CreatedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("created_by");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<Guid?>("DeletedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("deleted_by");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ModifiedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("modified_by");
+
+ b.Property<string>("Name")
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_customer_groups");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_customer_groups_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_customer_groups_user_id");
+
+ b.ToTable("customer_groups", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.PasswordResetRequest", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_forgot_password_requests");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_forgot_password_requests_user_id");
+
+ b.ToTable("forgot_password_requests", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Project", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid?>("CreatedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("created_by");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<Guid?>("DeletedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("deleted_by");
+
+ b.Property<string>("Description")
+ .HasColumnType("text")
+ .HasColumnName("description");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ModifiedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("modified_by");
+
+ b.Property<string>("Name")
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property<DateTime?>("Start")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("start");
+
+ b.Property<DateTime?>("Stop")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("stop");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_projects");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_projects_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_projects_user_id");
+
+ b.ToTable("projects", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.ProjectLabel", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<string>("Color")
+ .HasColumnType("text")
+ .HasColumnName("color");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid?>("CreatedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("created_by");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<Guid?>("DeletedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("deleted_by");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ModifiedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("modified_by");
+
+ b.Property<Guid?>("ProjectId")
+ .HasColumnType("uuid")
+ .HasColumnName("project_id");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.Property<string>("Value")
+ .HasColumnType("text")
+ .HasColumnName("value");
+
+ b.HasKey("Id")
+ .HasName("pk_project_labels");
+
+ b.HasIndex("ProjectId")
+ .HasDatabaseName("ix_project_labels_project_id");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_project_labels_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_project_labels_user_id");
+
+ b.ToTable("project_labels", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.ProjectMember", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ProjectId")
+ .HasColumnType("uuid")
+ .HasColumnName("project_id");
+
+ b.Property<int>("Role")
+ .HasColumnType("integer")
+ .HasColumnName("role");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_project_members");
+
+ b.HasIndex("ProjectId")
+ .HasDatabaseName("ix_project_members_project_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_project_members_user_id");
+
+ b.ToTable("project_members", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Tenant", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<string>("ContactEmail")
+ .HasColumnType("text")
+ .HasColumnName("contact_email");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid?>("CreatedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("created_by");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<Guid?>("DeletedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("deleted_by");
+
+ b.Property<string>("Description")
+ .HasColumnType("text")
+ .HasColumnName("description");
+
+ b.Property<Guid>("MasterUserId")
+ .HasColumnType("uuid")
+ .HasColumnName("master_user_id");
+
+ b.Property<string>("MasterUserPassword")
+ .HasColumnType("text")
+ .HasColumnName("master_user_password");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ModifiedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("modified_by");
+
+ b.Property<string>("Name")
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property<Guid?>("OwningTenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("owning_tenant_id");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_tenants");
+
+ b.HasIndex("OwningTenantId")
+ .HasDatabaseName("ix_tenants_owning_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_tenants_user_id");
+
+ b.ToTable("tenants", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Todo", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<Guid?>("AssignedToId")
+ .HasColumnType("uuid")
+ .HasColumnName("assigned_to_id");
+
+ b.Property<DateTime?>("ClosedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("closed_at");
+
+ b.Property<Guid?>("ClosedById")
+ .HasColumnType("uuid")
+ .HasColumnName("closed_by_id");
+
+ b.Property<Guid>("CollectionId")
+ .HasColumnType("uuid")
+ .HasColumnName("collection_id");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid?>("CreatedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("created_by");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<Guid?>("DeletedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("deleted_by");
+
+ b.Property<string>("Description")
+ .HasColumnType("text")
+ .HasColumnName("description");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ModifiedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("modified_by");
+
+ b.Property<string>("PublicId")
+ .HasColumnType("text")
+ .HasColumnName("public_id");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<string>("Title")
+ .HasColumnType("text")
+ .HasColumnName("title");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_todos");
+
+ b.HasIndex("AssignedToId")
+ .HasDatabaseName("ix_todos_assigned_to_id");
+
+ b.HasIndex("ClosedById")
+ .HasDatabaseName("ix_todos_closed_by_id");
+
+ b.HasIndex("CollectionId")
+ .HasDatabaseName("ix_todos_collection_id");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_todos_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_todos_user_id");
+
+ b.ToTable("todos", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TodoCollection", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid?>("CreatedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("created_by");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<Guid?>("DeletedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("deleted_by");
+
+ b.Property<string>("Description")
+ .HasColumnType("text")
+ .HasColumnName("description");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ModifiedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("modified_by");
+
+ b.Property<string>("Name")
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property<Guid?>("ProjectId")
+ .HasColumnType("uuid")
+ .HasColumnName("project_id");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.Property<int>("Visibility")
+ .HasColumnType("integer")
+ .HasColumnName("visibility");
+
+ b.HasKey("Id")
+ .HasName("pk_todo_collections");
+
+ b.HasIndex("ProjectId")
+ .HasDatabaseName("ix_todo_collections_project_id");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_todo_collections_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_todo_collections_user_id");
+
+ b.ToTable("todo_collections", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TodoCollectionAccessControl", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<bool>("CanBrowse")
+ .HasColumnType("boolean")
+ .HasColumnName("can_browse");
+
+ b.Property<bool>("CanComment")
+ .HasColumnType("boolean")
+ .HasColumnName("can_comment");
+
+ b.Property<bool>("CanEdit")
+ .HasColumnType("boolean")
+ .HasColumnName("can_edit");
+
+ b.Property<bool>("CanSubmit")
+ .HasColumnType("boolean")
+ .HasColumnName("can_submit");
+
+ b.Property<Guid?>("CollectionId")
+ .HasColumnType("uuid")
+ .HasColumnName("collection_id");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_todo_collection_access_controls");
+
+ b.HasIndex("CollectionId")
+ .HasDatabaseName("ix_todo_collection_access_controls_collection_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_todo_collection_access_controls_user_id");
+
+ b.ToTable("todo_collection_access_controls", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TodoComment", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<int?>("ClosingStatement")
+ .HasColumnType("integer")
+ .HasColumnName("closing_statement");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid?>("CreatedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("created_by");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<Guid?>("DeletedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("deleted_by");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ModifiedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("modified_by");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<Guid?>("TodoId")
+ .HasColumnType("uuid")
+ .HasColumnName("todo_id");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.Property<string>("Value")
+ .HasColumnType("text")
+ .HasColumnName("value");
+
+ b.HasKey("Id")
+ .HasName("pk_todo_comments");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_todo_comments_tenant_id");
+
+ b.HasIndex("TodoId")
+ .HasDatabaseName("ix_todo_comments_todo_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_todo_comments_user_id");
+
+ b.ToTable("todo_comments", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TodoLabel", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<string>("Color")
+ .HasColumnType("text")
+ .HasColumnName("color");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<Guid?>("CreatedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("created_by");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<Guid?>("DeletedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("deleted_by");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<Guid?>("ModifiedBy")
+ .HasColumnType("uuid")
+ .HasColumnName("modified_by");
+
+ b.Property<string>("Name")
+ .HasColumnType("text")
+ .HasColumnName("name");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<Guid?>("TodoId")
+ .HasColumnType("uuid")
+ .HasColumnName("todo_id");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_todo_labels");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_todo_labels_tenant_id");
+
+ b.HasIndex("TodoId")
+ .HasDatabaseName("ix_todo_labels_todo_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_todo_labels_user_id");
+
+ b.ToTable("todo_labels", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.User", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<DateTime>("CreatedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("created_at");
+
+ b.Property<bool>("Deleted")
+ .HasColumnType("boolean")
+ .HasColumnName("deleted");
+
+ b.Property<DateTime?>("DeletedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("deleted_at");
+
+ b.Property<string>("Email")
+ .HasColumnType("text")
+ .HasColumnName("email");
+
+ b.Property<string>("FirstName")
+ .HasColumnType("text")
+ .HasColumnName("first_name");
+
+ b.Property<string>("LastName")
+ .HasColumnType("text")
+ .HasColumnName("last_name");
+
+ b.Property<DateTime?>("ModifiedAt")
+ .HasColumnType("timestamp with time zone")
+ .HasColumnName("modified_at");
+
+ b.Property<string>("Password")
+ .HasColumnType("text")
+ .HasColumnName("password");
+
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
+ b.Property<string>("Username")
+ .HasColumnType("text")
+ .HasColumnName("username");
+
+ b.HasKey("Id")
+ .HasName("pk_users");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_users_tenant_id");
+
+ b.ToTable("users", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b =>
+ {
+ b.Property<int>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasColumnName("id");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
+
+ b.Property<string>("FriendlyName")
+ .HasColumnType("text")
+ .HasColumnName("friendly_name");
+
+ b.Property<string>("Xml")
+ .HasColumnType("text")
+ .HasColumnName("xml");
+
+ b.HasKey("Id")
+ .HasName("pk_data_protection_keys");
+
+ b.ToTable("data_protection_keys", (string)null);
+ });
+
+ modelBuilder.Entity("CustomerCustomerGroup", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Customer", null)
+ .WithMany()
+ .HasForeignKey("CustomersId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_customer_customer_group_customers_customers_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.CustomerGroup", null)
+ .WithMany()
+ .HasForeignKey("GroupsId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_customer_customer_group_customer_groups_groups_id");
+ });
+
+ modelBuilder.Entity("CustomerProject", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Customer", null)
+ .WithMany()
+ .HasForeignKey("CustomersId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_customer_project_customers_customers_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Project", null)
+ .WithMany()
+ .HasForeignKey("ProjectsId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_customer_project_projects_projects_id");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.ApiAccessToken", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "User")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_api_access_tokens_users_user_id");
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Customer", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "Owner")
+ .WithMany()
+ .HasForeignKey("OwnerId")
+ .HasConstraintName("fk_customers_users_owner_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_customers_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_customers_users_user_id");
+
+ b.Navigation("Owner");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.CustomerContact", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Customer", "Customer")
+ .WithMany("Contacts")
+ .HasForeignKey("CustomerId")
+ .HasConstraintName("fk_customer_contacts_customers_customer_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_customer_contacts_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_customer_contacts_users_user_id");
+
+ b.Navigation("Customer");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.CustomerEvent", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Customer", "Customer")
+ .WithMany("Events")
+ .HasForeignKey("CustomerId")
+ .HasConstraintName("fk_customer_events_customers_customer_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_customer_events_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_customer_events_users_user_id");
+
+ b.Navigation("Customer");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.CustomerGroup", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_customer_groups_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_customer_groups_users_user_id");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.PasswordResetRequest", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "User")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_forgot_password_requests_users_user_id");
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Project", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_projects_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_projects_users_user_id");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.ProjectLabel", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Project", "Project")
+ .WithMany("Labels")
+ .HasForeignKey("ProjectId")
+ .HasConstraintName("fk_project_labels_projects_project_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_project_labels_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_project_labels_users_user_id");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+
+ b.Navigation("Project");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.ProjectMember", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Project", "Project")
+ .WithMany("Members")
+ .HasForeignKey("ProjectId")
+ .HasConstraintName("fk_project_members_projects_project_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "User")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_project_members_users_user_id");
+
+ b.Navigation("Project");
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Tenant", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("OwningTenantId")
+ .HasConstraintName("fk_tenants_tenants_owning_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany("Tenants")
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_tenants_users_user_id");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Todo", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "AssignedTo")
+ .WithMany()
+ .HasForeignKey("AssignedToId")
+ .HasConstraintName("fk_todos_users_assigned_to_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "ClosedBy")
+ .WithMany()
+ .HasForeignKey("ClosedById")
+ .HasConstraintName("fk_todos_users_closed_by_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.TodoCollection", "Collection")
+ .WithMany()
+ .HasForeignKey("CollectionId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired()
+ .HasConstraintName("fk_todos_todo_projects_collection_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_todos_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_todos_users_user_id");
+
+ b.Navigation("AssignedTo");
+
+ b.Navigation("ClosedBy");
+
+ b.Navigation("Collection");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TodoCollection", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Project", "Project")
+ .WithMany()
+ .HasForeignKey("ProjectId")
+ .HasConstraintName("fk_todo_collections_projects_project_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_todo_collections_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_todo_collections_users_user_id");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+
+ b.Navigation("Project");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TodoCollectionAccessControl", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.TodoCollection", "Collection")
+ .WithMany("AccessControls")
+ .HasForeignKey("CollectionId")
+ .HasConstraintName("fk_todo_collection_access_controls_todo_collections_collection");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "User")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_todo_collection_access_controls_users_user_id");
+
+ b.Navigation("Collection");
+
+ b.Navigation("User");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TodoComment", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_todo_comments_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Todo", "Todo")
+ .WithMany("Comments")
+ .HasForeignKey("TodoId")
+ .HasConstraintName("fk_todo_comments_todos_todo_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_todo_comments_users_user_id");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+
+ b.Navigation("Todo");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TodoLabel", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_todo_labels_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Todo", "Todo")
+ .WithMany("Labels")
+ .HasForeignKey("TodoId")
+ .HasConstraintName("fk_todo_labels_todos_todo_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_todo_labels_users_user_id");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+
+ b.Navigation("Todo");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.User", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", null)
+ .WithMany("Users")
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_users_tenants_tenant_id");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Customer", b =>
+ {
+ b.Navigation("Contacts");
+
+ b.Navigation("Events");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Project", b =>
+ {
+ b.Navigation("Labels");
+
+ b.Navigation("Members");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Tenant", b =>
+ {
+ b.Navigation("Users");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Todo", b =>
+ {
+ b.Navigation("Comments");
+
+ b.Navigation("Labels");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TodoCollection", b =>
+ {
+ b.Navigation("AccessControls");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.User", b =>
+ {
+ b.Navigation("Tenants");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/code/api/src/Migrations/20221114034213_RemoveTimeTracker.cs b/code/api/src/Migrations/20221114034213_RemoveTimeTracker.cs
new file mode 100644
index 0000000..70b2539
--- /dev/null
+++ b/code/api/src/Migrations/20221114034213_RemoveTimeTracker.cs
@@ -0,0 +1,177 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace IOL.GreatOffice.Api.Migrations
+{
+ /// <inheritdoc />
+ public partial class RemoveTimeTracker : Migration
+ {
+ /// <inheritdoc />
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "time_labels");
+
+ migrationBuilder.DropTable(
+ name: "time_entries");
+
+ migrationBuilder.DropTable(
+ name: "time_categories");
+ }
+
+ /// <inheritdoc />
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "time_categories",
+ columns: table => new
+ {
+ id = table.Column<Guid>(type: "uuid", nullable: false),
+ tenantid = table.Column<Guid>(name: "tenant_id", type: "uuid", nullable: true),
+ userid = table.Column<Guid>(name: "user_id", type: "uuid", nullable: true),
+ color = table.Column<string>(type: "text", nullable: true),
+ createdat = table.Column<DateTime>(name: "created_at", type: "timestamp with time zone", nullable: false),
+ createdby = table.Column<Guid>(name: "created_by", type: "uuid", nullable: true),
+ deleted = table.Column<bool>(type: "boolean", nullable: false),
+ deletedat = table.Column<DateTime>(name: "deleted_at", type: "timestamp with time zone", nullable: true),
+ deletedby = table.Column<Guid>(name: "deleted_by", type: "uuid", nullable: true),
+ modifiedat = table.Column<DateTime>(name: "modified_at", type: "timestamp with time zone", nullable: true),
+ modifiedby = table.Column<Guid>(name: "modified_by", type: "uuid", nullable: true),
+ name = table.Column<string>(type: "text", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_time_categories", x => x.id);
+ table.ForeignKey(
+ name: "fk_time_categories_tenants_tenant_id",
+ column: x => x.tenantid,
+ principalTable: "tenants",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_time_categories_users_user_id",
+ column: x => x.userid,
+ principalTable: "users",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "time_entries",
+ columns: table => new
+ {
+ id = table.Column<Guid>(type: "uuid", nullable: false),
+ categoryid = table.Column<Guid>(name: "category_id", type: "uuid", nullable: true),
+ tenantid = table.Column<Guid>(name: "tenant_id", type: "uuid", nullable: true),
+ userid = table.Column<Guid>(name: "user_id", type: "uuid", nullable: true),
+ createdat = table.Column<DateTime>(name: "created_at", type: "timestamp with time zone", nullable: false),
+ createdby = table.Column<Guid>(name: "created_by", type: "uuid", nullable: true),
+ deleted = table.Column<bool>(type: "boolean", nullable: false),
+ deletedat = table.Column<DateTime>(name: "deleted_at", type: "timestamp with time zone", nullable: true),
+ deletedby = table.Column<Guid>(name: "deleted_by", type: "uuid", nullable: true),
+ description = table.Column<string>(type: "text", nullable: true),
+ modifiedat = table.Column<DateTime>(name: "modified_at", type: "timestamp with time zone", nullable: true),
+ modifiedby = table.Column<Guid>(name: "modified_by", type: "uuid", nullable: true),
+ start = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+ stop = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_time_entries", x => x.id);
+ table.ForeignKey(
+ name: "fk_time_entries_tenants_tenant_id",
+ column: x => x.tenantid,
+ principalTable: "tenants",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_time_entries_time_categories_category_id",
+ column: x => x.categoryid,
+ principalTable: "time_categories",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_time_entries_users_user_id",
+ column: x => x.userid,
+ principalTable: "users",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "time_labels",
+ columns: table => new
+ {
+ id = table.Column<Guid>(type: "uuid", nullable: false),
+ tenantid = table.Column<Guid>(name: "tenant_id", type: "uuid", nullable: true),
+ userid = table.Column<Guid>(name: "user_id", type: "uuid", nullable: true),
+ color = table.Column<string>(type: "text", nullable: true),
+ createdat = table.Column<DateTime>(name: "created_at", type: "timestamp with time zone", nullable: false),
+ createdby = table.Column<Guid>(name: "created_by", type: "uuid", nullable: true),
+ deleted = table.Column<bool>(type: "boolean", nullable: false),
+ deletedat = table.Column<DateTime>(name: "deleted_at", type: "timestamp with time zone", nullable: true),
+ deletedby = table.Column<Guid>(name: "deleted_by", type: "uuid", nullable: true),
+ modifiedat = table.Column<DateTime>(name: "modified_at", type: "timestamp with time zone", nullable: true),
+ modifiedby = table.Column<Guid>(name: "modified_by", type: "uuid", nullable: true),
+ name = table.Column<string>(type: "text", nullable: true),
+ timeentryid = table.Column<Guid>(name: "time_entry_id", type: "uuid", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_time_labels", x => x.id);
+ table.ForeignKey(
+ name: "fk_time_labels_tenants_tenant_id",
+ column: x => x.tenantid,
+ principalTable: "tenants",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_time_labels_time_entries_time_entry_id",
+ column: x => x.timeentryid,
+ principalTable: "time_entries",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_time_labels_users_user_id",
+ column: x => x.userid,
+ principalTable: "users",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "ix_time_categories_tenant_id",
+ table: "time_categories",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_time_categories_user_id",
+ table: "time_categories",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_time_entries_category_id",
+ table: "time_entries",
+ column: "category_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_time_entries_tenant_id",
+ table: "time_entries",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_time_entries_user_id",
+ table: "time_entries",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_time_labels_tenant_id",
+ table: "time_labels",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_time_labels_time_entry_id",
+ table: "time_labels",
+ column: "time_entry_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_time_labels_user_id",
+ table: "time_labels",
+ column: "user_id");
+ }
+ }
+}