Skip to content

Commit

Permalink
introduce "agent" query
Browse files Browse the repository at this point in the history
  • Loading branch information
boscohyun committed May 31, 2024
1 parent 4a38304 commit 56ea8cb
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 0 deletions.
8 changes: 8 additions & 0 deletions Mimir/GraphQL/Objects/AgentObject.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using Libplanet.Crypto;

namespace Mimir.GraphQL.Objects;

public class AgentObject(Address address)
{
public Address Address { get; set; } = address;
}
47 changes: 47 additions & 0 deletions Mimir/GraphQL/Types/AgentType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using Lib9c.GraphQL.Types;
using Libplanet.Crypto;
using Mimir.GraphQL.Objects;
using Nekoyume;

namespace Mimir.GraphQL.Types;

public class AgentType : ObjectType<AgentObject>
{
protected override void Configure(IObjectTypeDescriptor<AgentObject> descriptor)
{
descriptor
.Field(f => f.Address)
.Type<NonNullType<AddressType>>();
descriptor
.Field("avatar")
.Argument("index", a => a.Type<NonNullType<IntType>>())
.Type<AvatarType>()
.Resolve(context =>
{
var agentAddress = context.Parent<AgentObject>().Address;
var index = context.ArgumentValue<int>("index");
Address avatarAddress;
try
{
avatarAddress = Addresses.GetAvatarAddress(agentAddress, index);
}
catch (ArgumentOutOfRangeException)
{
return null;
}

return new AvatarObject(avatarAddress);
});
descriptor
.Field("avatars")
.Type<NonNullType<ListType<NonNullType<AvatarType>>>>()
.Resolve(context =>
{
var agentAddress = context.Parent<AgentObject>().Address;
return Enumerable.Range(0, GameConfig.SlotCount)
.Select(i => Addresses.GetAvatarAddress(agentAddress, i))
.Select(avatarAddress => new AvatarObject(avatarAddress))
.ToList();
});
}
}
12 changes: 12 additions & 0 deletions Mimir/GraphQL/Types/QueryType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,18 @@ public class QueryType : ObjectType<Query>
{
protected override void Configure(IObjectTypeDescriptor<Query> descriptor)
{
descriptor
.Field("agent")
.Argument("planetName", a => a.Type<NonNullType<PlanetNameEnumType>>())
.Argument("address", a => a.Type<NonNullType<AddressType>>())
.Type<AgentType>()
.Resolve(context =>
{
context.ScopedContextData = context.ScopedContextData
.Add("planetName", context.ArgumentValue<PlanetName>("planetName"));
return new AgentObject(context.ArgumentValue<Address>("address"));
});

descriptor
.Field("avatar")
.Argument("planetName", a => a.Type<NonNullType<PlanetNameEnumType>>())
Expand Down

0 comments on commit 56ea8cb

Please sign in to comment.