From 45758bdf14ced8992326bbac14106077adebf951 Mon Sep 17 00:00:00 2001
From: Michal Bohdanowicz <m.w.bohdanowicz@gmail.com>
Date: Mon, 11 Jan 2021 20:58:30 +0100
Subject: [PATCH] XD

---
 .../UpdateInternshipRegistrationUseCase.cs    |   9 +
 .../Entity/Internship/InternshipType.cs       |   1 +
 .../DatabaseFiller.cs                         |   2 +
 .../20210111195519_Insurance.Designer.cs      | 798 ++++++++++++++++++
 .../Migrations/20210111195519_Insurance.cs    |  23 +
 .../InternshipDbContextModelSnapshot.cs       |   4 +
 6 files changed, 837 insertions(+)
 create mode 100644 src/InternshipSystem.Repository/Migrations/20210111195519_Insurance.Designer.cs
 create mode 100644 src/InternshipSystem.Repository/Migrations/20210111195519_Insurance.cs

diff --git a/src/InternshipSystem.Api/UseCases/UpdateInternshipRegistrationUseCase.cs b/src/InternshipSystem.Api/UseCases/UpdateInternshipRegistrationUseCase.cs
index ea50e3a..072b8bc 100644
--- a/src/InternshipSystem.Api/UseCases/UpdateInternshipRegistrationUseCase.cs
+++ b/src/InternshipSystem.Api/UseCases/UpdateInternshipRegistrationUseCase.cs
@@ -92,6 +92,15 @@ namespace InternshipSystem.Api.UseCases
                 _internship.RemoveDocument(DocumentType.InternshipTypeApproval);
             }
             
+            if (editionInternshipType?.InternshipType.RequireInsurance == true)
+            {
+                _internship.AddNewDocument("", DocumentType.NnwInsurance);
+            }
+            else
+            {
+                _internship.RemoveDocument(DocumentType.NnwInsurance);
+            }
+            
             subjectRegistration.Type = editionInternshipType?.InternshipType ?? subjectRegistration.Type;
         }
 
diff --git a/src/InternshipSystem.Core/Entity/Internship/InternshipType.cs b/src/InternshipSystem.Core/Entity/Internship/InternshipType.cs
index 5d47213..cb59899 100644
--- a/src/InternshipSystem.Core/Entity/Internship/InternshipType.cs
+++ b/src/InternshipSystem.Core/Entity/Internship/InternshipType.cs
@@ -8,5 +8,6 @@
         public string Description { get; set; }
         public string DescriptionEng { get; set; }
         public bool RequireDeansApproval { get; set; }
+        public bool RequireInsurance { get; set; }
     }
 }
\ No newline at end of file
diff --git a/src/InternshipSystem.Repository/DatabaseFiller.cs b/src/InternshipSystem.Repository/DatabaseFiller.cs
index 8d1c7d6..cc9006f 100644
--- a/src/InternshipSystem.Repository/DatabaseFiller.cs
+++ b/src/InternshipSystem.Repository/DatabaseFiller.cs
@@ -120,6 +120,7 @@ namespace InternshipSystem.Repository
                     LabelEng = "Internship agreement",
                     Description = "Praktyka bezpłatna",
                     DescriptionEng = "Free internship",
+                    RequireInsurance = true
                 },
                 new InternshipType
                 {
@@ -130,6 +131,7 @@ namespace InternshipSystem.Repository
                 {
                     Label = "Umowa o staż bezpłatny",
                     LabelEng = "Free apprenticeship agreement",
+                    RequireInsurance = true
                 },
                 new InternshipType
                 {
diff --git a/src/InternshipSystem.Repository/Migrations/20210111195519_Insurance.Designer.cs b/src/InternshipSystem.Repository/Migrations/20210111195519_Insurance.Designer.cs
new file mode 100644
index 0000000..b3aca6b
--- /dev/null
+++ b/src/InternshipSystem.Repository/Migrations/20210111195519_Insurance.Designer.cs
@@ -0,0 +1,798 @@
+// <auto-generated />
+using System;
+using InternshipSystem.Repository;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+namespace InternshipSystem.Repository.Migrations
+{
+    [DbContext(typeof(InternshipDbContext))]
+    [Migration("20210111195519_Insurance")]
+    partial class Insurance
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn)
+                .HasAnnotation("ProductVersion", "3.1.4")
+                .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+            modelBuilder.Entity("InternshipSystem.Core.BranchOffice", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<long?>("CompanyId")
+                        .HasColumnName("company_id")
+                        .HasColumnType("bigint");
+
+                    b.Property<long>("Provider")
+                        .HasColumnName("provider")
+                        .HasColumnType("bigint");
+
+                    b.HasKey("Id")
+                        .HasName("pk_branch_office");
+
+                    b.HasIndex("CompanyId")
+                        .HasName("ix_branch_office_company_id");
+
+                    b.ToTable("branch_office");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Company", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("Name")
+                        .HasColumnName("name")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Nip")
+                        .HasColumnName("nip")
+                        .HasColumnType("text");
+
+                    b.Property<long>("Provider")
+                        .HasColumnName("provider")
+                        .HasColumnType("bigint");
+
+                    b.HasKey("Id")
+                        .HasName("pk_companies");
+
+                    b.ToTable("companies");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Document", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("ChangeStateComment")
+                        .HasColumnName("change_state_comment")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Description")
+                        .HasColumnName("description")
+                        .HasColumnType("text");
+
+                    b.Property<long?>("InternshipId")
+                        .HasColumnName("internship_id")
+                        .HasColumnType("bigint");
+
+                    b.Property<int>("State")
+                        .HasColumnName("state")
+                        .HasColumnType("integer");
+
+                    b.Property<int>("Type")
+                        .HasColumnName("type")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id")
+                        .HasName("pk_document");
+
+                    b.HasIndex("InternshipId")
+                        .HasName("ix_document_internship_id");
+
+                    b.ToTable("document");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.DocumentScan", b =>
+                {
+                    b.Property<long>("DocumentId")
+                        .HasColumnName("document_id")
+                        .HasColumnType("bigint");
+
+                    b.Property<byte[]>("File")
+                        .HasColumnName("file")
+                        .HasColumnType("bytea");
+
+                    b.Property<string>("Filename")
+                        .HasColumnName("filename")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Mime")
+                        .HasColumnName("mime")
+                        .HasColumnType("text");
+
+                    b.Property<long>("Size")
+                        .HasColumnName("size")
+                        .HasColumnType("bigint");
+
+                    b.HasKey("DocumentId")
+                        .HasName("pk_document_scan");
+
+                    b.ToTable("document_scan");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Edition", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("uuid");
+
+                    b.Property<long?>("CourseId")
+                        .HasColumnName("course_id")
+                        .HasColumnType("bigint");
+
+                    b.Property<DateTime>("EditionFinish")
+                        .HasColumnName("edition_finish")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime>("EditionStart")
+                        .HasColumnName("edition_start")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime>("ReportingStart")
+                        .HasColumnName("reporting_start")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.HasKey("Id")
+                        .HasName("pk_editions");
+
+                    b.HasIndex("CourseId")
+                        .HasName("ix_editions_course_id");
+
+                    b.ToTable("editions");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Entity.Course", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("Name")
+                        .HasColumnName("name")
+                        .HasColumnType("text");
+
+                    b.Property<string>("NameEng")
+                        .HasColumnName("name_eng")
+                        .HasColumnType("text");
+
+                    b.HasKey("Id")
+                        .HasName("pk_courses");
+
+                    b.ToTable("courses");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Entity.Internship.Internship", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<Guid?>("EditionId")
+                        .HasColumnName("edition_id")
+                        .HasColumnType("uuid");
+
+                    b.Property<float?>("Grade")
+                        .HasColumnName("grade")
+                        .HasColumnType("real");
+
+                    b.Property<long?>("InternshipRegistrationId")
+                        .HasColumnName("internship_registration_id")
+                        .HasColumnType("bigint");
+
+                    b.Property<long?>("ReportId")
+                        .HasColumnName("report_id")
+                        .HasColumnType("bigint");
+
+                    b.Property<long?>("StudentId")
+                        .HasColumnName("student_id")
+                        .HasColumnType("bigint");
+
+                    b.HasKey("Id")
+                        .HasName("pk_internships");
+
+                    b.HasIndex("EditionId")
+                        .HasName("ix_internships_edition_id");
+
+                    b.HasIndex("InternshipRegistrationId")
+                        .HasName("ix_internships_internship_registration_id");
+
+                    b.HasIndex("ReportId")
+                        .HasName("ix_internships_report_id");
+
+                    b.HasIndex("StudentId")
+                        .HasName("ix_internships_student_id");
+
+                    b.ToTable("internships");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Entity.Internship.InternshipRegistration", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<long?>("BranchAddressId")
+                        .HasColumnName("branch_address_id")
+                        .HasColumnType("bigint");
+
+                    b.Property<string>("ChangeStateComment")
+                        .HasColumnName("change_state_comment")
+                        .HasColumnType("text");
+
+                    b.Property<long?>("CompanyId")
+                        .HasColumnName("company_id")
+                        .HasColumnType("bigint");
+
+                    b.Property<int>("DeclaredHours")
+                        .HasColumnName("declared_hours")
+                        .HasColumnType("integer");
+
+                    b.Property<DateTime>("End")
+                        .HasColumnName("end")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<DateTime>("Start")
+                        .HasColumnName("start")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<int>("State")
+                        .HasColumnName("state")
+                        .HasColumnType("integer");
+
+                    b.Property<DateTime>("SubmissionDate")
+                        .HasColumnName("submission_date")
+                        .HasColumnType("timestamp without time zone");
+
+                    b.Property<long?>("TypeId")
+                        .HasColumnName("type_id")
+                        .HasColumnType("bigint");
+
+                    b.HasKey("Id")
+                        .HasName("pk_internship_registration");
+
+                    b.HasIndex("BranchAddressId")
+                        .HasName("ix_internship_registration_branch_address_id");
+
+                    b.HasIndex("CompanyId")
+                        .HasName("ix_internship_registration_company_id");
+
+                    b.HasIndex("TypeId")
+                        .HasName("ix_internship_registration_type_id");
+
+                    b.ToTable("internship_registration");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Entity.Internship.InternshipSubject", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("Description")
+                        .HasColumnName("description")
+                        .HasColumnType("text");
+
+                    b.Property<string>("DescriptionEng")
+                        .HasColumnName("description_eng")
+                        .HasColumnType("text");
+
+                    b.HasKey("Id")
+                        .HasName("pk_internship_subject");
+
+                    b.ToTable("internship_subject");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Entity.Internship.InternshipType", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("Description")
+                        .HasColumnName("description")
+                        .HasColumnType("text");
+
+                    b.Property<string>("DescriptionEng")
+                        .HasColumnName("description_eng")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Label")
+                        .HasColumnName("label")
+                        .HasColumnType("text");
+
+                    b.Property<string>("LabelEng")
+                        .HasColumnName("label_eng")
+                        .HasColumnType("text");
+
+                    b.Property<bool>("RequireDeansApproval")
+                        .HasColumnName("require_deans_approval")
+                        .HasColumnType("boolean");
+
+                    b.Property<bool>("RequireInsurance")
+                        .HasColumnName("require_insurance")
+                        .HasColumnType("boolean");
+
+                    b.HasKey("Id")
+                        .HasName("pk_internship_types");
+
+                    b.ToTable("internship_types");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Entity.ReportField", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("Description")
+                        .HasColumnName("description")
+                        .HasColumnType("text");
+
+                    b.Property<string>("DescriptionEng")
+                        .HasColumnName("description_eng")
+                        .HasColumnType("text");
+
+                    b.Property<int>("FieldType")
+                        .HasColumnName("field_type")
+                        .HasColumnType("integer");
+
+                    b.Property<string>("Label")
+                        .HasColumnName("label")
+                        .HasColumnType("text");
+
+                    b.Property<string>("LabelEng")
+                        .HasColumnName("label_eng")
+                        .HasColumnType("text");
+
+                    b.Property<string>("field_discrimnator")
+                        .IsRequired()
+                        .HasColumnName("field_discrimnator")
+                        .HasColumnType("text");
+
+                    b.HasKey("Id")
+                        .HasName("pk_report_fields");
+
+                    b.ToTable("report_fields");
+
+                    b.HasDiscriminator<string>("field_discrimnator").HasValue("single");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Report", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<int>("State")
+                        .HasColumnName("state")
+                        .HasColumnType("integer");
+
+                    b.Property<string>("Value")
+                        .HasColumnName("value")
+                        .HasColumnType("jsonb");
+
+                    b.HasKey("Id")
+                        .HasName("pk_report");
+
+                    b.ToTable("report");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.StaticPage", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<string>("AccessName")
+                        .HasColumnName("access_name")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Content")
+                        .HasColumnName("content")
+                        .HasColumnType("text");
+
+                    b.Property<string>("ContentEng")
+                        .HasColumnName("content_eng")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Title")
+                        .HasColumnName("title")
+                        .HasColumnType("text");
+
+                    b.Property<string>("TitleEng")
+                        .HasColumnName("title_eng")
+                        .HasColumnType("text");
+
+                    b.HasKey("Id")
+                        .HasName("pk_static_pages");
+
+                    b.ToTable("static_pages");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Student", b =>
+                {
+                    b.Property<long>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnName("id")
+                        .HasColumnType("bigint")
+                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                    b.Property<int>("AlbumNumber")
+                        .HasColumnName("album_number")
+                        .HasColumnType("integer");
+
+                    b.Property<string>("Course")
+                        .HasColumnName("course")
+                        .HasColumnType("text");
+
+                    b.Property<string>("Email")
+                        .HasColumnName("email")
+                        .HasColumnType("text");
+
+                    b.Property<string>("FirstName")
+                        .HasColumnName("first_name")
+                        .HasColumnType("text");
+
+                    b.Property<string>("LastName")
+                        .HasColumnName("last_name")
+                        .HasColumnType("text");
+
+                    b.Property<int?>("Semester")
+                        .HasColumnName("semester")
+                        .HasColumnType("integer");
+
+                    b.HasKey("Id")
+                        .HasName("pk_students");
+
+                    b.ToTable("students");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.EditionInternshipType", b =>
+                {
+                    b.Property<Guid>("EditionId")
+                        .HasColumnName("edition_id")
+                        .HasColumnType("uuid");
+
+                    b.Property<long>("InternshipTypeId")
+                        .HasColumnName("internship_type_id")
+                        .HasColumnType("bigint");
+
+                    b.HasKey("EditionId", "InternshipTypeId")
+                        .HasName("pk_edition_internship_type");
+
+                    b.HasIndex("InternshipTypeId")
+                        .HasName("ix_edition_internship_type_internship_type_id");
+
+                    b.ToTable("edition_internship_type");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.EditionSubject", b =>
+                {
+                    b.Property<Guid>("EditionId")
+                        .HasColumnName("edition_id")
+                        .HasColumnType("uuid");
+
+                    b.Property<long>("InternshipSubjectId")
+                        .HasColumnName("internship_subject_id")
+                        .HasColumnType("bigint");
+
+                    b.HasKey("EditionId", "InternshipSubjectId")
+                        .HasName("pk_edition_subject");
+
+                    b.HasIndex("InternshipSubjectId")
+                        .HasName("ix_edition_subject_internship_subject_id");
+
+                    b.ToTable("edition_subject");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.ProgramSubject", b =>
+                {
+                    b.Property<long>("InternshipRegistrationId")
+                        .HasColumnName("internship_registration_id")
+                        .HasColumnType("bigint");
+
+                    b.Property<long>("InternshipSubjectId")
+                        .HasColumnName("internship_subject_id")
+                        .HasColumnType("bigint");
+
+                    b.HasKey("InternshipRegistrationId", "InternshipSubjectId")
+                        .HasName("pk_program_subject");
+
+                    b.HasIndex("InternshipSubjectId")
+                        .HasName("ix_program_subject_internship_subject_id");
+
+                    b.ToTable("program_subject");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.ReportFieldEdition", b =>
+                {
+                    b.Property<Guid>("EditionId")
+                        .HasColumnName("edition_id")
+                        .HasColumnType("uuid");
+
+                    b.Property<long>("ReportFieldId")
+                        .HasColumnName("report_field_id")
+                        .HasColumnType("bigint");
+
+                    b.HasKey("EditionId", "ReportFieldId")
+                        .HasName("pk_report_field_edition");
+
+                    b.HasIndex("ReportFieldId")
+                        .HasName("ix_report_field_edition_report_field_id");
+
+                    b.ToTable("report_field_edition");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Entity.ReportChoiceField", b =>
+                {
+                    b.HasBaseType("InternshipSystem.Core.Entity.ReportField");
+
+                    b.Property<string>("Choices")
+                        .HasColumnName("choices")
+                        .HasColumnType("text");
+
+                    b.HasDiscriminator().HasValue("choice");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.BranchOffice", b =>
+                {
+                    b.HasOne("InternshipSystem.Core.Company", null)
+                        .WithMany("Branches")
+                        .HasForeignKey("CompanyId")
+                        .HasConstraintName("fk_branch_office_companies_company_id");
+
+                    b.OwnsOne("InternshipSystem.Core.BranchAddress", "Address", b1 =>
+                        {
+                            b1.Property<long>("BranchOfficeId")
+                                .ValueGeneratedOnAdd()
+                                .HasColumnName("id")
+                                .HasColumnType("bigint")
+                                .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                            b1.Property<string>("Building")
+                                .HasColumnName("building")
+                                .HasColumnType("text");
+
+                            b1.Property<string>("City")
+                                .HasColumnName("city")
+                                .HasColumnType("text");
+
+                            b1.Property<string>("Country")
+                                .HasColumnName("country")
+                                .HasColumnType("text");
+
+                            b1.Property<string>("PostalCode")
+                                .HasColumnName("postal_code")
+                                .HasColumnType("text");
+
+                            b1.Property<string>("Street")
+                                .HasColumnName("street")
+                                .HasColumnType("text");
+
+                            b1.HasKey("BranchOfficeId")
+                                .HasName("pk_branch_office");
+
+                            b1.ToTable("branch_office");
+
+                            b1.WithOwner()
+                                .HasForeignKey("BranchOfficeId")
+                                .HasConstraintName("fk_branch_address_branch_office_branch_office_id");
+                        });
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Document", b =>
+                {
+                    b.HasOne("InternshipSystem.Core.Entity.Internship.Internship", null)
+                        .WithMany("Documentation")
+                        .HasForeignKey("InternshipId")
+                        .HasConstraintName("fk_document_internships_internship_id");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.DocumentScan", b =>
+                {
+                    b.HasOne("InternshipSystem.Core.Document", "Document")
+                        .WithOne("Scan")
+                        .HasForeignKey("InternshipSystem.Core.DocumentScan", "DocumentId")
+                        .HasConstraintName("fk_document_scan_document_document_id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Edition", b =>
+                {
+                    b.HasOne("InternshipSystem.Core.Entity.Course", "Course")
+                        .WithMany()
+                        .HasForeignKey("CourseId")
+                        .HasConstraintName("fk_editions_courses_course_id");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Entity.Internship.Internship", b =>
+                {
+                    b.HasOne("InternshipSystem.Core.Edition", "Edition")
+                        .WithMany("Internships")
+                        .HasForeignKey("EditionId")
+                        .HasConstraintName("fk_internships_editions_edition_id");
+
+                    b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipRegistration", "InternshipRegistration")
+                        .WithMany()
+                        .HasForeignKey("InternshipRegistrationId")
+                        .HasConstraintName("fk_internships_internship_registration_internship_registration");
+
+                    b.HasOne("InternshipSystem.Core.Report", "Report")
+                        .WithMany()
+                        .HasForeignKey("ReportId")
+                        .HasConstraintName("fk_internships_report_report_id");
+
+                    b.HasOne("InternshipSystem.Core.Student", "Student")
+                        .WithMany()
+                        .HasForeignKey("StudentId")
+                        .HasConstraintName("fk_internships_students_student_id");
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.Entity.Internship.InternshipRegistration", b =>
+                {
+                    b.HasOne("InternshipSystem.Core.BranchOffice", "BranchAddress")
+                        .WithMany()
+                        .HasForeignKey("BranchAddressId")
+                        .HasConstraintName("fk_internship_registration_branch_office_branch_address_id");
+
+                    b.HasOne("InternshipSystem.Core.Company", "Company")
+                        .WithMany()
+                        .HasForeignKey("CompanyId")
+                        .HasConstraintName("fk_internship_registration_companies_company_id");
+
+                    b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipType", "Type")
+                        .WithMany()
+                        .HasForeignKey("TypeId")
+                        .HasConstraintName("fk_internship_registration_internship_types_type_id");
+
+                    b.OwnsOne("InternshipSystem.Core.Mentor", "Mentor", b1 =>
+                        {
+                            b1.Property<long>("InternshipRegistrationId")
+                                .ValueGeneratedOnAdd()
+                                .HasColumnName("id")
+                                .HasColumnType("bigint")
+                                .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+                            b1.Property<string>("Email")
+                                .HasColumnName("email")
+                                .HasColumnType("text");
+
+                            b1.Property<string>("FirstName")
+                                .HasColumnName("first_name")
+                                .HasColumnType("text");
+
+                            b1.Property<string>("LastName")
+                                .HasColumnName("last_name")
+                                .HasColumnType("text");
+
+                            b1.Property<string>("PhoneNumber")
+                                .HasColumnName("phone_number")
+                                .HasColumnType("text");
+
+                            b1.HasKey("InternshipRegistrationId")
+                                .HasName("pk_internship_registration");
+
+                            b1.ToTable("internship_registration");
+
+                            b1.WithOwner()
+                                .HasForeignKey("InternshipRegistrationId")
+                                .HasConstraintName("fk_mentor_internship_registration_internship_registration_id");
+                        });
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.EditionInternshipType", b =>
+                {
+                    b.HasOne("InternshipSystem.Core.Edition", "Edition")
+                        .WithMany("AvailableInternshipTypes")
+                        .HasForeignKey("EditionId")
+                        .HasConstraintName("fk_edition_internship_type_editions_edition_id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipType", "InternshipType")
+                        .WithMany()
+                        .HasForeignKey("InternshipTypeId")
+                        .HasConstraintName("fk_edition_internship_type_internship_types_internship_type_id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.EditionSubject", b =>
+                {
+                    b.HasOne("InternshipSystem.Core.Edition", "Edition")
+                        .WithMany("AvailableSubjects")
+                        .HasForeignKey("EditionId")
+                        .HasConstraintName("fk_edition_subject_editions_edition_id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipSubject", "Subject")
+                        .WithMany()
+                        .HasForeignKey("InternshipSubjectId")
+                        .HasConstraintName("fk_edition_subject_internship_subject_internship_subject_id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.ProgramSubject", b =>
+                {
+                    b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipRegistration", "Registration")
+                        .WithMany("Subjects")
+                        .HasForeignKey("InternshipRegistrationId")
+                        .HasConstraintName("fk_program_subject_internship_registration_internship_registrat")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipSubject", "Subject")
+                        .WithMany()
+                        .HasForeignKey("InternshipSubjectId")
+                        .HasConstraintName("fk_program_subject_internship_subject_internship_subject_id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.ReportFieldEdition", b =>
+                {
+                    b.HasOne("InternshipSystem.Core.Edition", "Edition")
+                        .WithMany("ReportSchema")
+                        .HasForeignKey("EditionId")
+                        .HasConstraintName("fk_report_field_edition_editions_edition_id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("InternshipSystem.Core.Entity.ReportField", "Field")
+                        .WithMany()
+                        .HasForeignKey("ReportFieldId")
+                        .HasConstraintName("fk_report_field_edition_report_fields_report_field_id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
diff --git a/src/InternshipSystem.Repository/Migrations/20210111195519_Insurance.cs b/src/InternshipSystem.Repository/Migrations/20210111195519_Insurance.cs
new file mode 100644
index 0000000..245932a
--- /dev/null
+++ b/src/InternshipSystem.Repository/Migrations/20210111195519_Insurance.cs
@@ -0,0 +1,23 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace InternshipSystem.Repository.Migrations
+{
+    public partial class Insurance : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.AddColumn<bool>(
+                name: "require_insurance",
+                table: "internship_types",
+                nullable: false,
+                defaultValue: false);
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropColumn(
+                name: "require_insurance",
+                table: "internship_types");
+        }
+    }
+}
diff --git a/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs b/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs
index 56175e9..cbc0454 100644
--- a/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs
+++ b/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs
@@ -344,6 +344,10 @@ namespace InternshipSystem.Repository.Migrations
                         .HasColumnName("require_deans_approval")
                         .HasColumnType("boolean");
 
+                    b.Property<bool>("RequireInsurance")
+                        .HasColumnName("require_insurance")
+                        .HasColumnType("boolean");
+
                     b.HasKey("Id")
                         .HasName("pk_internship_types");
 
-- 
2.45.2