(十二)登录注册接口

登录注册

1. 服务层接口

public interface ILoginService
{
    Task<ApiResponse> LoginAsync(string Account, string Password);
    Task<ApiResponse> Register(UserDto user);
}

2.用户实体类

 public class UserDto : BaseDto
 {
     private string username;
     public string UserName
     {
         get { return username; }
         set { username = value; OnPropertyChanged(); }
     }
     private string? account;
     public string Account
     {
         get { return account; }
         set { account = value; OnPropertyChanged(); }
     }
     private string? passWord;
     public string PassWord
     {
         get { return passWord; }
         set { passWord = value; OnPropertyChanged(); }
     }
 }

3.服务器

public class LoginService : ILoginService
{
    private readonly IUnitOfWork work;
    private readonly IMapper mapper;

    public LoginService(IUnitOfWork work, IMapper mapper)
    {
        this.work = work;
        this.mapper = mapper;
    }
    public async Task<ApiResponse> LoginAsync(string Account, string Password)
    {
        try
        {   //SingleOrDefaultAsync只取一条数据,如果无数据则返回null,若rownum大于1则报异常。
            //FirstOrDefaultAsync取一条数据,如果无数据则返回null,若rownum大于1则返回第一行数据。
            var model =await work.GetRepository<User>().GetFirstOrDefaultAsync(predicate:
                x => (x.Account.Equals(Account)) &&
                (x.PassWord.Equals(Password)));

            if (model == null) { return new ApiResponse("账号或密码错误请重试!"); }
            return new ApiResponse(true, model);
        }
        catch (Exception ex)
        {
            return new ApiResponse(false, "登录失败!");
        }
    }

    public async Task<ApiResponse> Register(UserDto user)
    {
        try
        {
            var model = mapper.Map<User>(user);
            var repository = work.GetRepository<User>();
            var userModel = await repository.GetFirstOrDefaultAsync(predicate: x => x.Account.Equals(model.Account));
            if (userModel != null)
            {
                return new ApiResponse($"当前账号:{model.Account}已存在,请重新注册!");
            }
            model.CreateDate = DateTime.Now;
            await repository.InsertAsync(model);

            if (await work.SaveChangesAsync() > 0)
                return new ApiResponse(true, model);
            return new ApiResponse("注册失败,请稍后重试!");
        }
        catch (Exception ex)
        {
            return new ApiResponse("注册账号失败!");
        }
    }
}

4.控制器

 //账户控制器
 [ApiController]
 [Route("api/[controller]/[action]")]
 public class LoginController : ControllerBase
 {
     private readonly ILoginService service;

     public LoginController(ILoginService service)
     {
         this.service = service;
     }
     [HttpGet]
     public async Task<ApiResponse> Login(string account, string passWord) => await service.LoginAsync(account, passWord);

     [HttpPost]
     public async Task<ApiResponse> Register([FromBody] UserDto model) => await service.Register(model);
 }

5. 注册

  • 在AutoMapperProFlie中添加配置
  • 在program中添加注册
posted @ 2023-10-07 16:35  huihui不会写代码  阅读(129)  评论(0)    收藏  举报