//Delete /api/auth/deleterole public async Task <IActionResult> DeleteRole([FromBody] DeleteRoleViewModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } string roleId = model.RoleId.Trim(); string roleName = model.RoleName.Trim(); if (String.IsNullOrEmpty(roleId) || String.IsNullOrEmpty(roleName)) { return(new JsonResult(await Errors .GetGenericErrorResponse( new DeleteRoleResponse() { RoleName = "no_id", RoleId = "no_role_name", StatusCode = 400, Error = "Role id or role name is empty.", Description = "Role id or role name is empty", Code = "role_id_or_role_name_is_empty", }))); } if (!await _accountsService.RoleExists(roleName)) { return(new JsonResult(await Errors .GetGenericErrorResponse( new DeleteRoleResponse() { RoleName = roleName, RoleId = model.RoleId, StatusCode = 404, Error = "Role id or role name does not match a role.", Description = "Role id or role name does not match a current role", Code = "role_id_or_role_name_does_not_match_a_role", }))); } UsersInRole listOfUsersWithCurrentRole = await _accountsService.GetUsersInRole(roleName); if (listOfUsersWithCurrentRole.IsNull) { return(new JsonResult(await Errors .GetGenericErrorResponse( new DeleteUserResponse() { Id = "no_id", Email = "no_email", StatusCode = 422, Error = "Get users in role error", Description = "Unable to get users in role.", Code = "get_users_in_role_error", }))); } if (listOfUsersWithCurrentRole.User.Any()) { return(new JsonResult( await Errors .GetGenericErrorResponse( new DeleteRoleResponse() { RoleName = roleName, RoleId = model.RoleId, StatusCode = 409, Error = "Role is beinging used by users", Description = "Current role is being used by a user. Please remove dependencies before deleting this role.", Code = "Conflict, role_is_being_used_by_users" }))); } IdentityRole roleToDelete = await _accountsService.GetRoleByName(roleName); IdentityResult deleteRoleResult = await _accountsService.DeleteRole(roleToDelete); if (!deleteRoleResult.Succeeded) { return(new JsonResult(await Errors .GetGenericErrorResponse( new DeleteRoleResponse() { RoleName = roleName, RoleId = roleId, StatusCode = 422, Error = "Unable to complete delete operation", Description = "Server was unable to delete the role.", Code = "unable_to_complete_delete_operation" }))); } await _context.SaveChangesAsync(); return(new JsonResult( Wrappyfier .WrapDeleteRole( roleToDelete.Id, roleToDelete.Name, 200 ))); }