using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using UserManagement.Data.Dto;
using UserManagement.MediatR.Commands;
using UserManagement.MediatR.Queries;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Hosting;
using UserManagement.Data.Resources;
using UserManagement.Repository;
using UserManagement.Api.Helpers;
using Microsoft.AspNetCore.Http;
namespace UserManagement.API.Controllers
{
///
/// User
///
///
/// User
///
///
///
///
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class UserController(
IMediator mediator,
UserInfoToken userInfo,
IWebHostEnvironment webHostEnvironment
) : BaseController
{
private readonly IMediator _mediator = mediator;
private readonly IWebHostEnvironment _webHostEnvironment = webHostEnvironment;
private readonly UserInfoToken _userInfo = userInfo;
///
/// Create a User
///
///
///
[HttpPost]
[Produces("application/json", "application/xml", Type = typeof(UserDto))]
[ClaimCheck("user_add")]
public async Task AddUser(AddUserCommand addUserCommand)
{
var result = await _mediator.Send(addUserCommand);
if (!result.Success)
{
return ReturnFormattedResponse(result);
}
return CreatedAtAction("GetUser", new { id = result.Data.Id }, result.Data);
}
///
/// Get All Users
///
///
[HttpGet("GetAllUsers")]
[Produces("application/json", "application/xml", Type = typeof(List))]
[ClaimCheck("user_list", "user_role_edit")]
public async Task GetAllUsers()
{
var getAllUserQuery = new GetAllUserQuery { };
var result = await _mediator.Send(getAllUserQuery);
return Ok(result);
}
///
/// Get User By Id
///
///
///
[HttpGet("{id}", Name = "GetUser")]
[Produces("application/json", "application/xml", Type = typeof(UserDto))]
[ClaimCheck("user_edit", "user_permission_edit")]
public async Task GetUser(Guid id)
{
var getUserQuery = new GetUserQuery { Id = id };
var result = await _mediator.Send(getUserQuery);
return ReturnFormattedResponse(result);
}
///
/// Get Users
///
///
///
[HttpGet("GetUsers")]
[Produces("application/json", "application/xml", Type = typeof(UserList))]
[ClaimCheck("user_list")]
public async Task GetUsers([FromQuery] UserResource userResource)
{
var getAllLoginAuditQuery = new GetUsersQuery
{
UserResource = userResource
};
var result = await _mediator.Send(getAllLoginAuditQuery);
var paginationMetadata = new
{
totalCount = result.TotalCount,
pageSize = result.PageSize,
skip = result.Skip,
totalPages = result.TotalPages
};
Response.Headers.Append("X-Pagination",
Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata));
return Ok(result);
}
///
/// Get Recently Registered Users
///
///
[HttpGet("GetRecentlyRegisteredUsers")]
[Produces("application/json", "application/xml", Type = typeof(List))]
[ClaimCheck("dashboard_list")]
public async Task GetRecentlyRegisteredUsers()
{
var getRecentlyRegisteredUserQuery = new GetRecentlyRegisteredUserQuery { };
var result = await _mediator.Send(getRecentlyRegisteredUserQuery);
return Ok(result);
}
///
/// User Login
///
///
///
[HttpPost("login")]
[AllowAnonymous]
[Produces("application/json", "application/xml", Type = typeof(UserAuthDto))]
public async Task UserLogin(UserLoginCommand userLoginCommand)
{
userLoginCommand.RemoteIp = Request.HttpContext.Connection.RemoteIpAddress.ToString();
var result = await _mediator.Send(userLoginCommand);
if (!result.Success)
{
return ReturnFormattedResponse(result);
}
return Ok(new
{
result.Data.BearerToken
});
}
///
/// Update User By Id
///
///
///
///
[HttpPut("{id}")]
[Produces("application/json", "application/xml", Type = typeof(UserDto))]
[ClaimCheck("user_edit")]
public async Task UpdateUser(Guid id, UpdateUserCommand updateUserCommand)
{
updateUserCommand.Id = id;
var result = await _mediator.Send(updateUserCommand);
return ReturnFormattedResponse(result);
}
///
/// Update Profile
///
///
///
[HttpPut("profile")]
[Produces("application/json", "application/xml", Type = typeof(UserDto))]
public async Task UpdateUserProfile(UpdateUserProfileCommand updateUserProfileCommand)
{
var result = await _mediator.Send(updateUserProfileCommand);
return ReturnFormattedResponse(result);
}
///
/// Update Profile photo
///
///
[HttpPost("UpdateUserProfilePhoto"), DisableRequestSizeLimit]
[Produces("application/json", "application/xml", Type = typeof(UserDto))]
public async Task UpdateUserProfilePhoto()
{
var updateUserProfilePhotoCommand = new UpdateUserProfilePhotoCommand()
{
FormFile = Request.Form.Files,
RootPath = _webHostEnvironment.WebRootPath
};
var result = await _mediator.Send(updateUserProfilePhotoCommand);
return ReturnFormattedResponse(result);
}
///
/// Delete User By Id
///
///
///
[HttpDelete("{Id}")]
[ClaimCheck("user_delete", "user_edit")]
public async Task DeleteUser(Guid Id)
{
var deleteUserCommand = new DeleteUserCommand { Id = Id };
var result = await _mediator.Send(deleteUserCommand);
return StatusCode(result.StatusCode, result);
}
///
/// User Change Password
///
///
///
[HttpPost("changepassword")]
public async Task ChangePassword(ChangePasswordCommand resetPasswordCommand)
{
var result = await _mediator.Send(resetPasswordCommand);
return ReturnFormattedResponse(result);
}
///
/// Reset Resetpassword
///
///
///
[HttpPost("resetpassword")]
[ClaimCheck("reset_password_edit")]
public async Task ResetPassword(ResetPasswordCommand newPasswordCommand)
{
var result = await _mediator.Send(newPasswordCommand);
return ReturnFormattedResponse(result);
}
///
/// Get User Profile
///
///
[HttpGet("profile")]
public async Task GetProfile()
{
var getUserQuery = new GetUserQuery
{
Id = Guid.Parse(_userInfo.Id)
};
var result = await _mediator.Send(getUserQuery);
if (!string.IsNullOrWhiteSpace(result.Data.ProfilePhoto))
{
result.Data.ProfilePhoto = $"Users/{result.Data.ProfilePhoto}";
}
return ReturnFormattedResponse(result);
}
[HttpGet("dropdown")]
public async Task GetUserForDropdown()
{
var getUserQuery = new GetUsersForDropdownQuery();
var result = await _mediator.Send(getUserQuery);
return Ok(result);
}
}
}