aboutsummaryrefslogtreecommitdiff
path: root/src/Web/DevHive.Web/Configurations
diff options
context:
space:
mode:
Diffstat (limited to 'src/Web/DevHive.Web/Configurations')
-rw-r--r--src/Web/DevHive.Web/Configurations/Extensions/ConfigureAutoMapper.cs26
-rw-r--r--src/Web/DevHive.Web/Configurations/Extensions/ConfigureDatabase.cs98
-rw-r--r--src/Web/DevHive.Web/Configurations/Extensions/ConfigureDependencyInjection.cs51
-rw-r--r--src/Web/DevHive.Web/Configurations/Extensions/ConfigureExceptionHandlerMiddleware.cs36
-rw-r--r--src/Web/DevHive.Web/Configurations/Extensions/ConfigureJwt.cs46
-rw-r--r--src/Web/DevHive.Web/Configurations/Extensions/ConfigureSwagger.cs65
-rw-r--r--src/Web/DevHive.Web/Configurations/Mapping/CommentMappings.cs17
-rw-r--r--src/Web/DevHive.Web/Configurations/Mapping/FeedMappings.cs18
-rw-r--r--src/Web/DevHive.Web/Configurations/Mapping/LanguageMappings.cs23
-rw-r--r--src/Web/DevHive.Web/Configurations/Mapping/PostMappings.cs17
-rw-r--r--src/Web/DevHive.Web/Configurations/Mapping/ProfilePictureMappings.cs16
-rw-r--r--src/Web/DevHive.Web/Configurations/Mapping/RatingMappings.cs18
-rw-r--r--src/Web/DevHive.Web/Configurations/Mapping/RoleMappings.cs21
-rw-r--r--src/Web/DevHive.Web/Configurations/Mapping/TechnologyMappings.cs23
-rw-r--r--src/Web/DevHive.Web/Configurations/Mapping/UserMappings.cs30
15 files changed, 505 insertions, 0 deletions
diff --git a/src/Web/DevHive.Web/Configurations/Extensions/ConfigureAutoMapper.cs b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureAutoMapper.cs
new file mode 100644
index 0000000..cd5679f
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureAutoMapper.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+using AutoMapper;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace DevHive.Web.Configurations.Extensions
+{
+ public static class ConfigureAutoMapper
+ {
+ public static void AutoMapperConfiguration(this IServiceCollection services)
+ {
+ services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
+ }
+
+ public static void UseAutoMapperConfiguration(this IApplicationBuilder app)
+ {
+ _ = new MapperConfiguration(cfg =>
+ {
+ cfg.AllowNullCollections = true;
+ });
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Extensions/ConfigureDatabase.cs b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureDatabase.cs
new file mode 100644
index 0000000..b4c49b4
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureDatabase.cs
@@ -0,0 +1,98 @@
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
+using DevHive.Data.Models;
+using Microsoft.AspNetCore.Identity;
+using Microsoft.AspNetCore.Builder;
+using System;
+using Microsoft.AspNetCore.Authentication.JwtBearer;
+using DevHive.Data;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace DevHive.Web.Configurations.Extensions
+{
+ public static class DatabaseExtensions
+ {
+ public static void DatabaseConfiguration(this IServiceCollection services, IConfiguration configuration)
+ {
+ services.AddDbContext<DevHiveContext>(options =>
+ {
+ // options.EnableSensitiveDataLogging(true);
+ options.UseNpgsql(configuration.GetConnectionString("DEV"), options =>
+ {
+ options.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery);
+ });
+ });
+
+ services.AddIdentity<User, Role>()
+ .AddRoles<Role>()
+ .AddEntityFrameworkStores<DevHiveContext>();
+
+ services.Configure<IdentityOptions>(options =>
+ {
+ options.User.RequireUniqueEmail = true;
+
+ options.Password.RequireDigit = true;
+ options.Password.RequiredLength = 5;
+ options.Password.RequiredUniqueChars = 0;
+ options.Password.RequireLowercase = false;
+ options.Password.RequireNonAlphanumeric = false;
+ options.Password.RequireUppercase = false;
+
+ options.Lockout.AllowedForNewUsers = true;
+ options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
+ options.Lockout.MaxFailedAccessAttempts = 5;
+ });
+
+ services.AddAuthorization(options =>
+ {
+ options.AddPolicy("User", options =>
+ {
+ options.RequireAuthenticatedUser();
+ options.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
+ options.RequireRole("User");
+ });
+
+ options.AddPolicy("Administrator", options =>
+ {
+ options.RequireAuthenticatedUser();
+ options.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
+ options.RequireRole("Admin");
+ });
+ });
+ }
+
+ public static void UseDatabaseConfiguration(this IApplicationBuilder app)
+ {
+ app.UseHttpsRedirection();
+ app.UseRouting();
+
+ app.UseAuthentication();
+ app.UseAuthorization();
+
+ using var serviceScope = app.ApplicationServices.CreateScope();
+ using var dbContext = serviceScope.ServiceProvider.GetRequiredService<DevHiveContext>();
+
+ dbContext.Database.Migrate();
+
+ var roleManager = (RoleManager<Role>)serviceScope.ServiceProvider.GetService(typeof(RoleManager<Role>));
+
+ if (!dbContext.Roles.Any(x => x.Name == Role.DefaultRole))
+ {
+ Role defaultRole = new() { Name = Role.DefaultRole };
+
+ roleManager.CreateAsync(defaultRole).Wait();
+ }
+
+ if (!dbContext.Roles.Any(x => x.Name == Role.AdminRole))
+ {
+ Role adminRole = new() { Name = Role.AdminRole };
+
+ roleManager.CreateAsync(adminRole).Wait();
+ }
+
+ dbContext.SaveChanges();
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Extensions/ConfigureDependencyInjection.cs b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureDependencyInjection.cs
new file mode 100644
index 0000000..f49a335
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureDependencyInjection.cs
@@ -0,0 +1,51 @@
+using System.Text;
+using DevHive.Common.Jwt;
+using DevHive.Common.Jwt.Interfaces;
+using DevHive.Data.Interfaces;
+using DevHive.Data.Repositories;
+using DevHive.Services.Interfaces;
+using DevHive.Services.Services;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace DevHive.Web.Configurations.Extensions
+{
+ public static class ConfigureDependencyInjection
+ {
+ public static void DependencyInjectionConfiguration(this IServiceCollection services, IConfiguration configuration)
+ {
+ services.AddTransient<ILanguageRepository, LanguageRepository>();
+ services.AddTransient<IRoleRepository, RoleRepository>();
+ services.AddTransient<ITechnologyRepository, TechnologyRepository>();
+ services.AddTransient<IPostRepository, PostRepository>();
+ services.AddTransient<ICommentRepository, CommentRepository>();
+ services.AddTransient<IFeedRepository, FeedRepository>();
+ services.AddTransient<IRatingRepository, RatingRepository>();
+ services.AddTransient<IProfilePictureRepository, ProfilePictureRepository>();
+ services.AddTransient<IUserRepository, UserRepository>();
+
+ services.AddTransient<ILanguageService, LanguageService>();
+ services.AddTransient<IRoleService, RoleService>();
+ services.AddTransient<ITechnologyService, TechnologyService>();
+ services.AddTransient<IPostService, PostService>();
+ services.AddTransient<ICommentService, CommentService>();
+ services.AddTransient<IFeedService, FeedService>();
+ services.AddTransient<IRatingService, RatingService>();
+ services.AddTransient<IProfilePictureService, ProfilePictureService>();
+ services.AddTransient<IUserService, UserService>();
+ services.AddTransient<IFriendsService, FriendsService>();
+
+ services.AddTransient<ICloudService, CloudinaryService>(options =>
+ new CloudinaryService(
+ cloudName: configuration.GetSection("Cloud").GetSection("cloudName").Value,
+ apiKey: configuration.GetSection("Cloud").GetSection("apiKey").Value,
+ apiSecret: configuration.GetSection("Cloud").GetSection("apiSecret").Value));
+
+ services.AddSingleton<IJwtService, JwtService>(options =>
+ new JwtService(
+ signingKey: Encoding.ASCII.GetBytes(configuration.GetSection("Jwt").GetSection("signingKey").Value),
+ validationIssuer: configuration.GetSection("Jwt").GetSection("validationIssuer").Value,
+ audience: configuration.GetSection("Jwt").GetSection("audience").Value));
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Extensions/ConfigureExceptionHandlerMiddleware.cs b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureExceptionHandlerMiddleware.cs
new file mode 100644
index 0000000..6885f84
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureExceptionHandlerMiddleware.cs
@@ -0,0 +1,36 @@
+using DevHive.Web.Middleware;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Configuration;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Http;
+
+namespace DevHive.Web.Configurations.Extensions
+{
+ public static class ConfigureExceptionHandlerMiddleware
+ {
+ public static void ConfigureExceptionHandler(this IServiceCollection services, IConfiguration configuration)
+ {
+ services.Configure<ApiBehaviorOptions>(o =>
+ {
+ o.InvalidModelStateResponseFactory = actionContext =>
+ {
+ var problemDetails = new ValidationProblemDetails(actionContext.ModelState)
+ {
+ Status = StatusCodes.Status422UnprocessableEntity
+ };
+
+ return new UnprocessableEntityObjectResult(problemDetails)
+ {
+ ContentTypes = { "application/problem+json" }
+ };
+ };
+ });
+ }
+
+ public static void UseExceptionHandlerMiddlewareConfiguration(this IApplicationBuilder app)
+ {
+ app.UseMiddleware<ExceptionMiddleware>();
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Extensions/ConfigureJwt.cs b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureJwt.cs
new file mode 100644
index 0000000..18127bc
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureJwt.cs
@@ -0,0 +1,46 @@
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Authentication.JwtBearer;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.IdentityModel.Tokens;
+
+namespace DevHive.Web.Configurations.Extensions
+{
+ public static class ConfigureJwt
+ {
+ public static void JWTConfiguration(this IServiceCollection services, IConfiguration configuration)
+ {
+ // Get key from appsettings.json
+ var signingKey = Encoding.ASCII.GetBytes(configuration
+ .GetSection("Jwt")
+ .GetSection("signingKey")
+ .Value);
+
+ // Setup Jwt Authentication
+ services.AddAuthentication(x =>
+ {
+ x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
+ x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
+ })
+ .AddJwtBearer(x =>
+ {
+ x.Events = new JwtBearerEvents
+ {
+ OnTokenValidated = context =>
+ {
+ return Task.CompletedTask;
+ }
+ };
+ x.RequireHttpsMetadata = false;
+ x.SaveToken = true;
+ x.TokenValidationParameters = new TokenValidationParameters
+ {
+ IssuerSigningKey = new SymmetricSecurityKey(signingKey),
+ ValidateIssuer = false,
+ ValidateAudience = false
+ };
+ });
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Extensions/ConfigureSwagger.cs b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureSwagger.cs
new file mode 100644
index 0000000..1b7182c
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Extensions/ConfigureSwagger.cs
@@ -0,0 +1,65 @@
+using System.Linq;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.DependencyInjection;
+using NSwag;
+using NSwag.Generation.Processors.Security;
+
+namespace DevHive.Web.Configurations.Extensions
+{
+ public static class SwaggerExtensions
+ {
+#pragma warning disable S1075
+ private const string LicenseName = "GPL-3.0 License";
+ private const string LicenseUri = "https://github.com/Team-Kaleidoscope/DevHive/blob/main/LICENSE";
+ private const string TermsOfServiceUri = "https://example.com/terms";
+#pragma warning restore S1075
+
+ public static void SwaggerConfiguration(this IServiceCollection services)
+ {
+ services.AddOpenApiDocument(c =>
+ {
+ c.GenerateXmlObjects = true;
+ c.UseControllerSummaryAsTagDescription = true;
+
+ c.AllowNullableBodyParameters = false;
+ c.Description = "DevHive Social Media's API Endpoints";
+
+ c.PostProcess = doc =>
+ {
+ doc.Info.Version = "v0.1";
+ doc.Info.Title = "API";
+ doc.Info.Description = "DevHive Social Media's first official API release";
+ doc.Info.TermsOfService = TermsOfServiceUri;
+ doc.Info.License = new()
+ {
+ Name = LicenseName,
+ Url = LicenseUri
+ };
+ };
+
+ c.AddSecurity("Bearer", Enumerable.Empty<string>(), new()
+ {
+ Type = OpenApiSecuritySchemeType.ApiKey,
+ Name = "Authorization",
+ In = OpenApiSecurityApiKeyLocation.Header,
+ Description = "Type into the textbox: Bearer {your JWT token}."
+ });
+ c.OperationProcessors.Add(new AspNetCoreOperationSecurityScopeProcessor("Bearer"));
+ });
+ }
+
+ public static void UseSwaggerConfiguration(this IApplicationBuilder app)
+ {
+ app.UseOpenApi(c =>
+ {
+ c.DocumentName = "v0.1";
+ });
+ app.UseSwaggerUi3(c =>
+ {
+ c.DocumentTitle = "DevHive API";
+ c.EnableTryItOut = false;
+ c.DocExpansion = "list";
+ });
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Mapping/CommentMappings.cs b/src/Web/DevHive.Web/Configurations/Mapping/CommentMappings.cs
new file mode 100644
index 0000000..b8d6829
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Mapping/CommentMappings.cs
@@ -0,0 +1,17 @@
+using AutoMapper;
+using DevHive.Services.Models.Comment;
+using DevHive.Web.Models.Comment;
+
+namespace DevHive.Web.Configurations.Mapping
+{
+ public class CommentMappings : Profile
+ {
+ public CommentMappings()
+ {
+ CreateMap<CreateCommentWebModel, CreateCommentServiceModel>();
+ CreateMap<UpdateCommentWebModel, UpdateCommentServiceModel>();
+
+ CreateMap<ReadCommentServiceModel, ReadCommentWebModel>();
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Mapping/FeedMappings.cs b/src/Web/DevHive.Web/Configurations/Mapping/FeedMappings.cs
new file mode 100644
index 0000000..0909f6d
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Mapping/FeedMappings.cs
@@ -0,0 +1,18 @@
+using AutoMapper;
+using DevHive.Services.Models;
+using DevHive.Web.Models.Comment;
+using DevHive.Web.Models.Feed;
+
+namespace DevHive.Web.Configurations.Mapping
+{
+ public class FeedMappings : Profile
+ {
+ public FeedMappings()
+ {
+ CreateMap<GetPageWebModel, GetPageServiceModel>()
+ .ForMember(dest => dest.FirstRequestIssued, src => src.MapFrom(p => p.FirstPageTimeIssued));
+
+ CreateMap<ReadPageServiceModel, ReadPageWebModel>();
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Mapping/LanguageMappings.cs b/src/Web/DevHive.Web/Configurations/Mapping/LanguageMappings.cs
new file mode 100644
index 0000000..eca0d1a
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Mapping/LanguageMappings.cs
@@ -0,0 +1,23 @@
+using AutoMapper;
+using DevHive.Web.Models.Language;
+using DevHive.Services.Models.Language;
+
+namespace DevHive.Web.Configurations.Mapping
+{
+ public class LanguageMappings : Profile
+ {
+ public LanguageMappings()
+ {
+ CreateMap<CreateLanguageWebModel, CreateLanguageServiceModel>();
+ CreateMap<ReadLanguageWebModel, ReadLanguageServiceModel>();
+ CreateMap<UpdateLanguageWebModel, UpdateLanguageServiceModel>()
+ .ForMember(src => src.Id, dest => dest.Ignore());
+ CreateMap<LanguageWebModel, LanguageServiceModel>();
+
+ CreateMap<LanguageServiceModel, LanguageWebModel>();
+ CreateMap<ReadLanguageServiceModel, ReadLanguageWebModel>();
+ CreateMap<CreateLanguageServiceModel, CreateLanguageWebModel>();
+ CreateMap<UpdateLanguageServiceModel, UpdateLanguageWebModel>();
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Mapping/PostMappings.cs b/src/Web/DevHive.Web/Configurations/Mapping/PostMappings.cs
new file mode 100644
index 0000000..a5b46ee
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Mapping/PostMappings.cs
@@ -0,0 +1,17 @@
+using AutoMapper;
+using DevHive.Services.Models.Post;
+using DevHive.Web.Models.Post;
+
+namespace DevHive.Web.Configurations.Mapping
+{
+ public class PostMappings : Profile
+ {
+ public PostMappings()
+ {
+ CreateMap<CreatePostWebModel, CreatePostServiceModel>();
+ CreateMap<UpdatePostWebModel, UpdatePostServiceModel>();
+
+ CreateMap<ReadPostServiceModel, ReadPostWebModel>();
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Mapping/ProfilePictureMappings.cs b/src/Web/DevHive.Web/Configurations/Mapping/ProfilePictureMappings.cs
new file mode 100644
index 0000000..8c12a20
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Mapping/ProfilePictureMappings.cs
@@ -0,0 +1,16 @@
+using System;
+using AutoMapper;
+using DevHive.Web.Models.ProfilePicture;
+using DevHive.Services.Models.ProfilePicture;
+
+namespace DevHive.Web.Configurations.Mapping
+{
+ public class ProfilePictureMappings : Profile
+ {
+ public ProfilePictureMappings()
+ {
+ CreateMap<ProfilePictureWebModel, ProfilePictureServiceModel>()
+ .ForMember(dest => dest.ProfilePictureFormFile, src => src.MapFrom(p => p.Picture));
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Mapping/RatingMappings.cs b/src/Web/DevHive.Web/Configurations/Mapping/RatingMappings.cs
new file mode 100644
index 0000000..1d731d8
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Mapping/RatingMappings.cs
@@ -0,0 +1,18 @@
+using AutoMapper;
+using DevHive.Services.Models.Rating;
+using DevHive.Web.Models.Rating;
+
+namespace DevHive.Web.Configurations.Mapping
+{
+ public class RatingMappings : Profile
+ {
+ public RatingMappings()
+ {
+ CreateMap<CreateRatingWebModel, CreateRatingServiceModel>();
+
+ CreateMap<ReadRatingServiceModel, ReadRatingWebModel>();
+
+ CreateMap<UpdateRatingWebModel, UpdateRatingServiceModel>();
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Mapping/RoleMappings.cs b/src/Web/DevHive.Web/Configurations/Mapping/RoleMappings.cs
new file mode 100644
index 0000000..60f8503
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Mapping/RoleMappings.cs
@@ -0,0 +1,21 @@
+using AutoMapper;
+using DevHive.Web.Models.Role;
+using DevHive.Services.Models.Role;
+
+namespace DevHive.Web.Configurations.Mapping
+{
+ public class RoleMappings : Profile
+ {
+ public RoleMappings()
+ {
+ CreateMap<CreateRoleWebModel, CreateRoleServiceModel>();
+ CreateMap<UpdateRoleWebModel, UpdateRoleServiceModel>()
+ .ForMember(src => src.Id, dest => dest.Ignore());
+ CreateMap<RoleWebModel, RoleServiceModel>();
+
+ CreateMap<CreateRoleServiceModel, CreateRoleWebModel>();
+ CreateMap<UpdateRoleServiceModel, UpdateRoleWebModel>();
+ CreateMap<RoleServiceModel, RoleWebModel>();
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Mapping/TechnologyMappings.cs b/src/Web/DevHive.Web/Configurations/Mapping/TechnologyMappings.cs
new file mode 100644
index 0000000..708b6ac
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Mapping/TechnologyMappings.cs
@@ -0,0 +1,23 @@
+using AutoMapper;
+using DevHive.Web.Models.Technology;
+using DevHive.Services.Models.Technology;
+
+namespace DevHive.Web.Configurations.Mapping
+{
+ public class TechnologyMappings : Profile
+ {
+ public TechnologyMappings()
+ {
+ CreateMap<CreateTechnologyWebModel, CreateTechnologyServiceModel>();
+ CreateMap<ReadTechnologyWebModel, ReadTechnologyServiceModel>();
+ CreateMap<UpdateTechnologyWebModel, UpdateTechnologyServiceModel>()
+ .ForMember(src => src.Id, dest => dest.Ignore());
+ CreateMap<TechnologyWebModel, TechnologyServiceModel>();
+
+ CreateMap<CreateTechnologyServiceModel, CreateTechnologyWebModel>();
+ CreateMap<ReadTechnologyServiceModel, ReadTechnologyWebModel>();
+ CreateMap<UpdateTechnologyServiceModel, UpdateTechnologyWebModel>();
+ CreateMap<TechnologyServiceModel, TechnologyWebModel>();
+ }
+ }
+}
diff --git a/src/Web/DevHive.Web/Configurations/Mapping/UserMappings.cs b/src/Web/DevHive.Web/Configurations/Mapping/UserMappings.cs
new file mode 100644
index 0000000..dabec93
--- /dev/null
+++ b/src/Web/DevHive.Web/Configurations/Mapping/UserMappings.cs
@@ -0,0 +1,30 @@
+using AutoMapper;
+using DevHive.Services.Models.User;
+using DevHive.Web.Models.User;
+using DevHive.Common.Models.Identity;
+
+namespace DevHive.Web.Configurations.Mapping
+{
+ public class UserMappings : Profile
+ {
+ public UserMappings()
+ {
+ CreateMap<LoginWebModel, LoginServiceModel>();
+ CreateMap<RegisterWebModel, RegisterServiceModel>();
+ CreateMap<UserWebModel, UserServiceModel>();
+ CreateMap<UpdateUserWebModel, UpdateUserServiceModel>();
+
+ CreateMap<UserServiceModel, UserWebModel>();
+
+ CreateMap<TokenModel, TokenWebModel>();
+
+ //Update
+ CreateMap<UpdateUserWebModel, UpdateUserServiceModel>();
+ CreateMap<UsernameWebModel, FriendServiceModel>();
+ CreateMap<UsernameWebModel, UpdateFriendServiceModel>();
+
+ CreateMap<UpdateUserServiceModel, UpdateUserWebModel>();
+ CreateMap<FriendServiceModel, UsernameWebModel>();
+ }
+ }
+}