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.Mvc;
using System.Net;
@ -12,14 +13,16 @@ namespace YABA.API.Controllers
[Authorize, Route("api/v{version:apiVersion}/[controller]")]
public class UsersController : ControllerBase
{
private readonly IMapper _mapper;
private readonly IUserService _userService;
public UsersController(IUserService userService)
public UsersController(IMapper mapper, IUserService userService)
{
_mapper = mapper;
_userService = userService;
}
[HttpPost("Register")]
[HttpPost]
[ProducesResponseType(typeof(UserResponse), (int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
[ProducesResponseType((int)HttpStatusCode.NoContent)]
@ -34,7 +37,7 @@ namespace YABA.API.Controllers
if (isRegistered) return NoContent();
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.Mvc;
using Microsoft.AspNetCore.Mvc.Versioning;
@ -5,6 +6,7 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using System.Security.Claims;
using YABA.API.Middlewares;
using YABA.API.Settings;
using YABA.API.Settings.Swashbuckle;
using YABA.Data.Configuration;
@ -46,6 +48,15 @@ builder.Services.AddServiceProjectDependencyInjectionConfiguration(configuration
builder.Services.AddDataProjectDependencyInjectionConfiguration(configuration);
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
builder.Services.AddEndpointsApiExplorer();
@ -88,4 +99,7 @@ app.UseAuthorization();
app.MapControllers();
// Add custom middlewares
app.UseMiddleware<AddCustomClaimsMiddleware>();
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 System.Collections.Generic;
using System.Text;
using YABA.Service.DTO;
using YABA.Common.DTOs;
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.Models;
using YABA.Service.DTO;
using YABA.Service.Interfaces;
namespace YABA.Service
@ -10,11 +11,13 @@ namespace YABA.Service
{
private readonly YABAReadOnlyContext _roContext;
private readonly YABAReadWriteContext _context;
private readonly IMapper _mapper;
public UserService (YABAReadOnlyContext roContext, YABAReadWriteContext context)
public UserService (YABAReadOnlyContext roContext, YABAReadWriteContext context, IMapper mapper)
{
_roContext = roContext;
_context = context;
_mapper = mapper;
}
public bool IsUserRegistered(string authProviderId)
@ -27,7 +30,7 @@ namespace YABA.Service
if(IsUserRegistered(authProviderId))
{
var user = _roContext.Users.FirstOrDefault(x => x.Auth0Id == authProviderId);
return new UserDTO(user);
return _mapper.Map<UserDTO>(user);
}
var userToRegister = new User
@ -36,7 +39,7 @@ namespace YABA.Service
};
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)

View File

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