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