Added AutoMapper for User related objects

This commit is contained in:
Carl Tibule
2023-01-26 18:56:22 -06:00
parent afab148337
commit 08823de474
9 changed files with 72 additions and 37 deletions

View File

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Authorization; using AutoMapper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System.Net; using System.Net;
@ -12,14 +13,16 @@ namespace YABA.API.Controllers
[Authorize, Route("api/v{version:apiVersion}/[controller]")] [Authorize, Route("api/v{version:apiVersion}/[controller]")]
public class UsersController : ControllerBase public class UsersController : ControllerBase
{ {
private readonly IMapper _mapper;
private readonly IUserService _userService; private readonly IUserService _userService;
public UsersController(IUserService userService) public UsersController(IMapper mapper, IUserService userService)
{ {
_mapper = mapper;
_userService = userService; _userService = userService;
} }
[HttpPost("Register")] [HttpPost]
[ProducesResponseType(typeof(UserResponse), (int)HttpStatusCode.OK)] [ProducesResponseType(typeof(UserResponse), (int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.NotFound)] [ProducesResponseType((int)HttpStatusCode.NotFound)]
[ProducesResponseType((int)HttpStatusCode.NoContent)] [ProducesResponseType((int)HttpStatusCode.NoContent)]
@ -34,7 +37,7 @@ namespace YABA.API.Controllers
if (isRegistered) return NoContent(); if (isRegistered) return NoContent();
var registedUser = _userService.RegisterUser(authProviderId); var registedUser = _userService.RegisterUser(authProviderId);
return Ok(new UserResponse(registedUser)); return Ok(_mapper.Map<UserResponse>(registedUser));
} }
} }
} }

View File

@ -1,3 +1,4 @@
using AutoMapper;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Versioning; using Microsoft.AspNetCore.Mvc.Versioning;
@ -5,6 +6,7 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models;
using System.Security.Claims; using System.Security.Claims;
using YABA.API.Middlewares;
using YABA.API.Settings; using YABA.API.Settings;
using YABA.API.Settings.Swashbuckle; using YABA.API.Settings.Swashbuckle;
using YABA.Data.Configuration; using YABA.Data.Configuration;
@ -46,6 +48,15 @@ builder.Services.AddServiceProjectDependencyInjectionConfiguration(configuration
builder.Services.AddDataProjectDependencyInjectionConfiguration(configuration); builder.Services.AddDataProjectDependencyInjectionConfiguration(configuration);
builder.Services.AddControllers().AddNewtonsoftJson(); builder.Services.AddControllers().AddNewtonsoftJson();
// Add AutoMapper profiles
var mapperConfiguration = new MapperConfiguration(mapperConfiguration =>
{
mapperConfiguration.AddProfile(new YABA.API.Settings.AutoMapperProfile());
mapperConfiguration.AddProfile(new YABA.Service.Configuration.AutoMapperProfile());
});
IMapper mapper = mapperConfiguration.CreateMapper();
builder.Services.AddSingleton(mapper);
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer(); builder.Services.AddEndpointsApiExplorer();
@ -88,4 +99,7 @@ app.UseAuthorization();
app.MapControllers(); app.MapControllers();
// Add custom middlewares
app.UseMiddleware<AddCustomClaimsMiddleware>();
app.Run(); app.Run();

View File

@ -0,0 +1,14 @@
using AutoMapper;
using YABA.API.ViewModels;
using YABA.Common.DTOs;
namespace YABA.API.Settings
{
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<UserDTO, UserResponse>();
}
}
}

View File

@ -0,0 +1,12 @@
using System;
namespace YABA.Common.DTOs
{
public class UserDTO
{
public int Id { get; set; }
public bool IsDeleted { get; set; }
public DateTimeOffset CreatedOn { get; set; }
public DateTimeOffset LastModified { get; set; }
}
}

View File

@ -0,0 +1,14 @@
using AutoMapper;
using YABA.Common.DTOs;
using YABA.Models;
namespace YABA.Service.Configuration
{
public class AutoMapperProfile : Profile
{
public AutoMapperProfile()
{
CreateMap<User, UserDTO>();
}
}
}

View File

@ -1,23 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
using YABA.Models;
namespace YABA.Service.DTO
{
public class UserDTO
{
public int Id { get; set; }
public bool IsDeleted { get; set; }
public DateTimeOffset CreatedOn { get; set; }
public DateTimeOffset LastModified { get; set; }
public UserDTO(User value)
{
Id = value.Id;
IsDeleted = value.IsDeleted;
CreatedOn = value.CreatedOn;
LastModified = value.LastModified;
}
}
}

View File

@ -1,7 +1,4 @@
using System; using YABA.Common.DTOs;
using System.Collections.Generic;
using System.Text;
using YABA.Service.DTO;
namespace YABA.Service.Interfaces namespace YABA.Service.Interfaces
{ {

View File

@ -1,7 +1,8 @@
using System.Linq; using AutoMapper;
using System.Linq;
using YABA.Common.DTOs;
using YABA.Data.Context; using YABA.Data.Context;
using YABA.Models; using YABA.Models;
using YABA.Service.DTO;
using YABA.Service.Interfaces; using YABA.Service.Interfaces;
namespace YABA.Service namespace YABA.Service
@ -10,11 +11,13 @@ namespace YABA.Service
{ {
private readonly YABAReadOnlyContext _roContext; private readonly YABAReadOnlyContext _roContext;
private readonly YABAReadWriteContext _context; private readonly YABAReadWriteContext _context;
private readonly IMapper _mapper;
public UserService (YABAReadOnlyContext roContext, YABAReadWriteContext context) public UserService (YABAReadOnlyContext roContext, YABAReadWriteContext context, IMapper mapper)
{ {
_roContext = roContext; _roContext = roContext;
_context = context; _context = context;
_mapper = mapper;
} }
public bool IsUserRegistered(string authProviderId) public bool IsUserRegistered(string authProviderId)
@ -27,7 +30,7 @@ namespace YABA.Service
if(IsUserRegistered(authProviderId)) if(IsUserRegistered(authProviderId))
{ {
var user = _roContext.Users.FirstOrDefault(x => x.Auth0Id == authProviderId); var user = _roContext.Users.FirstOrDefault(x => x.Auth0Id == authProviderId);
return new UserDTO(user); return _mapper.Map<UserDTO>(user);
} }
var userToRegister = new User var userToRegister = new User
@ -36,7 +39,7 @@ namespace YABA.Service
}; };
var registedUser = _context.Users.Add(userToRegister); var registedUser = _context.Users.Add(userToRegister);
return _context.SaveChanges() > 0 ? new UserDTO(registedUser.Entity) : null; return _context.SaveChanges() > 0 ? _mapper.Map<UserDTO>(registedUser.Entity) : null;
} }
public int GetUserId(string authProviderId) public int GetUserId(string authProviderId)

View File

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
@ -6,6 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="AutoMapper" Version="12.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
</ItemGroup> </ItemGroup>