Models
This commit is contained in:
		
							
								
								
									
										47
									
								
								SchengenVisaApi/Domains/ApplicantDomain/Applicant.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								SchengenVisaApi/Domains/ApplicantDomain/Applicant.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| using Domains.Common; | ||||
|  | ||||
| namespace Domains.ApplicantDomain | ||||
| { | ||||
|     /// Model of an applicant | ||||
|     public class Applicant : IEntity | ||||
|     { | ||||
|         /// Unique identifier of the <see cref="Applicant"/> | ||||
|         public Guid Id { get; set; } | ||||
|  | ||||
|         /// Full name of the <see cref="Applicant"/> | ||||
|         public Name Name { get; set; } = null!; | ||||
|  | ||||
|         /// Date of birth of the <see cref="Applicant"/> | ||||
|         public DateOnly BirthDate { get; set; } | ||||
|  | ||||
|         /// <see cref="Country"/> of birth of the <see cref="Applicant"/> | ||||
|         public Country CountryOfBirth { get; set; } = null!; | ||||
|  | ||||
|         /// <see cref="City"/> of birth of the <see cref="Applicant"/> | ||||
|         public City CityOfBirth { get; set; } = null!; | ||||
|  | ||||
|         /// Citizenship of <see cref="Applicant"/> | ||||
|         public string Citizenship { get; set; } = null!; | ||||
|  | ||||
|         /// Citizenship by birth of <see cref="Applicant"/> | ||||
|         public string CitizenshipByBirth { get; set; } = null!; | ||||
|  | ||||
|         /// Gender of <see cref="Applicant"/> | ||||
|         public Gender Gender { get; set; } | ||||
|  | ||||
|         /// Marital status of <see cref="Applicant"/> | ||||
|         public MaritalStatus MaritalStatus { get; set; } | ||||
|  | ||||
|         /// Full name of the <see cref="Applicant"/>'s father | ||||
|         public Name FatherName { get; set; } = null!; | ||||
|  | ||||
|         /// Full name of the <see cref="Applicant"/>'s mother | ||||
|         public Name MotherName { get; set; } = null!; | ||||
|  | ||||
|         /// Place of <see cref="Applicant"/>'s work | ||||
|         public PlaceOfWork PlaceOfWork { get; set; } = null!; | ||||
|  | ||||
|         /// Is <see cref="Applicant"/> a non-resident | ||||
|         public bool IsNonResident { get; set; } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										10
									
								
								SchengenVisaApi/Domains/ApplicantDomain/Gender.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								SchengenVisaApi/Domains/ApplicantDomain/Gender.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| namespace Domains.ApplicantDomain | ||||
| { | ||||
|     public enum Gender | ||||
|     { | ||||
|         Unknown, | ||||
|         Male, | ||||
|         Female, | ||||
|         Turkish | ||||
|     } | ||||
| } | ||||
							
								
								
									
										11
									
								
								SchengenVisaApi/Domains/ApplicantDomain/MaritalStatus.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								SchengenVisaApi/Domains/ApplicantDomain/MaritalStatus.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| namespace Domains.ApplicantDomain | ||||
| { | ||||
|     public enum MaritalStatus | ||||
|     { | ||||
|         Other, | ||||
|         Married, | ||||
|         Unmarried, | ||||
|         Separated, | ||||
|         WidowOrWidower | ||||
|     } | ||||
| } | ||||
							
								
								
									
										13
									
								
								SchengenVisaApi/Domains/ApplicantDomain/Name.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								SchengenVisaApi/Domains/ApplicantDomain/Name.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| namespace Domains.ApplicantDomain | ||||
| { | ||||
|     /// Model of full name | ||||
|     /// <remarks>Owned</remarks> | ||||
|     public class Name | ||||
|     { | ||||
|         public string FirstName { get; set; } = null!; | ||||
|  | ||||
|         public string Surname { get; set; } = null!; | ||||
|  | ||||
|         public string? Patronymic { get; set; } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										21
									
								
								SchengenVisaApi/Domains/ApplicantDomain/Passport.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								SchengenVisaApi/Domains/ApplicantDomain/Passport.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| namespace Domains.ApplicantDomain | ||||
| { | ||||
|     /// Model of passport | ||||
|     public class Passport : IEntity | ||||
|     { | ||||
|         /// Unique identifier of <see cref="Passport"/> | ||||
|         public Guid Id { get; set; } = Guid.NewGuid(); | ||||
|  | ||||
|         /// Number of <see cref="Passport"/> | ||||
|         public string Number { get; set; } | ||||
|  | ||||
|         /// Issuing authority of <see cref="Passport"/> | ||||
|         public string Issuer { get; set; } | ||||
|  | ||||
|         /// Date of issue | ||||
|         public DateOnly IssueDate { get; set; } | ||||
|  | ||||
|         /// Date when the <see cref="Passport"/> expires | ||||
|         public DateOnly ExpirationDate { get; set; } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										19
									
								
								SchengenVisaApi/Domains/ApplicantDomain/PlaceOfWork.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								SchengenVisaApi/Domains/ApplicantDomain/PlaceOfWork.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| using Domains.Common; | ||||
|  | ||||
| namespace Domains.ApplicantDomain | ||||
| { | ||||
|     public class PlaceOfWork : IEntity | ||||
|     { | ||||
|         /// Unique identifier of <see cref="PlaceOfWork"/> | ||||
|         public Guid Id { get; private set; } = Guid.NewGuid(); | ||||
|  | ||||
|         /// Name of hirer | ||||
|         public string Name { get; set; } = null!; | ||||
|  | ||||
|         /// <see cref="Domains.Common.Address"/> of hirer | ||||
|         public Address Address { get; set; } = null!; | ||||
|  | ||||
|         /// Phone number of hirer | ||||
|         public string PhoneNum { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										19
									
								
								SchengenVisaApi/Domains/Common/Address.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								SchengenVisaApi/Domains/Common/Address.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| namespace Domains.Common | ||||
| { | ||||
|     /// Model of address | ||||
|     /// <remarks>Owned</remarks> | ||||
|     public class Address | ||||
|     { | ||||
|         /// Country part of address | ||||
|         public Country Country { get; set; } = null!; | ||||
|  | ||||
|         /// City part of address | ||||
|         public City City { get; set; } = null!; | ||||
|  | ||||
|         /// Street part of address | ||||
|         public string Street { get; set; } = null!; | ||||
|  | ||||
|         /// Building part of address | ||||
|         public string Building { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								SchengenVisaApi/Domains/Common/City.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								SchengenVisaApi/Domains/Common/City.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| namespace Domains.Common | ||||
| { | ||||
|     /// Model of a city | ||||
|     public class City : IEntity | ||||
|     { | ||||
|         /// Unique identifier of the city | ||||
|         public Guid Id { get; private set; } = Guid.NewGuid(); | ||||
|  | ||||
|         /// Name of the city | ||||
|         public string Name { get; set; } = null!; | ||||
|  | ||||
|         /// <see cref="Domains.Common.Country"/> in which the city is located | ||||
|         public Country Country { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								SchengenVisaApi/Domains/Common/Country.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								SchengenVisaApi/Domains/Common/Country.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| namespace Domains.Common | ||||
| { | ||||
|     /// Model of a country | ||||
|     public class Country : IEntity | ||||
|     { | ||||
|         /// Name of the country | ||||
|         public string Name { get; set; } = null!; | ||||
|  | ||||
|         /// Located in Schengen area | ||||
|         public bool IsSchengen { get; set; } | ||||
|  | ||||
|         /// List of <see cref="City"/> that country have | ||||
|         public List<City> Cities { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										9
									
								
								SchengenVisaApi/Domains/Domains.csproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								SchengenVisaApi/Domains/Domains.csproj
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| <Project Sdk="Microsoft.NET.Sdk"> | ||||
|  | ||||
|     <PropertyGroup> | ||||
|         <TargetFramework>net8.0</TargetFramework> | ||||
|         <ImplicitUsings>enable</ImplicitUsings> | ||||
|         <Nullable>enable</Nullable> | ||||
|     </PropertyGroup> | ||||
|  | ||||
| </Project> | ||||
							
								
								
									
										5
									
								
								SchengenVisaApi/Domains/IEntity.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								SchengenVisaApi/Domains/IEntity.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| namespace Domains | ||||
| { | ||||
|     /// Interface that every entity should inherit from | ||||
|     public interface IEntity { } | ||||
| } | ||||
							
								
								
									
										20
									
								
								SchengenVisaApi/Domains/VisaApplicationDomain/PastVisa.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								SchengenVisaApi/Domains/VisaApplicationDomain/PastVisa.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| using Domains.ApplicantDomain; | ||||
|  | ||||
| namespace Domains.VisaApplicationDomain | ||||
| { | ||||
|     /// Visa that <see cref="Applicant"/> already had | ||||
|     public class PastVisa : IEntity | ||||
|     { | ||||
|         /// Unique identifier of <see cref="PastVisa"/> | ||||
|         public Guid Id { get; private set; } = Guid.NewGuid(); | ||||
|  | ||||
|         /// Date of issue | ||||
|         public DateOnly IssueDate { get; set; } | ||||
|  | ||||
|         /// Name of visa | ||||
|         public string Name { get; set; } = null!; | ||||
|  | ||||
|         /// Date when visa expires | ||||
|         public DateOnly ExpirationDate { get; set; } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										17
									
								
								SchengenVisaApi/Domains/VisaApplicationDomain/PastVisit.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								SchengenVisaApi/Domains/VisaApplicationDomain/PastVisit.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| using Domains.ApplicantDomain; | ||||
|  | ||||
| namespace Domains.VisaApplicationDomain | ||||
| { | ||||
|     /// Visit in a Schengen country that <see cref="Applicant"/> already had | ||||
|     public class PastVisit : IEntity | ||||
|     { | ||||
|         /// Unique identifier of <see cref="PastVisit"/> | ||||
|         public Guid Id { get; private set; } = Guid.NewGuid(); | ||||
|  | ||||
|         /// First day of <see cref="PastVisit"/> | ||||
|         public DateOnly StartDate { get; set; } | ||||
|  | ||||
|         /// Last day of <see cref="PastVisit"/> | ||||
|         public DateOnly EndDate { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,13 @@ | ||||
| namespace Domains.VisaApplicationDomain | ||||
| { | ||||
|     /// Permission to enter the destination country | ||||
|     /// <remarks>Owned</remarks> | ||||
|     public class PermissionToDestCountry | ||||
|     { | ||||
|         /// Date when <see cref="PermissionToDestCountry"/> expires | ||||
|         public DateOnly ExpirationDate { get; set; } | ||||
|  | ||||
|         /// Issuing authority | ||||
|         public string Issuer { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,12 @@ | ||||
| namespace Domains.VisaApplicationDomain | ||||
| { | ||||
|     /// Permission to enter a country the issuer wants to come from | ||||
|     public class ReentryPermit : IEntity | ||||
|     { | ||||
|         /// Unique identifier of <see cref="PastVisa"/> | ||||
|         public Guid Id { get; private set; } = Guid.NewGuid(); | ||||
|  | ||||
|         /// Date when <see cref="ReentryPermit"/> expires | ||||
|         public DateOnly ExpirationDate { get; set; } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,33 @@ | ||||
| using Domains.ApplicantDomain; | ||||
| using Domains.Common; | ||||
|  | ||||
| namespace Domains.VisaApplicationDomain | ||||
| { | ||||
|     /// Model of visit request | ||||
|     public class VisaApplication : IEntity | ||||
|     { | ||||
|         /// Unique identifier of <see cref="VisaApplication"/> | ||||
|         public Guid Id { get; private set; } = Guid.NewGuid(); | ||||
|  | ||||
|         /// Applicant of <see cref="VisaApplication"/> | ||||
|         public Applicant Applicant { get; set; } = null!; | ||||
|  | ||||
|         /// <inheritdoc cref="Domains.VisaApplicationDomain.ReentryPermit"/> | ||||
|         /// <remarks>always null if <see cref="Applicant"/> is not a non-resident</remarks> | ||||
|         public ReentryPermit? ReentryPermit { get; set; } | ||||
|  | ||||
|         /// <see cref="Country"/> that <see cref="Applicant"/> wants to visit | ||||
|         public Country DestinationCountry { get; set; } = null!; | ||||
|  | ||||
|         /// <summary> | ||||
|         /// List of <see cref="PastVisa"/> that applicant had before | ||||
|         /// </summary> | ||||
|         public List<PastVisa> PastVisas { get; set; } = null!; | ||||
|  | ||||
|         /// Permission to enter the destination country of <see cref="Applicant"/> | ||||
|         /// <remarks>always null if <see cref="DestinationCountry"/> is Schengen</remarks> | ||||
|         public PermissionToDestCountry? PermissionToDestCountry { get; set; } | ||||
|  | ||||
|         public List<PastVisit> PastVisits { get; set; } = null!; | ||||
|     } | ||||
| } | ||||
| @@ -2,6 +2,8 @@ | ||||
| Microsoft Visual Studio Solution File, Format Version 12.00 | ||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SchengenVisaApi", "SchengenVisaApi\SchengenVisaApi.csproj", "{BA957CD4-48D1-4B24-A0E0-BA57B84B1DC3}" | ||||
| EndProject | ||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Domains", "Domains\Domains.csproj", "{5DC8BC74-5A1F-48E3-9EB8-6C50CD3D7778}" | ||||
| EndProject | ||||
| Global | ||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
| 		Debug|Any CPU = Debug|Any CPU | ||||
| @@ -12,5 +14,9 @@ Global | ||||
| 		{BA957CD4-48D1-4B24-A0E0-BA57B84B1DC3}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{BA957CD4-48D1-4B24-A0E0-BA57B84B1DC3}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{BA957CD4-48D1-4B24-A0E0-BA57B84B1DC3}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 		{5DC8BC74-5A1F-48E3-9EB8-6C50CD3D7778}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| 		{5DC8BC74-5A1F-48E3-9EB8-6C50CD3D7778}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{5DC8BC74-5A1F-48E3-9EB8-6C50CD3D7778}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{5DC8BC74-5A1F-48E3-9EB8-6C50CD3D7778}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 	EndGlobalSection | ||||
| EndGlobal | ||||
|   | ||||
| @@ -0,0 +1,20 @@ | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
|  | ||||
| namespace SchengenVisaApi.Controllers; | ||||
|  | ||||
| [ApiController] | ||||
| [Route("[controller]")] | ||||
| public class VisaApplicationController : ControllerBase | ||||
| { | ||||
|  | ||||
|     public VisaApplicationController() | ||||
|     { | ||||
|  | ||||
|     } | ||||
|  | ||||
|     [HttpGet] | ||||
|     public void Create() | ||||
|     { | ||||
|         throw new NotImplementedException(); | ||||
|     } | ||||
| } | ||||
| @@ -1,32 +0,0 @@ | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
|  | ||||
| namespace SchengenVisaApi.Controllers; | ||||
|  | ||||
| [ApiController] | ||||
| [Route("[controller]")] | ||||
| public class WeatherForecastController : ControllerBase | ||||
| { | ||||
|     private static readonly string[] Summaries = new[] | ||||
|     { | ||||
|         "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" | ||||
|     }; | ||||
|  | ||||
|     private readonly ILogger<WeatherForecastController> _logger; | ||||
|  | ||||
|     public WeatherForecastController(ILogger<WeatherForecastController> logger) | ||||
|     { | ||||
|         _logger = logger; | ||||
|     } | ||||
|  | ||||
|     [HttpGet(Name = "GetWeatherForecast")] | ||||
|     public IEnumerable<WeatherForecast> Get() | ||||
|     { | ||||
|         return Enumerable.Range(1, 5).Select(index => new WeatherForecast | ||||
|             { | ||||
|                 Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), | ||||
|                 TemperatureC = Random.Shared.Next(-20, 55), | ||||
|                 Summary = Summaries[Random.Shared.Next(Summaries.Length)] | ||||
|             }) | ||||
|             .ToArray(); | ||||
|     } | ||||
| } | ||||
| @@ -1,26 +1,24 @@ | ||||
| using System.Reflection; | ||||
|  | ||||
| namespace SchengenVisaApi; | ||||
|  | ||||
| #pragma warning disable CS1591 | ||||
| public class Program | ||||
| { | ||||
|     public static void Main(string[] args) | ||||
|     { | ||||
|         var builder = WebApplication.CreateBuilder(args); | ||||
|  | ||||
|         // Add services to the container. | ||||
|  | ||||
|         builder.Services.AddControllers(); | ||||
|         // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle | ||||
|         builder.Services.AddEndpointsApiExplorer(); | ||||
|         builder.Services.AddSwaggerGen(); | ||||
|         builder.Services.AddSwaggerGen(options => | ||||
|         { | ||||
|             var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; | ||||
|             options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename)); | ||||
|         }); | ||||
|  | ||||
|         var app = builder.Build(); | ||||
|  | ||||
|         // Configure the HTTP request pipeline. | ||||
|         if (app.Environment.IsDevelopment()) | ||||
|         { | ||||
|             app.UseSwagger(); | ||||
|             app.UseSwaggerUI(); | ||||
|         } | ||||
|  | ||||
|         app.UseHttpsRedirection(); | ||||
|  | ||||
| @@ -31,4 +29,5 @@ public class Program | ||||
|  | ||||
|         app.Run(); | ||||
|     } | ||||
| } | ||||
| } | ||||
| #pragma warning restore CS1591 | ||||
|   | ||||
| @@ -5,6 +5,7 @@ | ||||
|         <Nullable>enable</Nullable> | ||||
|         <ImplicitUsings>enable</ImplicitUsings> | ||||
|         <InvariantGlobalization>true</InvariantGlobalization> | ||||
|         <GenerateDocumentationFile>true</GenerateDocumentationFile> | ||||
|     </PropertyGroup> | ||||
|  | ||||
|     <ItemGroup> | ||||
|   | ||||
| @@ -1,12 +0,0 @@ | ||||
| namespace SchengenVisaApi; | ||||
|  | ||||
| public class WeatherForecast | ||||
| { | ||||
|     public DateOnly Date { get; set; } | ||||
|  | ||||
|     public int TemperatureC { get; set; } | ||||
|  | ||||
|     public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); | ||||
|  | ||||
|     public string? Summary { get; set; } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user