From b2d7fcb34ebcf1567a50a0ce778b8abc53de537a Mon Sep 17 00:00:00 2001
From: Michal Bohdanowicz <m.w.bohdanowicz@gmail.com>
Date: Sat, 9 Jan 2021 12:37:12 +0100
Subject: [PATCH 1/6] XD

---
 global.json                                   |   5 -
 .../Controllers/ReportFieldsController.cs     |  32 +
 src/InternshipSystem.Core/Entity/Edition.cs   |   1 +
 .../Entity/ReportField.cs                     |  29 +
 .../InternshipDbContext.cs                    |  31 +
 .../20201128203805_init.Designer.cs           | 699 +---------------
 .../Migrations/20201128203805_init.cs         | 482 +----------
 .../20210107220846_Init.Designer.cs           | 778 ++++++++++++++++++
 .../Migrations/20210107220846_Init.cs         | 533 ++++++++++++
 .../InternshipDbContextModelSnapshot.cs       |  96 ++-
 10 files changed, 1494 insertions(+), 1192 deletions(-)
 delete mode 100644 global.json
 create mode 100644 src/InternshipSystem.Api/Controllers/ReportFieldsController.cs
 create mode 100644 src/InternshipSystem.Core/Entity/ReportField.cs
 create mode 100644 src/InternshipSystem.Repository/Migrations/20210107220846_Init.Designer.cs
 create mode 100644 src/InternshipSystem.Repository/Migrations/20210107220846_Init.cs

diff --git a/global.json b/global.json
deleted file mode 100644
index c120c81..0000000
--- a/global.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "sdk": {
-    "version": "3.1.301"
-  }
-}
\ No newline at end of file
diff --git a/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs b/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs
new file mode 100644
index 0000000..88a2877
--- /dev/null
+++ b/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs
@@ -0,0 +1,32 @@
+using System.Threading;
+using System.Threading.Tasks;
+using InternshipSystem.Repository;
+using Microsoft.AspNetCore.Mvc;
+
+namespace InternshipSystem.Api.Controllers
+{
+    public class ReportFieldsController : ControllerBase
+    {
+        private readonly InternshipDbContext _context;
+
+        public ReportFieldsController(InternshipDbContext context)
+        {
+            _context = context;
+        }
+        
+        public async Task<ActionResult> CreateField(FieldCreateRequest request, CancellationToken ct)
+        {
+            
+            
+            return Ok();
+        }
+    }
+
+    public class FieldCreateRequest
+    {
+        public string Label { get; set; }
+        public string LabelEng { get; set; }
+        public string Description { get; set; }
+        public string DescriptionEng { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/InternshipSystem.Core/Entity/Edition.cs b/src/InternshipSystem.Core/Entity/Edition.cs
index dd00699..705f045 100644
--- a/src/InternshipSystem.Core/Entity/Edition.cs
+++ b/src/InternshipSystem.Core/Entity/Edition.cs
@@ -17,6 +17,7 @@ namespace InternshipSystem.Core
         public List<Internship> Internships { get; set; }
         public List<EditionSubject> AvailableSubjects { get; set; }
         public List<EditionInternshipType> AvailableInternshipTypes { get; set; }
+        public List<ReportFieldEdition> ReportSchema { get; set; }
 
         public bool IsOpen => EditionFinish < DateTime.Today;
 
diff --git a/src/InternshipSystem.Core/Entity/ReportField.cs b/src/InternshipSystem.Core/Entity/ReportField.cs
new file mode 100644
index 0000000..9b6b6a8
--- /dev/null
+++ b/src/InternshipSystem.Core/Entity/ReportField.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+
+namespace InternshipSystem.Core.Entity
+{
+    public class ReportField
+    {
+        public long Id { get; set; }
+        public string Label { get; set; }
+        public string LabelEng { get; set; }
+        public string Description { get; set; }
+        public string DescriptionEng { get; set; }
+        public FieldType FieldType { get; set; }
+    }
+
+    public enum FieldType
+    {
+        LongText,
+        ShortText,
+        Select,
+        Radial,
+        Checkbox
+    }
+
+    public class ReportChoiceField : ReportField
+    {
+        public string[] Choices { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/InternshipSystem.Repository/InternshipDbContext.cs b/src/InternshipSystem.Repository/InternshipDbContext.cs
index 117f5ea..adf2279 100644
--- a/src/InternshipSystem.Repository/InternshipDbContext.cs
+++ b/src/InternshipSystem.Repository/InternshipDbContext.cs
@@ -1,3 +1,5 @@
+using System;
+using System.Linq;
 using Microsoft.EntityFrameworkCore;
 using InternshipSystem.Core;
 using InternshipSystem.Core.Entity;
@@ -90,6 +92,35 @@ namespace InternshipSystem.Repository
                     .WithMany()
                     .HasForeignKey(subject => subject.InternshipSubjectId);
             });
+
+            modelBuilder.Entity<ReportFieldEdition>(builder =>
+            {
+                builder
+                    .HasKey(e => new {e.EditionId, e.ReportFieldId});
+
+                builder
+                    .HasOne(e => e.Edition)
+                    .WithMany(edition => edition.ReportSchema)
+                    .HasForeignKey(r => r.EditionId);
+
+                builder
+                    .HasOne(e => e.Field)
+                    .WithMany()
+                    .HasForeignKey(r => r.ReportFieldId);
+            });
+
+            modelBuilder.Entity<ReportField>()
+                .HasDiscriminator(r => r.FieldType);
+
+            modelBuilder.Entity<ReportChoiceField>()
+                .Property(r => r.Choices)
+                .HasConversion(
+                    a => string.Join('#', a),
+                    s => s.Split('#', StringSplitOptions.RemoveEmptyEntries));
+
+            modelBuilder.Entity<Report>()
+                .Property(r => r.Value)
+                .HasColumnType("jsonb");
         }
     }
 }
\ No newline at end of file
diff --git a/src/InternshipSystem.Repository/Migrations/20201128203805_init.Designer.cs b/src/InternshipSystem.Repository/Migrations/20201128203805_init.Designer.cs
index 0f461fa..5f28270 100644
--- a/src/InternshipSystem.Repository/Migrations/20201128203805_init.Designer.cs
+++ b/src/InternshipSystem.Repository/Migrations/20201128203805_init.Designer.cs
@@ -1,698 +1 @@
-// <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("20201128203805_init")]
-    partial class init
-    {
-        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>("Description")
-                        .HasColumnName("description")
-                        .HasColumnType("text");
-
-                    b.Property<long?>("InternshipId")
-                        .HasColumnName("internship_id")
-                        .HasColumnType("bigint");
-
-                    b.Property<string>("RejectionReason")
-                        .HasColumnName("rejection_reason")
-                        .HasColumnType("text");
-
-                    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_internship");
-
-                    b.HasIndex("EditionId")
-                        .HasName("ix_internship_edition_id");
-
-                    b.HasIndex("InternshipRegistrationId")
-                        .HasName("ix_internship_internship_registration_id");
-
-                    b.HasIndex("ReportId")
-                        .HasName("ix_internship_report_id");
-
-                    b.HasIndex("StudentId")
-                        .HasName("ix_internship_student_id");
-
-                    b.ToTable("internship");
-                });
-
-            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<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<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.HasKey("Id")
-                        .HasName("pk_internship_types");
-
-                    b.ToTable("internship_types");
-                });
-
-            modelBuilder.Entity("InternshipSystem.Core.Report", b =>
-                {
-                    b.Property<long>("Id")
-                        .ValueGeneratedOnAdd()
-                        .HasColumnName("id")
-                        .HasColumnType("bigint")
-                        .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
-
-                    b.Property<int>("Range")
-                        .HasColumnName("range")
-                        .HasColumnType("integer");
-
-                    b.Property<string>("SiteAddress")
-                        .HasColumnName("site_address")
-                        .HasColumnType("text");
-
-                    b.Property<int>("State")
-                        .HasColumnName("state")
-                        .HasColumnType("integer");
-
-                    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.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_internship_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_internship_editions_edition_id");
-
-                    b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipRegistration", "InternshipRegistration")
-                        .WithMany()
-                        .HasForeignKey("InternshipRegistrationId")
-                        .HasConstraintName("fk_internship_internship_registration_internship_registration_");
-
-                    b.HasOne("InternshipSystem.Core.Report", "Report")
-                        .WithMany()
-                        .HasForeignKey("ReportId")
-                        .HasConstraintName("fk_internship_report_report_id");
-
-                    b.HasOne("InternshipSystem.Core.Student", "Student")
-                        .WithMany()
-                        .HasForeignKey("StudentId")
-                        .HasConstraintName("fk_internship_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();
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}
+
\ No newline at end of file
diff --git a/src/InternshipSystem.Repository/Migrations/20201128203805_init.cs b/src/InternshipSystem.Repository/Migrations/20201128203805_init.cs
index ac30931..5f28270 100644
--- a/src/InternshipSystem.Repository/Migrations/20201128203805_init.cs
+++ b/src/InternshipSystem.Repository/Migrations/20201128203805_init.cs
@@ -1,481 +1 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-namespace InternshipSystem.Repository.Migrations
-{
-    public partial class init : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "companies",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    nip = table.Column<string>(nullable: true),
-                    name = table.Column<string>(nullable: true),
-                    provider = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_companies", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "courses",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    name = table.Column<string>(nullable: true),
-                    name_eng = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_courses", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "internship_subject",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    description = table.Column<string>(nullable: true),
-                    description_eng = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_internship_subject", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "internship_types",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    label = table.Column<string>(nullable: true),
-                    label_eng = table.Column<string>(nullable: true),
-                    description = table.Column<string>(nullable: true),
-                    description_eng = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_internship_types", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "report",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    state = table.Column<int>(nullable: false),
-                    range = table.Column<int>(nullable: false),
-                    site_address = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_report", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "static_pages",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    access_name = table.Column<string>(nullable: true),
-                    title = table.Column<string>(nullable: true),
-                    title_eng = table.Column<string>(nullable: true),
-                    content = table.Column<string>(nullable: true),
-                    content_eng = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_static_pages", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "students",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    album_number = table.Column<int>(nullable: false),
-                    first_name = table.Column<string>(nullable: true),
-                    last_name = table.Column<string>(nullable: true),
-                    email = table.Column<string>(nullable: true),
-                    course = table.Column<string>(nullable: true),
-                    semester = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_students", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "branch_office",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    street = table.Column<string>(nullable: true),
-                    building = table.Column<string>(nullable: true),
-                    city = table.Column<string>(nullable: true),
-                    postal_code = table.Column<string>(nullable: true),
-                    country = table.Column<string>(nullable: true),
-                    provider = table.Column<long>(nullable: false),
-                    company_id = table.Column<long>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_branch_office", x => x.id);
-                    table.ForeignKey(
-                        name: "fk_branch_office_companies_company_id",
-                        column: x => x.company_id,
-                        principalTable: "companies",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "editions",
-                columns: table => new
-                {
-                    id = table.Column<Guid>(nullable: false),
-                    edition_start = table.Column<DateTime>(nullable: false),
-                    edition_finish = table.Column<DateTime>(nullable: false),
-                    reporting_start = table.Column<DateTime>(nullable: false),
-                    course_id = table.Column<long>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_editions", x => x.id);
-                    table.ForeignKey(
-                        name: "fk_editions_courses_course_id",
-                        column: x => x.course_id,
-                        principalTable: "courses",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "internship_registration",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    company_id = table.Column<long>(nullable: true),
-                    branch_address_id = table.Column<long>(nullable: true),
-                    start = table.Column<DateTime>(nullable: false),
-                    end = table.Column<DateTime>(nullable: false),
-                    first_name = table.Column<string>(nullable: true),
-                    last_name = table.Column<string>(nullable: true),
-                    email = table.Column<string>(nullable: true),
-                    phone_number = table.Column<string>(nullable: true),
-                    type_id = table.Column<long>(nullable: true),
-                    declared_hours = table.Column<int>(nullable: false),
-                    state = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_internship_registration", x => x.id);
-                    table.ForeignKey(
-                        name: "fk_internship_registration_branch_office_branch_address_id",
-                        column: x => x.branch_address_id,
-                        principalTable: "branch_office",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "fk_internship_registration_companies_company_id",
-                        column: x => x.company_id,
-                        principalTable: "companies",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "fk_internship_registration_internship_types_type_id",
-                        column: x => x.type_id,
-                        principalTable: "internship_types",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "edition_internship_type",
-                columns: table => new
-                {
-                    edition_id = table.Column<Guid>(nullable: false),
-                    internship_type_id = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_edition_internship_type", x => new { x.edition_id, x.internship_type_id });
-                    table.ForeignKey(
-                        name: "fk_edition_internship_type_editions_edition_id",
-                        column: x => x.edition_id,
-                        principalTable: "editions",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "fk_edition_internship_type_internship_types_internship_type_id",
-                        column: x => x.internship_type_id,
-                        principalTable: "internship_types",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "edition_subject",
-                columns: table => new
-                {
-                    edition_id = table.Column<Guid>(nullable: false),
-                    internship_subject_id = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_edition_subject", x => new { x.edition_id, x.internship_subject_id });
-                    table.ForeignKey(
-                        name: "fk_edition_subject_editions_edition_id",
-                        column: x => x.edition_id,
-                        principalTable: "editions",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "fk_edition_subject_internship_subject_internship_subject_id",
-                        column: x => x.internship_subject_id,
-                        principalTable: "internship_subject",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "internship",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    student_id = table.Column<long>(nullable: true),
-                    internship_registration_id = table.Column<long>(nullable: true),
-                    report_id = table.Column<long>(nullable: true),
-                    edition_id = table.Column<Guid>(nullable: true),
-                    grade = table.Column<float>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_internship", x => x.id);
-                    table.ForeignKey(
-                        name: "fk_internship_editions_edition_id",
-                        column: x => x.edition_id,
-                        principalTable: "editions",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "fk_internship_internship_registration_internship_registration_",
-                        column: x => x.internship_registration_id,
-                        principalTable: "internship_registration",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "fk_internship_report_report_id",
-                        column: x => x.report_id,
-                        principalTable: "report",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "fk_internship_students_student_id",
-                        column: x => x.student_id,
-                        principalTable: "students",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "program_subject",
-                columns: table => new
-                {
-                    internship_registration_id = table.Column<long>(nullable: false),
-                    internship_subject_id = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_program_subject", x => new { x.internship_registration_id, x.internship_subject_id });
-                    table.ForeignKey(
-                        name: "fk_program_subject_internship_registration_internship_registrat",
-                        column: x => x.internship_registration_id,
-                        principalTable: "internship_registration",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "fk_program_subject_internship_subject_internship_subject_id",
-                        column: x => x.internship_subject_id,
-                        principalTable: "internship_subject",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "document",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    description = table.Column<string>(nullable: true),
-                    type = table.Column<int>(nullable: false),
-                    state = table.Column<int>(nullable: false),
-                    rejection_reason = table.Column<string>(nullable: true),
-                    internship_id = table.Column<long>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_document", x => x.id);
-                    table.ForeignKey(
-                        name: "fk_document_internship_internship_id",
-                        column: x => x.internship_id,
-                        principalTable: "internship",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "document_scan",
-                columns: table => new
-                {
-                    document_id = table.Column<long>(nullable: false),
-                    size = table.Column<long>(nullable: false),
-                    filename = table.Column<string>(nullable: true),
-                    mime = table.Column<string>(nullable: true),
-                    file = table.Column<byte[]>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_document_scan", x => x.document_id);
-                    table.ForeignKey(
-                        name: "fk_document_scan_document_document_id",
-                        column: x => x.document_id,
-                        principalTable: "document",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "ix_branch_office_company_id",
-                table: "branch_office",
-                column: "company_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_document_internship_id",
-                table: "document",
-                column: "internship_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_edition_internship_type_internship_type_id",
-                table: "edition_internship_type",
-                column: "internship_type_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_edition_subject_internship_subject_id",
-                table: "edition_subject",
-                column: "internship_subject_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_editions_course_id",
-                table: "editions",
-                column: "course_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_edition_id",
-                table: "internship",
-                column: "edition_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_internship_registration_id",
-                table: "internship",
-                column: "internship_registration_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_report_id",
-                table: "internship",
-                column: "report_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_student_id",
-                table: "internship",
-                column: "student_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_registration_branch_address_id",
-                table: "internship_registration",
-                column: "branch_address_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_registration_company_id",
-                table: "internship_registration",
-                column: "company_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_registration_type_id",
-                table: "internship_registration",
-                column: "type_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_program_subject_internship_subject_id",
-                table: "program_subject",
-                column: "internship_subject_id");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "document_scan");
-
-            migrationBuilder.DropTable(
-                name: "edition_internship_type");
-
-            migrationBuilder.DropTable(
-                name: "edition_subject");
-
-            migrationBuilder.DropTable(
-                name: "program_subject");
-
-            migrationBuilder.DropTable(
-                name: "static_pages");
-
-            migrationBuilder.DropTable(
-                name: "document");
-
-            migrationBuilder.DropTable(
-                name: "internship_subject");
-
-            migrationBuilder.DropTable(
-                name: "internship");
-
-            migrationBuilder.DropTable(
-                name: "editions");
-
-            migrationBuilder.DropTable(
-                name: "internship_registration");
-
-            migrationBuilder.DropTable(
-                name: "report");
-
-            migrationBuilder.DropTable(
-                name: "students");
-
-            migrationBuilder.DropTable(
-                name: "courses");
-
-            migrationBuilder.DropTable(
-                name: "branch_office");
-
-            migrationBuilder.DropTable(
-                name: "internship_types");
-
-            migrationBuilder.DropTable(
-                name: "companies");
-        }
-    }
-}
+
\ No newline at end of file
diff --git a/src/InternshipSystem.Repository/Migrations/20210107220846_Init.Designer.cs b/src/InternshipSystem.Repository/Migrations/20210107220846_Init.Designer.cs
new file mode 100644
index 0000000..8e99457
--- /dev/null
+++ b/src/InternshipSystem.Repository/Migrations/20210107220846_Init.Designer.cs
@@ -0,0 +1,778 @@
+// <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("20210107220846_Init")]
+    partial class Init
+    {
+        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>("Description")
+                        .HasColumnName("description")
+                        .HasColumnType("text");
+
+                    b.Property<long?>("InternshipId")
+                        .HasColumnName("internship_id")
+                        .HasColumnType("bigint");
+
+                    b.Property<string>("RejectionReason")
+                        .HasColumnName("rejection_reason")
+                        .HasColumnType("text");
+
+                    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_internship");
+
+                    b.HasIndex("EditionId")
+                        .HasName("ix_internship_edition_id");
+
+                    b.HasIndex("InternshipRegistrationId")
+                        .HasName("ix_internship_internship_registration_id");
+
+                    b.HasIndex("ReportId")
+                        .HasName("ix_internship_report_id");
+
+                    b.HasIndex("StudentId")
+                        .HasName("ix_internship_student_id");
+
+                    b.ToTable("internship");
+                });
+
+            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<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<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.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<string>("Label")
+                        .HasColumnName("label")
+                        .HasColumnType("text");
+
+                    b.Property<string>("LabelEng")
+                        .HasColumnName("label_eng")
+                        .HasColumnType("text");
+
+                    b.Property<string>("field_type")
+                        .IsRequired()
+                        .HasColumnName("field_type")
+                        .HasColumnType("text");
+
+                    b.HasKey("Id")
+                        .HasName("pk_report_field");
+
+                    b.ToTable("report_field");
+
+                    b.HasDiscriminator<string>("field_type").HasValue("ReportField");
+                });
+
+            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("text");
+
+                    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.ReportFieldDict", b =>
+                {
+                    b.HasBaseType("InternshipSystem.Core.Entity.ReportField");
+
+                    b.Property<string>("Values")
+                        .HasColumnName("values")
+                        .HasColumnType("jsonb");
+
+                    b.HasDiscriminator().HasValue("ReportFieldDict");
+                });
+
+            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_internship_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_internship_editions_edition_id");
+
+                    b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipRegistration", "InternshipRegistration")
+                        .WithMany()
+                        .HasForeignKey("InternshipRegistrationId")
+                        .HasConstraintName("fk_internship_internship_registration_internship_registration_");
+
+                    b.HasOne("InternshipSystem.Core.Report", "Report")
+                        .WithMany()
+                        .HasForeignKey("ReportId")
+                        .HasConstraintName("fk_internship_report_report_id");
+
+                    b.HasOne("InternshipSystem.Core.Student", "Student")
+                        .WithMany()
+                        .HasForeignKey("StudentId")
+                        .HasConstraintName("fk_internship_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_field_report_field_id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
diff --git a/src/InternshipSystem.Repository/Migrations/20210107220846_Init.cs b/src/InternshipSystem.Repository/Migrations/20210107220846_Init.cs
new file mode 100644
index 0000000..7460b41
--- /dev/null
+++ b/src/InternshipSystem.Repository/Migrations/20210107220846_Init.cs
@@ -0,0 +1,533 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+namespace InternshipSystem.Repository.Migrations
+{
+    public partial class Init : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.CreateTable(
+                name: "companies",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    nip = table.Column<string>(nullable: true),
+                    name = table.Column<string>(nullable: true),
+                    provider = table.Column<long>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_companies", x => x.id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "courses",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    name = table.Column<string>(nullable: true),
+                    name_eng = table.Column<string>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_courses", x => x.id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "internship_subject",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    description = table.Column<string>(nullable: true),
+                    description_eng = table.Column<string>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_internship_subject", x => x.id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "internship_types",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    label = table.Column<string>(nullable: true),
+                    label_eng = table.Column<string>(nullable: true),
+                    description = table.Column<string>(nullable: true),
+                    description_eng = table.Column<string>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_internship_types", x => x.id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "report",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    state = table.Column<int>(nullable: false),
+                    value = table.Column<string>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_report", x => x.id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "report_field",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    label = table.Column<string>(nullable: true),
+                    label_eng = table.Column<string>(nullable: true),
+                    description = table.Column<string>(nullable: true),
+                    description_eng = table.Column<string>(nullable: true),
+                    field_type = table.Column<string>(nullable: false),
+                    values = table.Column<string>(type: "jsonb", nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_report_field", x => x.id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "static_pages",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    access_name = table.Column<string>(nullable: true),
+                    title = table.Column<string>(nullable: true),
+                    title_eng = table.Column<string>(nullable: true),
+                    content = table.Column<string>(nullable: true),
+                    content_eng = table.Column<string>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_static_pages", x => x.id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "students",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    album_number = table.Column<int>(nullable: false),
+                    first_name = table.Column<string>(nullable: true),
+                    last_name = table.Column<string>(nullable: true),
+                    email = table.Column<string>(nullable: true),
+                    course = table.Column<string>(nullable: true),
+                    semester = table.Column<int>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_students", x => x.id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "branch_office",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    street = table.Column<string>(nullable: true),
+                    building = table.Column<string>(nullable: true),
+                    city = table.Column<string>(nullable: true),
+                    postal_code = table.Column<string>(nullable: true),
+                    country = table.Column<string>(nullable: true),
+                    provider = table.Column<long>(nullable: false),
+                    company_id = table.Column<long>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_branch_office", x => x.id);
+                    table.ForeignKey(
+                        name: "fk_branch_office_companies_company_id",
+                        column: x => x.company_id,
+                        principalTable: "companies",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Restrict);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "editions",
+                columns: table => new
+                {
+                    id = table.Column<Guid>(nullable: false),
+                    edition_start = table.Column<DateTime>(nullable: false),
+                    edition_finish = table.Column<DateTime>(nullable: false),
+                    reporting_start = table.Column<DateTime>(nullable: false),
+                    course_id = table.Column<long>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_editions", x => x.id);
+                    table.ForeignKey(
+                        name: "fk_editions_courses_course_id",
+                        column: x => x.course_id,
+                        principalTable: "courses",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Restrict);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "internship_registration",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    company_id = table.Column<long>(nullable: true),
+                    branch_address_id = table.Column<long>(nullable: true),
+                    start = table.Column<DateTime>(nullable: false),
+                    end = table.Column<DateTime>(nullable: false),
+                    first_name = table.Column<string>(nullable: true),
+                    last_name = table.Column<string>(nullable: true),
+                    email = table.Column<string>(nullable: true),
+                    phone_number = table.Column<string>(nullable: true),
+                    type_id = table.Column<long>(nullable: true),
+                    declared_hours = table.Column<int>(nullable: false),
+                    state = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_internship_registration", x => x.id);
+                    table.ForeignKey(
+                        name: "fk_internship_registration_branch_office_branch_address_id",
+                        column: x => x.branch_address_id,
+                        principalTable: "branch_office",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Restrict);
+                    table.ForeignKey(
+                        name: "fk_internship_registration_companies_company_id",
+                        column: x => x.company_id,
+                        principalTable: "companies",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Restrict);
+                    table.ForeignKey(
+                        name: "fk_internship_registration_internship_types_type_id",
+                        column: x => x.type_id,
+                        principalTable: "internship_types",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Restrict);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "edition_internship_type",
+                columns: table => new
+                {
+                    edition_id = table.Column<Guid>(nullable: false),
+                    internship_type_id = table.Column<long>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_edition_internship_type", x => new { x.edition_id, x.internship_type_id });
+                    table.ForeignKey(
+                        name: "fk_edition_internship_type_editions_edition_id",
+                        column: x => x.edition_id,
+                        principalTable: "editions",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "fk_edition_internship_type_internship_types_internship_type_id",
+                        column: x => x.internship_type_id,
+                        principalTable: "internship_types",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "edition_subject",
+                columns: table => new
+                {
+                    edition_id = table.Column<Guid>(nullable: false),
+                    internship_subject_id = table.Column<long>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_edition_subject", x => new { x.edition_id, x.internship_subject_id });
+                    table.ForeignKey(
+                        name: "fk_edition_subject_editions_edition_id",
+                        column: x => x.edition_id,
+                        principalTable: "editions",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "fk_edition_subject_internship_subject_internship_subject_id",
+                        column: x => x.internship_subject_id,
+                        principalTable: "internship_subject",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "report_field_edition",
+                columns: table => new
+                {
+                    edition_id = table.Column<Guid>(nullable: false),
+                    report_field_id = table.Column<long>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_report_field_edition", x => new { x.edition_id, x.report_field_id });
+                    table.ForeignKey(
+                        name: "fk_report_field_edition_editions_edition_id",
+                        column: x => x.edition_id,
+                        principalTable: "editions",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "fk_report_field_edition_report_field_report_field_id",
+                        column: x => x.report_field_id,
+                        principalTable: "report_field",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "internship",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    student_id = table.Column<long>(nullable: true),
+                    internship_registration_id = table.Column<long>(nullable: true),
+                    report_id = table.Column<long>(nullable: true),
+                    edition_id = table.Column<Guid>(nullable: true),
+                    grade = table.Column<float>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_internship", x => x.id);
+                    table.ForeignKey(
+                        name: "fk_internship_editions_edition_id",
+                        column: x => x.edition_id,
+                        principalTable: "editions",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Restrict);
+                    table.ForeignKey(
+                        name: "fk_internship_internship_registration_internship_registration_",
+                        column: x => x.internship_registration_id,
+                        principalTable: "internship_registration",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Restrict);
+                    table.ForeignKey(
+                        name: "fk_internship_report_report_id",
+                        column: x => x.report_id,
+                        principalTable: "report",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Restrict);
+                    table.ForeignKey(
+                        name: "fk_internship_students_student_id",
+                        column: x => x.student_id,
+                        principalTable: "students",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Restrict);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "program_subject",
+                columns: table => new
+                {
+                    internship_registration_id = table.Column<long>(nullable: false),
+                    internship_subject_id = table.Column<long>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_program_subject", x => new { x.internship_registration_id, x.internship_subject_id });
+                    table.ForeignKey(
+                        name: "fk_program_subject_internship_registration_internship_registrat",
+                        column: x => x.internship_registration_id,
+                        principalTable: "internship_registration",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "fk_program_subject_internship_subject_internship_subject_id",
+                        column: x => x.internship_subject_id,
+                        principalTable: "internship_subject",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "document",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    description = table.Column<string>(nullable: true),
+                    type = table.Column<int>(nullable: false),
+                    state = table.Column<int>(nullable: false),
+                    rejection_reason = table.Column<string>(nullable: true),
+                    internship_id = table.Column<long>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_document", x => x.id);
+                    table.ForeignKey(
+                        name: "fk_document_internship_internship_id",
+                        column: x => x.internship_id,
+                        principalTable: "internship",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Restrict);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "document_scan",
+                columns: table => new
+                {
+                    document_id = table.Column<long>(nullable: false),
+                    size = table.Column<long>(nullable: false),
+                    filename = table.Column<string>(nullable: true),
+                    mime = table.Column<string>(nullable: true),
+                    file = table.Column<byte[]>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_document_scan", x => x.document_id);
+                    table.ForeignKey(
+                        name: "fk_document_scan_document_document_id",
+                        column: x => x.document_id,
+                        principalTable: "document",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateIndex(
+                name: "ix_branch_office_company_id",
+                table: "branch_office",
+                column: "company_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_document_internship_id",
+                table: "document",
+                column: "internship_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_edition_internship_type_internship_type_id",
+                table: "edition_internship_type",
+                column: "internship_type_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_edition_subject_internship_subject_id",
+                table: "edition_subject",
+                column: "internship_subject_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_editions_course_id",
+                table: "editions",
+                column: "course_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_internship_edition_id",
+                table: "internship",
+                column: "edition_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_internship_internship_registration_id",
+                table: "internship",
+                column: "internship_registration_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_internship_report_id",
+                table: "internship",
+                column: "report_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_internship_student_id",
+                table: "internship",
+                column: "student_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_internship_registration_branch_address_id",
+                table: "internship_registration",
+                column: "branch_address_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_internship_registration_company_id",
+                table: "internship_registration",
+                column: "company_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_internship_registration_type_id",
+                table: "internship_registration",
+                column: "type_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_program_subject_internship_subject_id",
+                table: "program_subject",
+                column: "internship_subject_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_report_field_edition_report_field_id",
+                table: "report_field_edition",
+                column: "report_field_id");
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "document_scan");
+
+            migrationBuilder.DropTable(
+                name: "edition_internship_type");
+
+            migrationBuilder.DropTable(
+                name: "edition_subject");
+
+            migrationBuilder.DropTable(
+                name: "program_subject");
+
+            migrationBuilder.DropTable(
+                name: "report_field_edition");
+
+            migrationBuilder.DropTable(
+                name: "static_pages");
+
+            migrationBuilder.DropTable(
+                name: "document");
+
+            migrationBuilder.DropTable(
+                name: "internship_subject");
+
+            migrationBuilder.DropTable(
+                name: "report_field");
+
+            migrationBuilder.DropTable(
+                name: "internship");
+
+            migrationBuilder.DropTable(
+                name: "editions");
+
+            migrationBuilder.DropTable(
+                name: "internship_registration");
+
+            migrationBuilder.DropTable(
+                name: "report");
+
+            migrationBuilder.DropTable(
+                name: "students");
+
+            migrationBuilder.DropTable(
+                name: "courses");
+
+            migrationBuilder.DropTable(
+                name: "branch_office");
+
+            migrationBuilder.DropTable(
+                name: "internship_types");
+
+            migrationBuilder.DropTable(
+                name: "companies");
+        }
+    }
+}
diff --git a/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs b/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs
index aabead5..e291852 100644
--- a/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs
+++ b/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs
@@ -338,6 +338,43 @@ namespace InternshipSystem.Repository.Migrations
                     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<string>("Label")
+                        .HasColumnName("label")
+                        .HasColumnType("text");
+
+                    b.Property<string>("LabelEng")
+                        .HasColumnName("label_eng")
+                        .HasColumnType("text");
+
+                    b.Property<string>("field_type")
+                        .IsRequired()
+                        .HasColumnName("field_type")
+                        .HasColumnType("text");
+
+                    b.HasKey("Id")
+                        .HasName("pk_report_field");
+
+                    b.ToTable("report_field");
+
+                    b.HasDiscriminator<string>("field_type").HasValue("ReportField");
+                });
+
             modelBuilder.Entity("InternshipSystem.Core.Report", b =>
                 {
                     b.Property<long>("Id")
@@ -346,18 +383,14 @@ namespace InternshipSystem.Repository.Migrations
                         .HasColumnType("bigint")
                         .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
 
-                    b.Property<int>("Range")
-                        .HasColumnName("range")
-                        .HasColumnType("integer");
-
-                    b.Property<string>("SiteAddress")
-                        .HasColumnName("site_address")
-                        .HasColumnType("text");
-
                     b.Property<int>("State")
                         .HasColumnName("state")
                         .HasColumnType("integer");
 
+                    b.Property<string>("Value")
+                        .HasColumnName("value")
+                        .HasColumnType("jsonb");
+
                     b.HasKey("Id")
                         .HasName("pk_report");
 
@@ -493,6 +526,36 @@ namespace InternshipSystem.Repository.Migrations
                     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.ReportFieldDict", b =>
+                {
+                    b.HasBaseType("InternshipSystem.Core.Entity.ReportField");
+
+                    b.Property<string>("Values")
+                        .HasColumnName("values")
+                        .HasColumnType("jsonb");
+
+                    b.HasDiscriminator().HasValue("ReportFieldDict");
+                });
+
             modelBuilder.Entity("InternshipSystem.Core.BranchOffice", b =>
                 {
                     b.HasOne("InternshipSystem.Core.Company", null)
@@ -690,6 +753,23 @@ namespace InternshipSystem.Repository.Migrations
                         .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_field_report_field_id")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
 #pragma warning restore 612, 618
         }
     }
-- 
2.45.2


From fb52cd78142616d621659cdeafffa447ad7d8e9e Mon Sep 17 00:00:00 2001
From: Michal Bohdanowicz <m.w.bohdanowicz@gmail.com>
Date: Sat, 9 Jan 2021 20:28:54 +0100
Subject: [PATCH 2/6]  XD

---
 .../Controllers/ReportFieldsController.cs     |  40 +-
 src/InternshipSystem.Core/Entity/Report.cs    |   3 +-
 .../Entity/ReportField.cs                     |  15 +
 .../UglyOrmArtifacts/ReportFieldEdition.cs    |  13 +
 .../InternshipDbContext.cs                    |   2 +
 .../InternshipSystem.Repository.csproj        |   4 -
 .../20201128203805_init.Designer.cs           |   1 -
 .../Migrations/20201128203805_init.cs         |   1 -
 .../20210107220846_Init.Designer.cs           | 778 ------------------
 .../Migrations/20210107220846_Init.cs         | 533 ------------
 .../InternshipDbContextModelSnapshot.cs       | 776 -----------------
 11 files changed, 67 insertions(+), 2099 deletions(-)
 create mode 100644 src/InternshipSystem.Core/UglyOrmArtifacts/ReportFieldEdition.cs
 delete mode 100644 src/InternshipSystem.Repository/Migrations/20201128203805_init.Designer.cs
 delete mode 100644 src/InternshipSystem.Repository/Migrations/20201128203805_init.cs
 delete mode 100644 src/InternshipSystem.Repository/Migrations/20210107220846_Init.Designer.cs
 delete mode 100644 src/InternshipSystem.Repository/Migrations/20210107220846_Init.cs
 delete mode 100644 src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs

diff --git a/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs b/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs
index 88a2877..71e91a4 100644
--- a/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs
+++ b/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs
@@ -1,5 +1,9 @@
-using System.Threading;
+using System;
+using System.Threading;
 using System.Threading.Tasks;
+using AutoMapper;
+using InternshipSystem.Core;
+using InternshipSystem.Core.Entity;
 using InternshipSystem.Repository;
 using Microsoft.AspNetCore.Mvc;
 
@@ -8,16 +12,42 @@ namespace InternshipSystem.Api.Controllers
     public class ReportFieldsController : ControllerBase
     {
         private readonly InternshipDbContext _context;
+        private readonly IMapper _mapper;
 
-        public ReportFieldsController(InternshipDbContext context)
+        public ReportFieldsController(InternshipDbContext context, IMapper mapper)
         {
             _context = context;
+            _mapper = mapper;
         }
         
         public async Task<ActionResult> CreateField(FieldCreateRequest request, CancellationToken ct)
         {
-            
-            
+            ReportField field;
+
+            switch (request.FieldType)
+            {
+                case FieldType.LongText:
+                case FieldType.ShortText:
+                    field = new ReportField(request.Label, request.LabelEng, request.Description, request.DescriptionEng, request.FieldType);
+                    break;
+                case FieldType.Select:
+                case FieldType.Radial:
+                case FieldType.Checkbox:
+                    field = new ReportChoiceField(request.Label, request.LabelEng, request.Description, request.DescriptionEng, request.FieldType, request.Choices);
+                    break;
+                default:
+                    return BadRequest("Unknown field type");
+            }
+
+            try
+            {
+                await _context.ReportFields.AddAsync(field, ct);
+            }
+            catch (Exception e)
+            {
+                return BadRequest("Failed");
+            }
+
             return Ok();
         }
     }
@@ -28,5 +58,7 @@ namespace InternshipSystem.Api.Controllers
         public string LabelEng { get; set; }
         public string Description { get; set; }
         public string DescriptionEng { get; set; }
+        public FieldType FieldType { get; set; }
+        public string[] Choices { get; set; }
     }
 }
\ No newline at end of file
diff --git a/src/InternshipSystem.Core/Entity/Report.cs b/src/InternshipSystem.Core/Entity/Report.cs
index ab5df11..5515c28 100644
--- a/src/InternshipSystem.Core/Entity/Report.cs
+++ b/src/InternshipSystem.Core/Entity/Report.cs
@@ -6,8 +6,7 @@ namespace InternshipSystem.Core
     {
         public long Id { get; set; }
         public DocumentState State { get; set; }
-        public RangeOfActivity Range { get; set; }
-        public Uri SiteAddress { get; set; }
+        public string Value { get; set; }
 
         public static Report Create()
         {
diff --git a/src/InternshipSystem.Core/Entity/ReportField.cs b/src/InternshipSystem.Core/Entity/ReportField.cs
index 9b6b6a8..e10cd24 100644
--- a/src/InternshipSystem.Core/Entity/ReportField.cs
+++ b/src/InternshipSystem.Core/Entity/ReportField.cs
@@ -5,6 +5,15 @@ namespace InternshipSystem.Core.Entity
 {
     public class ReportField
     {
+        public ReportField(string label, string labelEng, string description, string descriptionEng, FieldType fieldType)
+        {
+            Label = label;
+            LabelEng = labelEng;
+            Description = description;
+            DescriptionEng = descriptionEng;
+            FieldType = fieldType;
+        }
+
         public long Id { get; set; }
         public string Label { get; set; }
         public string LabelEng { get; set; }
@@ -24,6 +33,12 @@ namespace InternshipSystem.Core.Entity
 
     public class ReportChoiceField : ReportField
     {
+        public ReportChoiceField(string label, string labelEng, string description, string descriptionEng,
+            FieldType fieldType, string[] choices) : base(label, labelEng, description, descriptionEng, fieldType)
+        {
+            Choices = choices;
+        }
+        
         public string[] Choices { get; set; }
     }
 }
\ No newline at end of file
diff --git a/src/InternshipSystem.Core/UglyOrmArtifacts/ReportFieldEdition.cs b/src/InternshipSystem.Core/UglyOrmArtifacts/ReportFieldEdition.cs
new file mode 100644
index 0000000..2dcb318
--- /dev/null
+++ b/src/InternshipSystem.Core/UglyOrmArtifacts/ReportFieldEdition.cs
@@ -0,0 +1,13 @@
+using System;
+using InternshipSystem.Core.Entity;
+
+namespace InternshipSystem.Core.UglyOrmArtifacts
+{
+    public class ReportFieldEdition
+    {
+        public Guid EditionId { get; set; }
+        public Edition Edition { get; set; }
+        public int ReportFieldId { get; set; }
+        public ReportField Field { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/InternshipSystem.Repository/InternshipDbContext.cs b/src/InternshipSystem.Repository/InternshipDbContext.cs
index adf2279..33583b0 100644
--- a/src/InternshipSystem.Repository/InternshipDbContext.cs
+++ b/src/InternshipSystem.Repository/InternshipDbContext.cs
@@ -17,6 +17,8 @@ namespace InternshipSystem.Repository
         public DbSet<Student> Students { get; set; }
         public DbSet<Course> Courses { get; set; }
 
+        public DbSet<ReportField> ReportFields { get; set; }
+
         public InternshipDbContext(DbContextOptions<InternshipDbContext> options)
             : base(options)
         {
diff --git a/src/InternshipSystem.Repository/InternshipSystem.Repository.csproj b/src/InternshipSystem.Repository/InternshipSystem.Repository.csproj
index 45f6950..ac1ea48 100644
--- a/src/InternshipSystem.Repository/InternshipSystem.Repository.csproj
+++ b/src/InternshipSystem.Repository/InternshipSystem.Repository.csproj
@@ -20,8 +20,4 @@
     <ProjectReference Include="..\InternshipSystem.Core\InternshipSystem.Core.csproj" />
   </ItemGroup>
 
-  <ItemGroup>
-    <Folder Include="Migrations" />
-  </ItemGroup>
-
 </Project>
diff --git a/src/InternshipSystem.Repository/Migrations/20201128203805_init.Designer.cs b/src/InternshipSystem.Repository/Migrations/20201128203805_init.Designer.cs
deleted file mode 100644
index 5f28270..0000000
--- a/src/InternshipSystem.Repository/Migrations/20201128203805_init.Designer.cs
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/InternshipSystem.Repository/Migrations/20201128203805_init.cs b/src/InternshipSystem.Repository/Migrations/20201128203805_init.cs
deleted file mode 100644
index 5f28270..0000000
--- a/src/InternshipSystem.Repository/Migrations/20201128203805_init.cs
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/InternshipSystem.Repository/Migrations/20210107220846_Init.Designer.cs b/src/InternshipSystem.Repository/Migrations/20210107220846_Init.Designer.cs
deleted file mode 100644
index 8e99457..0000000
--- a/src/InternshipSystem.Repository/Migrations/20210107220846_Init.Designer.cs
+++ /dev/null
@@ -1,778 +0,0 @@
-// <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("20210107220846_Init")]
-    partial class Init
-    {
-        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>("Description")
-                        .HasColumnName("description")
-                        .HasColumnType("text");
-
-                    b.Property<long?>("InternshipId")
-                        .HasColumnName("internship_id")
-                        .HasColumnType("bigint");
-
-                    b.Property<string>("RejectionReason")
-                        .HasColumnName("rejection_reason")
-                        .HasColumnType("text");
-
-                    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_internship");
-
-                    b.HasIndex("EditionId")
-                        .HasName("ix_internship_edition_id");
-
-                    b.HasIndex("InternshipRegistrationId")
-                        .HasName("ix_internship_internship_registration_id");
-
-                    b.HasIndex("ReportId")
-                        .HasName("ix_internship_report_id");
-
-                    b.HasIndex("StudentId")
-                        .HasName("ix_internship_student_id");
-
-                    b.ToTable("internship");
-                });
-
-            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<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<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.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<string>("Label")
-                        .HasColumnName("label")
-                        .HasColumnType("text");
-
-                    b.Property<string>("LabelEng")
-                        .HasColumnName("label_eng")
-                        .HasColumnType("text");
-
-                    b.Property<string>("field_type")
-                        .IsRequired()
-                        .HasColumnName("field_type")
-                        .HasColumnType("text");
-
-                    b.HasKey("Id")
-                        .HasName("pk_report_field");
-
-                    b.ToTable("report_field");
-
-                    b.HasDiscriminator<string>("field_type").HasValue("ReportField");
-                });
-
-            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("text");
-
-                    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.ReportFieldDict", b =>
-                {
-                    b.HasBaseType("InternshipSystem.Core.Entity.ReportField");
-
-                    b.Property<string>("Values")
-                        .HasColumnName("values")
-                        .HasColumnType("jsonb");
-
-                    b.HasDiscriminator().HasValue("ReportFieldDict");
-                });
-
-            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_internship_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_internship_editions_edition_id");
-
-                    b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipRegistration", "InternshipRegistration")
-                        .WithMany()
-                        .HasForeignKey("InternshipRegistrationId")
-                        .HasConstraintName("fk_internship_internship_registration_internship_registration_");
-
-                    b.HasOne("InternshipSystem.Core.Report", "Report")
-                        .WithMany()
-                        .HasForeignKey("ReportId")
-                        .HasConstraintName("fk_internship_report_report_id");
-
-                    b.HasOne("InternshipSystem.Core.Student", "Student")
-                        .WithMany()
-                        .HasForeignKey("StudentId")
-                        .HasConstraintName("fk_internship_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_field_report_field_id")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}
diff --git a/src/InternshipSystem.Repository/Migrations/20210107220846_Init.cs b/src/InternshipSystem.Repository/Migrations/20210107220846_Init.cs
deleted file mode 100644
index 7460b41..0000000
--- a/src/InternshipSystem.Repository/Migrations/20210107220846_Init.cs
+++ /dev/null
@@ -1,533 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-namespace InternshipSystem.Repository.Migrations
-{
-    public partial class Init : Migration
-    {
-        protected override void Up(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.CreateTable(
-                name: "companies",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    nip = table.Column<string>(nullable: true),
-                    name = table.Column<string>(nullable: true),
-                    provider = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_companies", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "courses",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    name = table.Column<string>(nullable: true),
-                    name_eng = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_courses", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "internship_subject",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    description = table.Column<string>(nullable: true),
-                    description_eng = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_internship_subject", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "internship_types",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    label = table.Column<string>(nullable: true),
-                    label_eng = table.Column<string>(nullable: true),
-                    description = table.Column<string>(nullable: true),
-                    description_eng = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_internship_types", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "report",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    state = table.Column<int>(nullable: false),
-                    value = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_report", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "report_field",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    label = table.Column<string>(nullable: true),
-                    label_eng = table.Column<string>(nullable: true),
-                    description = table.Column<string>(nullable: true),
-                    description_eng = table.Column<string>(nullable: true),
-                    field_type = table.Column<string>(nullable: false),
-                    values = table.Column<string>(type: "jsonb", nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_report_field", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "static_pages",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    access_name = table.Column<string>(nullable: true),
-                    title = table.Column<string>(nullable: true),
-                    title_eng = table.Column<string>(nullable: true),
-                    content = table.Column<string>(nullable: true),
-                    content_eng = table.Column<string>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_static_pages", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "students",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    album_number = table.Column<int>(nullable: false),
-                    first_name = table.Column<string>(nullable: true),
-                    last_name = table.Column<string>(nullable: true),
-                    email = table.Column<string>(nullable: true),
-                    course = table.Column<string>(nullable: true),
-                    semester = table.Column<int>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_students", x => x.id);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "branch_office",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    street = table.Column<string>(nullable: true),
-                    building = table.Column<string>(nullable: true),
-                    city = table.Column<string>(nullable: true),
-                    postal_code = table.Column<string>(nullable: true),
-                    country = table.Column<string>(nullable: true),
-                    provider = table.Column<long>(nullable: false),
-                    company_id = table.Column<long>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_branch_office", x => x.id);
-                    table.ForeignKey(
-                        name: "fk_branch_office_companies_company_id",
-                        column: x => x.company_id,
-                        principalTable: "companies",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "editions",
-                columns: table => new
-                {
-                    id = table.Column<Guid>(nullable: false),
-                    edition_start = table.Column<DateTime>(nullable: false),
-                    edition_finish = table.Column<DateTime>(nullable: false),
-                    reporting_start = table.Column<DateTime>(nullable: false),
-                    course_id = table.Column<long>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_editions", x => x.id);
-                    table.ForeignKey(
-                        name: "fk_editions_courses_course_id",
-                        column: x => x.course_id,
-                        principalTable: "courses",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "internship_registration",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    company_id = table.Column<long>(nullable: true),
-                    branch_address_id = table.Column<long>(nullable: true),
-                    start = table.Column<DateTime>(nullable: false),
-                    end = table.Column<DateTime>(nullable: false),
-                    first_name = table.Column<string>(nullable: true),
-                    last_name = table.Column<string>(nullable: true),
-                    email = table.Column<string>(nullable: true),
-                    phone_number = table.Column<string>(nullable: true),
-                    type_id = table.Column<long>(nullable: true),
-                    declared_hours = table.Column<int>(nullable: false),
-                    state = table.Column<int>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_internship_registration", x => x.id);
-                    table.ForeignKey(
-                        name: "fk_internship_registration_branch_office_branch_address_id",
-                        column: x => x.branch_address_id,
-                        principalTable: "branch_office",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "fk_internship_registration_companies_company_id",
-                        column: x => x.company_id,
-                        principalTable: "companies",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "fk_internship_registration_internship_types_type_id",
-                        column: x => x.type_id,
-                        principalTable: "internship_types",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "edition_internship_type",
-                columns: table => new
-                {
-                    edition_id = table.Column<Guid>(nullable: false),
-                    internship_type_id = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_edition_internship_type", x => new { x.edition_id, x.internship_type_id });
-                    table.ForeignKey(
-                        name: "fk_edition_internship_type_editions_edition_id",
-                        column: x => x.edition_id,
-                        principalTable: "editions",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "fk_edition_internship_type_internship_types_internship_type_id",
-                        column: x => x.internship_type_id,
-                        principalTable: "internship_types",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "edition_subject",
-                columns: table => new
-                {
-                    edition_id = table.Column<Guid>(nullable: false),
-                    internship_subject_id = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_edition_subject", x => new { x.edition_id, x.internship_subject_id });
-                    table.ForeignKey(
-                        name: "fk_edition_subject_editions_edition_id",
-                        column: x => x.edition_id,
-                        principalTable: "editions",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "fk_edition_subject_internship_subject_internship_subject_id",
-                        column: x => x.internship_subject_id,
-                        principalTable: "internship_subject",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "report_field_edition",
-                columns: table => new
-                {
-                    edition_id = table.Column<Guid>(nullable: false),
-                    report_field_id = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_report_field_edition", x => new { x.edition_id, x.report_field_id });
-                    table.ForeignKey(
-                        name: "fk_report_field_edition_editions_edition_id",
-                        column: x => x.edition_id,
-                        principalTable: "editions",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "fk_report_field_edition_report_field_report_field_id",
-                        column: x => x.report_field_id,
-                        principalTable: "report_field",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "internship",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    student_id = table.Column<long>(nullable: true),
-                    internship_registration_id = table.Column<long>(nullable: true),
-                    report_id = table.Column<long>(nullable: true),
-                    edition_id = table.Column<Guid>(nullable: true),
-                    grade = table.Column<float>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_internship", x => x.id);
-                    table.ForeignKey(
-                        name: "fk_internship_editions_edition_id",
-                        column: x => x.edition_id,
-                        principalTable: "editions",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "fk_internship_internship_registration_internship_registration_",
-                        column: x => x.internship_registration_id,
-                        principalTable: "internship_registration",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "fk_internship_report_report_id",
-                        column: x => x.report_id,
-                        principalTable: "report",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                    table.ForeignKey(
-                        name: "fk_internship_students_student_id",
-                        column: x => x.student_id,
-                        principalTable: "students",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "program_subject",
-                columns: table => new
-                {
-                    internship_registration_id = table.Column<long>(nullable: false),
-                    internship_subject_id = table.Column<long>(nullable: false)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_program_subject", x => new { x.internship_registration_id, x.internship_subject_id });
-                    table.ForeignKey(
-                        name: "fk_program_subject_internship_registration_internship_registrat",
-                        column: x => x.internship_registration_id,
-                        principalTable: "internship_registration",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                    table.ForeignKey(
-                        name: "fk_program_subject_internship_subject_internship_subject_id",
-                        column: x => x.internship_subject_id,
-                        principalTable: "internship_subject",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "document",
-                columns: table => new
-                {
-                    id = table.Column<long>(nullable: false)
-                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
-                    description = table.Column<string>(nullable: true),
-                    type = table.Column<int>(nullable: false),
-                    state = table.Column<int>(nullable: false),
-                    rejection_reason = table.Column<string>(nullable: true),
-                    internship_id = table.Column<long>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_document", x => x.id);
-                    table.ForeignKey(
-                        name: "fk_document_internship_internship_id",
-                        column: x => x.internship_id,
-                        principalTable: "internship",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Restrict);
-                });
-
-            migrationBuilder.CreateTable(
-                name: "document_scan",
-                columns: table => new
-                {
-                    document_id = table.Column<long>(nullable: false),
-                    size = table.Column<long>(nullable: false),
-                    filename = table.Column<string>(nullable: true),
-                    mime = table.Column<string>(nullable: true),
-                    file = table.Column<byte[]>(nullable: true)
-                },
-                constraints: table =>
-                {
-                    table.PrimaryKey("pk_document_scan", x => x.document_id);
-                    table.ForeignKey(
-                        name: "fk_document_scan_document_document_id",
-                        column: x => x.document_id,
-                        principalTable: "document",
-                        principalColumn: "id",
-                        onDelete: ReferentialAction.Cascade);
-                });
-
-            migrationBuilder.CreateIndex(
-                name: "ix_branch_office_company_id",
-                table: "branch_office",
-                column: "company_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_document_internship_id",
-                table: "document",
-                column: "internship_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_edition_internship_type_internship_type_id",
-                table: "edition_internship_type",
-                column: "internship_type_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_edition_subject_internship_subject_id",
-                table: "edition_subject",
-                column: "internship_subject_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_editions_course_id",
-                table: "editions",
-                column: "course_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_edition_id",
-                table: "internship",
-                column: "edition_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_internship_registration_id",
-                table: "internship",
-                column: "internship_registration_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_report_id",
-                table: "internship",
-                column: "report_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_student_id",
-                table: "internship",
-                column: "student_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_registration_branch_address_id",
-                table: "internship_registration",
-                column: "branch_address_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_registration_company_id",
-                table: "internship_registration",
-                column: "company_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_internship_registration_type_id",
-                table: "internship_registration",
-                column: "type_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_program_subject_internship_subject_id",
-                table: "program_subject",
-                column: "internship_subject_id");
-
-            migrationBuilder.CreateIndex(
-                name: "ix_report_field_edition_report_field_id",
-                table: "report_field_edition",
-                column: "report_field_id");
-        }
-
-        protected override void Down(MigrationBuilder migrationBuilder)
-        {
-            migrationBuilder.DropTable(
-                name: "document_scan");
-
-            migrationBuilder.DropTable(
-                name: "edition_internship_type");
-
-            migrationBuilder.DropTable(
-                name: "edition_subject");
-
-            migrationBuilder.DropTable(
-                name: "program_subject");
-
-            migrationBuilder.DropTable(
-                name: "report_field_edition");
-
-            migrationBuilder.DropTable(
-                name: "static_pages");
-
-            migrationBuilder.DropTable(
-                name: "document");
-
-            migrationBuilder.DropTable(
-                name: "internship_subject");
-
-            migrationBuilder.DropTable(
-                name: "report_field");
-
-            migrationBuilder.DropTable(
-                name: "internship");
-
-            migrationBuilder.DropTable(
-                name: "editions");
-
-            migrationBuilder.DropTable(
-                name: "internship_registration");
-
-            migrationBuilder.DropTable(
-                name: "report");
-
-            migrationBuilder.DropTable(
-                name: "students");
-
-            migrationBuilder.DropTable(
-                name: "courses");
-
-            migrationBuilder.DropTable(
-                name: "branch_office");
-
-            migrationBuilder.DropTable(
-                name: "internship_types");
-
-            migrationBuilder.DropTable(
-                name: "companies");
-        }
-    }
-}
diff --git a/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs b/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs
deleted file mode 100644
index e291852..0000000
--- a/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs
+++ /dev/null
@@ -1,776 +0,0 @@
-// <auto-generated />
-using System;
-using InternshipSystem.Repository;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
-
-namespace InternshipSystem.Repository.Migrations
-{
-    [DbContext(typeof(InternshipDbContext))]
-    partial class InternshipDbContextModelSnapshot : ModelSnapshot
-    {
-        protected override void BuildModel(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>("Description")
-                        .HasColumnName("description")
-                        .HasColumnType("text");
-
-                    b.Property<long?>("InternshipId")
-                        .HasColumnName("internship_id")
-                        .HasColumnType("bigint");
-
-                    b.Property<string>("RejectionReason")
-                        .HasColumnName("rejection_reason")
-                        .HasColumnType("text");
-
-                    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_internship");
-
-                    b.HasIndex("EditionId")
-                        .HasName("ix_internship_edition_id");
-
-                    b.HasIndex("InternshipRegistrationId")
-                        .HasName("ix_internship_internship_registration_id");
-
-                    b.HasIndex("ReportId")
-                        .HasName("ix_internship_report_id");
-
-                    b.HasIndex("StudentId")
-                        .HasName("ix_internship_student_id");
-
-                    b.ToTable("internship");
-                });
-
-            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<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<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.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<string>("Label")
-                        .HasColumnName("label")
-                        .HasColumnType("text");
-
-                    b.Property<string>("LabelEng")
-                        .HasColumnName("label_eng")
-                        .HasColumnType("text");
-
-                    b.Property<string>("field_type")
-                        .IsRequired()
-                        .HasColumnName("field_type")
-                        .HasColumnType("text");
-
-                    b.HasKey("Id")
-                        .HasName("pk_report_field");
-
-                    b.ToTable("report_field");
-
-                    b.HasDiscriminator<string>("field_type").HasValue("ReportField");
-                });
-
-            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.ReportFieldDict", b =>
-                {
-                    b.HasBaseType("InternshipSystem.Core.Entity.ReportField");
-
-                    b.Property<string>("Values")
-                        .HasColumnName("values")
-                        .HasColumnType("jsonb");
-
-                    b.HasDiscriminator().HasValue("ReportFieldDict");
-                });
-
-            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_internship_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_internship_editions_edition_id");
-
-                    b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipRegistration", "InternshipRegistration")
-                        .WithMany()
-                        .HasForeignKey("InternshipRegistrationId")
-                        .HasConstraintName("fk_internship_internship_registration_internship_registration_");
-
-                    b.HasOne("InternshipSystem.Core.Report", "Report")
-                        .WithMany()
-                        .HasForeignKey("ReportId")
-                        .HasConstraintName("fk_internship_report_report_id");
-
-                    b.HasOne("InternshipSystem.Core.Student", "Student")
-                        .WithMany()
-                        .HasForeignKey("StudentId")
-                        .HasConstraintName("fk_internship_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_field_report_field_id")
-                        .OnDelete(DeleteBehavior.Cascade)
-                        .IsRequired();
-                });
-#pragma warning restore 612, 618
-        }
-    }
-}
-- 
2.45.2


From 2178cde4dd92f9fe8acba6ea6772b0bec320e319 Mon Sep 17 00:00:00 2001
From: Michal Bohdanowicz <m.w.bohdanowicz@gmail.com>
Date: Sun, 10 Jan 2021 18:17:40 +0100
Subject: [PATCH 3/6] rest

---
 .../Result/EditionReportSchemaResult.cs       |  10 ++
 .../InternshipDbContext.cs                    |   4 +-
 ...ner.cs => 20210110161858_Init.Designer.cs} | 104 ++++++++++++++++--
 ...9193303_init.cs => 20210110161858_Init.cs} |  59 +++++++++-
 .../InternshipDbContextModelSnapshot.cs       | 100 +++++++++++++++--
 5 files changed, 255 insertions(+), 22 deletions(-)
 create mode 100644 src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs
 rename src/InternshipSystem.Repository/Migrations/{20210109193303_init.Designer.cs => 20210110161858_Init.Designer.cs} (88%)
 rename src/InternshipSystem.Repository/Migrations/{20210109193303_init.cs => 20210110161858_Init.cs} (89%)

diff --git a/src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs b/src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs
new file mode 100644
index 0000000..9770ad5
--- /dev/null
+++ b/src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+using InternshipSystem.Core.Entity;
+
+namespace InternshipSystem.Api.Result
+{
+    public class EditionReportSchemaResult
+    {
+        public List<ReportField> Fields { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/InternshipSystem.Repository/InternshipDbContext.cs b/src/InternshipSystem.Repository/InternshipDbContext.cs
index a216e1b..a3a4cd2 100644
--- a/src/InternshipSystem.Repository/InternshipDbContext.cs
+++ b/src/InternshipSystem.Repository/InternshipDbContext.cs
@@ -113,7 +113,9 @@ namespace InternshipSystem.Repository
             });
 
             modelBuilder.Entity<ReportField>()
-                .HasDiscriminator(r => r.FieldType);
+                .HasDiscriminator<string>("field_discrimnator")
+                .HasValue<ReportField>("single")
+                .HasValue<ReportChoiceField>("choice");
 
             modelBuilder.Entity<ReportChoiceField>()
                 .Property(r => r.Choices)
diff --git a/src/InternshipSystem.Repository/Migrations/20210109193303_init.Designer.cs b/src/InternshipSystem.Repository/Migrations/20210110161858_Init.Designer.cs
similarity index 88%
rename from src/InternshipSystem.Repository/Migrations/20210109193303_init.Designer.cs
rename to src/InternshipSystem.Repository/Migrations/20210110161858_Init.Designer.cs
index 049b8d1..7ccda94 100644
--- a/src/InternshipSystem.Repository/Migrations/20210109193303_init.Designer.cs
+++ b/src/InternshipSystem.Repository/Migrations/20210110161858_Init.Designer.cs
@@ -10,8 +10,8 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 namespace InternshipSystem.Repository.Migrations
 {
     [DbContext(typeof(InternshipDbContext))]
-    [Migration("20210109193303_init")]
-    partial class init
+    [Migration("20210110161858_Init")]
+    partial class Init
     {
         protected override void BuildTargetModel(ModelBuilder modelBuilder)
         {
@@ -344,6 +344,47 @@ namespace InternshipSystem.Repository.Migrations
                     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")
@@ -352,18 +393,14 @@ namespace InternshipSystem.Repository.Migrations
                         .HasColumnType("bigint")
                         .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
 
-                    b.Property<int>("Range")
-                        .HasColumnName("range")
-                        .HasColumnType("integer");
-
-                    b.Property<string>("SiteAddress")
-                        .HasColumnName("site_address")
-                        .HasColumnType("text");
-
                     b.Property<int>("State")
                         .HasColumnName("state")
                         .HasColumnType("integer");
 
+                    b.Property<string>("Value")
+                        .HasColumnName("value")
+                        .HasColumnType("jsonb");
+
                     b.HasKey("Id")
                         .HasName("pk_report");
 
@@ -499,6 +536,36 @@ namespace InternshipSystem.Repository.Migrations
                     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)
@@ -696,6 +763,23 @@ namespace InternshipSystem.Repository.Migrations
                         .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/20210109193303_init.cs b/src/InternshipSystem.Repository/Migrations/20210110161858_Init.cs
similarity index 89%
rename from src/InternshipSystem.Repository/Migrations/20210109193303_init.cs
rename to src/InternshipSystem.Repository/Migrations/20210110161858_Init.cs
index 406b485..b55c366 100644
--- a/src/InternshipSystem.Repository/Migrations/20210109193303_init.cs
+++ b/src/InternshipSystem.Repository/Migrations/20210110161858_Init.cs
@@ -4,7 +4,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 
 namespace InternshipSystem.Repository.Migrations
 {
-    public partial class init : Migration
+    public partial class Init : Migration
     {
         protected override void Up(MigrationBuilder migrationBuilder)
         {
@@ -74,14 +74,32 @@ namespace InternshipSystem.Repository.Migrations
                     id = table.Column<long>(nullable: false)
                         .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
                     state = table.Column<int>(nullable: false),
-                    range = table.Column<int>(nullable: false),
-                    site_address = table.Column<string>(nullable: true)
+                    value = table.Column<string>(type: "jsonb", nullable: true)
                 },
                 constraints: table =>
                 {
                     table.PrimaryKey("pk_report", x => x.id);
                 });
 
+            migrationBuilder.CreateTable(
+                name: "report_fields",
+                columns: table => new
+                {
+                    id = table.Column<long>(nullable: false)
+                        .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+                    label = table.Column<string>(nullable: true),
+                    label_eng = table.Column<string>(nullable: true),
+                    description = table.Column<string>(nullable: true),
+                    description_eng = table.Column<string>(nullable: true),
+                    field_type = table.Column<int>(nullable: false),
+                    field_discrimnator = table.Column<string>(nullable: false),
+                    choices = table.Column<string>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_report_fields", x => x.id);
+                });
+
             migrationBuilder.CreateTable(
                 name: "static_pages",
                 columns: table => new
@@ -253,6 +271,30 @@ namespace InternshipSystem.Repository.Migrations
                         onDelete: ReferentialAction.Cascade);
                 });
 
+            migrationBuilder.CreateTable(
+                name: "report_field_edition",
+                columns: table => new
+                {
+                    edition_id = table.Column<Guid>(nullable: false),
+                    report_field_id = table.Column<long>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("pk_report_field_edition", x => new { x.edition_id, x.report_field_id });
+                    table.ForeignKey(
+                        name: "fk_report_field_edition_editions_edition_id",
+                        column: x => x.edition_id,
+                        principalTable: "editions",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "fk_report_field_edition_report_fields_report_field_id",
+                        column: x => x.report_field_id,
+                        principalTable: "report_fields",
+                        principalColumn: "id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
             migrationBuilder.CreateTable(
                 name: "internships",
                 columns: table => new
@@ -426,6 +468,11 @@ namespace InternshipSystem.Repository.Migrations
                 name: "ix_program_subject_internship_subject_id",
                 table: "program_subject",
                 column: "internship_subject_id");
+
+            migrationBuilder.CreateIndex(
+                name: "ix_report_field_edition_report_field_id",
+                table: "report_field_edition",
+                column: "report_field_id");
         }
 
         protected override void Down(MigrationBuilder migrationBuilder)
@@ -442,6 +489,9 @@ namespace InternshipSystem.Repository.Migrations
             migrationBuilder.DropTable(
                 name: "program_subject");
 
+            migrationBuilder.DropTable(
+                name: "report_field_edition");
+
             migrationBuilder.DropTable(
                 name: "static_pages");
 
@@ -451,6 +501,9 @@ namespace InternshipSystem.Repository.Migrations
             migrationBuilder.DropTable(
                 name: "internship_subject");
 
+            migrationBuilder.DropTable(
+                name: "report_fields");
+
             migrationBuilder.DropTable(
                 name: "internships");
 
diff --git a/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs b/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs
index 032fcad..ad39bf2 100644
--- a/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs
+++ b/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs
@@ -342,6 +342,47 @@ namespace InternshipSystem.Repository.Migrations
                     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")
@@ -350,18 +391,14 @@ namespace InternshipSystem.Repository.Migrations
                         .HasColumnType("bigint")
                         .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
 
-                    b.Property<int>("Range")
-                        .HasColumnName("range")
-                        .HasColumnType("integer");
-
-                    b.Property<string>("SiteAddress")
-                        .HasColumnName("site_address")
-                        .HasColumnType("text");
-
                     b.Property<int>("State")
                         .HasColumnName("state")
                         .HasColumnType("integer");
 
+                    b.Property<string>("Value")
+                        .HasColumnName("value")
+                        .HasColumnType("jsonb");
+
                     b.HasKey("Id")
                         .HasName("pk_report");
 
@@ -497,6 +534,36 @@ namespace InternshipSystem.Repository.Migrations
                     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)
@@ -694,6 +761,23 @@ namespace InternshipSystem.Repository.Migrations
                         .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
         }
     }
-- 
2.45.2


From 4bdc04858ed122ff6551151e00577c655de5f87d Mon Sep 17 00:00:00 2001
From: Michal Bohdanowicz <m.w.bohdanowicz@gmail.com>
Date: Sun, 10 Jan 2021 18:21:00 +0100
Subject: [PATCH 4/6] fix

---
 src/InternshipSystem.Api/ApiProfile.cs        |   2 +
 .../Controllers/EditionController.cs          |   2 +
 .../EditionManagementController.cs            |  12 +-
 .../Controllers/ReportFieldsController.cs     | 153 ++++++++++--------
 .../Queries/EditionForm.cs                    |   1 +
 .../Result/EditionConfigurationResult.cs      |   1 +
 .../Result/EditionDetailsResult.cs            |   1 +
 .../Result/EditionReportSchemaResult.cs       |   2 +-
 src/InternshipSystem.Core/Entity/Edition.cs   |  25 ++-
 .../UglyOrmArtifacts/ReportFieldEdition.cs    |   2 +-
 10 files changed, 130 insertions(+), 71 deletions(-)

diff --git a/src/InternshipSystem.Api/ApiProfile.cs b/src/InternshipSystem.Api/ApiProfile.cs
index 729a8ba..208a577 100644
--- a/src/InternshipSystem.Api/ApiProfile.cs
+++ b/src/InternshipSystem.Api/ApiProfile.cs
@@ -21,6 +21,8 @@ namespace InternshipSystem.Api
 
             CreateMap<Edition, EditionManagementResult>();
 
+            CreateMap<Edition, EditionReportSchemaResult>();
+            
             CreateMap<Edition, EditionDetailsResult>();
             
             CreateMap<Edition, EditionConfigurationResult>();
diff --git a/src/InternshipSystem.Api/Controllers/EditionController.cs b/src/InternshipSystem.Api/Controllers/EditionController.cs
index 35a4bc9..c7790ab 100644
--- a/src/InternshipSystem.Api/Controllers/EditionController.cs
+++ b/src/InternshipSystem.Api/Controllers/EditionController.cs
@@ -99,6 +99,8 @@ namespace InternshipSystem.Api.Controllers
             var edition = 
                 await Context.Editions
                     .Include(e => e.AvailableSubjects)
+                    .Include(e => e.ReportSchema)
+                        .ThenInclude(e => e.Field)
                     .Include(e => e.Course)
                     .Where(e => e.Id == user.EditionId)
                     .ProjectTo<EditionConfigurationResult>(Mapper.ConfigurationProvider)
diff --git a/src/InternshipSystem.Api/Controllers/EditionManagementController.cs b/src/InternshipSystem.Api/Controllers/EditionManagementController.cs
index 973eef6..fdaaac0 100644
--- a/src/InternshipSystem.Api/Controllers/EditionManagementController.cs
+++ b/src/InternshipSystem.Api/Controllers/EditionManagementController.cs
@@ -43,6 +43,8 @@ namespace InternshipSystem.Api.Controllers
                 .Skip(searchQuery.Page * searchQuery.PerPage)
                 .Take(searchQuery.PerPage)
                 .ToListAsync(token);
+        
+        
 
         [HttpGet("{editionId}")]
         [ProducesResponseType(StatusCodes.Status200OK)]
@@ -57,6 +59,8 @@ namespace InternshipSystem.Api.Controllers
                     .ThenInclude(s => s.Subject)
                 .Include(e => e.AvailableInternshipTypes)
                     .ThenInclude(i => i.InternshipType)
+                .Include(e => e.ReportSchema)
+                    .ThenInclude(er => er.Field)
                 .Where(e => e.Id == editionId)
                 .ProjectTo<EditionDetailsResult>(Mapper.ConfigurationProvider)
                 .FirstOrDefaultAsync(token);
@@ -68,7 +72,7 @@ namespace InternshipSystem.Api.Controllers
 
             return Ok(edition);
         }
-        
+
         [HttpPut]
         [ProducesResponseType(StatusCodes.Status200OK)]
         [ProducesResponseType(StatusCodes.Status400BadRequest)]
@@ -90,6 +94,7 @@ namespace InternshipSystem.Api.Controllers
                 var editionToUpdate = await Context.Editions
                     .Include(e => e.AvailableSubjects)
                     .Include(e => e.AvailableInternshipTypes)
+                    .Include(e => e.ReportSchema)
                     .FirstOrDefaultAsync(e => e.Id == editionForm.Id.Value, token);
 
                 if (editionToUpdate == null)
@@ -98,7 +103,7 @@ namespace InternshipSystem.Api.Controllers
                 }
                 
                 editionToUpdate.UpdateEdition(editionForm.EditionStart, editionForm.EditionFinish, editionForm.ReportingStart,
-                    editionForm.Course, editionForm.AvailableSubjectsIds, editionForm.AvailableInternshipTypesIds);
+                    editionForm.Course, editionForm.AvailableSubjectsIds, editionForm.AvailableInternshipTypesIds, editionForm.ReportSchema);
                 
                 if (!editionToUpdate.IsValidDates)
                 {
@@ -109,7 +114,7 @@ namespace InternshipSystem.Api.Controllers
             {
                 var newEdition = 
                     Edition.CreateEdition(editionForm.EditionStart.Value, editionForm.EditionFinish.Value, editionForm.ReportingStart.Value,
-                        editionForm.Course, editionForm.AvailableSubjectsIds, editionForm.AvailableInternshipTypesIds);
+                        editionForm.Course, editionForm.AvailableSubjectsIds, editionForm.AvailableInternshipTypesIds, editionForm.ReportSchema);
                 
                 if (!newEdition.IsValidDates)
                 {
@@ -135,6 +140,7 @@ namespace InternshipSystem.Api.Controllers
             var editionToDelete = await Context.Editions
                 .Include(e => e.AvailableSubjects)
                 .Include(e => e.AvailableInternshipTypes)
+                .Include(e => e.ReportSchema)
                 .FirstOrDefaultAsync(e => e.Id.Equals(editionId), token);
 
             if (editionToDelete == null)
diff --git a/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs b/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs
index f37e2e6..45a7a37 100644
--- a/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs
+++ b/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs
@@ -1,64 +1,89 @@
-// using System;
-// using System.Threading;
-// using System.Threading.Tasks;
-// using AutoMapper;
-// using InternshipSystem.Core;
-// using InternshipSystem.Core.Entity;
-// using InternshipSystem.Repository;
-// using Microsoft.AspNetCore.Mvc;
-//
-// namespace InternshipSystem.Api.Controllers
-// {
-//     public class ReportFieldsController : ControllerBase
-//     {
-//         private readonly InternshipDbContext _context;
-//         private readonly IMapper _mapper;
-//
-//         public ReportFieldsController(InternshipDbContext context, IMapper mapper)
-//         {
-//             _context = context;
-//             _mapper = mapper;
-//         }
-//         
-//         public async Task<ActionResult> CreateField(FieldCreateRequest request, CancellationToken ct)
-//         {
-//             ReportField field;
-//
-//             switch (request.FieldType)
-//             {
-//                 case FieldType.LongText:
-//                 case FieldType.ShortText:
-//                     field = new ReportField(request.Label, request.LabelEng, request.Description, request.DescriptionEng, request.FieldType);
-//                     break;
-//                 case FieldType.Select:
-//                 case FieldType.Radial:
-//                 case FieldType.Checkbox:
-//                     field = new ReportChoiceField(request.Label, request.LabelEng, request.Description, request.DescriptionEng, request.FieldType, request.Choices);
-//                     break;
-//                 default:
-//                     return BadRequest("Unknown field type");
-//             }
-//
-//             try
-//             {
-//                 await _context.ReportFields.AddAsync(field, ct);
-//             }
-//             catch (Exception e)
-//             {
-//                 return BadRequest("Failed");
-//             }
-//
-//             return Ok();
-//         }
-//     }
-//
-//     public class FieldCreateRequest
-//     {
-//         public string Label { get; set; }
-//         public string LabelEng { get; set; }
-//         public string Description { get; set; }
-//         public string DescriptionEng { get; set; }
-//         public FieldType FieldType { get; set; }
-//         public string[] Choices { get; set; }
-//     }
-// }
\ No newline at end of file
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using AutoMapper;
+using InternshipSystem.Api.Queries.SearchQuery;
+using InternshipSystem.Api.Security;
+using InternshipSystem.Core;
+using InternshipSystem.Core.Entity;
+using InternshipSystem.Repository;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+
+namespace InternshipSystem.Api.Controllers
+{
+    [Route("management/report")]
+    public class ReportFieldsController : ControllerBase
+    {
+        private readonly InternshipDbContext _context;
+        private readonly IMapper _mapper;
+
+        public ReportFieldsController(InternshipDbContext context, IMapper mapper)
+        {
+            _context = context;
+            _mapper = mapper;
+        }
+
+        [HttpGet("fields")]
+        [Authorize(Policy = Policies.IsOverseer)]
+        public async Task<IEnumerable<ReportField>> GetFields(FieldSearchQuery searchQuery, CancellationToken ct) =>
+            await _context.ReportFields
+                .Where(c => c.Label.ToLower().Contains(searchQuery.Label.ToLower()))
+                .OrderBy(o => o.Label)
+                .Skip(searchQuery.Page * searchQuery.PerPage)
+                .Take(searchQuery.PerPage)
+                .ToListAsync(ct);
+
+        [HttpPost("fields")]
+        [Authorize(Policy = Policies.IsOverseer)]
+        public async Task<ActionResult> CreateField([FromBody] FieldCreateRequest request, CancellationToken ct)
+        {
+            ReportField field;
+
+            switch (request.FieldType)
+            {
+                case FieldType.LongText:
+                case FieldType.ShortText:
+                    field = new ReportField(request.Label, request.LabelEng, request.Description, request.DescriptionEng, request.FieldType);
+                    break;
+                case FieldType.Select:
+                case FieldType.Radial:
+                case FieldType.Checkbox:
+                    field = new ReportChoiceField(request.Label, request.LabelEng, request.Description, request.DescriptionEng, request.FieldType, request.Choices);
+                    break;
+                default:
+                    return BadRequest("Unknown field type");
+            }
+
+            try
+            {
+                await _context.ReportFields.AddAsync(field, ct);
+                await _context.SaveChangesAsync(ct);
+            }
+            catch (Exception e)
+            {
+                return BadRequest("Failed");
+            }
+
+            return Ok();
+        }
+    }
+
+    public class FieldSearchQuery : SearchQuery
+    {
+        public string Label { get; set; } = "";
+    }
+
+    public class FieldCreateRequest
+    {
+        public string Label { get; set; }
+        public string LabelEng { get; set; }
+        public string Description { get; set; }
+        public string DescriptionEng { get; set; }
+        public FieldType FieldType { get; set; }
+        public string[] Choices { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/src/InternshipSystem.Api/Queries/EditionForm.cs b/src/InternshipSystem.Api/Queries/EditionForm.cs
index b95ecda..94fa40b 100644
--- a/src/InternshipSystem.Api/Queries/EditionForm.cs
+++ b/src/InternshipSystem.Api/Queries/EditionForm.cs
@@ -16,6 +16,7 @@ namespace InternshipSystem.Api.Queries
         public Course Course { get; set; }
         public List<long> AvailableSubjectsIds { get; set; } = new List<long>();
         public List<long> AvailableInternshipTypesIds { get; set; } = new List<long>();
+        public List<long> ReportSchema { get; set; } = new List<long>();
         
         public class Validator : AbstractValidator<EditionForm>
         {
diff --git a/src/InternshipSystem.Api/Result/EditionConfigurationResult.cs b/src/InternshipSystem.Api/Result/EditionConfigurationResult.cs
index 62fc5fa..0a9895b 100644
--- a/src/InternshipSystem.Api/Result/EditionConfigurationResult.cs
+++ b/src/InternshipSystem.Api/Result/EditionConfigurationResult.cs
@@ -10,6 +10,7 @@ namespace InternshipSystem.Api.Result
     public class EditionConfigurationResult
     {
         public List<InternshipSubject> AvailableSubjects { get; set; }
+        public List<ReportField> ReportSchema { get; set; }
         public Course Course { get; set; }
         public DateTime EditionStart { get; set; }
         public DateTime EditionFinish { get; set; }
diff --git a/src/InternshipSystem.Api/Result/EditionDetailsResult.cs b/src/InternshipSystem.Api/Result/EditionDetailsResult.cs
index 44b8459..9f54a10 100644
--- a/src/InternshipSystem.Api/Result/EditionDetailsResult.cs
+++ b/src/InternshipSystem.Api/Result/EditionDetailsResult.cs
@@ -15,5 +15,6 @@ namespace InternshipSystem.Api.Result
         public Course Course { get; set; }
         public List<InternshipSubject> AvailableSubjects { get; set; }
         public List<InternshipType> AvailableInternshipTypes { get; set; }
+        public List<ReportField> ReportSchema { get; set; }
     }
 }
\ No newline at end of file
diff --git a/src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs b/src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs
index 9770ad5..54e3993 100644
--- a/src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs
+++ b/src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs
@@ -5,6 +5,6 @@ namespace InternshipSystem.Api.Result
 {
     public class EditionReportSchemaResult
     {
-        public List<ReportField> Fields { get; set; }
+        public List<ReportField> ReportSchema { get; set; }
     }
 }
\ No newline at end of file
diff --git a/src/InternshipSystem.Core/Entity/Edition.cs b/src/InternshipSystem.Core/Entity/Edition.cs
index 705f045..a044dd5 100644
--- a/src/InternshipSystem.Core/Entity/Edition.cs
+++ b/src/InternshipSystem.Core/Entity/Edition.cs
@@ -22,7 +22,7 @@ namespace InternshipSystem.Core
         public bool IsOpen => EditionFinish < DateTime.Today;
 
         public static Edition CreateEdition(DateTime start, DateTime end, DateTime reportingStart, Course course,
-            IEnumerable<long> subjectsIds, IEnumerable<long> internshipTypesIds)
+            IEnumerable<long> subjectsIds, IEnumerable<long> internshipTypesIds, IEnumerable<long> reportFieldIds)
         {
             var newEdition = CreateEdition(start, end, reportingStart, course);
 
@@ -43,6 +43,15 @@ namespace InternshipSystem.Core
                         InternshipTypeId = i,
                     })
                     .ToList();
+            
+            newEdition.ReportSchema =
+                reportFieldIds
+                    .Select(i => new ReportFieldEdition
+                    {
+                        Edition = newEdition,
+                        ReportFieldId = i,
+                    })
+                    .ToList();
 
             return newEdition;
         }
@@ -57,11 +66,12 @@ namespace InternshipSystem.Core
                 Course = course,
                 AvailableSubjects = new List<EditionSubject>(),
                 AvailableInternshipTypes = new List<EditionInternshipType>(),
+                ReportSchema = new List<ReportFieldEdition>()
             };
         }
 
         public void UpdateEdition(DateTime? start, DateTime? end, DateTime? reportingStart, Course course,
-            IEnumerable<long> subjectsIds, IEnumerable<long> internshipTypesIds)
+            IEnumerable<long> subjectsIds, IEnumerable<long> internshipTypesIds, IEnumerable<long> reportFieldIds)
         {
             EditionStart = start ?? EditionStart;
             EditionFinish = end ?? EditionFinish;
@@ -89,6 +99,17 @@ namespace InternshipSystem.Core
                         })
                         .ToList();
             }
+
+            if (reportFieldIds != null)
+            {
+                ReportSchema =
+                    reportFieldIds
+                        .Select(i => new ReportFieldEdition
+                        {
+                            ReportFieldId = i,
+                        })
+                        .ToList();
+            }
         }
 
         public void RegisterInternship(Student student)
diff --git a/src/InternshipSystem.Core/UglyOrmArtifacts/ReportFieldEdition.cs b/src/InternshipSystem.Core/UglyOrmArtifacts/ReportFieldEdition.cs
index 2dcb318..53af38a 100644
--- a/src/InternshipSystem.Core/UglyOrmArtifacts/ReportFieldEdition.cs
+++ b/src/InternshipSystem.Core/UglyOrmArtifacts/ReportFieldEdition.cs
@@ -7,7 +7,7 @@ namespace InternshipSystem.Core.UglyOrmArtifacts
     {
         public Guid EditionId { get; set; }
         public Edition Edition { get; set; }
-        public int ReportFieldId { get; set; }
+        public long ReportFieldId { get; set; }
         public ReportField Field { get; set; }
     }
 }
\ No newline at end of file
-- 
2.45.2


From ca81ce2604a14c0c361ea2f2a9ce3cbd8ca751da Mon Sep 17 00:00:00 2001
From: Michal Bohdanowicz <m.w.bohdanowicz@gmail.com>
Date: Sun, 10 Jan 2021 18:28:23 +0100
Subject: [PATCH 5/6] XD

---
 src/InternshipSystem.Api/ApiProfile.cs                 |  2 --
 .../Result/EditionReportSchemaResult.cs                | 10 ----------
 2 files changed, 12 deletions(-)
 delete mode 100644 src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs

diff --git a/src/InternshipSystem.Api/ApiProfile.cs b/src/InternshipSystem.Api/ApiProfile.cs
index 208a577..1ff0e8f 100644
--- a/src/InternshipSystem.Api/ApiProfile.cs
+++ b/src/InternshipSystem.Api/ApiProfile.cs
@@ -20,8 +20,6 @@ namespace InternshipSystem.Api
                     opt => opt.MapFrom(edition => edition.IsOpen ? "Open" : "Archival"));
 
             CreateMap<Edition, EditionManagementResult>();
-
-            CreateMap<Edition, EditionReportSchemaResult>();
             
             CreateMap<Edition, EditionDetailsResult>();
             
diff --git a/src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs b/src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs
deleted file mode 100644
index 54e3993..0000000
--- a/src/InternshipSystem.Api/Result/EditionReportSchemaResult.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System.Collections.Generic;
-using InternshipSystem.Core.Entity;
-
-namespace InternshipSystem.Api.Result
-{
-    public class EditionReportSchemaResult
-    {
-        public List<ReportField> ReportSchema { get; set; }
-    }
-}
\ No newline at end of file
-- 
2.45.2


From 8babe6a46192d6b6fa6d4e97bba118cf32bb3157 Mon Sep 17 00:00:00 2001
From: Michal Bohdanowicz <m.w.bohdanowicz@gmail.com>
Date: Sun, 10 Jan 2021 18:30:11 +0100
Subject: [PATCH 6/6] XD

---
 ...0161858_Init.Designer.cs => 20210110173006_Init.Designer.cs} | 2 +-
 .../{20210110161858_Init.cs => 20210110173006_Init.cs}          | 0
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename src/InternshipSystem.Repository/Migrations/{20210110161858_Init.Designer.cs => 20210110173006_Init.Designer.cs} (99%)
 rename src/InternshipSystem.Repository/Migrations/{20210110161858_Init.cs => 20210110173006_Init.cs} (100%)

diff --git a/src/InternshipSystem.Repository/Migrations/20210110161858_Init.Designer.cs b/src/InternshipSystem.Repository/Migrations/20210110173006_Init.Designer.cs
similarity index 99%
rename from src/InternshipSystem.Repository/Migrations/20210110161858_Init.Designer.cs
rename to src/InternshipSystem.Repository/Migrations/20210110173006_Init.Designer.cs
index 7ccda94..ed77292 100644
--- a/src/InternshipSystem.Repository/Migrations/20210110161858_Init.Designer.cs
+++ b/src/InternshipSystem.Repository/Migrations/20210110173006_Init.Designer.cs
@@ -10,7 +10,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
 namespace InternshipSystem.Repository.Migrations
 {
     [DbContext(typeof(InternshipDbContext))]
-    [Migration("20210110161858_Init")]
+    [Migration("20210110173006_Init")]
     partial class Init
     {
         protected override void BuildTargetModel(ModelBuilder modelBuilder)
diff --git a/src/InternshipSystem.Repository/Migrations/20210110161858_Init.cs b/src/InternshipSystem.Repository/Migrations/20210110173006_Init.cs
similarity index 100%
rename from src/InternshipSystem.Repository/Migrations/20210110161858_Init.cs
rename to src/InternshipSystem.Repository/Migrations/20210110173006_Init.cs
-- 
2.45.2