Ejemplo n.º 1
0
        public async Task <ApiResponse <GetCharacterQueryResult> > GetById(Guid id)
        {
            var query = new GetCharacterQuery
            {
                Id = id
            };
            var data = await _operationMediator.HandleAsync(query);

            return(ApiResponse.Ok(data));
        }
Ejemplo n.º 2
0
        public async Task Ok()
        {
            var query = new GetCharacterQuery {
                Id = _character.Id
            };

            var result = await _handler.Handle(query, CancellationToken.None);

            Assert.NotNull(result);
            Assert.StrictEqual(_character, result);
        }
Ejemplo n.º 3
0
    public async Task <GetCharacterData> GetCharacter(GetCharacterQuery query)
    {
        var uri = $"/character/{query.Id}?private_key={_privateKey}";

        if (!string.IsNullOrEmpty(query.Data))
        {
            uri += $"&data={query.Data}";
        }

        var data = await Send <GetCharacterData>(uri);

        return(data);
    }
Ejemplo n.º 4
0
        public async Task CharacterNotExist_Exception()
        {
            const int missingId = 2;
            var       query     = new GetCharacterQuery {
                Id = missingId
            };

            Task Act() => _handler.Handle(query, CancellationToken.None);

            var ex = await Record.ExceptionAsync(Act) as EntityNotFoundException <Character>;

            Assert.NotNull(ex);
            Assert.Equal(missingId, ex.EntityId);
        }
Ejemplo n.º 5
0
    private async Task <Character> ProcessDetails(CharacterBrief character)
    {
        var query = new GetCharacterQuery()
        {
            Id   = character.Id,
            Data = "CJ,FC"
        };

        _logger.LogDebug("Getting details for {Name}. Id: {Id}.", character.Name, character.Id);

        var details = await _xivApiAccessor.GetCharacter(query);

        return(CharacterResultEngine.Merge(character, details));
    }
Ejemplo n.º 6
0
        public async void ReturnNullIfPlayerDoesNotOwnCharacter()
        {
            var mockUserService = new Mock <IUserService>();

            mockUserService.Setup(u => u.GetAuthId()).Returns("562");
            mockUserService.Setup(u => u.IsAdmin()).Returns(false);
            var request = new GetCharacterQuery()
            {
                Id = 1, Url = "localhost"
            };
            var sut = new GetCharacterQuery.GetCharacterQueryHandler(_context, _mapper, mockUserService.Object, _tenant);

            var result = await sut.Handle(request, CancellationToken.None);

            result.ShouldBeNull();
        }
        public async Task Get_character_query_handler_should_throw_not_found_exception()
        {
            // Arrange
            var character = new CharacterBuilder().Generate().Build().First();
            var query     = new GetCharacterQuery {
                Id = character.Id + 1
            };
            var queryHandler = new GetCharacterQueryHandler(_testFixture.Context, _testFixture.Mapper);

            // Act
            async Task Act() => await queryHandler.Handle(query, CancellationToken.None);

            var ex = await Record.ExceptionAsync(Act);

            // Assert
            ex.ShouldBeOfType <NotFoundException>();
        }
Ejemplo n.º 8
0
        public async void GetCharacterBiography()
        {
            var mockUserService = new Mock <IUserService>();

            mockUserService.Setup(u => u.GetAuthId()).Returns("123");
            mockUserService.Setup(u => u.IsAdmin()).Returns(false);
            var request = new GetCharacterQuery()
            {
                Id = 1, Url = "localhost"
            };
            var sut = new GetCharacterQuery.GetCharacterQueryHandler(_context, _mapper, mockUserService.Object, _tenant);

            var result = await sut.Handle(request, CancellationToken.None);

            result.ShouldBeOfType <EditBiographyDto>();
            result.Firstname.ShouldBe("Dan");
            result.Surname.ShouldBe("Taylor");
            result.Types.ShouldNotBeEmpty();
        }
Ejemplo n.º 9
0
        private void PrintHelloWorld()
        {
            var collectionName = BaseConfigurator.GetAppCollectionName();
            var context        = new DbContext(collectionName);
            var broker         = new EventBroker <DbContext>(context);

            int length     = BaseConfigurator.GetTargetStringLength();
            var asciiChars = new List <AsciiChar>();

            for (int i = 0; i < length; i++)
            {
                char character = BaseConfigurator.GetTargetString()[i];
                var  dbQuery   = Query.EQ("Character", character.ToString());

                var query  = new GetCharacterQuery(new AsciiChar(), dbQuery);
                var target = broker.Query <GetCharacterQuery, AsciiChar>(query);
                asciiChars.Add(target);
            }

            foreach (var item in asciiChars)
            {
                Console.Write(item.Character);
            }
        }
        public async Task Get_character_query_handler_should_pass()
        {
            // Arrange
            var character = new CharacterBuilder().Generate().Build().First();
            var episode   = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();

            character.Episodes.Add(new CharacterEpisode {
                CharacterId = character.Id, EpisodeId = episode.Id
            });
            _testFixture.Context.Characters.Update(character);
            _testFixture.Context.SaveChanges();
            var query = new GetCharacterQuery {
                Id = character.Id
            };
            var queryHandler = new GetCharacterQueryHandler(_testFixture.Context, _testFixture.Mapper);

            // Act
            var response = await queryHandler.Handle(query, CancellationToken.None);

            // Assert
            response.Name.ShouldBe(character.Name);
            response.Episodes.Count.ShouldBe(1);
            response.Episodes.First().Name.ShouldBe(episode.Name);
        }
Ejemplo n.º 11
0
    public async Task <VerifyCharacterResult> Process(VerifyCharacterCriteria criteria)
    {
        _verifyCharacterValidator.ValidateAndThrow(criteria);

        // Get the guild options for free company definition.
        _logger.LogTrace("Getting guild options for guild {Id}.", criteria.GuildId);

        var guildOptionsQuery = new GetOptionsQuery()
        {
            GuildId = criteria.GuildId
        };

        var guildOptions = await _guildAccessor.GetOptions(guildOptionsQuery);

        if (guildOptions?.FreeCompany is null || guildOptions.VerifiedRoleId == 0)
        {
            _logger.LogDebug("Free Company options not defined for guild {Id}.", criteria.GuildId);

            return(new VerifyCharacterResult()
            {
                Status = Status.FreeCompanyUndefined
            });
        }

        var result = new VerifyCharacterResult()
        {
            FreeCompanyName = guildOptions.FreeCompany.Name,
            VerifiedRoleId  = guildOptions.VerifiedRoleId
        };

        // Parse the query into name/server.
        _logger.LogTrace("Parsing query: {Query}.", criteria.Query);

        var(name, _) = NameServerEngine.Parse(criteria.Query);

        // Search for the character.
        _logger.LogTrace("Searching for {CharacterName} on {ServerName}.", name, guildOptions.FreeCompany.Server);

        var searchQuery = new SearchCharacterQuery()
        {
            Name   = name,
            Server = guildOptions.FreeCompany.Server
        };

        var searchData = await _xivApiAccessor.SearchCharacter(searchQuery);

        var characterId = searchData.Results?.FirstOrDefault()?.Id;

        _logger.LogDebug("Got character Id {Id}.", characterId);

        if (characterId is null)
        {
            result.Status = Status.NotVerified;
            result.Name   = searchData.Results?.FirstOrDefault()?.Name;
            return(result);
        }

        // Check if character is already attached to a user.
        _logger.LogTrace("Checking database if {CharacterName} has already been tied to a user. CharacterId: {CharacterId}", name, characterId);

        var checkQuery = new SearchUserQuery()
        {
            CharacterId = characterId.Value
        };

        var user = await _userAccessor.SearchUser(checkQuery);

        if (user is object)
        {
            _logger.LogDebug("{CharacterName} ({CharacterId}) has already been tied to UserId {UserId}.", name, characterId, user.Id);
            result.Status         = Status.CharacterAlreadyVerified;
            result.Name           = searchData.Results?.FirstOrDefault()?.Name;
            result.VerifiedUserId = user.Id;
            return(result);
        }

        // Get the character.
        _logger.LogTrace("Getting character with Id {Id}.", characterId);

        var getQuery = new GetCharacterQuery()
        {
            Id = characterId.Value
        };

        var getData = await _xivApiAccessor.GetCharacter(getQuery);

        var characterFcId = getData?.Character?.FreeCompanyId;

        _logger.LogDebug("Got character Free Company Id {FcId}.", characterFcId);

        result.Name = getData?.Character?.Name;

        if (characterFcId != guildOptions.FreeCompany.Id)
        {
            result.Status = Status.NotVerified;
            _logger.LogDebug("{Name} failed verification. Character FC: {CFcId}. Guild FC: {FcId}", result.Name, characterFcId, guildOptions.FreeCompany.Id);
            return(result);
        }

        result.Status         = Status.Verified;
        result.VerifiedUserId = criteria.UserId;
        _logger.LogDebug("{Name} has been verified with Free Company Id {FcId}.", result.Name, guildOptions.FreeCompany.Id);

        // Save character-user map to database.
        _logger.LogDebug("Saving {Name} to database with User Id {UserId}.", result.Name, criteria.UserId);

        var dataUser = await _userAccessor.GetUser(criteria.UserId) ?? new()
        {
            Id = criteria.UserId
        };
        var mergedUser = dataUser.Merge(characterId.Value);

        mergedUser.Name = criteria.Name;
        mergedUser.Nicknames[criteria.GuildId] = result.Name ?? "";

        await _userAccessor.SaveUser(mergedUser);

        return(result);
    }
}