Сделаны модели для бд, нужно будет дописать метод GetViewModel. Также сделаны заглушки реализаций Storages

This commit is contained in:
ArtemEmelyanov 2023-04-29 19:40:17 +04:00
parent c6c53b144d
commit 9f7235d9fc
21 changed files with 1356 additions and 4 deletions

View File

@ -3,13 +3,15 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32825.248
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Forum", "Forum\Forum.csproj", "{39D0273E-0669-416F-BB28-BA53D9B39A9E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Forum", "Forum\Forum.csproj", "{39D0273E-0669-416F-BB28-BA53D9B39A9E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ForumDataModels", "ForumDataModels\ForumDataModels.csproj", "{24B317C8-C032-4D6E-8568-B8E849356296}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ForumDataModels", "ForumDataModels\ForumDataModels.csproj", "{24B317C8-C032-4D6E-8568-B8E849356296}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ForumContracts", "ForumContracts\ForumContracts.csproj", "{5C97629C-A864-4DF7-9371-04F7E6CE0E71}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ForumContracts", "ForumContracts\ForumContracts.csproj", "{5C97629C-A864-4DF7-9371-04F7E6CE0E71}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ForumBusinessLogic", "ForumBusinessLogic\ForumBusinessLogic.csproj", "{ED013C29-0AF9-427C-8967-7B003E297B8B}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ForumBusinessLogic", "ForumBusinessLogic\ForumBusinessLogic.csproj", "{ED013C29-0AF9-427C-8967-7B003E297B8B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ForumDatabase", "ForumDatabase\ForumDatabase.csproj", "{3ACFA811-320C-4F1B-820E-D1C1B4BCAECA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -33,6 +35,10 @@ Global
{ED013C29-0AF9-427C-8967-7B003E297B8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ED013C29-0AF9-427C-8967-7B003E297B8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED013C29-0AF9-427C-8967-7B003E297B8B}.Release|Any CPU.Build.0 = Release|Any CPU
{3ACFA811-320C-4F1B-820E-D1C1B4BCAECA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3ACFA811-320C-4F1B-820E-D1C1B4BCAECA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3ACFA811-320C-4F1B-820E-D1C1B4BCAECA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3ACFA811-320C-4F1B-820E-D1C1B4BCAECA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -8,4 +8,15 @@
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ForumDatabase\ForumDatabase.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,28 @@
using ForumDatabase.Models;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ForumDatabase
{
public class ForumDatabase : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (optionsBuilder.IsConfigured == false)
{
optionsBuilder.UseNpgsql("Host=localhost;Port=5432;Database=SUBD;Username=postgres;Password=postgres");
}
base.OnConfiguring(optionsBuilder);
}
public virtual DbSet<Role> Roles { set; get; }
public virtual DbSet<User> Users { set; get; }
public virtual DbSet<Topic> Topics { set; get; }
public virtual DbSet<Category> Categories { set; get; }
public virtual DbSet<Message> Messages { set; get; }
}
}

View File

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\ForumBusinessLogic\ForumBusinessLogic.csproj" />
<ProjectReference Include="..\ForumContracts\ForumContracts.csproj" />
<ProjectReference Include="..\ForumDataModels\ForumDataModels.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,45 @@
using ForumContracts.BindingModels;
using ForumContracts.SearchModels;
using ForumContracts.StoragesContracts;
using ForumContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ForumDatabase.Implements
{
public class CategoryStorage : ICategoryStorage
{
public CategoryViewModel? Delete(CategoryBindingModel model)
{
throw new NotImplementedException();
}
public CategoryViewModel? GetElement(CategorySearchModel model)
{
throw new NotImplementedException();
}
public List<CategoryViewModel> GetFilteredList(CategorySearchModel model)
{
throw new NotImplementedException();
}
public List<CategoryViewModel> GetFullList()
{
throw new NotImplementedException();
}
public CategoryViewModel? Insert(CategoryBindingModel model)
{
throw new NotImplementedException();
}
public CategoryViewModel? Update(CategoryBindingModel model)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,45 @@
using ForumContracts.BindingModels;
using ForumContracts.SearchModels;
using ForumContracts.StoragesContracts;
using ForumContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ForumDatabase.Implements
{
public class MessageStorage : IMessageStorage
{
public MessageViewModel? Delete(MessageBindingModel model)
{
throw new NotImplementedException();
}
public MessageViewModel? GetElement(MessageSearchModel model)
{
throw new NotImplementedException();
}
public List<MessageViewModel> GetFilteredList(MessageSearchModel model)
{
throw new NotImplementedException();
}
public List<MessageViewModel> GetFullList()
{
throw new NotImplementedException();
}
public MessageViewModel? Insert(MessageBindingModel model)
{
throw new NotImplementedException();
}
public MessageViewModel? Update(MessageBindingModel model)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,45 @@
using ForumContracts.BindingModels;
using ForumContracts.SearchModels;
using ForumContracts.StoragesContracts;
using ForumContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ForumDatabase.Implements
{
public class RoleStorage : IRoleStorage
{
public RoleViewModel? Delete(RoleBindingModel model)
{
throw new NotImplementedException();
}
public RoleViewModel? GetElement(RoleSearchModel model)
{
throw new NotImplementedException();
}
public List<RoleViewModel> GetFilteredList(RoleSearchModel model)
{
throw new NotImplementedException();
}
public List<RoleViewModel> GetFullList()
{
throw new NotImplementedException();
}
public RoleViewModel? Insert(RoleBindingModel model)
{
throw new NotImplementedException();
}
public RoleViewModel? Update(RoleBindingModel model)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,45 @@
using ForumContracts.BindingModels;
using ForumContracts.SearchModels;
using ForumContracts.StoragesContracts;
using ForumContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ForumDatabase.Implements
{
public class TopicStorage : ITopicStorage
{
public TopicViewModel? Delete(TopicBindingModel model)
{
throw new NotImplementedException();
}
public TopicViewModel? GetElement(TopicSearchModel model)
{
throw new NotImplementedException();
}
public List<TopicViewModel> GetFilteredList(TopicSearchModel model)
{
throw new NotImplementedException();
}
public List<TopicViewModel> GetFullList()
{
throw new NotImplementedException();
}
public TopicViewModel? Insert(TopicBindingModel model)
{
throw new NotImplementedException();
}
public TopicViewModel? Update(TopicBindingModel model)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,45 @@
using ForumContracts.BindingModels;
using ForumContracts.SearchModels;
using ForumContracts.StoragesContracts;
using ForumContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ForumDatabase.Implements
{
public class UserStorage : IUserStorage
{
public UserViewModel? Delete(UserBindingModel model)
{
throw new NotImplementedException();
}
public UserViewModel? GetElement(UserSearchModel model)
{
throw new NotImplementedException();
}
public List<UserViewModel> GetFilteredList(UserSearchModel model)
{
throw new NotImplementedException();
}
public List<UserViewModel> GetFullList()
{
throw new NotImplementedException();
}
public UserViewModel? Insert(UserBindingModel model)
{
throw new NotImplementedException();
}
public UserViewModel? Update(UserBindingModel model)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,129 @@
// <auto-generated />
using System;
using ForumDatabase;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace ForumDatabase.Migrations
{
[DbContext(typeof(ForumDatabase))]
[Migration("20230429151555_Init")]
partial class Init
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.5")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("ForumDatabase.Models.Category", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Categories");
});
modelBuilder.Entity("ForumDatabase.Models.Message", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<DateTime>("Date")
.HasColumnType("timestamp with time zone");
b.Property<string>("Text")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Messages");
});
modelBuilder.Entity("ForumDatabase.Models.Role", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Roles");
});
modelBuilder.Entity("ForumDatabase.Models.Topic", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Topics");
});
modelBuilder.Entity("ForumDatabase.Models.User", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Email")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RegistrationDate")
.HasColumnType("timestamp with time zone");
b.Property<string>("Username")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Users");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,104 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace ForumDatabase.Migrations
{
/// <inheritdoc />
public partial class Init : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Categories",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Name = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Categories", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Messages",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Text = table.Column<string>(type: "text", nullable: false),
Date = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Messages", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Roles",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Name = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Roles", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Topics",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Name = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Topics", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Users",
columns: table => new
{
Id = table.Column<int>(type: "integer", nullable: false)
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
Username = table.Column<string>(type: "text", nullable: false),
Email = table.Column<string>(type: "text", nullable: false),
Password = table.Column<string>(type: "text", nullable: false),
RegistrationDate = table.Column<DateTime>(type: "timestamp with time zone", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Users", x => x.Id);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Categories");
migrationBuilder.DropTable(
name: "Messages");
migrationBuilder.DropTable(
name: "Roles");
migrationBuilder.DropTable(
name: "Topics");
migrationBuilder.DropTable(
name: "Users");
}
}
}

View File

@ -0,0 +1,132 @@
// <auto-generated />
using System;
using ForumDatabase;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace ForumDatabase.Migrations
{
[DbContext(typeof(ForumDatabase))]
[Migration("20230429152341_Init1")]
partial class Init1
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.5")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("ForumDatabase.Models.Category", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Categories");
});
modelBuilder.Entity("ForumDatabase.Models.Message", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<DateTime>("Date")
.HasColumnType("timestamp with time zone");
b.Property<string>("Text")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Messages");
});
modelBuilder.Entity("ForumDatabase.Models.Role", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Roles");
});
modelBuilder.Entity("ForumDatabase.Models.Topic", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Topics");
});
modelBuilder.Entity("ForumDatabase.Models.User", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Email")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RegistrationDate")
.HasColumnType("timestamp with time zone");
b.Property<int>("RoleId")
.HasColumnType("integer");
b.Property<string>("Username")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Users");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ForumDatabase.Migrations
{
/// <inheritdoc />
public partial class Init1 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "RoleId",
table: "Users",
type: "integer",
nullable: false,
defaultValue: 0);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "RoleId",
table: "Users");
}
}
}

View File

@ -0,0 +1,147 @@
// <auto-generated />
using System;
using ForumDatabase;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace ForumDatabase.Migrations
{
[DbContext(typeof(ForumDatabase))]
[Migration("20230429153115_Init2")]
partial class Init2
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.5")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("ForumDatabase.Models.Category", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<int>("UserId")
.HasColumnType("integer");
b.HasKey("Id");
b.ToTable("Categories");
});
modelBuilder.Entity("ForumDatabase.Models.Message", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<DateTime>("Date")
.HasColumnType("timestamp with time zone");
b.Property<string>("Text")
.IsRequired()
.HasColumnType("text");
b.Property<int>("TopicId")
.HasColumnType("integer");
b.Property<int>("UserId")
.HasColumnType("integer");
b.HasKey("Id");
b.ToTable("Messages");
});
modelBuilder.Entity("ForumDatabase.Models.Role", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Roles");
});
modelBuilder.Entity("ForumDatabase.Models.Topic", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<int>("UserId")
.HasColumnType("integer");
b.HasKey("Id");
b.ToTable("Topics");
});
modelBuilder.Entity("ForumDatabase.Models.User", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Email")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RegistrationDate")
.HasColumnType("timestamp with time zone");
b.Property<int>("RoleId")
.HasColumnType("integer");
b.Property<string>("Username")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Users");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,73 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ForumDatabase.Migrations
{
/// <inheritdoc />
public partial class Init2 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "CategoryId",
table: "Topics",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<int>(
name: "UserId",
table: "Topics",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<int>(
name: "TopicId",
table: "Messages",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<int>(
name: "UserId",
table: "Messages",
type: "integer",
nullable: false,
defaultValue: 0);
migrationBuilder.AddColumn<int>(
name: "UserId",
table: "Categories",
type: "integer",
nullable: false,
defaultValue: 0);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "CategoryId",
table: "Topics");
migrationBuilder.DropColumn(
name: "UserId",
table: "Topics");
migrationBuilder.DropColumn(
name: "TopicId",
table: "Messages");
migrationBuilder.DropColumn(
name: "UserId",
table: "Messages");
migrationBuilder.DropColumn(
name: "UserId",
table: "Categories");
}
}
}

View File

@ -0,0 +1,144 @@
// <auto-generated />
using System;
using ForumDatabase;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace ForumDatabase.Migrations
{
[DbContext(typeof(ForumDatabase))]
partial class ForumDatabaseModelSnapshot : ModelSnapshot
{
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "7.0.5")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("ForumDatabase.Models.Category", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<int>("UserId")
.HasColumnType("integer");
b.HasKey("Id");
b.ToTable("Categories");
});
modelBuilder.Entity("ForumDatabase.Models.Message", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<DateTime>("Date")
.HasColumnType("timestamp with time zone");
b.Property<string>("Text")
.IsRequired()
.HasColumnType("text");
b.Property<int>("TopicId")
.HasColumnType("integer");
b.Property<int>("UserId")
.HasColumnType("integer");
b.HasKey("Id");
b.ToTable("Messages");
});
modelBuilder.Entity("ForumDatabase.Models.Role", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Roles");
});
modelBuilder.Entity("ForumDatabase.Models.Topic", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<int>("CategoryId")
.HasColumnType("integer");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("text");
b.Property<int>("UserId")
.HasColumnType("integer");
b.HasKey("Id");
b.ToTable("Topics");
});
modelBuilder.Entity("ForumDatabase.Models.User", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property<int>("Id"));
b.Property<string>("Email")
.IsRequired()
.HasColumnType("text");
b.Property<string>("Password")
.IsRequired()
.HasColumnType("text");
b.Property<DateTime>("RegistrationDate")
.HasColumnType("timestamp with time zone");
b.Property<int>("RoleId")
.HasColumnType("integer");
b.Property<string>("Username")
.IsRequired()
.HasColumnType("text");
b.HasKey("Id");
b.ToTable("Users");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,54 @@
using ForumContracts.BindingModels;
using ForumContracts.ViewModels;
using ForumDataModels;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Runtime.ConstrainedExecution;
using System.Text;
using System.Threading.Tasks;
namespace ForumDatabase.Models
{
public class Category : ICategoryModel
{
[Required]
public string Name { get; set; } = string.Empty;
public int Id { get; private set; }
[Required]
public int UserId { get; set; }
[ForeignKey("TopicId")]
List<Topic> Topics { get; set; } = new();
public static Category? Create(CategoryBindingModel model)
{
if (model == null)
{
return null;
}
return new Category()
{
Id = model.Id,
Name = model.Name,
};
}
public void Update(CategoryBindingModel model)
{
if (model == null)
{
return;
}
Name = model.Name;
}
public CategoryViewModel GetViewModel => new()
{
Id = Id,
Name = Name,
};
}
}

View File

@ -0,0 +1,59 @@
using ForumContracts.BindingModels;
using ForumContracts.ViewModels;
using ForumDataModels;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace ForumDatabase.Models
{
public class Message : IMessageModel
{
[Required]
public string Text { get; set; } = string.Empty;
[Required]
public DateTime Date { get; set; } = DateTime.SpecifyKind(DateTime.MinValue, DateTimeKind.Utc);
public int Id { get; private set; }
[Required]
public int UserId { get; set; }
[Required]
public int TopicId { get; set; }
public static Message? Create(MessageBindingModel model)
{
if (model == null)
{
return null;
}
return new Message()
{
Id = model.Id,
Text = model.Text,
Date = model.Date,
};
}
public void Update(MessageBindingModel model)
{
if (model == null)
{
return;
}
Text = model.Text;
Date = model.Date;
}
public MessageViewModel GetViewModel => new()
{
Id = Id,
Text = Text,
Date = Date,
};
}
}

View File

@ -0,0 +1,52 @@
using ForumContracts.BindingModels;
using ForumContracts.ViewModels;
using ForumDataModels;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace ForumDatabase.Models
{
public class Role : IRoleModel
{
[Required]
public string Name { get; set; } = string.Empty;
public int Id { get; private set; }
[ForeignKey("UserId")]
List<User> Users { get; set; } = new();
public static Role? Create(RoleBindingModel model)
{
if (model == null)
{
return null;
}
return new Role()
{
Id = model.Id,
Name = model.Name,
};
}
public void Update(RoleBindingModel model)
{
if (model == null)
{
return;
}
Name = model.Name;
}
public RoleViewModel GetViewModel => new()
{
Id = Id,
Name = Name,
};
}
}

View File

@ -0,0 +1,58 @@
using ForumContracts.BindingModels;
using ForumContracts.ViewModels;
using ForumDataModels;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
namespace ForumDatabase.Models
{
public class Topic : ITopicModel
{
[Required]
public string Name { get; set; } = string.Empty;
public int Id { get; private set; }
[Required]
public int UserId { get; set; }
[Required]
public int CategoryId { get; set; }
[ForeignKey("MessageId")]
List<Message> Messages { get; set; } = new();
public static Topic? Create(TopicBindingModel model)
{
if (model == null)
{
return null;
}
return new Topic()
{
Id = model.Id,
Name = model.Name,
};
}
public void Update(TopicBindingModel model)
{
if (model == null)
{
return;
}
model.Id = Id;
model.Name = Name;
}
public TopicViewModel GetViewModel => new()
{
Id = Id,
Name = Name,
};
}
}

View File

@ -0,0 +1,77 @@
using ForumContracts.BindingModels;
using ForumContracts.ViewModels;
using ForumDataModels;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Runtime.ConstrainedExecution;
using System.Text;
using System.Threading.Tasks;
namespace ForumDatabase.Models
{
public class User : IUserModel
{
[Required]
public string Username { get; set; } = string.Empty;
[Required]
public string Email { get; set; } = string.Empty;
[Required]
public string Password { get; set; } = string.Empty;
[Required]
public DateTime RegistrationDate { get; set; } = DateTime.SpecifyKind(DateTime.MinValue, DateTimeKind.Utc);
public int Id { get; private set; }
[Required]
public int RoleId { get; set; }
[ForeignKey("CategoryId")]
List<Category> Categories { get; set; } = new();
[ForeignKey("TopicId")]
List<Topic> Topics { get; set; } = new();
[ForeignKey("MessageId")]
List<Message> Messages { get; set; } = new();
public static User? Create(UserBindingModel model)
{
if (model == null)
{
return null;
}
return new User()
{
Id = model.Id,
Username = model.Username,
Email = model.Email,
Password = model.Password,
RegistrationDate = model.RegistrationDate,
};
}
public void Update(UserBindingModel model)
{
if (model == null)
{
return;
}
Username = model.Username;
Email = model.Email;
Password = model.Password;
RegistrationDate = model.RegistrationDate;
}
public UserViewModel GetViewModel => new()
{
Id = Id,
Username = Username,
Email = Email,
Password = Password,
RegistrationDate = RegistrationDate,
};
}
}