using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using EasyCaching.Core;
using IRaCIS.Api.Filter;
using IRaCIS.Application;
using IRaCIS.Application.Interfaces;
using IRaCIS.Application.ViewModels;
using IRaCIS.Core.API.Auth;
using IRaCIS.Core.Application.Contracts.RequestAndResponse;
using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace IRaCIS.Api.Controllers
{
[Authorize]
[Route("sysUser")]
[ApiController, ApiExplorerSettings(GroupName = "Management")]
public class UserController : ControllerBase
{
private readonly IUserService _userService;
private readonly ITokenService _tokenService;
public UserController(IUserService userService, ITokenService tokenService)
{
_userService = userService;
_tokenService = tokenService;
}
///
/// 通过邮箱或者手机 发送验证码
///
///
///
///
///
[HttpGet, Route("sendVerificationCode/{emailOrPhone}/{verificationType:int}/{isReviewer:bool}")]
[AllowAnonymous]
public async Task SendVerificationCode(string emailOrPhone, int verificationType, bool isReviewer)
{
return await _userService.SendVerificationCode(emailOrPhone, verificationType, isReviewer);
}
///
/// 通过验证码设置新密码
///
///
///
[AllowAnonymous]
[HttpPost, Route("setNewPassword")]
public IResponseOutput SetNewPassword(ResetPasswordCommand resetPwdModel)
{
return _userService.SetNewPassword(resetPwdModel.EmailOrPhone, resetPwdModel.VerificationType, resetPwdModel.VerificationCode, resetPwdModel.NewPwd, resetPwdModel.IsReviewer);
}
/// 系统用户登录接口[New]
[HttpPost, Route("login")]
[AllowAnonymous]
[LogFilter]
public IResponseOutput Login(UserLoginDTO loginUser, [FromServices]IEasyCachingProvider provider)
{
var returnModel = _userService.Login(loginUser.UserName, loginUser.Password);
if (returnModel.IsSuccess)
{
returnModel.Data.JWTStr = _tokenService.GetToken(UserClaims.Create(returnModel.Data.BasicInfo));
}
var userId = returnModel.Data.BasicInfo.Id.ToString();
provider.Set(userId, userId, TimeSpan.FromMinutes(SystemConfig.LoginExpiredTimeSpan));
return returnModel;
}
/// 签名认证[New]
[HttpGet, Route("VerifySignature/{userName}/{password}")]
[AllowAnonymous]
[LogFilter]
public IResponseOutput VerifySignature(string userName, string password)
{
var returnModel = _userService.VerifySignature(userName, password);
return returnModel;
//return ResponseOutput.Result(returnModel.IsSuccess);
}
/// 分页获取用户列表[New]
[HttpPost, Route("getUserList")]
[Authorize]
public IResponseOutput> GetUserList(UserListQueryDTO param)
{
return ResponseOutput.Ok(_userService.GetUserList(param));
}
/// 更新用户状态(1 可用 0 禁用)[New]
[Authorize]
[LogFilter]
[HttpPost, Route("updateUserState/{userId:guid}/{state:int}")]
public IResponseOutput UpdateUserState(Guid userId, int state)
{
return _userService.UpdateUserState(userId, state);
}
/// 修改密码,当前支持旧密码修改密码,手机及邮箱验证码后续支持[New]
[HttpPost, Route("modifyPassword")]
[Authorize]
[LogFilter]
public IResponseOutput ModifyPassword(EditPasswordCommand editPwModel)
{
return _userService.ModifyPassword(editPwModel);
}
/// 根据用户Id,获取用户角色列表和当前登录用户的最大权限级别[New][AUTH]
[HttpGet, Route("getUserRoles/{userId:guid}")]
[Authorize]
public IResponseOutput GetUserRolesById(Guid userId)
{
var optUserId = User.FindFirst("id").Value;
return ResponseOutput.Ok(new UserRoleInfoDTO()
{
RoleList = _userService.GetUserRolesById(userId),
MaxPrivilegeLevel = _userService.GetUserRoleMaxPrivilegeLevel(Guid.Parse(optUserId))
});
}
/// 添加用户[New][AUTH]
[HttpPost, Route("addUser")]
public IResponseOutput AddUser(UserCommand userAddModel)
{
var userId = User.FindFirst("id").Value;
return _userService.AddUser(userAddModel, Guid.Parse(userId));
}
/// 更新用户信息[New][AUTH]
[HttpPost, Route("updateUser")]
[LogFilter]
public IResponseOutput UpdateUser(UserCommand userUpdateModel)
{
var userId = User.FindFirst("id").Value;
return _userService.UpdateUser(userUpdateModel, Guid.Parse(userId));
}
/// 根据用户Id获取用户详细信息[New]
[HttpGet, Route("getUser/{userId:guid}")]
public IResponseOutput GetUserById(Guid userId)
{
return ResponseOutput.Ok(_userService.GetUserById(userId));
}
/// 获取所有用户列表
[HttpGet, Route("getAllUser")]
public IResponseOutput> GetAllUser()
{
return ResponseOutput.Ok(_userService.GetAllUser());
}
///// 获取当前用户是否有复审权限和编辑权限[New][AUTH]
//[HttpGet, Route("getUserResumePermission/{reviewerId:guid}")]
//public IResponseOutput GetUserResumePermission(Guid reviewerId)
//{
// var userId = User.FindFirst("id").Value;
// return ResponseOutput.Ok(_userService.GetUserResumePermission(reviewerId, Guid.Parse(userId))) ;
//}
/// 后台重置密码为123456[New]
[HttpGet, Route("resetPassword/{userId:guid}")]
[LogFilter]
public IResponseOutput ResetPassword(Guid userId)
{
return _userService.ResetPassword(userId);
}
}
}