using AutoMapper; using IM_API.Dtos; using IM_API.Exceptions; using IM_API.Interface.Services; using IM_API.Models; using IM_API.Tools; using Microsoft.EntityFrameworkCore; namespace IM_API.Services { public class UserService : IUserService { private readonly ImContext _context; private readonly ILogger _logger; private readonly IMapper _mapper; public UserService(ImContext imContext,ILogger logger,IMapper mapper) { this._context = imContext; this._logger = logger; this._mapper = mapper; } #region 获取用户信息 public async Task GetUserInfoAsync(int userId) { var user = await _context.Users.FirstOrDefaultAsync(x => x.Id == userId); if (user == null) { throw new BaseException(CodeDefine.USER_NOT_FOUND); } return _mapper.Map(user); } #endregion #region 通过用户名获取用户信息 public async Task GetUserInfoByUsernameAsync(string username) { var user = await _context.Users.FirstOrDefaultAsync(x => x.Username == username); if (user == null) { throw new BaseException(CodeDefine.USER_NOT_FOUND); } return _mapper.Map(user); } #endregion #region 重置用户密码 public async Task ResetPasswordAsync(int userId, string oldPassword, string password) { var user = await _context.Users.FirstOrDefaultAsync(x => x.Id == userId); if (user is null) throw new BaseException(CodeDefine.USER_NOT_FOUND); //验证原密码 if (user.Password != oldPassword) throw new BaseException(CodeDefine.PASSWORD_ERROR); user.Password = password; await _context.SaveChangesAsync(); return true; } #endregion #region 更新用户在线状态 public async Task UpdateOlineStatusAsync(int userId,UserOnlineStatus onlineStatus) { var user = await _context.Users.FirstOrDefaultAsync(x => x.Id == userId); if (user is null) throw new BaseException(CodeDefine.USER_NOT_FOUND); user.OnlineStatusEnum = onlineStatus; await _context.SaveChangesAsync(); return true; } #endregion #region 更新用户信息 public async Task UpdateUserAsync(int userId,UpdateUserDto dto) { var user = await _context.Users.FirstOrDefaultAsync(x => x.Id == userId); if (user is null) throw new BaseException(CodeDefine.USER_NOT_FOUND); _mapper.Map(dto,user); await _context.SaveChangesAsync(); return _mapper.Map(user); } #endregion } }