diff --git a/src/Api.elm b/src/Api.elm index a461948..cab7847 100644 --- a/src/Api.elm +++ b/src/Api.elm @@ -22,8 +22,8 @@ type Update = ItemRemoved Item | ItemAdded Item | WealthUpdated Wealth - | ClaimAdded () - | ClaimRemoved () + | ClaimAdded Claim + | ClaimRemoved Claim type Msg @@ -90,6 +90,22 @@ type alias Claim = } +claimDecoder = + D.map3 Claim + (D.field "id" int) + (D.field "player_id" int) + (D.field "loot_id" int) + + +fetchClaims : Int -> Cmd Msg +fetchClaims playerId = + Http.get + { url = "http://localhost:8088/api/claims" + , expect = + valueDecoder (D.list claimDecoder) + |> Http.expectJson (GotClaims playerId) + } + -- PLAYERS -- @@ -168,22 +184,6 @@ fetchLoot dest = -- CLAIMS -claimDecoder = - D.map3 Claim - (D.field "id" int) - (D.field "player_id" int) - (D.field "loot_id" int) - - -fetchClaims : Int -> Cmd Msg -fetchClaims playerId = - Http.get - { url = "http://localhost:8088/api/claims" - , expect = - valueDecoder (D.list claimDecoder) - |> Http.expectJson (GotClaims playerId) - } - -- API Response @@ -208,8 +208,8 @@ updatesDecoder = [ field "ItemRemoved" (itemDecoder |> D.andThen (\i -> succeed <| ItemRemoved i)) , field "ItemAdded" (itemDecoder |> D.andThen (\i -> succeed <| ItemAdded i)) , field "Wealth" (wealthDecoder |> D.andThen (\i -> succeed <| WealthUpdated i)) - , field "ClaimRemoved" (succeed () |> D.andThen (\i -> succeed <| ClaimRemoved i)) - , field "ClaimAdded" (succeed () |> D.andThen (\i -> succeed <| ClaimAdded i)) + , field "ClaimRemoved" (claimDecoder |> D.andThen (\i -> succeed <| ClaimRemoved i)) + , field "ClaimAdded" (claimDecoder |> D.andThen (\i -> succeed <| ClaimAdded i)) ] @@ -247,18 +247,16 @@ buildPayload mode items = E.object [ ( "items", items |> E.list (\i -> E.list identity [ E.int i.id, E.null ]) ) , ( "global_mod", E.null ) + , ( "players", E.null ) ] + -- API expects the list of claimed loot ids Modes.Grab -> - E.object - [ ( "items", items |> E.list (\i -> E.int i.id) ) - , ( "global_mod", E.null ) - ] + items |> E.list (\i -> E.int i.id) Modes.Add -> E.object [ ( "items", items |> E.list (\i -> E.int i.id) ) - , ( "global_mod", E.null ) ] diff --git a/src/Main.elm b/src/Main.elm index 87fb403..5e56639 100644 --- a/src/Main.elm +++ b/src/Main.elm @@ -306,6 +306,12 @@ setLoot items model = { model | chest = { chest | loot = items } } +setClaims : Claims -> Model -> Model +setClaims claims model = + let + chest = model.chest + in + { model | chest = { chest | claims = claims } } -- DbUpdates always refer to the active player's loot @@ -340,11 +346,12 @@ applyUpdate u model = } } - Api.ClaimAdded _ -> - model + Api.ClaimAdded claim -> + model |> setClaims (claim :: model.chest.claims) - Api.ClaimRemoved _ -> + Api.ClaimRemoved claim -> model + |> setClaims (List.filter (\c -> c.id /= claim.id) model.chest.claims)