diff --git a/.docker/docker-compose.yaml b/.docker/docker-compose.yaml index 73c579b..8abd0a7 100644 --- a/.docker/docker-compose.yaml +++ b/.docker/docker-compose.yaml @@ -14,6 +14,7 @@ services: SECURITYOPTIONS__PROFILEPATH: /oauth2.0/profile SECURITYOPTIONS__CLIENTID: PraktykiClientId SECURITYOPTIONS__REDIRECTURL: https://system-praktyk.stg.kadet.net/user/login/check/pg + FILLER__USE_DEFAULT_DATA: "true" depends_on: - db.postgres ports: diff --git a/src/InternshipSystem.Api/Controllers/AdminController.cs b/src/InternshipSystem.Api/Controllers/AdminController.cs index 0c943a5..e929e79 100644 --- a/src/InternshipSystem.Api/Controllers/AdminController.cs +++ b/src/InternshipSystem.Api/Controllers/AdminController.cs @@ -16,42 +16,39 @@ namespace InternshipSystem.Api.Controllers public DatabaseFiller FillerService { get; } - [HttpPost("fill")] - public async Task Fill() - { - await FillerService.FillCompanies(); - await FillerService.FillInternshipTypes(); - await FillerService.FillEditions(); - await FillerService.FillStaticPages(); - return Ok(); - } - - [HttpPost("fill/companies")] - public async Task FillCompaniesAsync() - { - await FillerService.FillCompanies(); - return Ok(); - } - - [HttpPost("fill/internshipTypes")] - public async Task FillInternshipTypesAsync() - { - await FillerService.FillInternshipTypes(); - return Ok(); - } - - [HttpPost("fill/editions")] - public async Task FillEditionsAsync() - { - await FillerService.FillEditions(); - return Ok(); - } - - [HttpPost("fill/staticPages")] - public async Task FillStaticPagesAsync() - { - await FillerService.FillStaticPages(); - return Ok(); - } + // [HttpPost("fill")] + // public async Task FillAll() + // { + // await FillerService.FillAll(); + // return Ok(); + // } + // + // [HttpPost("fill/companies")] + // public async Task FillCompaniesAsync() + // { + // await FillerService.FillCompanies(); + // return Ok(); + // } + // + // [HttpPost("fill/internshipTypes")] + // public async Task FillInternshipTypesAsync() + // { + // await FillerService.FillInternshipTypes(); + // return Ok(); + // } + // + // [HttpPost("fill/editions")] + // public async Task FillEditionsAsync() + // { + // await FillerService.FillEditions(); + // return Ok(); + // } + // + // [HttpPost("fill/staticPages")] + // public async Task FillStaticPagesAsync() + // { + // await FillerService.FillStaticPages(); + // return Ok(); + // } } } \ No newline at end of file diff --git a/src/InternshipSystem.Api/Extensions/ApplicationBuilderExtensions.cs b/src/InternshipSystem.Api/Extensions/ApplicationBuilderExtensions.cs new file mode 100644 index 0000000..4f53406 --- /dev/null +++ b/src/InternshipSystem.Api/Extensions/ApplicationBuilderExtensions.cs @@ -0,0 +1,36 @@ +using InternshipSystem.Repository; +using Microsoft.AspNetCore.Builder; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Internal; +using Microsoft.Extensions.DependencyInjection; + +namespace InternshipSystem.Api.Extensions +{ + public static class ApplicationBuilderExtensions + { + public static IApplicationBuilder UseMigration(this IApplicationBuilder app) + { + using var serviceScope = app.ApplicationServices.GetRequiredService().CreateScope(); + using var context = serviceScope.ServiceProvider.GetService(); + + context.Database.Migrate(); + + return app; + } + + public static IApplicationBuilder UseDefaultData(this IApplicationBuilder app, bool useDefaultData) + { + using var serviceScope = app.ApplicationServices.GetRequiredService().CreateScope(); + using var context = serviceScope.ServiceProvider.GetService(); + var filler = serviceScope.ServiceProvider.GetService(); + + context.Database.Migrate(); + if (useDefaultData && !context.Editions.Any()) + { + filler.FillAll().Wait(); + } + + return app; + } + } +} \ No newline at end of file diff --git a/src/InternshipSystem.Api/Program.cs b/src/InternshipSystem.Api/Program.cs index 098ffb8..052d137 100644 --- a/src/InternshipSystem.Api/Program.cs +++ b/src/InternshipSystem.Api/Program.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -16,6 +17,8 @@ namespace InternshipSystem.Api { public static void Main(string[] args) { + //TODO: remove ugly solution for to early migration error on startup + Thread.Sleep(10000); CreateHostBuilder(args).Build().Run(); } diff --git a/src/InternshipSystem.Api/Services/UserService.cs b/src/InternshipSystem.Api/Services/UserService.cs deleted file mode 100644 index 64f9e89..0000000 --- a/src/InternshipSystem.Api/Services/UserService.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace InternshipSystem.Api.Services -{ - public class UserService - { - - } -} \ No newline at end of file diff --git a/src/InternshipSystem.Api/Startup.cs b/src/InternshipSystem.Api/Startup.cs index 4757557..840b91e 100644 --- a/src/InternshipSystem.Api/Startup.cs +++ b/src/InternshipSystem.Api/Startup.cs @@ -1,6 +1,9 @@ using System; using System.IO; +using System.Linq; using System.Reflection; +using System.Threading; +using System.Threading.Tasks; using AutoMapper; using InternshipSystem.Api.Controllers; using InternshipSystem.Api.Extensions; @@ -61,11 +64,15 @@ namespace InternshipSystem.Api .AddControllers(o => { o.ModelBinderProviders.Insert(0, new UserBinderProvider()); }); } - public void Configure(IApplicationBuilder app, IWebHostEnvironment env) + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, DatabaseFiller databaseFiller) { + app.UseMigration(); + if (env.IsDevelopment()) { - app.UseDeveloperExceptionPage(); + app + .UseDefaultData("true".Equals(Environment.GetEnvironmentVariable("FILLER__USE_DEFAULT_DATA"))) + .UseDeveloperExceptionPage(); } app diff --git a/src/InternshipSystem.Repository/DatabaseFiller.cs b/src/InternshipSystem.Repository/DatabaseFiller.cs index ef31643..7126522 100644 --- a/src/InternshipSystem.Repository/DatabaseFiller.cs +++ b/src/InternshipSystem.Repository/DatabaseFiller.cs @@ -11,12 +11,20 @@ namespace InternshipSystem.Repository { public class DatabaseFiller { + private InternshipDbContext Context { get; } + public DatabaseFiller(InternshipDbContext context) { Context = context; } - - public InternshipDbContext Context { get; } + + public async Task FillAll() + { + await FillCompanies(); + await FillInternshipTypes(); + await FillEditions(); + await FillStaticPages(); + } public async Task FillCompanies() { diff --git a/src/InternshipSystem.Repository/Migrations/20200923103350_init.Designer.cs b/src/InternshipSystem.Repository/Migrations/20200923103350_init.Designer.cs new file mode 100644 index 0000000..fddfc9e --- /dev/null +++ b/src/InternshipSystem.Repository/Migrations/20200923103350_init.Designer.cs @@ -0,0 +1,680 @@ +// +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(InternshipPractiseSupervisorDbContext))] + [Migration("20200923103350_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("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("CompanyId") + .HasColumnName("company_id") + .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("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Name") + .HasColumnName("name") + .HasColumnType("text"); + + b.Property("Nip") + .HasColumnName("nip") + .HasColumnType("text"); + + b.HasKey("Id") + .HasName("pk_companies"); + + b.ToTable("companies"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Course", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Name") + .HasColumnName("name") + .HasColumnType("text"); + + b.HasKey("Id") + .HasName("pk_course"); + + b.ToTable("course"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Document", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Description") + .HasColumnName("description") + .HasColumnType("text"); + + b.Property("InternshipId") + .HasColumnName("internship_id") + .HasColumnType("bigint"); + + b.Property("InternshipId1") + .HasColumnName("internship_id1") + .HasColumnType("bigint"); + + b.Property("RejectionReason") + .HasColumnName("rejection_reason") + .HasColumnType("text"); + + b.Property("Scan") + .HasColumnName("scan") + .HasColumnType("bytea"); + + b.Property("State") + .HasColumnName("state") + .HasColumnType("integer"); + + b.Property("Type") + .HasColumnName("type") + .HasColumnType("integer"); + + b.HasKey("Id") + .HasName("pk_document"); + + b.HasIndex("InternshipId") + .HasName("ix_document_internship_id"); + + b.HasIndex("InternshipId1") + .HasName("ix_document_internship_id1"); + + b.ToTable("document"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Edition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("uuid"); + + b.Property("AllowedInternshipTypesId") + .HasColumnName("allowed_internship_types_id") + .HasColumnType("bigint"); + + b.Property("CourseId") + .HasColumnName("course_id") + .HasColumnType("bigint"); + + b.Property("EditionFinish") + .HasColumnName("edition_finish") + .HasColumnType("timestamp without time zone"); + + b.Property("EditionStart") + .HasColumnName("edition_start") + .HasColumnType("timestamp without time zone"); + + b.Property("ReportingStart") + .HasColumnName("reporting_start") + .HasColumnType("timestamp without time zone"); + + b.HasKey("Id") + .HasName("pk_editions"); + + b.HasIndex("AllowedInternshipTypesId") + .HasName("ix_editions_allowed_internship_types_id"); + + b.HasIndex("CourseId") + .HasName("ix_editions_course_id"); + + b.ToTable("editions"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Entity.Internship.InternshipSubject", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Description") + .HasColumnName("description") + .HasColumnType("text"); + + b.Property("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("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Description") + .HasColumnName("description") + .HasColumnType("text"); + + b.Property("DescriptionEng") + .HasColumnName("description_eng") + .HasColumnType("text"); + + b.Property("EditionId") + .HasColumnName("edition_id") + .HasColumnType("uuid"); + + b.Property("Type") + .HasColumnName("type") + .HasColumnType("text"); + + b.HasKey("Id") + .HasName("pk_internship_types"); + + b.HasIndex("EditionId") + .HasName("ix_internship_types_edition_id"); + + b.ToTable("internship_types"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Internship", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("EditionId") + .HasColumnName("edition_id") + .HasColumnType("uuid"); + + b.Property("Grade") + .HasColumnName("grade") + .HasColumnType("real"); + + b.Property("InternshipProgramId") + .HasColumnName("internship_program_id") + .HasColumnType("bigint"); + + b.Property("InternshipRegistrationId") + .HasColumnName("internship_registration_id") + .HasColumnType("bigint"); + + b.Property("ReportId") + .HasColumnName("report_id") + .HasColumnType("bigint"); + + b.Property("StudentId") + .HasColumnName("student_id") + .HasColumnType("bigint"); + + b.HasKey("Id") + .HasName("pk_internship"); + + b.HasIndex("EditionId") + .HasName("ix_internship_edition_id"); + + b.HasIndex("InternshipProgramId") + .HasName("ix_internship_internship_program_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.InternshipProgram", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("State") + .HasColumnName("state") + .HasColumnType("integer"); + + b.HasKey("Id") + .HasName("pk_internship_program"); + + b.ToTable("internship_program"); + }); + + modelBuilder.Entity("InternshipSystem.Core.InternshipRegistration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("BranchAddressId") + .HasColumnName("branch_address_id") + .HasColumnType("bigint"); + + b.Property("CompanyId") + .HasColumnName("company_id") + .HasColumnType("bigint"); + + b.Property("End") + .HasColumnName("end") + .HasColumnType("timestamp without time zone"); + + b.Property("Start") + .HasColumnName("start") + .HasColumnType("timestamp without time zone"); + + b.Property("State") + .HasColumnName("state") + .HasColumnType("integer"); + + b.Property("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.Report", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Range") + .HasColumnName("range") + .HasColumnType("integer"); + + b.Property("SiteAddress") + .HasColumnName("site_address") + .HasColumnType("text"); + + b.Property("State") + .HasColumnName("state") + .HasColumnType("integer"); + + b.HasKey("Id") + .HasName("pk_report"); + + b.ToTable("report"); + }); + + modelBuilder.Entity("InternshipSystem.Core.StaticPage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("AccessName") + .HasColumnName("access_name") + .HasColumnType("text"); + + b.Property("Content") + .HasColumnName("content") + .HasColumnType("text"); + + b.Property("ContentEng") + .HasColumnName("content_eng") + .HasColumnType("text"); + + b.Property("Title") + .HasColumnName("title") + .HasColumnType("text"); + + b.Property("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("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("AlbumNumber") + .HasColumnName("album_number") + .HasColumnType("integer"); + + b.Property("Course") + .HasColumnName("course") + .HasColumnType("text"); + + b.Property("Email") + .HasColumnName("email") + .HasColumnType("text"); + + b.Property("FirstName") + .HasColumnName("first_name") + .HasColumnType("text"); + + b.Property("LastName") + .HasColumnName("last_name") + .HasColumnType("text"); + + b.Property("Semester") + .HasColumnName("semester") + .HasColumnType("integer"); + + b.HasKey("Id") + .HasName("pk_students"); + + b.ToTable("students"); + }); + + modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.EditionSubject", b => + { + b.Property("EditionId") + .HasColumnName("edition_id") + .HasColumnType("uuid"); + + b.Property("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("InternshipProgramId") + .HasColumnName("internship_program_id") + .HasColumnType("bigint"); + + b.Property("InternshipSubjectId") + .HasColumnName("internship_subject_id") + .HasColumnType("bigint"); + + b.HasKey("InternshipProgramId", "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("BranchOfficeId") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b1.Property("Building") + .HasColumnName("building") + .HasColumnType("text"); + + b1.Property("City") + .HasColumnName("city") + .HasColumnType("text"); + + b1.Property("Country") + .HasColumnName("country") + .HasColumnType("text"); + + b1.Property("PostalCode") + .HasColumnName("postal_code") + .HasColumnType("text"); + + b1.Property("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.Internship", null) + .WithMany("Approvals") + .HasForeignKey("InternshipId") + .HasConstraintName("fk_document_internship_internship_id"); + + b.HasOne("InternshipSystem.Core.Internship", null) + .WithMany("Documentation") + .HasForeignKey("InternshipId1") + .HasConstraintName("fk_document_internship_internship_id1"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Edition", b => + { + b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipType", "AllowedInternshipTypes") + .WithMany() + .HasForeignKey("AllowedInternshipTypesId") + .HasConstraintName("fk_editions_internship_types_allowed_internship_types_id"); + + b.HasOne("InternshipSystem.Core.Course", "Course") + .WithMany() + .HasForeignKey("CourseId") + .HasConstraintName("fk_editions_course_course_id"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Entity.Internship.InternshipType", b => + { + b.HasOne("InternshipSystem.Core.Edition", null) + .WithMany("AvailableInternshipTypes") + .HasForeignKey("EditionId") + .HasConstraintName("fk_internship_types_editions_edition_id"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Internship", b => + { + b.HasOne("InternshipSystem.Core.Edition", "Edition") + .WithMany("Internships") + .HasForeignKey("EditionId") + .HasConstraintName("fk_internship_editions_edition_id"); + + b.HasOne("InternshipSystem.Core.InternshipProgram", "InternshipProgram") + .WithMany() + .HasForeignKey("InternshipProgramId") + .HasConstraintName("fk_internship_internship_program_internship_program_id"); + + b.HasOne("InternshipSystem.Core.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.InternshipProgram", b => + { + b.OwnsOne("InternshipSystem.Core.Mentor", "Mentor", b1 => + { + b1.Property("InternshipProgramId") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b1.Property("Email") + .HasColumnName("email") + .HasColumnType("text"); + + b1.Property("FirstName") + .HasColumnName("first_name") + .HasColumnType("text"); + + b1.Property("LastName") + .HasColumnName("last_name") + .HasColumnType("text"); + + b1.Property("PhoneNumber") + .HasColumnName("phone_number") + .HasColumnType("text"); + + b1.HasKey("InternshipProgramId") + .HasName("pk_internship_program"); + + b1.ToTable("internship_program"); + + b1.WithOwner() + .HasForeignKey("InternshipProgramId") + .HasConstraintName("fk_mentor_internship_program_internship_program_id"); + }); + }); + + modelBuilder.Entity("InternshipSystem.Core.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"); + }); + + 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.InternshipProgram", "Program") + .WithMany("ChosenSubjects") + .HasForeignKey("InternshipProgramId") + .HasConstraintName("fk_program_subject_internship_program_internship_program_id") + .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 + } + } +} diff --git a/src/InternshipSystem.Repository/Migrations/20200923103350_init.cs b/src/InternshipSystem.Repository/Migrations/20200923103350_init.cs new file mode 100644 index 0000000..623be9c --- /dev/null +++ b/src/InternshipSystem.Repository/Migrations/20200923103350_init.cs @@ -0,0 +1,493 @@ +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(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + nip = table.Column(nullable: true), + name = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_companies", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "course", + columns: table => new + { + id = table.Column(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_course", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "internship_program", + columns: table => new + { + id = table.Column(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + first_name = table.Column(nullable: true), + last_name = table.Column(nullable: true), + email = table.Column(nullable: true), + phone_number = table.Column(nullable: true), + state = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_internship_program", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "internship_subject", + columns: table => new + { + id = table.Column(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + description = table.Column(nullable: true), + description_eng = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_internship_subject", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "report", + columns: table => new + { + id = table.Column(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + state = table.Column(nullable: false), + range = table.Column(nullable: false), + site_address = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_report", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "static_pages", + columns: table => new + { + id = table.Column(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + access_name = table.Column(nullable: true), + title = table.Column(nullable: true), + title_eng = table.Column(nullable: true), + content = table.Column(nullable: true), + content_eng = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_static_pages", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "students", + columns: table => new + { + id = table.Column(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + album_number = table.Column(nullable: false), + first_name = table.Column(nullable: true), + last_name = table.Column(nullable: true), + email = table.Column(nullable: true), + course = table.Column(nullable: true), + semester = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_students", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "branch_office", + columns: table => new + { + id = table.Column(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + street = table.Column(nullable: true), + building = table.Column(nullable: true), + city = table.Column(nullable: true), + postal_code = table.Column(nullable: true), + country = table.Column(nullable: true), + company_id = table.Column(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: "program_subject", + columns: table => new + { + internship_program_id = table.Column(nullable: false), + internship_subject_id = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_program_subject", x => new { x.internship_program_id, x.internship_subject_id }); + table.ForeignKey( + name: "fk_program_subject_internship_program_internship_program_id", + column: x => x.internship_program_id, + principalTable: "internship_program", + 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: "internship_registration", + columns: table => new + { + id = table.Column(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + company_id = table.Column(nullable: true), + branch_address_id = table.Column(nullable: true), + start = table.Column(nullable: false), + end = table.Column(nullable: false), + type_id = table.Column(nullable: true), + state = table.Column(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); + }); + + migrationBuilder.CreateTable( + name: "editions", + columns: table => new + { + id = table.Column(nullable: false), + edition_start = table.Column(nullable: false), + edition_finish = table.Column(nullable: false), + reporting_start = table.Column(nullable: false), + course_id = table.Column(nullable: true), + allowed_internship_types_id = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_editions", x => x.id); + table.ForeignKey( + name: "fk_editions_course_course_id", + column: x => x.course_id, + principalTable: "course", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "edition_subject", + columns: table => new + { + edition_id = table.Column(nullable: false), + internship_subject_id = table.Column(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(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + student_id = table.Column(nullable: true), + internship_registration_id = table.Column(nullable: true), + internship_program_id = table.Column(nullable: true), + report_id = table.Column(nullable: true), + edition_id = table.Column(nullable: true), + grade = table.Column(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_program_internship_program_id", + column: x => x.internship_program_id, + principalTable: "internship_program", + 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: "internship_types", + columns: table => new + { + id = table.Column(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + type = table.Column(nullable: true), + description = table.Column(nullable: true), + description_eng = table.Column(nullable: true), + edition_id = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_internship_types", x => x.id); + table.ForeignKey( + name: "fk_internship_types_editions_edition_id", + column: x => x.edition_id, + principalTable: "editions", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "document", + columns: table => new + { + id = table.Column(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + description = table.Column(nullable: true), + scan = table.Column(nullable: true), + type = table.Column(nullable: false), + state = table.Column(nullable: false), + rejection_reason = table.Column(nullable: true), + internship_id = table.Column(nullable: true), + internship_id1 = table.Column(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); + table.ForeignKey( + name: "fk_document_internship_internship_id1", + column: x => x.internship_id1, + principalTable: "internship", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + }); + + 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_document_internship_id1", + table: "document", + column: "internship_id1"); + + migrationBuilder.CreateIndex( + name: "ix_edition_subject_internship_subject_id", + table: "edition_subject", + column: "internship_subject_id"); + + migrationBuilder.CreateIndex( + name: "ix_editions_allowed_internship_types_id", + table: "editions", + column: "allowed_internship_types_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_program_id", + table: "internship", + column: "internship_program_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_internship_types_edition_id", + table: "internship_types", + column: "edition_id"); + + migrationBuilder.CreateIndex( + name: "ix_program_subject_internship_subject_id", + table: "program_subject", + column: "internship_subject_id"); + + migrationBuilder.AddForeignKey( + name: "fk_internship_registration_internship_types_type_id", + table: "internship_registration", + column: "type_id", + principalTable: "internship_types", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + + migrationBuilder.AddForeignKey( + name: "fk_editions_internship_types_allowed_internship_types_id", + table: "editions", + column: "allowed_internship_types_id", + principalTable: "internship_types", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "fk_internship_types_editions_edition_id", + table: "internship_types"); + + migrationBuilder.DropTable( + name: "document"); + + migrationBuilder.DropTable( + name: "edition_subject"); + + migrationBuilder.DropTable( + name: "program_subject"); + + migrationBuilder.DropTable( + name: "static_pages"); + + migrationBuilder.DropTable( + name: "internship"); + + migrationBuilder.DropTable( + name: "internship_subject"); + + migrationBuilder.DropTable( + name: "internship_program"); + + migrationBuilder.DropTable( + name: "internship_registration"); + + migrationBuilder.DropTable( + name: "report"); + + migrationBuilder.DropTable( + name: "students"); + + migrationBuilder.DropTable( + name: "branch_office"); + + migrationBuilder.DropTable( + name: "companies"); + + migrationBuilder.DropTable( + name: "editions"); + + migrationBuilder.DropTable( + name: "internship_types"); + + migrationBuilder.DropTable( + name: "course"); + } + } +} diff --git a/src/InternshipSystem.Repository/Migrations/InternshipPractiseSupervisorDbContextModelSnapshot.cs b/src/InternshipSystem.Repository/Migrations/InternshipPractiseSupervisorDbContextModelSnapshot.cs new file mode 100644 index 0000000..c99d560 --- /dev/null +++ b/src/InternshipSystem.Repository/Migrations/InternshipPractiseSupervisorDbContextModelSnapshot.cs @@ -0,0 +1,678 @@ +// +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(InternshipPractiseSupervisorDbContext))] + partial class InternshipPractiseSupervisorDbContextModelSnapshot : 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("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("CompanyId") + .HasColumnName("company_id") + .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("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Name") + .HasColumnName("name") + .HasColumnType("text"); + + b.Property("Nip") + .HasColumnName("nip") + .HasColumnType("text"); + + b.HasKey("Id") + .HasName("pk_companies"); + + b.ToTable("companies"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Course", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Name") + .HasColumnName("name") + .HasColumnType("text"); + + b.HasKey("Id") + .HasName("pk_course"); + + b.ToTable("course"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Document", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Description") + .HasColumnName("description") + .HasColumnType("text"); + + b.Property("InternshipId") + .HasColumnName("internship_id") + .HasColumnType("bigint"); + + b.Property("InternshipId1") + .HasColumnName("internship_id1") + .HasColumnType("bigint"); + + b.Property("RejectionReason") + .HasColumnName("rejection_reason") + .HasColumnType("text"); + + b.Property("Scan") + .HasColumnName("scan") + .HasColumnType("bytea"); + + b.Property("State") + .HasColumnName("state") + .HasColumnType("integer"); + + b.Property("Type") + .HasColumnName("type") + .HasColumnType("integer"); + + b.HasKey("Id") + .HasName("pk_document"); + + b.HasIndex("InternshipId") + .HasName("ix_document_internship_id"); + + b.HasIndex("InternshipId1") + .HasName("ix_document_internship_id1"); + + b.ToTable("document"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Edition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("uuid"); + + b.Property("AllowedInternshipTypesId") + .HasColumnName("allowed_internship_types_id") + .HasColumnType("bigint"); + + b.Property("CourseId") + .HasColumnName("course_id") + .HasColumnType("bigint"); + + b.Property("EditionFinish") + .HasColumnName("edition_finish") + .HasColumnType("timestamp without time zone"); + + b.Property("EditionStart") + .HasColumnName("edition_start") + .HasColumnType("timestamp without time zone"); + + b.Property("ReportingStart") + .HasColumnName("reporting_start") + .HasColumnType("timestamp without time zone"); + + b.HasKey("Id") + .HasName("pk_editions"); + + b.HasIndex("AllowedInternshipTypesId") + .HasName("ix_editions_allowed_internship_types_id"); + + b.HasIndex("CourseId") + .HasName("ix_editions_course_id"); + + b.ToTable("editions"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Entity.Internship.InternshipSubject", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Description") + .HasColumnName("description") + .HasColumnType("text"); + + b.Property("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("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Description") + .HasColumnName("description") + .HasColumnType("text"); + + b.Property("DescriptionEng") + .HasColumnName("description_eng") + .HasColumnType("text"); + + b.Property("EditionId") + .HasColumnName("edition_id") + .HasColumnType("uuid"); + + b.Property("Type") + .HasColumnName("type") + .HasColumnType("text"); + + b.HasKey("Id") + .HasName("pk_internship_types"); + + b.HasIndex("EditionId") + .HasName("ix_internship_types_edition_id"); + + b.ToTable("internship_types"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Internship", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("EditionId") + .HasColumnName("edition_id") + .HasColumnType("uuid"); + + b.Property("Grade") + .HasColumnName("grade") + .HasColumnType("real"); + + b.Property("InternshipProgramId") + .HasColumnName("internship_program_id") + .HasColumnType("bigint"); + + b.Property("InternshipRegistrationId") + .HasColumnName("internship_registration_id") + .HasColumnType("bigint"); + + b.Property("ReportId") + .HasColumnName("report_id") + .HasColumnType("bigint"); + + b.Property("StudentId") + .HasColumnName("student_id") + .HasColumnType("bigint"); + + b.HasKey("Id") + .HasName("pk_internship"); + + b.HasIndex("EditionId") + .HasName("ix_internship_edition_id"); + + b.HasIndex("InternshipProgramId") + .HasName("ix_internship_internship_program_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.InternshipProgram", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("State") + .HasColumnName("state") + .HasColumnType("integer"); + + b.HasKey("Id") + .HasName("pk_internship_program"); + + b.ToTable("internship_program"); + }); + + modelBuilder.Entity("InternshipSystem.Core.InternshipRegistration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("BranchAddressId") + .HasColumnName("branch_address_id") + .HasColumnType("bigint"); + + b.Property("CompanyId") + .HasColumnName("company_id") + .HasColumnType("bigint"); + + b.Property("End") + .HasColumnName("end") + .HasColumnType("timestamp without time zone"); + + b.Property("Start") + .HasColumnName("start") + .HasColumnType("timestamp without time zone"); + + b.Property("State") + .HasColumnName("state") + .HasColumnType("integer"); + + b.Property("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.Report", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("Range") + .HasColumnName("range") + .HasColumnType("integer"); + + b.Property("SiteAddress") + .HasColumnName("site_address") + .HasColumnType("text"); + + b.Property("State") + .HasColumnName("state") + .HasColumnType("integer"); + + b.HasKey("Id") + .HasName("pk_report"); + + b.ToTable("report"); + }); + + modelBuilder.Entity("InternshipSystem.Core.StaticPage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("AccessName") + .HasColumnName("access_name") + .HasColumnType("text"); + + b.Property("Content") + .HasColumnName("content") + .HasColumnType("text"); + + b.Property("ContentEng") + .HasColumnName("content_eng") + .HasColumnType("text"); + + b.Property("Title") + .HasColumnName("title") + .HasColumnType("text"); + + b.Property("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("Id") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("AlbumNumber") + .HasColumnName("album_number") + .HasColumnType("integer"); + + b.Property("Course") + .HasColumnName("course") + .HasColumnType("text"); + + b.Property("Email") + .HasColumnName("email") + .HasColumnType("text"); + + b.Property("FirstName") + .HasColumnName("first_name") + .HasColumnType("text"); + + b.Property("LastName") + .HasColumnName("last_name") + .HasColumnType("text"); + + b.Property("Semester") + .HasColumnName("semester") + .HasColumnType("integer"); + + b.HasKey("Id") + .HasName("pk_students"); + + b.ToTable("students"); + }); + + modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.EditionSubject", b => + { + b.Property("EditionId") + .HasColumnName("edition_id") + .HasColumnType("uuid"); + + b.Property("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("InternshipProgramId") + .HasColumnName("internship_program_id") + .HasColumnType("bigint"); + + b.Property("InternshipSubjectId") + .HasColumnName("internship_subject_id") + .HasColumnType("bigint"); + + b.HasKey("InternshipProgramId", "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("BranchOfficeId") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b1.Property("Building") + .HasColumnName("building") + .HasColumnType("text"); + + b1.Property("City") + .HasColumnName("city") + .HasColumnType("text"); + + b1.Property("Country") + .HasColumnName("country") + .HasColumnType("text"); + + b1.Property("PostalCode") + .HasColumnName("postal_code") + .HasColumnType("text"); + + b1.Property("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.Internship", null) + .WithMany("Approvals") + .HasForeignKey("InternshipId") + .HasConstraintName("fk_document_internship_internship_id"); + + b.HasOne("InternshipSystem.Core.Internship", null) + .WithMany("Documentation") + .HasForeignKey("InternshipId1") + .HasConstraintName("fk_document_internship_internship_id1"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Edition", b => + { + b.HasOne("InternshipSystem.Core.Entity.Internship.InternshipType", "AllowedInternshipTypes") + .WithMany() + .HasForeignKey("AllowedInternshipTypesId") + .HasConstraintName("fk_editions_internship_types_allowed_internship_types_id"); + + b.HasOne("InternshipSystem.Core.Course", "Course") + .WithMany() + .HasForeignKey("CourseId") + .HasConstraintName("fk_editions_course_course_id"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Entity.Internship.InternshipType", b => + { + b.HasOne("InternshipSystem.Core.Edition", null) + .WithMany("AvailableInternshipTypes") + .HasForeignKey("EditionId") + .HasConstraintName("fk_internship_types_editions_edition_id"); + }); + + modelBuilder.Entity("InternshipSystem.Core.Internship", b => + { + b.HasOne("InternshipSystem.Core.Edition", "Edition") + .WithMany("Internships") + .HasForeignKey("EditionId") + .HasConstraintName("fk_internship_editions_edition_id"); + + b.HasOne("InternshipSystem.Core.InternshipProgram", "InternshipProgram") + .WithMany() + .HasForeignKey("InternshipProgramId") + .HasConstraintName("fk_internship_internship_program_internship_program_id"); + + b.HasOne("InternshipSystem.Core.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.InternshipProgram", b => + { + b.OwnsOne("InternshipSystem.Core.Mentor", "Mentor", b1 => + { + b1.Property("InternshipProgramId") + .ValueGeneratedOnAdd() + .HasColumnName("id") + .HasColumnType("bigint") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b1.Property("Email") + .HasColumnName("email") + .HasColumnType("text"); + + b1.Property("FirstName") + .HasColumnName("first_name") + .HasColumnType("text"); + + b1.Property("LastName") + .HasColumnName("last_name") + .HasColumnType("text"); + + b1.Property("PhoneNumber") + .HasColumnName("phone_number") + .HasColumnType("text"); + + b1.HasKey("InternshipProgramId") + .HasName("pk_internship_program"); + + b1.ToTable("internship_program"); + + b1.WithOwner() + .HasForeignKey("InternshipProgramId") + .HasConstraintName("fk_mentor_internship_program_internship_program_id"); + }); + }); + + modelBuilder.Entity("InternshipSystem.Core.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"); + }); + + 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.InternshipProgram", "Program") + .WithMany("ChosenSubjects") + .HasForeignKey("InternshipProgramId") + .HasConstraintName("fk_program_subject_internship_program_internship_program_id") + .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 + } + } +}