コード例 #1
0
ファイル: PlayerValidator.cs プロジェクト: cmu-sei/gameboard
        private async Task _validate(ChangedPlayer model)
        {
            if ((await Exists(model.Id)).Equals(false))
            {
                throw new ResourceNotFound();
            }

            await Task.CompletedTask;
        }
コード例 #2
0
ファイル: PlayerController.cs プロジェクト: cmu-sei/gameboard
        public async Task Update([FromBody] ChangedPlayer model)
        {
            await Validate(model);

            AuthorizeAny(
                () => Actor.IsRegistrar,
                () => PlayerService.MapId(model.Id).Result == Actor.Id
                );

            var result = await PlayerService.Update(model, Actor.IsRegistrar);

            await Hub.Clients.Group(result.TeamId).TeamEvent(
                new HubEvent <TeamState>(Mapper.Map <TeamState>(result), EventAction.Updated)
                );
        }
コード例 #3
0
ファイル: PlayerService.cs プロジェクト: cmu-sei/gameboard
        public async Task <Player> Update(ChangedPlayer model, bool sudo = false)
        {
            var entity = await Store.Retrieve(model.Id);

            var prev = Mapper.Map <Player>(entity);

            if (!sudo)
            {
                Mapper.Map(
                    Mapper.Map <SelfChangedPlayer>(model),
                    entity
                    );
            }
            else
            {
                Mapper.Map(model, entity);
            }

            // check uniqueness
            bool found = await Store.DbSet.AnyAsync(p =>
                                                    p.GameId == entity.GameId &&
                                                    p.TeamId != entity.TeamId &&
                                                    p.Name == entity.Name
                                                    );

            if (found)
            {
                entity.NameStatus = AppConstants.NameStatusNotUnique;
            }
            else if (entity.NameStatus == AppConstants.NameStatusNotUnique)
            {
                entity.NameStatus = "";
            }

            if (entity.Name == entity.ApprovedName)
            {
                entity.NameStatus = "";
            }

            await Store.Update(entity);

            // change names for whole team
            bool namesChanged =
                prev.Name != entity.Name ||
                prev.ApprovedName != entity.ApprovedName ||
                prev.NameStatus != entity.NameStatus
            ;

            if (namesChanged)
            {
                var team = await Store.ListTeamByPlayer(model.Id);

                foreach (var p in team)
                {
                    p.Name         = entity.Name;
                    p.ApprovedName = entity.ApprovedName;
                    p.NameStatus   = entity.NameStatus;
                }

                await Store.Update(team);
            }

            return(Mapper.Map <Player>(entity));
        }