aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/src/Migrations
diff options
context:
space:
mode:
Diffstat (limited to 'code/api/src/Migrations')
-rw-r--r--code/api/src/Migrations/20221031165813_TodoAndOwnerNavigations.Designer.cs1863
-rw-r--r--code/api/src/Migrations/20221031165813_TodoAndOwnerNavigations.cs1092
-rw-r--r--code/api/src/Migrations/AppDbContextModelSnapshot.cs891
3 files changed, 3758 insertions, 88 deletions
diff --git a/code/api/src/Migrations/20221031165813_TodoAndOwnerNavigations.Designer.cs b/code/api/src/Migrations/20221031165813_TodoAndOwnerNavigations.Designer.cs
new file mode 100644
index 0000000..1909d36
--- /dev/null
+++ b/code/api/src/Migrations/20221031165813_TodoAndOwnerNavigations.Designer.cs
@@ -0,0 +1,1863 @@
+// <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("20221031165813_TodoAndOwnerNavigations")]
+ partial class TodoAndOwnerNavigations
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "6.0.10")
+ .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.ForgotPasswordRequest", 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.TimeCategory", 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?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_time_categories");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_time_categories_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_time_categories_user_id");
+
+ b.ToTable("time_categories", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TimeEntry", b =>
+ {
+ b.Property<Guid>("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid")
+ .HasColumnName("id");
+
+ b.Property<Guid?>("CategoryId")
+ .HasColumnType("uuid")
+ .HasColumnName("category_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<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_time_entries");
+
+ b.HasIndex("CategoryId")
+ .HasDatabaseName("ix_time_entries_category_id");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_time_entries_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_time_entries_user_id");
+
+ b.ToTable("time_entries", (string)null);
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TimeLabel", 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?>("TimeEntryId")
+ .HasColumnType("uuid")
+ .HasColumnName("time_entry_id");
+
+ b.Property<Guid?>("UserId")
+ .HasColumnType("uuid")
+ .HasColumnName("user_id");
+
+ b.HasKey("Id")
+ .HasName("pk_time_labels");
+
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_time_labels_tenant_id");
+
+ b.HasIndex("TimeEntryId")
+ .HasDatabaseName("ix_time_labels_time_entry_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_time_labels_user_id");
+
+ b.ToTable("time_labels", (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.ForgotPasswordRequest", 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.TimeCategory", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_time_categories_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_time_categories_users_user_id");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TimeEntry", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.TimeCategory", "Category")
+ .WithMany()
+ .HasForeignKey("CategoryId")
+ .HasConstraintName("fk_time_entries_time_categories_category_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_time_entries_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_time_entries_users_user_id");
+
+ b.Navigation("Category");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+ });
+
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TimeLabel", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_time_labels_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.TimeEntry", null)
+ .WithMany("Labels")
+ .HasForeignKey("TimeEntryId")
+ .HasConstraintName("fk_time_labels_time_entries_time_entry_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_time_labels_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.TimeEntry", b =>
+ {
+ b.Navigation("Labels");
+ });
+
+ 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/20221031165813_TodoAndOwnerNavigations.cs b/code/api/src/Migrations/20221031165813_TodoAndOwnerNavigations.cs
new file mode 100644
index 0000000..334913e
--- /dev/null
+++ b/code/api/src/Migrations/20221031165813_TodoAndOwnerNavigations.cs
@@ -0,0 +1,1092 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace IOL.GreatOffice.Api.Migrations
+{
+ public partial class TodoAndOwnerNavigations : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "tenant_user");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by_id",
+ table: "time_labels",
+ newName: "modified_by");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by_id",
+ table: "time_labels",
+ newName: "deleted_by");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by_id",
+ table: "time_labels",
+ newName: "created_by");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by_id",
+ table: "time_entries",
+ newName: "modified_by");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by_id",
+ table: "time_entries",
+ newName: "deleted_by");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by_id",
+ table: "time_entries",
+ newName: "created_by");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by_id",
+ table: "time_categories",
+ newName: "modified_by");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by_id",
+ table: "time_categories",
+ newName: "deleted_by");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by_id",
+ table: "time_categories",
+ newName: "created_by");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by_id",
+ table: "tenants",
+ newName: "owning_tenant_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by_id",
+ table: "tenants",
+ newName: "modified_by");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by_id",
+ table: "tenants",
+ newName: "deleted_by");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by_id",
+ table: "projects",
+ newName: "modified_by");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by_id",
+ table: "projects",
+ newName: "deleted_by");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by_id",
+ table: "projects",
+ newName: "created_by");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by_id",
+ table: "project_labels",
+ newName: "modified_by");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by_id",
+ table: "project_labels",
+ newName: "deleted_by");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by_id",
+ table: "project_labels",
+ newName: "created_by");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by_id",
+ table: "customers",
+ newName: "owner_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by_id",
+ table: "customers",
+ newName: "modified_by");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by_id",
+ table: "customers",
+ newName: "deleted_by");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by_id",
+ table: "customer_groups",
+ newName: "modified_by");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by_id",
+ table: "customer_groups",
+ newName: "deleted_by");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by_id",
+ table: "customer_groups",
+ newName: "created_by");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by_id",
+ table: "customer_events",
+ newName: "modified_by");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by_id",
+ table: "customer_events",
+ newName: "deleted_by");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by_id",
+ table: "customer_events",
+ newName: "created_by");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by_id",
+ table: "customer_contacts",
+ newName: "modified_by");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by_id",
+ table: "customer_contacts",
+ newName: "deleted_by");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by_id",
+ table: "customer_contacts",
+ newName: "created_by");
+
+ migrationBuilder.AddColumn<Guid>(
+ name: "tenant_id",
+ table: "users",
+ type: "uuid",
+ nullable: true);
+
+ migrationBuilder.AddColumn<Guid>(
+ name: "created_by",
+ table: "tenants",
+ type: "uuid",
+ nullable: true);
+
+ migrationBuilder.AddColumn<Guid>(
+ name: "created_by",
+ table: "customers",
+ type: "uuid",
+ nullable: true);
+
+ migrationBuilder.CreateTable(
+ name: "todo_collections",
+ columns: table => new
+ {
+ id = table.Column<Guid>(type: "uuid", nullable: false),
+ name = table.Column<string>(type: "text", nullable: true),
+ description = table.Column<string>(type: "text", nullable: true),
+ visibility = table.Column<int>(type: "integer", nullable: false),
+ project_id = table.Column<Guid>(type: "uuid", nullable: true),
+ created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+ modified_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+ deleted_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+ deleted = table.Column<bool>(type: "boolean", nullable: false),
+ user_id = table.Column<Guid>(type: "uuid", nullable: true),
+ tenant_id = table.Column<Guid>(type: "uuid", nullable: true),
+ modified_by = table.Column<Guid>(type: "uuid", nullable: true),
+ created_by = table.Column<Guid>(type: "uuid", nullable: true),
+ deleted_by = table.Column<Guid>(type: "uuid", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_todo_collections", x => x.id);
+ table.ForeignKey(
+ name: "fk_todo_collections_projects_project_id",
+ column: x => x.project_id,
+ principalTable: "projects",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_todo_collections_tenants_tenant_id",
+ column: x => x.tenant_id,
+ principalTable: "tenants",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_todo_collections_users_user_id",
+ column: x => x.user_id,
+ principalTable: "users",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "todo_collection_access_controls",
+ columns: table => new
+ {
+ id = table.Column<Guid>(type: "uuid", nullable: false),
+ collection_id = table.Column<Guid>(type: "uuid", nullable: true),
+ user_id = table.Column<Guid>(type: "uuid", nullable: true),
+ can_browse = table.Column<bool>(type: "boolean", nullable: false),
+ can_submit = table.Column<bool>(type: "boolean", nullable: false),
+ can_comment = table.Column<bool>(type: "boolean", nullable: false),
+ can_edit = table.Column<bool>(type: "boolean", nullable: false),
+ created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+ modified_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+ deleted_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+ deleted = table.Column<bool>(type: "boolean", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_todo_collection_access_controls", x => x.id);
+ table.ForeignKey(
+ name: "fk_todo_collection_access_controls_todo_collections_collection",
+ column: x => x.collection_id,
+ principalTable: "todo_collections",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_todo_collection_access_controls_users_user_id",
+ column: x => x.user_id,
+ principalTable: "users",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "todos",
+ columns: table => new
+ {
+ id = table.Column<Guid>(type: "uuid", nullable: false),
+ public_id = table.Column<string>(type: "text", nullable: true),
+ assigned_to_id = table.Column<Guid>(type: "uuid", nullable: true),
+ closed_by_id = table.Column<Guid>(type: "uuid", nullable: true),
+ collection_id = table.Column<Guid>(type: "uuid", nullable: false),
+ closed_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+ title = table.Column<string>(type: "text", nullable: true),
+ description = table.Column<string>(type: "text", nullable: true),
+ created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+ modified_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+ deleted_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+ deleted = table.Column<bool>(type: "boolean", nullable: false),
+ user_id = table.Column<Guid>(type: "uuid", nullable: true),
+ tenant_id = table.Column<Guid>(type: "uuid", nullable: true),
+ modified_by = table.Column<Guid>(type: "uuid", nullable: true),
+ created_by = table.Column<Guid>(type: "uuid", nullable: true),
+ deleted_by = table.Column<Guid>(type: "uuid", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_todos", x => x.id);
+ table.ForeignKey(
+ name: "fk_todos_tenants_tenant_id",
+ column: x => x.tenant_id,
+ principalTable: "tenants",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_todos_todo_projects_collection_id",
+ column: x => x.collection_id,
+ principalTable: "todo_collections",
+ principalColumn: "id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "fk_todos_users_assigned_to_id",
+ column: x => x.assigned_to_id,
+ principalTable: "users",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_todos_users_closed_by_id",
+ column: x => x.closed_by_id,
+ principalTable: "users",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_todos_users_user_id",
+ column: x => x.user_id,
+ principalTable: "users",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "todo_comments",
+ columns: table => new
+ {
+ id = table.Column<Guid>(type: "uuid", nullable: false),
+ value = table.Column<string>(type: "text", nullable: true),
+ todo_id = table.Column<Guid>(type: "uuid", nullable: true),
+ closing_statement = table.Column<int>(type: "integer", nullable: true),
+ created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+ modified_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+ deleted_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+ deleted = table.Column<bool>(type: "boolean", nullable: false),
+ user_id = table.Column<Guid>(type: "uuid", nullable: true),
+ tenant_id = table.Column<Guid>(type: "uuid", nullable: true),
+ modified_by = table.Column<Guid>(type: "uuid", nullable: true),
+ created_by = table.Column<Guid>(type: "uuid", nullable: true),
+ deleted_by = table.Column<Guid>(type: "uuid", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_todo_comments", x => x.id);
+ table.ForeignKey(
+ name: "fk_todo_comments_tenants_tenant_id",
+ column: x => x.tenant_id,
+ principalTable: "tenants",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_todo_comments_todos_todo_id",
+ column: x => x.todo_id,
+ principalTable: "todos",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_todo_comments_users_user_id",
+ column: x => x.user_id,
+ principalTable: "users",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "todo_labels",
+ columns: table => new
+ {
+ id = table.Column<Guid>(type: "uuid", nullable: false),
+ name = table.Column<string>(type: "text", nullable: true),
+ color = table.Column<string>(type: "text", nullable: true),
+ todo_id = table.Column<Guid>(type: "uuid", nullable: true),
+ created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
+ modified_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+ deleted_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true),
+ deleted = table.Column<bool>(type: "boolean", nullable: false),
+ user_id = table.Column<Guid>(type: "uuid", nullable: true),
+ tenant_id = table.Column<Guid>(type: "uuid", nullable: true),
+ modified_by = table.Column<Guid>(type: "uuid", nullable: true),
+ created_by = table.Column<Guid>(type: "uuid", nullable: true),
+ deleted_by = table.Column<Guid>(type: "uuid", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_todo_labels", x => x.id);
+ table.ForeignKey(
+ name: "fk_todo_labels_tenants_tenant_id",
+ column: x => x.tenant_id,
+ principalTable: "tenants",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_todo_labels_todos_todo_id",
+ column: x => x.todo_id,
+ principalTable: "todos",
+ principalColumn: "id");
+ table.ForeignKey(
+ name: "fk_todo_labels_users_user_id",
+ column: x => x.user_id,
+ principalTable: "users",
+ principalColumn: "id");
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "ix_users_tenant_id",
+ table: "users",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_time_labels_tenant_id",
+ table: "time_labels",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_time_labels_user_id",
+ table: "time_labels",
+ column: "user_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_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_tenants_owning_tenant_id",
+ table: "tenants",
+ column: "owning_tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_tenants_user_id",
+ table: "tenants",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_projects_tenant_id",
+ table: "projects",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_projects_user_id",
+ table: "projects",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_project_labels_tenant_id",
+ table: "project_labels",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_project_labels_user_id",
+ table: "project_labels",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_customers_owner_id",
+ table: "customers",
+ column: "owner_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_customers_tenant_id",
+ table: "customers",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_customer_groups_tenant_id",
+ table: "customer_groups",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_customer_groups_user_id",
+ table: "customer_groups",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_customer_events_tenant_id",
+ table: "customer_events",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_customer_events_user_id",
+ table: "customer_events",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_customer_contacts_tenant_id",
+ table: "customer_contacts",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_customer_contacts_user_id",
+ table: "customer_contacts",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todo_collection_access_controls_collection_id",
+ table: "todo_collection_access_controls",
+ column: "collection_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todo_collection_access_controls_user_id",
+ table: "todo_collection_access_controls",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todo_collections_project_id",
+ table: "todo_collections",
+ column: "project_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todo_collections_tenant_id",
+ table: "todo_collections",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todo_collections_user_id",
+ table: "todo_collections",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todo_comments_tenant_id",
+ table: "todo_comments",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todo_comments_todo_id",
+ table: "todo_comments",
+ column: "todo_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todo_comments_user_id",
+ table: "todo_comments",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todo_labels_tenant_id",
+ table: "todo_labels",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todo_labels_todo_id",
+ table: "todo_labels",
+ column: "todo_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todo_labels_user_id",
+ table: "todo_labels",
+ column: "user_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todos_assigned_to_id",
+ table: "todos",
+ column: "assigned_to_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todos_closed_by_id",
+ table: "todos",
+ column: "closed_by_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todos_collection_id",
+ table: "todos",
+ column: "collection_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todos_tenant_id",
+ table: "todos",
+ column: "tenant_id");
+
+ migrationBuilder.CreateIndex(
+ name: "ix_todos_user_id",
+ table: "todos",
+ column: "user_id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_customer_contacts_tenants_tenant_id",
+ table: "customer_contacts",
+ column: "tenant_id",
+ principalTable: "tenants",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_customer_contacts_users_user_id",
+ table: "customer_contacts",
+ column: "user_id",
+ principalTable: "users",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_customer_events_tenants_tenant_id",
+ table: "customer_events",
+ column: "tenant_id",
+ principalTable: "tenants",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_customer_events_users_user_id",
+ table: "customer_events",
+ column: "user_id",
+ principalTable: "users",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_customer_groups_tenants_tenant_id",
+ table: "customer_groups",
+ column: "tenant_id",
+ principalTable: "tenants",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_customer_groups_users_user_id",
+ table: "customer_groups",
+ column: "user_id",
+ principalTable: "users",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_customers_tenants_tenant_id",
+ table: "customers",
+ column: "tenant_id",
+ principalTable: "tenants",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_customers_users_owner_id",
+ table: "customers",
+ column: "owner_id",
+ principalTable: "users",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_project_labels_tenants_tenant_id",
+ table: "project_labels",
+ column: "tenant_id",
+ principalTable: "tenants",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_project_labels_users_user_id",
+ table: "project_labels",
+ column: "user_id",
+ principalTable: "users",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_projects_tenants_tenant_id",
+ table: "projects",
+ column: "tenant_id",
+ principalTable: "tenants",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_projects_users_user_id",
+ table: "projects",
+ column: "user_id",
+ principalTable: "users",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_tenants_tenants_owning_tenant_id",
+ table: "tenants",
+ column: "owning_tenant_id",
+ principalTable: "tenants",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_tenants_users_user_id",
+ table: "tenants",
+ column: "user_id",
+ principalTable: "users",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_time_categories_tenants_tenant_id",
+ table: "time_categories",
+ column: "tenant_id",
+ principalTable: "tenants",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_time_categories_users_user_id",
+ table: "time_categories",
+ column: "user_id",
+ principalTable: "users",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_time_entries_tenants_tenant_id",
+ table: "time_entries",
+ column: "tenant_id",
+ principalTable: "tenants",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_time_entries_users_user_id",
+ table: "time_entries",
+ column: "user_id",
+ principalTable: "users",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_time_labels_tenants_tenant_id",
+ table: "time_labels",
+ column: "tenant_id",
+ principalTable: "tenants",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_time_labels_users_user_id",
+ table: "time_labels",
+ column: "user_id",
+ principalTable: "users",
+ principalColumn: "id");
+
+ migrationBuilder.AddForeignKey(
+ name: "fk_users_tenants_tenant_id",
+ table: "users",
+ column: "tenant_id",
+ principalTable: "tenants",
+ principalColumn: "id");
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropForeignKey(
+ name: "fk_customer_contacts_tenants_tenant_id",
+ table: "customer_contacts");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_customer_contacts_users_user_id",
+ table: "customer_contacts");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_customer_events_tenants_tenant_id",
+ table: "customer_events");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_customer_events_users_user_id",
+ table: "customer_events");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_customer_groups_tenants_tenant_id",
+ table: "customer_groups");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_customer_groups_users_user_id",
+ table: "customer_groups");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_customers_tenants_tenant_id",
+ table: "customers");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_customers_users_owner_id",
+ table: "customers");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_project_labels_tenants_tenant_id",
+ table: "project_labels");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_project_labels_users_user_id",
+ table: "project_labels");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_projects_tenants_tenant_id",
+ table: "projects");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_projects_users_user_id",
+ table: "projects");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_tenants_tenants_owning_tenant_id",
+ table: "tenants");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_tenants_users_user_id",
+ table: "tenants");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_time_categories_tenants_tenant_id",
+ table: "time_categories");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_time_categories_users_user_id",
+ table: "time_categories");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_time_entries_tenants_tenant_id",
+ table: "time_entries");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_time_entries_users_user_id",
+ table: "time_entries");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_time_labels_tenants_tenant_id",
+ table: "time_labels");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_time_labels_users_user_id",
+ table: "time_labels");
+
+ migrationBuilder.DropForeignKey(
+ name: "fk_users_tenants_tenant_id",
+ table: "users");
+
+ migrationBuilder.DropTable(
+ name: "todo_collection_access_controls");
+
+ migrationBuilder.DropTable(
+ name: "todo_comments");
+
+ migrationBuilder.DropTable(
+ name: "todo_labels");
+
+ migrationBuilder.DropTable(
+ name: "todos");
+
+ migrationBuilder.DropTable(
+ name: "todo_collections");
+
+ migrationBuilder.DropIndex(
+ name: "ix_users_tenant_id",
+ table: "users");
+
+ migrationBuilder.DropIndex(
+ name: "ix_time_labels_tenant_id",
+ table: "time_labels");
+
+ migrationBuilder.DropIndex(
+ name: "ix_time_labels_user_id",
+ table: "time_labels");
+
+ migrationBuilder.DropIndex(
+ name: "ix_time_entries_tenant_id",
+ table: "time_entries");
+
+ migrationBuilder.DropIndex(
+ name: "ix_time_entries_user_id",
+ table: "time_entries");
+
+ migrationBuilder.DropIndex(
+ name: "ix_time_categories_tenant_id",
+ table: "time_categories");
+
+ migrationBuilder.DropIndex(
+ name: "ix_time_categories_user_id",
+ table: "time_categories");
+
+ migrationBuilder.DropIndex(
+ name: "ix_tenants_owning_tenant_id",
+ table: "tenants");
+
+ migrationBuilder.DropIndex(
+ name: "ix_tenants_user_id",
+ table: "tenants");
+
+ migrationBuilder.DropIndex(
+ name: "ix_projects_tenant_id",
+ table: "projects");
+
+ migrationBuilder.DropIndex(
+ name: "ix_projects_user_id",
+ table: "projects");
+
+ migrationBuilder.DropIndex(
+ name: "ix_project_labels_tenant_id",
+ table: "project_labels");
+
+ migrationBuilder.DropIndex(
+ name: "ix_project_labels_user_id",
+ table: "project_labels");
+
+ migrationBuilder.DropIndex(
+ name: "ix_customers_owner_id",
+ table: "customers");
+
+ migrationBuilder.DropIndex(
+ name: "ix_customers_tenant_id",
+ table: "customers");
+
+ migrationBuilder.DropIndex(
+ name: "ix_customer_groups_tenant_id",
+ table: "customer_groups");
+
+ migrationBuilder.DropIndex(
+ name: "ix_customer_groups_user_id",
+ table: "customer_groups");
+
+ migrationBuilder.DropIndex(
+ name: "ix_customer_events_tenant_id",
+ table: "customer_events");
+
+ migrationBuilder.DropIndex(
+ name: "ix_customer_events_user_id",
+ table: "customer_events");
+
+ migrationBuilder.DropIndex(
+ name: "ix_customer_contacts_tenant_id",
+ table: "customer_contacts");
+
+ migrationBuilder.DropIndex(
+ name: "ix_customer_contacts_user_id",
+ table: "customer_contacts");
+
+ migrationBuilder.DropColumn(
+ name: "tenant_id",
+ table: "users");
+
+ migrationBuilder.DropColumn(
+ name: "created_by",
+ table: "tenants");
+
+ migrationBuilder.DropColumn(
+ name: "created_by",
+ table: "customers");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by",
+ table: "time_labels",
+ newName: "modified_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by",
+ table: "time_labels",
+ newName: "deleted_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by",
+ table: "time_labels",
+ newName: "created_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by",
+ table: "time_entries",
+ newName: "modified_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by",
+ table: "time_entries",
+ newName: "deleted_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by",
+ table: "time_entries",
+ newName: "created_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by",
+ table: "time_categories",
+ newName: "modified_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by",
+ table: "time_categories",
+ newName: "deleted_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by",
+ table: "time_categories",
+ newName: "created_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "owning_tenant_id",
+ table: "tenants",
+ newName: "modified_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by",
+ table: "tenants",
+ newName: "deleted_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by",
+ table: "tenants",
+ newName: "created_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by",
+ table: "projects",
+ newName: "modified_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by",
+ table: "projects",
+ newName: "deleted_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by",
+ table: "projects",
+ newName: "created_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by",
+ table: "project_labels",
+ newName: "modified_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by",
+ table: "project_labels",
+ newName: "deleted_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by",
+ table: "project_labels",
+ newName: "created_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "owner_id",
+ table: "customers",
+ newName: "modified_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by",
+ table: "customers",
+ newName: "deleted_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by",
+ table: "customers",
+ newName: "created_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by",
+ table: "customer_groups",
+ newName: "modified_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by",
+ table: "customer_groups",
+ newName: "deleted_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by",
+ table: "customer_groups",
+ newName: "created_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by",
+ table: "customer_events",
+ newName: "modified_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by",
+ table: "customer_events",
+ newName: "deleted_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by",
+ table: "customer_events",
+ newName: "created_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "modified_by",
+ table: "customer_contacts",
+ newName: "modified_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "deleted_by",
+ table: "customer_contacts",
+ newName: "deleted_by_id");
+
+ migrationBuilder.RenameColumn(
+ name: "created_by",
+ table: "customer_contacts",
+ newName: "created_by_id");
+
+ migrationBuilder.CreateTable(
+ name: "tenant_user",
+ columns: table => new
+ {
+ tenants_id = table.Column<Guid>(type: "uuid", nullable: false),
+ users_id = table.Column<Guid>(type: "uuid", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("pk_tenant_user", x => new { x.tenants_id, x.users_id });
+ table.ForeignKey(
+ name: "fk_tenant_user_tenants_tenants_id",
+ column: x => x.tenants_id,
+ principalTable: "tenants",
+ principalColumn: "id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "fk_tenant_user_users_users_id",
+ column: x => x.users_id,
+ principalTable: "users",
+ principalColumn: "id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "ix_tenant_user_users_id",
+ table: "tenant_user",
+ column: "users_id");
+ }
+ }
+}
diff --git a/code/api/src/Migrations/AppDbContextModelSnapshot.cs b/code/api/src/Migrations/AppDbContextModelSnapshot.cs
index 7a534ad..f2031c1 100644
--- a/code/api/src/Migrations/AppDbContextModelSnapshot.cs
+++ b/code/api/src/Migrations/AppDbContextModelSnapshot.cs
@@ -139,9 +139,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
- b.Property<Guid?>("CreatedById")
+ b.Property<Guid?>("CreatedBy")
.HasColumnType("uuid")
- .HasColumnName("created_by_id");
+ .HasColumnName("created_by");
b.Property<string>("Currency")
.HasColumnType("text")
@@ -163,9 +163,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("deleted_at");
- b.Property<Guid?>("DeletedById")
+ b.Property<Guid?>("DeletedBy")
.HasColumnType("uuid")
- .HasColumnName("deleted_by_id");
+ .HasColumnName("deleted_by");
b.Property<string>("Description")
.HasColumnType("text")
@@ -179,9 +179,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("modified_at");
- b.Property<Guid?>("ModifiedById")
+ b.Property<Guid?>("ModifiedBy")
.HasColumnType("uuid")
- .HasColumnName("modified_by_id");
+ .HasColumnName("modified_by");
b.Property<string>("Name")
.HasColumnType("text")
@@ -191,6 +191,10 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("text")
.HasColumnName("org_number");
+ b.Property<Guid?>("OwnerId")
+ .HasColumnType("uuid")
+ .HasColumnName("owner_id");
+
b.Property<string>("Phone")
.HasColumnType("text")
.HasColumnName("phone");
@@ -222,6 +226,12 @@ namespace IOL.GreatOffice.Api.Migrations
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");
@@ -239,9 +249,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
- b.Property<Guid?>("CreatedById")
+ b.Property<Guid?>("CreatedBy")
.HasColumnType("uuid")
- .HasColumnName("created_by_id");
+ .HasColumnName("created_by");
b.Property<Guid?>("CustomerId")
.HasColumnType("uuid")
@@ -255,9 +265,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("deleted_at");
- b.Property<Guid?>("DeletedById")
+ b.Property<Guid?>("DeletedBy")
.HasColumnType("uuid")
- .HasColumnName("deleted_by_id");
+ .HasColumnName("deleted_by");
b.Property<string>("Email")
.HasColumnType("text")
@@ -275,9 +285,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("modified_at");
- b.Property<Guid?>("ModifiedById")
+ b.Property<Guid?>("ModifiedBy")
.HasColumnType("uuid")
- .HasColumnName("modified_by_id");
+ .HasColumnName("modified_by");
b.Property<string>("Note")
.HasColumnType("text")
@@ -305,6 +315,12 @@ namespace IOL.GreatOffice.Api.Migrations
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);
});
@@ -319,9 +335,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
- b.Property<Guid?>("CreatedById")
+ b.Property<Guid?>("CreatedBy")
.HasColumnType("uuid")
- .HasColumnName("created_by_id");
+ .HasColumnName("created_by");
b.Property<Guid?>("CustomerId")
.HasColumnType("uuid")
@@ -335,17 +351,17 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("deleted_at");
- b.Property<Guid?>("DeletedById")
+ b.Property<Guid?>("DeletedBy")
.HasColumnType("uuid")
- .HasColumnName("deleted_by_id");
+ .HasColumnName("deleted_by");
b.Property<DateTime?>("ModifiedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("modified_at");
- b.Property<Guid?>("ModifiedById")
+ b.Property<Guid?>("ModifiedBy")
.HasColumnType("uuid")
- .HasColumnName("modified_by_id");
+ .HasColumnName("modified_by");
b.Property<string>("Note")
.HasColumnType("text")
@@ -369,6 +385,12 @@ namespace IOL.GreatOffice.Api.Migrations
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);
});
@@ -383,9 +405,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
- b.Property<Guid?>("CreatedById")
+ b.Property<Guid?>("CreatedBy")
.HasColumnType("uuid")
- .HasColumnName("created_by_id");
+ .HasColumnName("created_by");
b.Property<bool>("Deleted")
.HasColumnType("boolean")
@@ -395,17 +417,17 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("deleted_at");
- b.Property<Guid?>("DeletedById")
+ b.Property<Guid?>("DeletedBy")
.HasColumnType("uuid")
- .HasColumnName("deleted_by_id");
+ .HasColumnName("deleted_by");
b.Property<DateTime?>("ModifiedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("modified_at");
- b.Property<Guid?>("ModifiedById")
+ b.Property<Guid?>("ModifiedBy")
.HasColumnType("uuid")
- .HasColumnName("modified_by_id");
+ .HasColumnName("modified_by");
b.Property<string>("Name")
.HasColumnType("text")
@@ -422,6 +444,12 @@ namespace IOL.GreatOffice.Api.Migrations
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);
});
@@ -460,9 +488,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
- b.Property<Guid?>("CreatedById")
+ b.Property<Guid?>("CreatedBy")
.HasColumnType("uuid")
- .HasColumnName("created_by_id");
+ .HasColumnName("created_by");
b.Property<bool>("Deleted")
.HasColumnType("boolean")
@@ -472,9 +500,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("deleted_at");
- b.Property<Guid?>("DeletedById")
+ b.Property<Guid?>("DeletedBy")
.HasColumnType("uuid")
- .HasColumnName("deleted_by_id");
+ .HasColumnName("deleted_by");
b.Property<string>("Description")
.HasColumnType("text")
@@ -484,9 +512,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("modified_at");
- b.Property<Guid?>("ModifiedById")
+ b.Property<Guid?>("ModifiedBy")
.HasColumnType("uuid")
- .HasColumnName("modified_by_id");
+ .HasColumnName("modified_by");
b.Property<string>("Name")
.HasColumnType("text")
@@ -511,6 +539,12 @@ namespace IOL.GreatOffice.Api.Migrations
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);
});
@@ -529,9 +563,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
- b.Property<Guid?>("CreatedById")
+ b.Property<Guid?>("CreatedBy")
.HasColumnType("uuid")
- .HasColumnName("created_by_id");
+ .HasColumnName("created_by");
b.Property<bool>("Deleted")
.HasColumnType("boolean")
@@ -541,17 +575,17 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("deleted_at");
- b.Property<Guid?>("DeletedById")
+ b.Property<Guid?>("DeletedBy")
.HasColumnType("uuid")
- .HasColumnName("deleted_by_id");
+ .HasColumnName("deleted_by");
b.Property<DateTime?>("ModifiedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("modified_at");
- b.Property<Guid?>("ModifiedById")
+ b.Property<Guid?>("ModifiedBy")
.HasColumnType("uuid")
- .HasColumnName("modified_by_id");
+ .HasColumnName("modified_by");
b.Property<Guid?>("ProjectId")
.HasColumnType("uuid")
@@ -575,6 +609,12 @@ namespace IOL.GreatOffice.Api.Migrations
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);
});
@@ -640,9 +680,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
- b.Property<Guid?>("CreatedById")
+ b.Property<Guid?>("CreatedBy")
.HasColumnType("uuid")
- .HasColumnName("created_by_id");
+ .HasColumnName("created_by");
b.Property<bool>("Deleted")
.HasColumnType("boolean")
@@ -652,9 +692,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("deleted_at");
- b.Property<Guid?>("DeletedById")
+ b.Property<Guid?>("DeletedBy")
.HasColumnType("uuid")
- .HasColumnName("deleted_by_id");
+ .HasColumnName("deleted_by");
b.Property<string>("Description")
.HasColumnType("text")
@@ -672,14 +712,18 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("modified_at");
- b.Property<Guid?>("ModifiedById")
+ b.Property<Guid?>("ModifiedBy")
.HasColumnType("uuid")
- .HasColumnName("modified_by_id");
+ .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");
@@ -691,6 +735,12 @@ namespace IOL.GreatOffice.Api.Migrations
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);
});
@@ -709,9 +759,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
- b.Property<Guid?>("CreatedById")
+ b.Property<Guid?>("CreatedBy")
.HasColumnType("uuid")
- .HasColumnName("created_by_id");
+ .HasColumnName("created_by");
b.Property<bool>("Deleted")
.HasColumnType("boolean")
@@ -721,17 +771,17 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("deleted_at");
- b.Property<Guid?>("DeletedById")
+ b.Property<Guid?>("DeletedBy")
.HasColumnType("uuid")
- .HasColumnName("deleted_by_id");
+ .HasColumnName("deleted_by");
b.Property<DateTime?>("ModifiedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("modified_at");
- b.Property<Guid?>("ModifiedById")
+ b.Property<Guid?>("ModifiedBy")
.HasColumnType("uuid")
- .HasColumnName("modified_by_id");
+ .HasColumnName("modified_by");
b.Property<string>("Name")
.HasColumnType("text")
@@ -748,6 +798,12 @@ namespace IOL.GreatOffice.Api.Migrations
b.HasKey("Id")
.HasName("pk_time_categories");
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_time_categories_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_time_categories_user_id");
+
b.ToTable("time_categories", (string)null);
});
@@ -766,9 +822,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
- b.Property<Guid?>("CreatedById")
+ b.Property<Guid?>("CreatedBy")
.HasColumnType("uuid")
- .HasColumnName("created_by_id");
+ .HasColumnName("created_by");
b.Property<bool>("Deleted")
.HasColumnType("boolean")
@@ -778,9 +834,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("deleted_at");
- b.Property<Guid?>("DeletedById")
+ b.Property<Guid?>("DeletedBy")
.HasColumnType("uuid")
- .HasColumnName("deleted_by_id");
+ .HasColumnName("deleted_by");
b.Property<string>("Description")
.HasColumnType("text")
@@ -790,9 +846,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("modified_at");
- b.Property<Guid?>("ModifiedById")
+ b.Property<Guid?>("ModifiedBy")
.HasColumnType("uuid")
- .HasColumnName("modified_by_id");
+ .HasColumnName("modified_by");
b.Property<DateTime>("Start")
.HasColumnType("timestamp with time zone")
@@ -816,6 +872,12 @@ namespace IOL.GreatOffice.Api.Migrations
b.HasIndex("CategoryId")
.HasDatabaseName("ix_time_entries_category_id");
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_time_entries_tenant_id");
+
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_time_entries_user_id");
+
b.ToTable("time_entries", (string)null);
});
@@ -834,9 +896,9 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("created_at");
- b.Property<Guid?>("CreatedById")
+ b.Property<Guid?>("CreatedBy")
.HasColumnType("uuid")
- .HasColumnName("created_by_id");
+ .HasColumnName("created_by");
b.Property<bool>("Deleted")
.HasColumnType("boolean")
@@ -846,17 +908,17 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("timestamp with time zone")
.HasColumnName("deleted_at");
- b.Property<Guid?>("DeletedById")
+ b.Property<Guid?>("DeletedBy")
.HasColumnType("uuid")
- .HasColumnName("deleted_by_id");
+ .HasColumnName("deleted_by");
b.Property<DateTime?>("ModifiedAt")
.HasColumnType("timestamp with time zone")
.HasColumnName("modified_at");
- b.Property<Guid?>("ModifiedById")
+ b.Property<Guid?>("ModifiedBy")
.HasColumnType("uuid")
- .HasColumnName("modified_by_id");
+ .HasColumnName("modified_by");
b.Property<string>("Name")
.HasColumnType("text")
@@ -877,12 +939,383 @@ namespace IOL.GreatOffice.Api.Migrations
b.HasKey("Id")
.HasName("pk_time_labels");
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_time_labels_tenant_id");
+
b.HasIndex("TimeEntryId")
.HasDatabaseName("ix_time_labels_time_entry_id");
+ b.HasIndex("UserId")
+ .HasDatabaseName("ix_time_labels_user_id");
+
b.ToTable("time_labels", (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")
@@ -922,6 +1355,10 @@ namespace IOL.GreatOffice.Api.Migrations
.HasColumnType("text")
.HasColumnName("password");
+ b.Property<Guid?>("TenantId")
+ .HasColumnType("uuid")
+ .HasColumnName("tenant_id");
+
b.Property<string>("Username")
.HasColumnType("text")
.HasColumnName("username");
@@ -929,6 +1366,9 @@ namespace IOL.GreatOffice.Api.Migrations
b.HasKey("Id")
.HasName("pk_users");
+ b.HasIndex("TenantId")
+ .HasDatabaseName("ix_users_tenant_id");
+
b.ToTable("users", (string)null);
});
@@ -955,25 +1395,6 @@ namespace IOL.GreatOffice.Api.Migrations
b.ToTable("data_protection_keys", (string)null);
});
- modelBuilder.Entity("TenantUser", b =>
- {
- b.Property<Guid>("TenantsId")
- .HasColumnType("uuid")
- .HasColumnName("tenants_id");
-
- b.Property<Guid>("UsersId")
- .HasColumnType("uuid")
- .HasColumnName("users_id");
-
- b.HasKey("TenantsId", "UsersId")
- .HasName("pk_tenant_user");
-
- b.HasIndex("UsersId")
- .HasDatabaseName("ix_tenant_user_users_id");
-
- b.ToTable("tenant_user", (string)null);
- });
-
modelBuilder.Entity("CustomerCustomerGroup", b =>
{
b.HasOne("IOL.GreatOffice.Api.Data.Database.Customer", null)
@@ -1022,10 +1443,24 @@ namespace IOL.GreatOffice.Api.Migrations
{
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 =>
@@ -1035,7 +1470,21 @@ namespace IOL.GreatOffice.Api.Migrations
.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 =>
@@ -1045,7 +1494,38 @@ namespace IOL.GreatOffice.Api.Migrations
.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.ForgotPasswordRequest", b =>
@@ -1060,6 +1540,23 @@ namespace IOL.GreatOffice.Api.Migrations
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")
@@ -1067,6 +1564,20 @@ namespace IOL.GreatOffice.Api.Migrations
.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");
});
@@ -1087,6 +1598,40 @@ namespace IOL.GreatOffice.Api.Migrations
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.TimeCategory", b =>
+ {
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_time_categories_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_time_categories_users_user_id");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
+ });
+
modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TimeEntry", b =>
{
b.HasOne("IOL.GreatOffice.Api.Data.Database.TimeCategory", "Category")
@@ -1094,32 +1639,180 @@ namespace IOL.GreatOffice.Api.Migrations
.HasForeignKey("CategoryId")
.HasConstraintName("fk_time_entries_time_categories_category_id");
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_time_entries_tenants_tenant_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_time_entries_users_user_id");
+
b.Navigation("Category");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
});
modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TimeLabel", b =>
{
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", "OwningTenant")
+ .WithMany()
+ .HasForeignKey("TenantId")
+ .HasConstraintName("fk_time_labels_tenants_tenant_id");
+
b.HasOne("IOL.GreatOffice.Api.Data.Database.TimeEntry", null)
.WithMany("Labels")
.HasForeignKey("TimeEntryId")
.HasConstraintName("fk_time_labels_time_entries_time_entry_id");
+
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "OwningUser")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .HasConstraintName("fk_time_labels_users_user_id");
+
+ b.Navigation("OwningTenant");
+
+ b.Navigation("OwningUser");
});
- modelBuilder.Entity("TenantUser", b =>
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Todo", b =>
{
- b.HasOne("IOL.GreatOffice.Api.Data.Database.Tenant", null)
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.User", "AssignedTo")
.WithMany()
- .HasForeignKey("TenantsId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired()
- .HasConstraintName("fk_tenant_user_tenants_tenants_id");
+ .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.User", null)
+ b.HasOne("IOL.GreatOffice.Api.Data.Database.TodoCollection", "Collection")
.WithMany()
- .HasForeignKey("UsersId")
+ .HasForeignKey("CollectionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
- .HasConstraintName("fk_tenant_user_users_users_id");
+ .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 =>
@@ -1136,10 +1829,32 @@ namespace IOL.GreatOffice.Api.Migrations
b.Navigation("Members");
});
+ modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.Tenant", b =>
+ {
+ b.Navigation("Users");
+ });
+
modelBuilder.Entity("IOL.GreatOffice.Api.Data.Database.TimeEntry", b =>
{
b.Navigation("Labels");
});
+
+ 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
}
}