Skip to content

Commit

Permalink
Merge pull request #2573 from planetarium/refactor/issue-2562
Browse files Browse the repository at this point in the history
Refactor GetAvatarState
  • Loading branch information
ipdae authored May 22, 2024
2 parents c93e993 + 8c1dc9c commit 676a245
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 8 deletions.
4 changes: 3 additions & 1 deletion .Lib9c.Tests/Action/ClaimItemsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,9 @@ public void Execute(string memo)
RandomSeed = 0,
});

var avatarState = states.GetAvatarState(recipientAvatarAddress);
var avatarState = states.GetAvatarState(recipientAvatarAddress, getQuestList: false, getWorldInformation: false);
Assert.Null(avatarState.questList);
Assert.Null(avatarState.worldInformation);
var mail = Assert.IsType<ClaimItemsMail>(avatarState.mailBox.Single());
if (string.IsNullOrEmpty(memo))
{
Expand Down
4 changes: 2 additions & 2 deletions Lib9c/Action/ClaimItems.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ public override IWorld Execute(IActionContext context)

foreach (var (avatarAddress, fungibleAssetValues) in ClaimData)
{
var avatarState = states.GetAvatarState(avatarAddress)
var avatarState = states.GetAvatarState(avatarAddress, getQuestList: false, getWorldInformation: false)
?? throw new FailedLoadStateException(
ActionTypeText,
GetSignerAndOtherAddressesHex(context, avatarAddress),
Expand Down Expand Up @@ -160,7 +160,7 @@ public override IWorld Execute(IActionContext context)
mailBox.Add(mail);
mailBox.CleanUp();
avatarState.mailBox = mailBox;
states = states.SetAvatarState(avatarAddress, avatarState);
states = states.SetAvatarState(avatarAddress, avatarState, setWorldInformation: false, setQuestList: false);
}

return states;
Expand Down
26 changes: 21 additions & 5 deletions Lib9c/Module/AvatarModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,13 @@ namespace Nekoyume.Module
{
public static class AvatarModule
{
// This method automatically determines if given IValue is a legacy avatar state or not.
public static AvatarState GetAvatarState(this IWorldState worldState, Address address)
// TODO change flags set default false
public static AvatarState GetAvatarState(
this IWorldState worldState,
Address address,
bool getInventory = true,
bool getWorldInformation = true,
bool getQuestList = true)
{
var account = worldState.GetAccountState(Addresses.Avatar);
var serializedAvatarRaw = account.GetState(address);
Expand Down Expand Up @@ -64,9 +69,20 @@ public static AvatarState GetAvatarState(this IWorldState worldState, Address ad

try
{
avatarState.inventory = GetInventoryV2(worldState, address);
avatarState.worldInformation = GetWorldInformationV2(worldState, address);
avatarState.questList = GetQuestListV2(worldState, address);
if (getInventory)
{
avatarState.inventory = GetInventoryV2(worldState, address);
}

if (getWorldInformation)
{
avatarState.worldInformation = GetWorldInformationV2(worldState, address);
}

if (getQuestList)
{
avatarState.questList = GetQuestListV2(worldState, address);
}
}
catch (KeyNotFoundException)
{
Expand Down

0 comments on commit 676a245

Please sign in to comment.