diff --git a/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/AddressConfiguration.cs b/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/AddressConfiguration.cs
index 5db0dc6..f250e3d 100644
--- a/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/AddressConfiguration.cs
+++ b/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/AddressConfiguration.cs
@@ -1,18 +1,23 @@
-using Domains.ApplicantDomain;
+using Domains;
+using Domains.ApplicantDomain;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace Infrastructure.Database.Applicants.Configuration;
-public class AddressConfiguration : IEntityTypeConfiguration
+public static class AddressConfiguration where T : class, IEntity
{
- public void Configure(EntityTypeBuilder entity)
+ public static void Configure(OwnedNavigationBuilder entity)
{
+ entity.HasOne(a => a.Country).WithMany().OnDelete(DeleteBehavior.Restrict);
+ entity.HasOne(a => a.City).WithMany().OnDelete(DeleteBehavior.Restrict);
+
entity.Property(p => p.Street)
.IsUnicode(false)
.HasMaxLength(100);
+
entity.Property(p => p.Building)
.IsUnicode(false)
.HasMaxLength(10);
}
-}
\ No newline at end of file
+}
diff --git a/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/ApplicantConfiguration.cs b/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/ApplicantConfiguration.cs
index cc3bca4..cadf620 100644
--- a/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/ApplicantConfiguration.cs
+++ b/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/ApplicantConfiguration.cs
@@ -9,11 +9,13 @@ public class ApplicantConfiguration : IEntityTypeConfiguration
public void Configure(EntityTypeBuilder entity)
{
entity.ToTable("Applicants");
+ entity.OwnsOne(p => p.Name, NameConfiguration.Configure);
+ entity.OwnsOne(p => p.FatherName, NameConfiguration.Configure);
+ entity.OwnsOne(p => p.MotherName, NameConfiguration.Configure);
+ entity.OwnsOne(p => p.Passport, PassportConfiguration.Configure);
- entity.OwnsOne(p => p.Name);
- entity.OwnsOne(p => p.FatherName);
- entity.OwnsOne(p => p.MotherName);
- entity.OwnsOne(p => p.Passport);
+ entity.HasOne(a => a.CityOfBirth).WithMany().OnDelete(DeleteBehavior.Restrict);
+ entity.HasOne(a => a.CountryOfBirth).WithMany().OnDelete(DeleteBehavior.Restrict);
entity.Property(p => p.Citizenship)
.IsUnicode(false)
@@ -23,4 +25,4 @@ public class ApplicantConfiguration : IEntityTypeConfiguration
.IsUnicode(false)
.HasMaxLength(30);
}
-}
\ No newline at end of file
+}
diff --git a/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/NameConfiguration.cs b/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/NameConfiguration.cs
index e13842a..2dd6923 100644
--- a/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/NameConfiguration.cs
+++ b/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/NameConfiguration.cs
@@ -1,12 +1,12 @@
-using Domains.ApplicantDomain;
-using Microsoft.EntityFrameworkCore;
+using Domains;
+using Domains.ApplicantDomain;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace Infrastructure.Database.Applicants.Configuration;
-public class NameConfiguration : IEntityTypeConfiguration
+public static class NameConfiguration where T : class, IEntity
{
- public void Configure(EntityTypeBuilder entity)
+ public static void Configure(OwnedNavigationBuilder entity)
{
entity.Property(p => p.FirstName)
.IsUnicode(false)
@@ -20,4 +20,4 @@ public class NameConfiguration : IEntityTypeConfiguration
.IsUnicode(false)
.HasMaxLength(50);
}
-}
\ No newline at end of file
+}
diff --git a/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/PassportConfiguration.cs b/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/PassportConfiguration.cs
index 18ef216..faa35f1 100644
--- a/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/PassportConfiguration.cs
+++ b/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/PassportConfiguration.cs
@@ -1,12 +1,12 @@
-using Domains.ApplicantDomain;
-using Microsoft.EntityFrameworkCore;
+using Domains;
+using Domains.ApplicantDomain;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace Infrastructure.Database.Applicants.Configuration;
-public class PassportConfiguration : IEntityTypeConfiguration
+public static class PassportConfiguration where T : class, IEntity
{
- public void Configure(EntityTypeBuilder entity)
+ public static void Configure(OwnedNavigationBuilder entity)
{
entity.Property(p => p.Number)
.IsUnicode(false)
@@ -16,4 +16,4 @@ public class PassportConfiguration : IEntityTypeConfiguration
.IsUnicode(false)
.HasMaxLength(200);
}
-}
\ No newline at end of file
+}
diff --git a/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/PlaceOfWorkConfiguration.cs b/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/PlaceOfWorkConfiguration.cs
index 9336d04..f339d9b 100644
--- a/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/PlaceOfWorkConfiguration.cs
+++ b/SchengenVisaApi/Infrastructure/Database/Applicants/Configuration/PlaceOfWorkConfiguration.cs
@@ -8,7 +8,7 @@ public class PlaceOfWorkConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder entity)
{
- entity.OwnsOne(p => p.Address);
+ entity.OwnsOne(p => p.Address, AddressConfiguration.Configure);
entity.Property(p => p.Name)
.IsUnicode(false)
@@ -18,4 +18,4 @@ public class PlaceOfWorkConfiguration : IEntityTypeConfiguration
.IsUnicode(false)
.HasMaxLength(20);
}
-}
\ No newline at end of file
+}
diff --git a/SchengenVisaApi/Infrastructure/Database/Applicants/Repositories/ApplicantsRepository.cs b/SchengenVisaApi/Infrastructure/Database/Applicants/Repositories/ApplicantsRepository.cs
index 51d0da2..0885dbe 100644
--- a/SchengenVisaApi/Infrastructure/Database/Applicants/Repositories/ApplicantsRepository.cs
+++ b/SchengenVisaApi/Infrastructure/Database/Applicants/Repositories/ApplicantsRepository.cs
@@ -1,4 +1,4 @@
-using ApplicationLayer.Applicants;
+using ApplicationLayer.Applicants.NeededServices;
using Domains.ApplicantDomain;
using Infrastructure.Database.Generic;
using Microsoft.EntityFrameworkCore;
diff --git a/SchengenVisaApi/Infrastructure/Database/DbContext.cs b/SchengenVisaApi/Infrastructure/Database/DbContext.cs
index 2d21103..021bc66 100644
--- a/SchengenVisaApi/Infrastructure/Database/DbContext.cs
+++ b/SchengenVisaApi/Infrastructure/Database/DbContext.cs
@@ -4,8 +4,7 @@ using Microsoft.EntityFrameworkCore;
namespace Infrastructure.Database;
-public class DbContext(DbContextOptions opts)
- : Microsoft.EntityFrameworkCore.DbContext(opts), IGenericWriter, IGenericReader, IUnitOfWork
+public class DbContext(DbContextOptions opts) : Microsoft.EntityFrameworkCore.DbContext(opts), IGenericWriter, IGenericReader, IUnitOfWork
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
@@ -36,4 +35,4 @@ public class DbContext(DbContextOptions opts)
{
await SaveChangesAsync(cancellationToken);
}
-}
\ No newline at end of file
+}
diff --git a/SchengenVisaApi/Infrastructure/Database/GeneralExceptions/EntityNotFoundByIdException.cs b/SchengenVisaApi/Infrastructure/Database/GeneralExceptions/EntityNotFoundByIdException.cs
index b494c87..727fc95 100644
--- a/SchengenVisaApi/Infrastructure/Database/GeneralExceptions/EntityNotFoundByIdException.cs
+++ b/SchengenVisaApi/Infrastructure/Database/GeneralExceptions/EntityNotFoundByIdException.cs
@@ -1,10 +1,9 @@
using Domains;
-namespace Infrastructure.Database.GeneralExceptions
-{
- /// Exception to throw when entity not found
- /// Identifier of entity
- /// Type of entity
- public class EntityNotFoundByIdException(Guid id) : EntityNotFoundException($"Entity {typeof(T).Name} with id {id} not found.")
- where T : class, IEntity;
-}
+namespace Infrastructure.Database.GeneralExceptions;
+
+/// Exception to throw when entity not found
+/// Identifier of entity
+/// Type of entity
+public class EntityNotFoundByIdException(Guid id) : EntityNotFoundException($"Entity {typeof(T).Name} with id {id} not found.")
+ where T : class, IEntity;
\ No newline at end of file
diff --git a/SchengenVisaApi/Infrastructure/Database/Generic/GenericRepository.cs b/SchengenVisaApi/Infrastructure/Database/Generic/GenericRepository.cs
index 836494d..48d716d 100644
--- a/SchengenVisaApi/Infrastructure/Database/Generic/GenericRepository.cs
+++ b/SchengenVisaApi/Infrastructure/Database/Generic/GenericRepository.cs
@@ -1,4 +1,4 @@
-using ApplicationLayer.Common;
+using ApplicationLayer.GeneralNeededServices;
using Domains;
using Infrastructure.Database.GeneralExceptions;
using Microsoft.EntityFrameworkCore;
@@ -17,8 +17,8 @@ public abstract class GenericRepository(IGenericReader reader, IGenericWriter
public async Task> GetAllAsync(CancellationToken cancellationToken)
=> await LoadDomain().ToListAsync(cancellationToken);
- ///
- public async Task GetOneAsync(Guid id, CancellationToken cancellationToken)
+ ///
+ public async Task GetByIdAsync(Guid id, CancellationToken cancellationToken)
{
var result = await LoadDomain().SingleOrDefaultAsync(a => a.Id == id, cancellationToken);
return result ?? throw new EntityNotFoundByIdException(id);
@@ -31,7 +31,7 @@ public abstract class GenericRepository(IGenericReader reader, IGenericWriter
///
public async Task UpdateAsync(T entity, CancellationToken cancellationToken)
{
- await GetOneAsync(entity.Id, cancellationToken);
+ await GetByIdAsync(entity.Id, cancellationToken);
writer.Update(entity);
}
diff --git a/SchengenVisaApi/Infrastructure/Database/Locations/Repositories/Cities/CitiesRepository.cs b/SchengenVisaApi/Infrastructure/Database/Locations/Repositories/Cities/CitiesRepository.cs
index 7849fae..75a1302 100644
--- a/SchengenVisaApi/Infrastructure/Database/Locations/Repositories/Cities/CitiesRepository.cs
+++ b/SchengenVisaApi/Infrastructure/Database/Locations/Repositories/Cities/CitiesRepository.cs
@@ -1,7 +1,6 @@
-using ApplicationLayer.Locations;
+using ApplicationLayer.Locations.NeededServices;
using Domains.LocationDomain;
using Infrastructure.Database.Generic;
-using Infrastructure.Database.Locations.Repositories.Cities.Exceptions;
using Microsoft.EntityFrameworkCore;
namespace Infrastructure.Database.Locations.Repositories.Cities;
@@ -13,12 +12,4 @@ public sealed class CitiesRepository(IGenericReader reader, IGenericWriter write
{
return base.LoadDomain().Include(c => c.Country);
}
-
- ///
- /// city with provided name and country not found
- public async Task GetByNameAsync(string name, string countryName, CancellationToken cancellationToken)
- {
- var result = await LoadDomain().Where(c => c.Name == name && c.Country.Name == countryName).SingleOrDefaultAsync(cancellationToken);
- return result ?? throw new CityNotFoundByNameException(name, countryName);
- }
}
diff --git a/SchengenVisaApi/Infrastructure/Database/Locations/Repositories/Cities/Exceptions/CityNotFoundByNameException.cs b/SchengenVisaApi/Infrastructure/Database/Locations/Repositories/Cities/Exceptions/CityNotFoundByNameException.cs
deleted file mode 100644
index 55ad91d..0000000
--- a/SchengenVisaApi/Infrastructure/Database/Locations/Repositories/Cities/Exceptions/CityNotFoundByNameException.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using Domains.LocationDomain;
-using Infrastructure.Database.GeneralExceptions;
-
-namespace Infrastructure.Database.Locations.Repositories.Cities.Exceptions
-{
- /// Exception to throw when city cannot be found by its name and its country name
- /// Name of the city
- /// name of the city's country
- public class CityNotFoundByNameException(string name, string countryName)
- : EntityNotFoundException($"{name} with country {countryName} not found.");
-}
diff --git a/SchengenVisaApi/Infrastructure/Database/Locations/Repositories/Countries/CountriesRepository.cs b/SchengenVisaApi/Infrastructure/Database/Locations/Repositories/Countries/CountriesRepository.cs
index 7c6159d..b27908d 100644
--- a/SchengenVisaApi/Infrastructure/Database/Locations/Repositories/Countries/CountriesRepository.cs
+++ b/SchengenVisaApi/Infrastructure/Database/Locations/Repositories/Countries/CountriesRepository.cs
@@ -1,4 +1,4 @@
-using ApplicationLayer.Locations;
+using ApplicationLayer.Locations.NeededServices;
using Domains.LocationDomain;
using Infrastructure.Database.Generic;
using Microsoft.EntityFrameworkCore;
diff --git a/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/PastVisaConfiguration.cs b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/PastVisaConfiguration.cs
index 41cfb70..4741ddc 100644
--- a/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/PastVisaConfiguration.cs
+++ b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/PastVisaConfiguration.cs
@@ -1,15 +1,15 @@
-using Domains.VisaApplicationDomain;
-using Microsoft.EntityFrameworkCore;
+using Domains;
+using Domains.VisaApplicationDomain;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace Infrastructure.Database.VisaApplications.Configuration;
-public class PastVisaConfiguration : IEntityTypeConfiguration
+public static class PastVisaConfiguration where T : class, IEntity
{
- public void Configure(EntityTypeBuilder entity)
+ public static void Configure(OwnedNavigationBuilder entity)
{
entity.Property(p => p.Name)
.IsUnicode(false)
.HasMaxLength(70);
}
-}
\ No newline at end of file
+}
diff --git a/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/PastVisitConfiguration.cs b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/PastVisitConfiguration.cs
new file mode 100644
index 0000000..9956633
--- /dev/null
+++ b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/PastVisitConfiguration.cs
@@ -0,0 +1,15 @@
+using Domains;
+using Domains.VisaApplicationDomain;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+
+namespace Infrastructure.Database.VisaApplications.Configuration
+{
+ public static class PastVisitConfiguration where T : class, IEntity
+ {
+ public static void Configure(OwnedNavigationBuilder entity)
+ {
+ entity.HasOne(p => p.DestinationCountry).WithMany().OnDelete(DeleteBehavior.Restrict);
+ }
+ }
+}
diff --git a/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/PermissionToDestCountryConfiguration.cs b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/PermissionToDestCountryConfiguration.cs
index 9f02124..11df404 100644
--- a/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/PermissionToDestCountryConfiguration.cs
+++ b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/PermissionToDestCountryConfiguration.cs
@@ -1,15 +1,15 @@
-using Domains.VisaApplicationDomain;
-using Microsoft.EntityFrameworkCore;
+using Domains;
+using Domains.VisaApplicationDomain;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace Infrastructure.Database.VisaApplications.Configuration;
-public class PermissionToDestCountryConfiguration : IEntityTypeConfiguration
+public static class PermissionToDestCountryConfiguration where T : class, IEntity
{
- public void Configure(EntityTypeBuilder entity)
+ public static void Configure(OwnedNavigationBuilder entity)
{
entity.Property(p => p.Issuer)
.IsUnicode(false)
.HasMaxLength(200);
}
-}
\ No newline at end of file
+}
diff --git a/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/ReentryPermitConfiguration.cs b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/ReentryPermitConfiguration.cs
index 8e834b5..7bc1ba6 100644
--- a/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/ReentryPermitConfiguration.cs
+++ b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/ReentryPermitConfiguration.cs
@@ -1,15 +1,15 @@
-using Domains.VisaApplicationDomain;
-using Microsoft.EntityFrameworkCore;
+using Domains;
+using Domains.VisaApplicationDomain;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace Infrastructure.Database.VisaApplications.Configuration;
-public class ReentryPermitConfiguration : IEntityTypeConfiguration
+public static class ReentryPermitConfiguration where T : class, IEntity
{
- public void Configure(EntityTypeBuilder entity)
+ public static void Configure(OwnedNavigationBuilder entity)
{
entity.Property(p => p.Number)
.IsUnicode(false)
.HasMaxLength(25);
}
-}
\ No newline at end of file
+}
diff --git a/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/VisaApplicationConfiguration.cs b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/VisaApplicationConfiguration.cs
index 16d23d2..efadf98 100644
--- a/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/VisaApplicationConfiguration.cs
+++ b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Configuration/VisaApplicationConfiguration.cs
@@ -10,14 +10,16 @@ public class VisaApplicationConfiguration : IEntityTypeConfiguration va.ReentryPermit, ReentryPermitConfiguration.Configure);
+ entity.OwnsOne(va => va.PermissionToDestCountry, PermissionToDestCountryConfiguration.Configure);
+ entity.OwnsMany(va => va.PastVisits, PastVisitConfiguration.Configure).ToTable("PastVisits");
+ entity.OwnsMany(va => va.PastVisas).ToTable("PastVisas");
+
+ entity.HasOne(va => va.DestinationCountry).WithMany().OnDelete(DeleteBehavior.Restrict);
+
entity.HasOne(va => va.Applicant)
- .WithMany(a => a.VisaApplications)
+ .WithMany()
.HasForeignKey(va => va.ApplicantId)
.IsRequired();
-
- entity.OwnsOne(p => p.ReentryPermit);
- entity.OwnsOne(p => p.PermissionToDestCountry);
- entity.OwnsMany(p => p.PastVisits).ToTable("PastVisits");
- entity.OwnsMany(p => p.PastVisas).ToTable("PastVisas");
}
}
diff --git a/SchengenVisaApi/Infrastructure/Database/VisaApplications/Repositories/VisaApplicationsRepository.cs b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Repositories/VisaApplicationsRepository.cs
index f23217b..e213453 100644
--- a/SchengenVisaApi/Infrastructure/Database/VisaApplications/Repositories/VisaApplicationsRepository.cs
+++ b/SchengenVisaApi/Infrastructure/Database/VisaApplications/Repositories/VisaApplicationsRepository.cs
@@ -1,4 +1,4 @@
-using ApplicationLayer.VisaApplications;
+using ApplicationLayer.VisaApplications.NeededServices;
using Domains.VisaApplicationDomain;
using Infrastructure.Database.Generic;
using Microsoft.EntityFrameworkCore;