using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Migrations.Operations; using Microsoft.EntityFrameworkCore.Migrations.Operations.Builders; using Oqtane.Databases.Interfaces; using Oqtane.Interfaces; // ReSharper disable MemberCanBePrivate.Global // ReSharper disable UnusedAutoPropertyAccessor.Global namespace Oqtane.Migrations.EntityBuilders { public class PageEntityBuilder : DeletableAuditableBaseEntityBuilder { private const string _entityTableName = "Page"; private readonly PrimaryKey _primaryKey = new("PK_Page", x => x.PageId); private readonly ForeignKey _siteForeignKey = new("FK_Page_Site", x => x.SiteId, "Site", "SiteId", ReferentialAction.Cascade); public PageEntityBuilder(MigrationBuilder migrationBuilder, IDatabase database) : base(migrationBuilder, database) { EntityTableName = _entityTableName; PrimaryKey = _primaryKey; ForeignKeys.Add(_siteForeignKey); } protected override PageEntityBuilder BuildTable(ColumnsBuilder table) { PageId = AddAutoIncrementColumn(table,"PageId"); SiteId = AddIntegerColumn(table,"SiteId"); if (ActiveDatabase.Name == "SqlServer" || ActiveDatabase.Name == "LocalDB") { Path = AddStringColumn(table,"Path", 50); } else { Path = AddStringColumn(table,"Path", 256); } Name = AddStringColumn(table,"Name", 50); Title = AddStringColumn(table,"Title", 200, true); ThemeType = AddStringColumn(table,"ThemeType", 200, true); Icon = AddStringColumn(table,"Icon", 50); ParentId = AddIntegerColumn(table,"ParentId", true); Order = AddIntegerColumn(table,"Order"); IsNavigation = AddBooleanColumn(table,"IsNavigation"); Url = AddStringColumn(table,"Url", 500, true); UserId = AddIntegerColumn(table,"UserId", true); IsPersonalizable = AddBooleanColumn(table,"IsPersonalizable"); DefaultContainerType = AddStringColumn(table,"DefaultContainerType", 200, true); AddAuditableColumns(table); AddDeletableColumns(table); return this; } public OperationBuilder PageId { get; private set; } public OperationBuilder SiteId { get; private set; } public OperationBuilder Path { get; private set; } public OperationBuilder Name { get; private set; } public OperationBuilder Title { get; private set; } public OperationBuilder ThemeType { get; private set; } public OperationBuilder Icon { get; private set; } public OperationBuilder ParentId { get; private set; } public OperationBuilder Order { get; private set; } public OperationBuilder IsNavigation { get; private set; } public OperationBuilder Url { get; private set; } public OperationBuilder UserId { get; private set; } public OperationBuilder IsPersonalizable { get; private set; } public OperationBuilder DefaultContainerType { get; private set; } } }