public async Task <UserEnvelope> Handle(Command message, CancellationToken cancellationToken) { if (await _context.Users.Where(x => x.Username == message.User.Username).AnyAsync(cancellationToken)) { throw new RestException(HttpStatusCode.BadRequest, new { Username = ErrorMessages.UserNameInUse }); } if (await _context.Users.Where(x => x.Email == message.User.Email).AnyAsync(cancellationToken)) { throw new RestException(HttpStatusCode.BadRequest, new { Email = ErrorMessages.EmailInUse }); } var salt = Guid.NewGuid().ToByteArray(); var newUser = new Models.User { Username = message.User.Username, Email = message.User.Email, Role = UserRole.User, Hash = _passwordHasher.Hash(message.User.Password, salt), Salt = salt }; _context.Users.Add(newUser); await _context.SaveChangesAsync(cancellationToken); var user = _mapper.Map <Models.User, User>(newUser); user.Token = await _jwtTokenGenerator.CreateToken(newUser.Username); return(new UserEnvelope(user)); }
public async Task <DeployResult> Handle(Command request, CancellationToken cancellationToken) { var oldBinding = _context.Bindings.Include(b => b.Floor).SingleOrDefault(x => x.Host == request.DeployInfo.Host); if (oldBinding != null && oldBinding.Floor.Id != request.DeployInfo.FloorId) { throw new RestException(HttpStatusCode.BadRequest, new { Username = ErrorMessages.ServerHostWasBound }); } _remoteClient.Deploy(request.DeployInfo); var floor = await _context.Floors.SingleOrDefaultAsync(x => x.Id == request.DeployInfo.FloorId, cancellationToken); floor.MasterId = request.DeployInfo.MasterId; var binding = new Binding { Host = request.DeployInfo.Host, Port = request.DeployInfo.Port, UserName = request.DeployInfo.UserName, Password = request.DeployInfo.Password, FloorId = floor.Id }; await _context.Bindings.AddAsync(binding, cancellationToken); await _context.SaveChangesAsync(cancellationToken); return(new DeployResult { MasterId = request.DeployInfo.MasterId }); }
public async Task <Unit> Handle(Command message, CancellationToken cancellationToken) { var user = await _context.Users.SingleOrDefaultAsync(x => x.Id == message.Id, cancellationToken); if (user == null) { throw new RestException(HttpStatusCode.NotFound, new { User = ErrorMessages.UserNotFound }); } _context.Users.Remove(user); await _context.SaveChangesAsync(cancellationToken); return(Unit.Value); }
public async Task <UserEnvelope> Handle(Command message, CancellationToken cancellationToken) { var currentUsername = _currentUserAccessor.GetCurrentUsername(); var user = await _context.Users.Where(x => x.Username == currentUsername).FirstOrDefaultAsync(cancellationToken); user.Username = message.User.Username ?? user.Username; user.Email = message.User.Email ?? user.Email; user.Bio = message.User.Bio ?? user.Bio; user.Image = message.User.Image ?? user.Image; if (!string.IsNullOrWhiteSpace(message.User.Password)) { var salt = Guid.NewGuid().ToByteArray(); user.Hash = _passwordHasher.Hash(message.User.Password, salt); user.Salt = salt; } await _context.SaveChangesAsync(cancellationToken); return(new UserEnvelope(_mapper.Map <Models.User, User>(user))); }
public async Task <SaveResultEnvelope> Handle(Command request, CancellationToken cancellationToken) { Models.Alert alert = null; if (request.MasterId == Guid.Empty) { throw new RestException(HttpStatusCode.Unauthorized, new { Error = ErrorMessages.MasterIdDidNotBind }); } var boundFloor = await _context.Floors.SingleOrDefaultAsync(f => f.MasterId == request.MasterId, cancellationToken); if (boundFloor == null) { throw new RestException(HttpStatusCode.Unauthorized, new { Error = ErrorMessages.MasterIdDidNotBind }); } if (request.Message != AlertMessage.Time) { var masterId = request.MasterId; var floor = _context.Floors .Include(f => f.Building) .Include(f => f.Rooms) .ThenInclude(x => x.Beds) .SingleOrDefault(f => f.MasterId == masterId); var building = floor.Building; var bed = floor.Rooms.SelectMany(x => x.Beds).SingleOrDefault(b => b.SlaveNumber == request.SlaveNumber); var room = bed.Room; alert = await _context.Alerts.SingleOrDefaultAsync( a => a.BedNumber == bed.Number && a.SlaveNumber == bed.SlaveNumber && (a.Message == AlertMessage.NormalCall || a.Message == AlertMessage.UrgencyCall), cancellationToken); if (alert != null) { if (request.Message != AlertMessage.UrgencyCall && request.Message != AlertMessage.NormalCall) { alert.Status = AlertStatus.Reset; } } else { alert = new Models.Alert { Id = Guid.NewGuid(), Message = request.Message, Description = request.Description, BuildingId = building.Id, BuildingName = building.Name, FloorId = floor.Id, FloorNumber = floor.Number, FloorDescription = floor.Description, RoomId = room.Id, RoomName = room.Name, RoomNumber = room.Number, BedNumber = bed.Number, MasterId = request.MasterId, SlaveNumber = request.SlaveNumber, AlertTime = request.AlertTime, Status = AlertStatus.New }; _context.Alerts.Add(alert); } await _context.SaveChangesAsync(cancellationToken); var alertViewModel = alert.ToViewModel(); var result = new SaveResult { AlertId = alert.Id, AlertTime = alert.AlertTime, Description = alert.Description, Status = SaveAlertStatus.Saved, Message = alert.Status == AlertStatus.Reset?@"已重置报警信息":@"已添加报警信息" }; return(new SaveResultEnvelope(alertViewModel, result)); } return(new SaveResultEnvelope { Skipped = true }); }