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/ApiProfile.cs b/src/InternshipSystem.Api/ApiProfile.cs index 729a8ba..1ff0e8f 100644 --- a/src/InternshipSystem.Api/ApiProfile.cs +++ b/src/InternshipSystem.Api/ApiProfile.cs @@ -20,7 +20,7 @@ namespace InternshipSystem.Api opt => opt.MapFrom(edition => edition.IsOpen ? "Open" : "Archival")); CreateMap(); - + CreateMap(); CreateMap(); 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(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(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 new file mode 100644 index 0000000..45a7a37 --- /dev/null +++ b/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs @@ -0,0 +1,89 @@ +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> 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 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 AvailableSubjectsIds { get; set; } = new List(); public List AvailableInternshipTypesIds { get; set; } = new List(); + public List ReportSchema { get; set; } = new List(); public class Validator : AbstractValidator { 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 AvailableSubjects { get; set; } + public List 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 AvailableSubjects { get; set; } public List AvailableInternshipTypes { get; set; } + public List 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 dd00699..a044dd5 100644 --- a/src/InternshipSystem.Core/Entity/Edition.cs +++ b/src/InternshipSystem.Core/Entity/Edition.cs @@ -17,11 +17,12 @@ namespace InternshipSystem.Core public List Internships { get; set; } public List AvailableSubjects { get; set; } public List AvailableInternshipTypes { get; set; } + public List ReportSchema { get; set; } public bool IsOpen => EditionFinish < DateTime.Today; public static Edition CreateEdition(DateTime start, DateTime end, DateTime reportingStart, Course course, - IEnumerable subjectsIds, IEnumerable internshipTypesIds) + IEnumerable subjectsIds, IEnumerable internshipTypesIds, IEnumerable reportFieldIds) { var newEdition = CreateEdition(start, end, reportingStart, course); @@ -42,6 +43,15 @@ namespace InternshipSystem.Core InternshipTypeId = i, }) .ToList(); + + newEdition.ReportSchema = + reportFieldIds + .Select(i => new ReportFieldEdition + { + Edition = newEdition, + ReportFieldId = i, + }) + .ToList(); return newEdition; } @@ -56,11 +66,12 @@ namespace InternshipSystem.Core Course = course, AvailableSubjects = new List(), AvailableInternshipTypes = new List(), + ReportSchema = new List() }; } public void UpdateEdition(DateTime? start, DateTime? end, DateTime? reportingStart, Course course, - IEnumerable subjectsIds, IEnumerable internshipTypesIds) + IEnumerable subjectsIds, IEnumerable internshipTypesIds, IEnumerable reportFieldIds) { EditionStart = start ?? EditionStart; EditionFinish = end ?? EditionFinish; @@ -88,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/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 new file mode 100644 index 0000000..e10cd24 --- /dev/null +++ b/src/InternshipSystem.Core/Entity/ReportField.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; + +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; } + 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 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..53af38a --- /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 long 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 c841ed3..a3a4cd2 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; @@ -16,6 +18,8 @@ namespace InternshipSystem.Repository public DbSet Courses { get; set; } public DbSet Internships { get; set; } + public DbSet ReportFields { get; set; } + public InternshipDbContext(DbContextOptions options) : base(options) { @@ -91,6 +95,37 @@ namespace InternshipSystem.Repository .WithMany() .HasForeignKey(subject => subject.InternshipSubjectId); }); + + modelBuilder.Entity(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() + .HasDiscriminator("field_discrimnator") + .HasValue("single") + .HasValue("choice"); + + modelBuilder.Entity() + .Property(r => r.Choices) + .HasConversion( + a => string.Join('#', a), + s => s.Split('#', StringSplitOptions.RemoveEmptyEntries)); + + modelBuilder.Entity() + .Property(r => r.Value) + .HasColumnType("jsonb"); } } } \ No newline at end of file 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 @@ - - - - diff --git a/src/InternshipSystem.Repository/Migrations/20210110082601_init.Designer.cs b/src/InternshipSystem.Repository/Migrations/20210110173104_Init.Designer.cs similarity index 88% rename from src/InternshipSystem.Repository/Migrations/20210110082601_init.Designer.cs rename to src/InternshipSystem.Repository/Migrations/20210110173104_Init.Designer.cs index c8c7552..841b958 100644 --- a/src/InternshipSystem.Repository/Migrations/20210110082601_init.Designer.cs +++ b/src/InternshipSystem.Repository/Migrations/20210110173104_Init.Designer.cs @@ -10,8 +10,8 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace InternshipSystem.Repository.Migrations { [DbContext(typeof(InternshipDbContext))] - [Migration("20210110082601_init")] - partial class init + [Migration("20210110173104_Init")] + partial class Init { protected override void BuildTargetModel(ModelBuilder modelBuilder) { @@ -348,6 +348,47 @@ namespace InternshipSystem.Repository.Migrations b.ToTable("internship_types"); }); + modelBuilder.Entity("InternshipSystem.Core.Entity.ReportField", 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("FieldType") + .HasColumnName("field_type") + .HasColumnType("integer"); + + b.Property("Label") + .HasColumnName("label") + .HasColumnType("text"); + + b.Property("LabelEng") + .HasColumnName("label_eng") + .HasColumnType("text"); + + b.Property("field_discrimnator") + .IsRequired() + .HasColumnName("field_discrimnator") + .HasColumnType("text"); + + b.HasKey("Id") + .HasName("pk_report_fields"); + + b.ToTable("report_fields"); + + b.HasDiscriminator("field_discrimnator").HasValue("single"); + }); + modelBuilder.Entity("InternshipSystem.Core.Report", b => { b.Property("Id") @@ -356,18 +397,14 @@ namespace InternshipSystem.Repository.Migrations .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.Property("Value") + .HasColumnName("value") + .HasColumnType("jsonb"); + b.HasKey("Id") .HasName("pk_report"); @@ -503,6 +540,36 @@ namespace InternshipSystem.Repository.Migrations b.ToTable("program_subject"); }); + modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.ReportFieldEdition", b => + { + b.Property("EditionId") + .HasColumnName("edition_id") + .HasColumnType("uuid"); + + b.Property("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("Choices") + .HasColumnName("choices") + .HasColumnType("text"); + + b.HasDiscriminator().HasValue("choice"); + }); + modelBuilder.Entity("InternshipSystem.Core.BranchOffice", b => { b.HasOne("InternshipSystem.Core.Company", null) @@ -700,6 +767,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/20210110082601_init.cs b/src/InternshipSystem.Repository/Migrations/20210110173104_Init.cs similarity index 89% rename from src/InternshipSystem.Repository/Migrations/20210110082601_init.cs rename to src/InternshipSystem.Repository/Migrations/20210110173104_Init.cs index 4d85f78..eb44433 100644 --- a/src/InternshipSystem.Repository/Migrations/20210110082601_init.cs +++ b/src/InternshipSystem.Repository/Migrations/20210110173104_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(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), state = table.Column(nullable: false), - range = table.Column(nullable: false), - site_address = table.Column(nullable: true) + value = table.Column(type: "jsonb", nullable: true) }, constraints: table => { table.PrimaryKey("pk_report", x => x.id); }); + migrationBuilder.CreateTable( + name: "report_fields", + columns: table => new + { + id = table.Column(nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + label = table.Column(nullable: true), + label_eng = table.Column(nullable: true), + description = table.Column(nullable: true), + description_eng = table.Column(nullable: true), + field_type = table.Column(nullable: false), + field_discrimnator = table.Column(nullable: false), + choices = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_report_fields", x => x.id); + }); + migrationBuilder.CreateTable( name: "static_pages", columns: table => new @@ -254,6 +272,30 @@ namespace InternshipSystem.Repository.Migrations onDelete: ReferentialAction.Cascade); }); + migrationBuilder.CreateTable( + name: "report_field_edition", + columns: table => new + { + edition_id = table.Column(nullable: false), + report_field_id = table.Column(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 @@ -427,6 +469,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) @@ -443,6 +490,9 @@ namespace InternshipSystem.Repository.Migrations migrationBuilder.DropTable( name: "program_subject"); + migrationBuilder.DropTable( + name: "report_field_edition"); + migrationBuilder.DropTable( name: "static_pages"); @@ -452,6 +502,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 604909e..92eebdb 100644 --- a/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs +++ b/src/InternshipSystem.Repository/Migrations/InternshipDbContextModelSnapshot.cs @@ -346,6 +346,47 @@ namespace InternshipSystem.Repository.Migrations b.ToTable("internship_types"); }); + modelBuilder.Entity("InternshipSystem.Core.Entity.ReportField", 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("FieldType") + .HasColumnName("field_type") + .HasColumnType("integer"); + + b.Property("Label") + .HasColumnName("label") + .HasColumnType("text"); + + b.Property("LabelEng") + .HasColumnName("label_eng") + .HasColumnType("text"); + + b.Property("field_discrimnator") + .IsRequired() + .HasColumnName("field_discrimnator") + .HasColumnType("text"); + + b.HasKey("Id") + .HasName("pk_report_fields"); + + b.ToTable("report_fields"); + + b.HasDiscriminator("field_discrimnator").HasValue("single"); + }); + modelBuilder.Entity("InternshipSystem.Core.Report", b => { b.Property("Id") @@ -354,18 +395,14 @@ namespace InternshipSystem.Repository.Migrations .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.Property("Value") + .HasColumnName("value") + .HasColumnType("jsonb"); + b.HasKey("Id") .HasName("pk_report"); @@ -501,6 +538,36 @@ namespace InternshipSystem.Repository.Migrations b.ToTable("program_subject"); }); + modelBuilder.Entity("InternshipSystem.Core.UglyOrmArtifacts.ReportFieldEdition", b => + { + b.Property("EditionId") + .HasColumnName("edition_id") + .HasColumnType("uuid"); + + b.Property("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("Choices") + .HasColumnName("choices") + .HasColumnType("text"); + + b.HasDiscriminator().HasValue("choice"); + }); + modelBuilder.Entity("InternshipSystem.Core.BranchOffice", b => { b.HasOne("InternshipSystem.Core.Company", null) @@ -698,6 +765,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 } }