Skip to content
Snippets Groups Projects
Commit cfd3359b authored by Lucca Santangelo's avatar Lucca Santangelo
Browse files

fix file upload

parent 284c5e84
No related branches found
No related tags found
2 merge requests!26Develop,!21course sections
Pipeline #10299 passed
Showing
with 741 additions and 44 deletions
......@@ -14,10 +14,12 @@ namespace Tsi1.Api.Controllers
public class SectionItemController : ControllerBase
{
private readonly ISectionItemService _sectionItemService;
private readonly ISectionItemTypeService _sectionItemTypeService;
public SectionItemController(ISectionItemService sectionItemService)
public SectionItemController(ISectionItemService sectionItemService, ISectionItemTypeService sectionItemTypeService)
{
_sectionItemService = sectionItemService;
_sectionItemTypeService = sectionItemTypeService;
}
[HttpPost("Create")]
......@@ -55,5 +57,12 @@ namespace Tsi1.Api.Controllers
return Ok();
}
[HttpGet("GetSectionItemTypes")]
public async Task<IActionResult> GetSectionItemTypes()
{
var result = await _sectionItemTypeService.GetAll();
return Ok(result.Data);
}
}
}
......@@ -78,6 +78,7 @@ namespace Tsi1.Api
services.AddScoped<IFileService, FileService>();
services.AddScoped<ISectionService, SectionService>();
services.AddScoped<ISectionItemService, SectionItemService>();
services.AddScoped<ISectionItemTypeService, SectionItemTypeService>();
services.Configure<MailSettings>(Configuration.GetSection("MailSettings"));
services.AddScoped<IEmailService, EmailService>();
......
......@@ -9,8 +9,6 @@ namespace Tsi1.BusinessLayer.Dtos
public int Order { get; set; }
public int SectionId { get; set; }
public int SectionItemTypeId { get; set; }
public int? ForumId { get; set; }
public int? FileId { get; set; }
public ForumCreateDto Forum { get; set; }
public FileDto File { get; set; }
......
using System;
using System.Collections.Generic;
using System.Text;
namespace Tsi1.BusinessLayer.Dtos
{
public class SectionItemTypeDto
{
public int Id { get; set; }
public string Name { get; set; }
}
}
......@@ -49,6 +49,7 @@ namespace Tsi1.BusinessLayer.Helpers
public const string SectionItemDoesNotExist = "El item de seccion con id '{0}' no existe";
public const string DuplicateSectionItemOrder = "Hay items de seccion con el mismo orden";
public const string SectionItemTypeDoesNotExist = "El tipo de item de seccion con id '{0}' no existe";
public const string InvalidSectionItemType = "El tipo de item de seccion '{0}' es invalido";
public const string ForumIsNull = "El foro es nulo";
public const string FileIsNull = "El archivo es nulo";
......
......@@ -34,6 +34,7 @@ namespace Tsi1.BusinessLayer.Helpers
CreateMap<File, FileDto>();
CreateMap<SectionItem, SectionItemCreateDto>();
CreateMap<Section, SectionCreateDto>();
CreateMap<SectionItemType, SectionItemTypeDto>();
CreateMap<ForumCreateDto, Forum>();
CreateMap<ForumPreviewDto, Forum>();
......@@ -57,6 +58,7 @@ namespace Tsi1.BusinessLayer.Helpers
CreateMap<FileDto, File>();
CreateMap<SectionItemCreateDto, SectionItem>();
CreateMap<SectionCreateDto, Section>();
CreateMap<SectionItemTypeDto, SectionItemType>();
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Tsi1.BusinessLayer.Dtos;
using Tsi1.BusinessLayer.Helpers;
namespace Tsi1.BusinessLayer.Interfaces
{
public interface ISectionItemTypeService
{
Task<ServiceResult<List<SectionItemTypeDto>>> GetAll();
Task<ServiceResult<SectionItemTypeDto>> GetById(int id);
}
}
......@@ -29,40 +29,18 @@ namespace Tsi1.BusinessLayer.Services
_path = Path.Combine(hostingEnvironment.ContentRootPath, "StaticFiles");
}
public async Task<ServiceResult<string>> SaveFile(IFormFile file, string filePath)
{
var result = new ServiceResult<string>();
var fileStream = new FileStream(filePath, FileMode.Create);
try
{
await file.CopyToAsync(fileStream);
}
catch (Exception)
{
result.HasError = true;
result.Message = string.Format(ErrorMessages.ErrorSavingFile, filePath);
return result;
}
finally
{
fileStream.Close();
}
return result;
}
public async Task<ServiceResult<string>> Create(IFormFile file, string tenantId, string courseId)
{
var result = new ServiceResult<string>();
var path = Path.Combine(_path, tenantId, courseId);
Directory.CreateDirectory(path);
var folder = Path.Combine(_path, tenantId, courseId);
Directory.CreateDirectory(folder);
var fileName = GenerateFileName(file);
var filePath = Path.Combine(path, fileName);
var fileStream = new FileStream(filePath, FileMode.Create);
var relativePath = Path.Combine(tenantId, courseId, fileName);
var filePath = Path.Combine(_path, relativePath);
var fileStream = new FileStream(filePath, FileMode.Create);
try
{
await file.CopyToAsync(fileStream);
......@@ -78,7 +56,7 @@ namespace Tsi1.BusinessLayer.Services
fileStream.Close();
}
result.Data = filePath.Replace(_path, string.Empty);
result.Data = relativePath;
return result;
}
......@@ -113,7 +91,8 @@ namespace Tsi1.BusinessLayer.Services
public List<string> GetPhysicalFiles()
{
return Directory.GetFiles(_path, "*", SearchOption.AllDirectories).ToList();
var fullPaths = Directory.GetFiles(_path, "*", SearchOption.AllDirectories);
return fullPaths.Select(x => Path.GetRelativePath(_path, x)).ToList();
}
private string GenerateFileName(IFormFile file)
......
using AutoMapper;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Tsi1.BusinessLayer.Dtos;
using Tsi1.BusinessLayer.Helpers;
using Tsi1.BusinessLayer.Interfaces;
using Tsi1.DataLayer;
namespace Tsi1.BusinessLayer.Services
{
public class SectionItemTypeService : ISectionItemTypeService
{
private readonly Tsi1Context _context;
private readonly IMapper _mapper;
public SectionItemTypeService(Tsi1Context context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public async Task<ServiceResult<List<SectionItemTypeDto>>> GetAll()
{
var result = new ServiceResult<List<SectionItemTypeDto>>();
var sectionItemTypes = await _context.SectionItemTypes.ToListAsync();
result.Data = _mapper.Map<List<SectionItemTypeDto>>(sectionItemTypes);
return result;
}
public async Task<ServiceResult<SectionItemTypeDto>> GetById(int id)
{
var result = new ServiceResult<SectionItemTypeDto>();
var sectionItemType = await _context.SectionItemTypes.FirstOrDefaultAsync(x => x.Id == id);
if (sectionItemType == null)
{
result.HasError = true;
result.AddMessage(string.Format(ErrorMessages.SectionItemTypeDoesNotExist, id));
return result;
}
result.Data = _mapper.Map<SectionItemTypeDto>(sectionItemType);
return result;
}
}
}
......@@ -7,7 +7,6 @@ namespace Tsi1.DataLayer.Entities
public class File
{
public int Id { get; set; }
public int SectionItemId { get; set; }
public string Name { get; set; }
public string Path { get; set; }
......
......@@ -14,7 +14,6 @@ namespace Tsi1.DataLayer.Entities
public int Id { get; set; }
public string Name { get; set; }
public int SectionItemId { get; set; }
public SectionItem SectionItem { get; set; }
public ICollection<Post> Posts { get; set; }
......
......@@ -13,10 +13,6 @@ namespace Tsi1.DataLayer.EntityConfiguration
builder.Property(x => x.Name)
.IsRequired()
.HasColumnType("character varying(50)");
builder.HasOne(x => x.SectionItem)
.WithOne(x => x.Forum)
.HasForeignKey<Forum>(x => x.SectionItemId);
}
}
}
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using Tsi1.DataLayer;
namespace Tsi1.DataLayer.Migrations
{
[DbContext(typeof(Tsi1Context))]
[Migration("20201107181002_fix-section-items")]
partial class fixsectionitems
{
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("Tsi1.DataLayer.Entities.Connection", b =>
{
b.Property<string>("ConnectionId")
.HasColumnType("text");
b.Property<string>("GroupName")
.HasColumnType("text");
b.Property<int>("UserId")
.HasColumnType("integer");
b.HasKey("ConnectionId");
b.HasIndex("GroupName");
b.ToTable("Connections");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Course", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("Name")
.IsRequired()
.HasColumnType("character varying(50)");
b.Property<int>("TenantId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("TenantId");
b.HasIndex("Name", "TenantId")
.IsUnique();
b.ToTable("Courses");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.File", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("Name")
.IsRequired()
.HasColumnType("character varying(50)");
b.Property<string>("Path")
.IsRequired()
.HasColumnType("character varying(1000)");
b.HasKey("Id");
b.HasIndex("Path")
.IsUnique();
b.ToTable("Files");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Forum", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("Name")
.IsRequired()
.HasColumnType("character varying(50)");
b.HasKey("Id");
b.ToTable("Forums");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.ForumUser", b =>
{
b.Property<int>("ForumId")
.HasColumnType("integer");
b.Property<int>("UserId")
.HasColumnType("integer");
b.HasKey("ForumId", "UserId");
b.HasIndex("UserId");
b.ToTable("ForumUsers");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Group", b =>
{
b.Property<string>("Name")
.HasColumnType("text");
b.HasKey("Name");
b.ToTable("Groups");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Post", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<DateTime>("Date")
.HasColumnType("timestamp without time zone");
b.Property<int>("ForumId")
.HasColumnType("integer");
b.Property<string>("Title")
.IsRequired()
.HasColumnType("character varying(100)");
b.Property<int>("UserId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("UserId");
b.HasIndex("ForumId", "Title")
.IsUnique();
b.ToTable("Posts");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.PostMessage", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("Content")
.IsRequired()
.HasColumnType("character varying(10485760)");
b.Property<DateTime>("Date")
.HasColumnType("timestamp without time zone");
b.Property<int>("PostId")
.HasColumnType("integer");
b.Property<int>("UserId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("PostId");
b.HasIndex("UserId");
b.ToTable("PostMessages");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Professor", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("IdentityCard")
.IsRequired()
.HasColumnType("character varying(50)");
b.Property<int>("TenantId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("TenantId");
b.HasIndex("IdentityCard", "TenantId")
.IsUnique();
b.ToTable("Professors");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.ProfessorCourse", b =>
{
b.Property<int>("ProfessorId")
.HasColumnType("integer");
b.Property<int>("CourseId")
.HasColumnType("integer");
b.HasKey("ProfessorId", "CourseId");
b.HasIndex("CourseId");
b.ToTable("ProfessorCourses");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Section", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<int>("CourseId")
.HasColumnType("integer");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("character varying(255)");
b.Property<int>("Order")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("CourseId");
b.ToTable("Sections");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.SectionItem", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<int?>("FileId")
.HasColumnType("integer");
b.Property<int?>("ForumId")
.HasColumnType("integer");
b.Property<int>("Order")
.HasColumnType("integer");
b.Property<int>("SectionId")
.HasColumnType("integer");
b.Property<int>("SectionItemTypeId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("FileId")
.IsUnique();
b.HasIndex("ForumId")
.IsUnique();
b.HasIndex("SectionId");
b.HasIndex("SectionItemTypeId");
b.ToTable("SectionItems");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.SectionItemType", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("Name")
.IsRequired()
.HasColumnType("character varying(100)");
b.HasKey("Id");
b.ToTable("SectionItemTypes");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Student", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<int>("Age")
.HasColumnType("integer");
b.Property<string>("IdentityCard")
.IsRequired()
.HasColumnType("character varying(50)");
b.Property<int>("TenantId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("TenantId");
b.HasIndex("IdentityCard", "TenantId")
.IsUnique();
b.ToTable("Students");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.StudentCourse", b =>
{
b.Property<int>("StudentId")
.HasColumnType("integer");
b.Property<int>("CourseId")
.HasColumnType("integer");
b.HasKey("StudentId", "CourseId");
b.HasIndex("CourseId");
b.ToTable("StudentCourses");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Tenant", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("Name")
.IsRequired()
.HasColumnType("character varying(50)");
b.HasKey("Id");
b.HasIndex("Name")
.IsUnique();
b.ToTable("Tenants");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.User", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("Email")
.IsRequired()
.HasColumnType("character varying(255)");
b.Property<string>("FirstName")
.IsRequired()
.HasColumnType("character varying(255)");
b.Property<string>("LastName")
.IsRequired()
.HasColumnType("character varying(255)");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("character varying(255)");
b.Property<int?>("ProfessorId")
.HasColumnType("integer");
b.Property<int?>("StudentId")
.HasColumnType("integer");
b.Property<int>("TenantId")
.HasColumnType("integer");
b.Property<int>("UserTypeId")
.HasColumnType("integer");
b.Property<string>("Username")
.IsRequired()
.HasColumnType("character varying(50)");
b.HasKey("Id");
b.HasIndex("ProfessorId")
.IsUnique();
b.HasIndex("StudentId")
.IsUnique();
b.HasIndex("TenantId");
b.HasIndex("UserTypeId");
b.HasIndex("Username", "TenantId")
.IsUnique();
b.ToTable("Users");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.UserType", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
b.Property<string>("Name")
.IsRequired()
.HasColumnType("character varying(50)");
b.HasKey("Id");
b.HasIndex("Name")
.IsUnique();
b.ToTable("UserTypes");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Connection", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.Group", "Group")
.WithMany("Connections")
.HasForeignKey("GroupName");
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Course", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.Tenant", "Tenant")
.WithMany("Courses")
.HasForeignKey("TenantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.ForumUser", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.Forum", "Forum")
.WithMany("ForumUsers")
.HasForeignKey("ForumId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Tsi1.DataLayer.Entities.User", "User")
.WithMany("ForumUsers")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Post", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.Forum", "Forum")
.WithMany("Posts")
.HasForeignKey("ForumId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Tsi1.DataLayer.Entities.User", "User")
.WithMany("Posts")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.PostMessage", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.Post", "Post")
.WithMany("PostMessages")
.HasForeignKey("PostId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Tsi1.DataLayer.Entities.User", "User")
.WithMany("PostMessages")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Professor", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.Tenant", "Tenant")
.WithMany("Professors")
.HasForeignKey("TenantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.ProfessorCourse", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.Course", "Course")
.WithMany("ProfessorCourses")
.HasForeignKey("CourseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Tsi1.DataLayer.Entities.Professor", "Professor")
.WithMany("ProfessorCourses")
.HasForeignKey("ProfessorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Section", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.Course", "Course")
.WithMany("Sections")
.HasForeignKey("CourseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.SectionItem", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.File", "File")
.WithOne("SectionItem")
.HasForeignKey("Tsi1.DataLayer.Entities.SectionItem", "FileId");
b.HasOne("Tsi1.DataLayer.Entities.Forum", "Forum")
.WithOne("SectionItem")
.HasForeignKey("Tsi1.DataLayer.Entities.SectionItem", "ForumId");
b.HasOne("Tsi1.DataLayer.Entities.Section", "Section")
.WithMany("SectionItems")
.HasForeignKey("SectionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Tsi1.DataLayer.Entities.SectionItemType", "SectionItemType")
.WithMany("SectionItems")
.HasForeignKey("SectionItemTypeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.Student", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.Tenant", "Tenant")
.WithMany("Students")
.HasForeignKey("TenantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.StudentCourse", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.Course", "Course")
.WithMany("StudentCourses")
.HasForeignKey("CourseId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Tsi1.DataLayer.Entities.Student", "Student")
.WithMany("StudentCourses")
.HasForeignKey("StudentId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Tsi1.DataLayer.Entities.User", b =>
{
b.HasOne("Tsi1.DataLayer.Entities.Professor", "Professor")
.WithOne("User")
.HasForeignKey("Tsi1.DataLayer.Entities.User", "ProfessorId");
b.HasOne("Tsi1.DataLayer.Entities.Student", "Student")
.WithOne("User")
.HasForeignKey("Tsi1.DataLayer.Entities.User", "StudentId");
b.HasOne("Tsi1.DataLayer.Entities.Tenant", "Tenant")
.WithMany("Users")
.HasForeignKey("TenantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Tsi1.DataLayer.Entities.UserType", "UserType")
.WithMany()
.HasForeignKey("UserTypeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
#pragma warning restore 612, 618
}
}
}
using Microsoft.EntityFrameworkCore.Migrations;
namespace Tsi1.DataLayer.Migrations
{
public partial class fixsectionitems : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "SectionItemId",
table: "Forums");
migrationBuilder.DropColumn(
name: "SectionItemId",
table: "Files");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "SectionItemId",
table: "Forums",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<int>(
name: "SectionItemId",
table: "Files",
type: "integer",
nullable: false,
defaultValue: 0);
}
}
}
......@@ -76,9 +76,6 @@ namespace Tsi1.DataLayer.Migrations
.IsRequired()
.HasColumnType("character varying(1000)");
b.Property<int>("SectionItemId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("Path")
......@@ -98,9 +95,6 @@ namespace Tsi1.DataLayer.Migrations
.IsRequired()
.HasColumnType("character varying(50)");
b.Property<int>("SectionItemId")
.HasColumnType("integer");
b.HasKey("Id");
b.ToTable("Forums");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment