diff --git a/MainProject/Controllers/BaseController.cs b/MainProject/Controllers/BaseController.cs index a5e0dcb..b8c8eb4 100644 --- a/MainProject/Controllers/BaseController.cs +++ b/MainProject/Controllers/BaseController.cs @@ -2,11 +2,14 @@ using System.Net; using Microsoft.AspNetCore.Mvc; using BasicDotnetTemplate.MainProject.Models.Api.Response; using BasicDotnetTemplate.MainProject.Models.Settings; +using AutoMapper; +using BasicDotnetTemplate.MainProject.Core.Middlewares; namespace BasicDotnetTemplate.MainProject.Controllers { public abstract class BaseController : ControllerBase { + protected readonly IMapper? _mapper; protected readonly IConfiguration _configuration; protected readonly AppSettings _appSettings; protected readonly string _requestNotWellFormed = "Request is not well formed"; @@ -18,6 +21,13 @@ namespace BasicDotnetTemplate.MainProject.Controllers _configuration = configuration; _appSettings = new AppSettings(); _configuration.GetSection("AppSettings").Bind(_appSettings); + + var config = new MapperConfiguration(cfg => + { + cfg.AddProfile(); + }); + + _mapper = config.CreateMapper(); } #nullable enable diff --git a/MainProject/Controllers/UserController.cs b/MainProject/Controllers/UserController.cs index 35ed491..c271fe0 100644 --- a/MainProject/Controllers/UserController.cs +++ b/MainProject/Controllers/UserController.cs @@ -6,13 +6,13 @@ using BasicDotnetTemplate.MainProject.Models.Api.Request.User; using BasicDotnetTemplate.MainProject.Models.Api.Response; using BasicDotnetTemplate.MainProject.Models.Api.Response.User; using BasicDotnetTemplate.MainProject.Models.Database.SqlServer; +using BasicDotnetTemplate.MainProject.Models.Api.Common.User; namespace BasicDotnetTemplate.MainProject.Controllers { [Route("[controller]")] public class UserController : BaseController { - private readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger(); private readonly IUserService _userService; private readonly IRoleService _roleService; public UserController( @@ -44,14 +44,16 @@ namespace BasicDotnetTemplate.MainProject.Controllers { return BadRequest(_requestNotWellFormed); } - var data = await this._userService.GetUserByGuidAsync(guid); + var user = await this._userService.GetUserByGuidAsync(guid); - if (data == null || String.IsNullOrEmpty(data.Guid)) + if (user == null || String.IsNullOrEmpty(user.Guid)) { return NotFound(); } - return Success(String.Empty, data); + var userDto = _mapper?.Map(user); + + return Success(String.Empty, userDto); } catch (Exception exception) { @@ -95,15 +97,22 @@ namespace BasicDotnetTemplate.MainProject.Controllers } else { - Role? role = null; // TODO - var data = await this._userService.CreateUser(request.Data, role); + var role = await this._roleService.GetRoleForUser(request.Data.RoleGuid); + if (role == null) + { + return BadRequest("Role not found"); + } - if (data == null || String.IsNullOrEmpty(data.Guid)) + var user = await this._userService.CreateUserAsync(request.Data, role); + + if (user == null || String.IsNullOrEmpty(user.Guid)) { return BadRequest(); } - return Success(String.Empty, data); + var userDto = _mapper?.Map(user); + + return Success(String.Empty, userDto); } } diff --git a/MainProject/Services/RoleService.cs b/MainProject/Services/RoleService.cs index 7018224..038d1ba 100644 --- a/MainProject/Services/RoleService.cs +++ b/MainProject/Services/RoleService.cs @@ -13,6 +13,7 @@ public interface IRoleService Task GetRoleByGuidAsync(string guid); Task CheckIfNameIsValid(string name, string? guid = ""); Task CreateRole(CreateRoleRequestData data); + Task GetRoleForUser(string? guid); } public class RoleService : BaseService, IRoleService @@ -36,6 +37,8 @@ public class RoleService : BaseService, IRoleService ); } + + private Role CreateRoleData(CreateRoleRequestData data) { Role role = new() @@ -52,6 +55,9 @@ public class RoleService : BaseService, IRoleService } + + + public async Task GetRoleByIdAsync(int id) { return await this.GetRolesQueryable().Where(x => x.Id == id).FirstOrDefaultAsync(); @@ -98,6 +104,20 @@ public class RoleService : BaseService, IRoleService return role; } + public async Task GetRoleForUser(string? guid) + { + Role? role = null; + if (String.IsNullOrEmpty(guid)) + { + role = await this.GetRoleByNameQueryable("Default").FirstOrDefaultAsync(); + } + else + { + role = await this.GetRoleByGuidAsync(guid); + } + + return role; + } } diff --git a/MainProject/Services/UserService.cs b/MainProject/Services/UserService.cs index 571e68b..ff4efba 100644 --- a/MainProject/Services/UserService.cs +++ b/MainProject/Services/UserService.cs @@ -13,7 +13,7 @@ public interface IUserService Task GetUserByGuidAsync(string guid); Task GetUserByUsernameAndPassword(string email, string password); Task CheckIfEmailIsValid(string email, string? guid = ""); - Task CreateUser(CreateUserRequestData data, Role role); + Task CreateUserAsync(CreateUserRequestData data, Role role); } public class UserService : BaseService, IUserService @@ -102,16 +102,19 @@ public class UserService : BaseService, IUserService return valid; } - public async Task CreateUser(CreateUserRequestData data, Role role) + public async Task CreateUserAsync(CreateUserRequestData data, Role role) { User? user = null; using (var transaction = _sqlServerContext.Database.BeginTransactionAsync()) { var tempUser = this.CreateUserData(data, role); + await _sqlServerContext.Users.AddAsync(tempUser); + await _sqlServerContext.SaveChangesAsync(); + await (await transaction).CommitAsync(); + user = tempUser; } - return user; }