コード例 #1
0
            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));
            }
コード例 #2
0
            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
                });
            }
コード例 #3
0
ファイル: Delete.cs プロジェクト: xiaozhu350/realworld
            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);
            }
コード例 #4
0
            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)));
            }
コード例 #5
0
ファイル: Save.cs プロジェクト: xiaozhu350/realworld
            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
                });
            }