Added interfaces to read and write data in DB and added DbContext implementing these
This commit is contained in:
@@ -0,0 +1,26 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database.Configuration.Applicant
|
||||||
|
{
|
||||||
|
public class ApplicantConfiguration : IEntityTypeConfiguration<Domains.ApplicantDomain.Applicant>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<Domains.ApplicantDomain.Applicant> entity)
|
||||||
|
{
|
||||||
|
entity.ToTable("Applicants");
|
||||||
|
|
||||||
|
entity.OwnsOne(p => p.Name);
|
||||||
|
entity.OwnsOne(p => p.FatherName);
|
||||||
|
entity.OwnsOne(p => p.MotherName);
|
||||||
|
entity.OwnsOne(p => p.Passport);
|
||||||
|
|
||||||
|
entity.Property(p => p.Citizenship)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(30);
|
||||||
|
|
||||||
|
entity.Property(p => p.CitizenshipByBirth)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
using Domains.ApplicantDomain;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database.Configuration.Applicant
|
||||||
|
{
|
||||||
|
public class NameConfiguration : IEntityTypeConfiguration<Name>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<Name> entity)
|
||||||
|
{
|
||||||
|
entity.Property(p => p.FirstName)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(50);
|
||||||
|
|
||||||
|
entity.Property(p => p.Surname)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(50);
|
||||||
|
|
||||||
|
entity.Property(p => p.Patronymic)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(50);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
using Domains.ApplicantDomain;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database.Configuration.Applicant
|
||||||
|
{
|
||||||
|
public class PassportConfiguration : IEntityTypeConfiguration<Passport>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<Passport> entity)
|
||||||
|
{
|
||||||
|
entity.Property(p => p.Number)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(20);
|
||||||
|
|
||||||
|
entity.Property(p => p.Issuer)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(200);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
using Domains.ApplicantDomain;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database.Configuration.Applicant
|
||||||
|
{
|
||||||
|
public class PlaceOfWorkConfiguration : IEntityTypeConfiguration<PlaceOfWork>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<PlaceOfWork> entity)
|
||||||
|
{
|
||||||
|
entity.OwnsOne(p => p.Address);
|
||||||
|
|
||||||
|
entity.Property(p => p.Name)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(200);
|
||||||
|
|
||||||
|
entity.Property(p => p.PhoneNum)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
using Domains.Common;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database.Configuration.Common
|
||||||
|
{
|
||||||
|
public class AddressConfiguration : IEntityTypeConfiguration<Address>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<Address> entity)
|
||||||
|
{
|
||||||
|
entity.Property(p => p.Street)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(100);
|
||||||
|
entity.Property(p => p.Building)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using Domains.Common;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database.Configuration.Common
|
||||||
|
{
|
||||||
|
public class CityConfiguration : IEntityTypeConfiguration<City>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<City> entity)
|
||||||
|
{
|
||||||
|
entity.Property(p => p.Name)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(70);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using Domains.Common;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database.Configuration.Common
|
||||||
|
{
|
||||||
|
public class CountryConfiguration : IEntityTypeConfiguration<Country>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<Country> entity)
|
||||||
|
{
|
||||||
|
entity.Property(p => p.Name)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(70);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using Domains.VisaApplicationDomain;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database.Configuration.VisaApplication
|
||||||
|
{
|
||||||
|
public class PastVisaConfiguration : IEntityTypeConfiguration<PastVisa>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<PastVisa> entity)
|
||||||
|
{
|
||||||
|
entity.Property(p => p.Name)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(70);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using Domains.VisaApplicationDomain;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database.Configuration.VisaApplication
|
||||||
|
{
|
||||||
|
public class PermissionToDestCountryConfiguration : IEntityTypeConfiguration<PermissionToDestCountry>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<PermissionToDestCountry> entity)
|
||||||
|
{
|
||||||
|
entity.Property(p => p.Issuer)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(200);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using Domains.VisaApplicationDomain;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database.Configuration.VisaApplication
|
||||||
|
{
|
||||||
|
public class ReentryPermitConfiguration : IEntityTypeConfiguration<ReentryPermit>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<ReentryPermit> entity)
|
||||||
|
{
|
||||||
|
entity.Property(p => p.Number)
|
||||||
|
.IsUnicode(false)
|
||||||
|
.HasMaxLength(25);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
using Domains.VisaApplicationDomain;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database.Configuration.VisaApplication
|
||||||
|
{
|
||||||
|
public class VisaApplicationConfiguration : IEntityTypeConfiguration<Domains.VisaApplicationDomain.VisaApplication>
|
||||||
|
{
|
||||||
|
public void Configure(EntityTypeBuilder<Domains.VisaApplicationDomain.VisaApplication> entity)
|
||||||
|
{
|
||||||
|
entity.ToTable("VisaApplications");
|
||||||
|
|
||||||
|
entity.OwnsOne(p => p.ReentryPermit);
|
||||||
|
entity.OwnsOne(p => p.PermissionToDestCountry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
45
SchengenVisaApi/Infrastructure/Database/DbContext.cs
Normal file
45
SchengenVisaApi/Infrastructure/Database/DbContext.cs
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using Domains;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database
|
||||||
|
{
|
||||||
|
public class DbContext : Microsoft.EntityFrameworkCore.DbContext, IWriter, IReader, IUnitOfWork
|
||||||
|
{
|
||||||
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task IWriter.AddAsync<T>(T entity, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
await AddAsync(entity, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IWriter.Update<T>(T entity)
|
||||||
|
{
|
||||||
|
Update(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IWriter.Remove<T>(T entity)
|
||||||
|
{
|
||||||
|
Remove(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
IQueryable<T> IReader.GetAll<T>()
|
||||||
|
{
|
||||||
|
return Set<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task<T?> IReader.GetOneAsync<T>(Guid id, CancellationToken cancellationToken)
|
||||||
|
where T : class
|
||||||
|
{
|
||||||
|
return await Set<T>().FindAsync([id], cancellationToken: cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task IUnitOfWork.SaveAsync(CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
await SaveChangesAsync(cancellationToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
SchengenVisaApi/Infrastructure/Database/IReader.cs
Normal file
18
SchengenVisaApi/Infrastructure/Database/IReader.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
using Domains;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database
|
||||||
|
{
|
||||||
|
public interface IReader
|
||||||
|
{
|
||||||
|
/// Get all entities of type <typeparamref name="T"/> stored in storage
|
||||||
|
/// <typeparam name="T">Entity type to seek in storage</typeparam>
|
||||||
|
IQueryable<T> GetAll<T>() where T : class, IEntity;
|
||||||
|
|
||||||
|
/// Get one entity with specific <paramref name="id"/> from storage
|
||||||
|
/// <param name="id">Identifier of entity</param>
|
||||||
|
/// <param name="cancellationToken">Cancellation Token</param>
|
||||||
|
/// <typeparam name="T">Type of entity</typeparam>
|
||||||
|
/// <returns>Entity or null if not found</returns>
|
||||||
|
Task<T?> GetOneAsync<T>(Guid id, CancellationToken cancellationToken) where T : class, IEntity;
|
||||||
|
}
|
||||||
|
}
|
||||||
9
SchengenVisaApi/Infrastructure/Database/IUnitOfWork.cs
Normal file
9
SchengenVisaApi/Infrastructure/Database/IUnitOfWork.cs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
namespace Infrastructure.Database
|
||||||
|
{
|
||||||
|
public interface IUnitOfWork
|
||||||
|
{
|
||||||
|
/// Save changes in data storage
|
||||||
|
/// <param name="cancellationToken">Cancellation Token</param>
|
||||||
|
Task SaveAsync(CancellationToken cancellationToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
25
SchengenVisaApi/Infrastructure/Database/IWriter.cs
Normal file
25
SchengenVisaApi/Infrastructure/Database/IWriter.cs
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
using Domains;
|
||||||
|
|
||||||
|
namespace Infrastructure.Database
|
||||||
|
{
|
||||||
|
/// Writes data to data storage
|
||||||
|
/// <remarks><see cref="IUnitOfWork"/> should be used to save changes</remarks>
|
||||||
|
public interface IWriter
|
||||||
|
{
|
||||||
|
/// Add <paramref name="entity"/> to data storage
|
||||||
|
/// <param name="entity">Entity to add</param>
|
||||||
|
/// <param name="cancellationToken">Cancellation Token</param>
|
||||||
|
/// <typeparam name="T">Entity type</typeparam>
|
||||||
|
Task AddAsync<T>(T entity, CancellationToken cancellationToken) where T : class, IEntity;
|
||||||
|
|
||||||
|
/// Update <paramref name="entity"/> in data storage
|
||||||
|
/// <param name="entity">Entity to update</param>
|
||||||
|
/// <typeparam name="T">Entity type</typeparam>
|
||||||
|
void Update<T>(T entity) where T : class, IEntity;
|
||||||
|
|
||||||
|
/// Remove <paramref name="entity"/> from data storage
|
||||||
|
/// <param name="entity">Entity to remove</param>
|
||||||
|
/// <typeparam name="T">Entity type</typeparam>
|
||||||
|
void Remove<T>(T entity) where T : class, IEntity;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,4 +10,13 @@
|
|||||||
<ProjectReference Include="..\ApplicationLayer\ApplicationLayer.csproj" />
|
<ProjectReference Include="..\ApplicationLayer\ApplicationLayer.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.0-preview.7.24405.3" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.0-preview.7.24405.3" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Database\Repositories\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
Reference in New Issue
Block a user