moves last server API logic inside its own module
This commit is contained in:
265
main.js
265
main.js
@@ -6617,7 +6617,19 @@ var $author$project$Main$applyUpdate = F2(
|
||||
return model;
|
||||
}
|
||||
});
|
||||
var $elm$json$Json$Encode$int = _Json_wrap;
|
||||
var $elm$core$Set$Set_elm_builtin = function (a) {
|
||||
return {$: 'Set_elm_builtin', a: a};
|
||||
};
|
||||
var $elm$core$Set$empty = $elm$core$Set$Set_elm_builtin($elm$core$Dict$empty);
|
||||
var $elm$core$Set$insert = F2(
|
||||
function (key, _v0) {
|
||||
var dict = _v0.a;
|
||||
return $elm$core$Set$Set_elm_builtin(
|
||||
A3($elm$core$Dict$insert, key, _Utils_Tuple0, dict));
|
||||
});
|
||||
var $elm$core$Set$fromList = function (list) {
|
||||
return A3($elm$core$List$foldl, $elm$core$Set$insert, $elm$core$Set$empty, list);
|
||||
};
|
||||
var $elm$core$Maybe$map = F2(
|
||||
function (f, maybe) {
|
||||
if (maybe.$ === 'Just') {
|
||||
@@ -6652,134 +6664,6 @@ var $author$project$Main$itemInSelection = F2(
|
||||
$elm$core$Set$member(item.id),
|
||||
selection));
|
||||
});
|
||||
var $elm$json$Json$Encode$list = F2(
|
||||
function (func, entries) {
|
||||
return _Json_wrap(
|
||||
A3(
|
||||
$elm$core$List$foldl,
|
||||
_Json_addEntry(func),
|
||||
_Json_emptyArray(_Utils_Tuple0),
|
||||
entries));
|
||||
});
|
||||
var $elm$json$Json$Encode$null = _Json_encodeNull;
|
||||
var $elm$json$Json$Encode$object = function (pairs) {
|
||||
return _Json_wrap(
|
||||
A3(
|
||||
$elm$core$List$foldl,
|
||||
F2(
|
||||
function (_v0, obj) {
|
||||
var k = _v0.a;
|
||||
var v = _v0.b;
|
||||
return A3(_Json_addField, k, v, obj);
|
||||
}),
|
||||
_Json_emptyObject(_Utils_Tuple0),
|
||||
pairs));
|
||||
};
|
||||
var $author$project$Main$targetItemsFor = F2(
|
||||
function (mode, model) {
|
||||
switch (mode.$) {
|
||||
case 'Add':
|
||||
return _List_Nil;
|
||||
case 'Buy':
|
||||
return A2($elm$core$Maybe$withDefault, _List_Nil, model.merchantItems);
|
||||
case 'Sell':
|
||||
return A2($elm$core$Maybe$withDefault, _List_Nil, model.loot);
|
||||
default:
|
||||
return A2($elm$core$Maybe$withDefault, _List_Nil, model.groupLoot);
|
||||
}
|
||||
});
|
||||
var $author$project$Main$buildPayload = F2(
|
||||
function (mode, model) {
|
||||
var items = A2(
|
||||
$elm$core$List$filter,
|
||||
$author$project$Main$itemInSelection(model.state.selection),
|
||||
A2($author$project$Main$targetItemsFor, mode, model));
|
||||
switch (mode.$) {
|
||||
case 'Buy':
|
||||
return $elm$json$Json$Encode$object(
|
||||
_List_fromArray(
|
||||
[
|
||||
_Utils_Tuple2(
|
||||
'items',
|
||||
A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
function (i) {
|
||||
return A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
$elm$core$Basics$identity,
|
||||
_List_fromArray(
|
||||
[
|
||||
$elm$json$Json$Encode$int(i.id),
|
||||
$elm$json$Json$Encode$null
|
||||
]));
|
||||
},
|
||||
items)),
|
||||
_Utils_Tuple2('global_mod', $elm$json$Json$Encode$null)
|
||||
]));
|
||||
case 'Sell':
|
||||
return $elm$json$Json$Encode$object(
|
||||
_List_fromArray(
|
||||
[
|
||||
_Utils_Tuple2(
|
||||
'items',
|
||||
A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
function (i) {
|
||||
return A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
$elm$core$Basics$identity,
|
||||
_List_fromArray(
|
||||
[
|
||||
$elm$json$Json$Encode$int(i.id),
|
||||
$elm$json$Json$Encode$null
|
||||
]));
|
||||
},
|
||||
items)),
|
||||
_Utils_Tuple2('global_mod', $elm$json$Json$Encode$null)
|
||||
]));
|
||||
case 'Grab':
|
||||
return $elm$json$Json$Encode$object(
|
||||
_List_fromArray(
|
||||
[
|
||||
_Utils_Tuple2(
|
||||
'items',
|
||||
A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
function (i) {
|
||||
return $elm$json$Json$Encode$int(i.id);
|
||||
},
|
||||
items)),
|
||||
_Utils_Tuple2('global_mod', $elm$json$Json$Encode$null)
|
||||
]));
|
||||
default:
|
||||
return $elm$json$Json$Encode$object(
|
||||
_List_fromArray(
|
||||
[
|
||||
_Utils_Tuple2(
|
||||
'items',
|
||||
A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
function (i) {
|
||||
return $elm$json$Json$Encode$int(i.id);
|
||||
},
|
||||
items)),
|
||||
_Utils_Tuple2('global_mod', $elm$json$Json$Encode$null)
|
||||
]));
|
||||
}
|
||||
});
|
||||
var $elm$core$Set$Set_elm_builtin = function (a) {
|
||||
return {$: 'Set_elm_builtin', a: a};
|
||||
};
|
||||
var $elm$core$Set$empty = $elm$core$Set$Set_elm_builtin($elm$core$Dict$empty);
|
||||
var $elm$core$Set$insert = F2(
|
||||
function (key, _v0) {
|
||||
var dict = _v0.a;
|
||||
return $elm$core$Set$Set_elm_builtin(
|
||||
A3($elm$core$Dict$insert, key, _Utils_Tuple0, dict));
|
||||
});
|
||||
var $elm$core$Set$fromList = function (list) {
|
||||
return A3($elm$core$List$foldl, $elm$core$Set$insert, $elm$core$Set$empty, list);
|
||||
};
|
||||
var $elm$core$Debug$log = _Debug_log;
|
||||
var $elm$core$Platform$Cmd$none = $elm$core$Platform$Cmd$batch(_List_Nil);
|
||||
var $elm$browser$Browser$Navigation$pushUrl = _Browser_pushUrl;
|
||||
@@ -6883,6 +6767,105 @@ var $author$project$Api$apiResponseDecoder = A5(
|
||||
$elm$json$Json$Decode$list($author$project$Api$updatesDecoder))),
|
||||
$elm$json$Json$Decode$maybe(
|
||||
A2($elm$json$Json$Decode$field, 'errors', $elm$json$Json$Decode$string)));
|
||||
var $elm$json$Json$Encode$int = _Json_wrap;
|
||||
var $elm$json$Json$Encode$list = F2(
|
||||
function (func, entries) {
|
||||
return _Json_wrap(
|
||||
A3(
|
||||
$elm$core$List$foldl,
|
||||
_Json_addEntry(func),
|
||||
_Json_emptyArray(_Utils_Tuple0),
|
||||
entries));
|
||||
});
|
||||
var $elm$json$Json$Encode$null = _Json_encodeNull;
|
||||
var $elm$json$Json$Encode$object = function (pairs) {
|
||||
return _Json_wrap(
|
||||
A3(
|
||||
$elm$core$List$foldl,
|
||||
F2(
|
||||
function (_v0, obj) {
|
||||
var k = _v0.a;
|
||||
var v = _v0.b;
|
||||
return A3(_Json_addField, k, v, obj);
|
||||
}),
|
||||
_Json_emptyObject(_Utils_Tuple0),
|
||||
pairs));
|
||||
};
|
||||
var $author$project$Api$buildPayload = F2(
|
||||
function (mode, items) {
|
||||
switch (mode.$) {
|
||||
case 'Buy':
|
||||
return $elm$json$Json$Encode$object(
|
||||
_List_fromArray(
|
||||
[
|
||||
_Utils_Tuple2(
|
||||
'items',
|
||||
A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
function (i) {
|
||||
return A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
$elm$core$Basics$identity,
|
||||
_List_fromArray(
|
||||
[
|
||||
$elm$json$Json$Encode$int(i.id),
|
||||
$elm$json$Json$Encode$null
|
||||
]));
|
||||
},
|
||||
items)),
|
||||
_Utils_Tuple2('global_mod', $elm$json$Json$Encode$null)
|
||||
]));
|
||||
case 'Sell':
|
||||
return $elm$json$Json$Encode$object(
|
||||
_List_fromArray(
|
||||
[
|
||||
_Utils_Tuple2(
|
||||
'items',
|
||||
A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
function (i) {
|
||||
return A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
$elm$core$Basics$identity,
|
||||
_List_fromArray(
|
||||
[
|
||||
$elm$json$Json$Encode$int(i.id),
|
||||
$elm$json$Json$Encode$null
|
||||
]));
|
||||
},
|
||||
items)),
|
||||
_Utils_Tuple2('global_mod', $elm$json$Json$Encode$null)
|
||||
]));
|
||||
case 'Grab':
|
||||
return $elm$json$Json$Encode$object(
|
||||
_List_fromArray(
|
||||
[
|
||||
_Utils_Tuple2(
|
||||
'items',
|
||||
A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
function (i) {
|
||||
return $elm$json$Json$Encode$int(i.id);
|
||||
},
|
||||
items)),
|
||||
_Utils_Tuple2('global_mod', $elm$json$Json$Encode$null)
|
||||
]));
|
||||
default:
|
||||
return $elm$json$Json$Encode$object(
|
||||
_List_fromArray(
|
||||
[
|
||||
_Utils_Tuple2(
|
||||
'items',
|
||||
A2(
|
||||
$elm$json$Json$Encode$list,
|
||||
function (i) {
|
||||
return $elm$json$Json$Encode$int(i.id);
|
||||
},
|
||||
items)),
|
||||
_Utils_Tuple2('global_mod', $elm$json$Json$Encode$null)
|
||||
]));
|
||||
}
|
||||
});
|
||||
var $elm$http$Http$jsonBody = function (value) {
|
||||
return A2(
|
||||
_Http_pair,
|
||||
@@ -6890,7 +6873,7 @@ var $elm$http$Http$jsonBody = function (value) {
|
||||
A2($elm$json$Json$Encode$encode, 0, value));
|
||||
};
|
||||
var $author$project$Api$sendRequest = F3(
|
||||
function (mode, id, payload) {
|
||||
function (mode, id, items) {
|
||||
var _v0 = function () {
|
||||
switch (mode.$) {
|
||||
case 'Add':
|
||||
@@ -6907,7 +6890,8 @@ var $author$project$Api$sendRequest = F3(
|
||||
var method = _v0.b;
|
||||
return $elm$http$Http$request(
|
||||
{
|
||||
body: $elm$http$Http$jsonBody(payload),
|
||||
body: $elm$http$Http$jsonBody(
|
||||
A2($author$project$Api$buildPayload, mode, items)),
|
||||
expect: A2($elm$http$Http$expectJson, $author$project$Api$GotActionResult, $author$project$Api$apiResponseDecoder),
|
||||
headers: _List_Nil,
|
||||
method: method,
|
||||
@@ -6956,6 +6940,19 @@ var $author$project$Main$switchSelectionState = F2(
|
||||
return A2($elm$core$Debug$log, 'ignore switchSelectionState', $elm$core$Maybe$Nothing);
|
||||
}
|
||||
});
|
||||
var $author$project$Main$targetItemsFor = F2(
|
||||
function (mode, model) {
|
||||
switch (mode.$) {
|
||||
case 'Add':
|
||||
return _List_Nil;
|
||||
case 'Buy':
|
||||
return A2($elm$core$Maybe$withDefault, _List_Nil, model.merchantItems);
|
||||
case 'Sell':
|
||||
return A2($elm$core$Maybe$withDefault, _List_Nil, model.loot);
|
||||
default:
|
||||
return A2($elm$core$Maybe$withDefault, _List_Nil, model.groupLoot);
|
||||
}
|
||||
});
|
||||
var $elm$core$Debug$toString = _Debug_toString;
|
||||
var $elm$url$Url$addPort = F2(
|
||||
function (maybePort, starter) {
|
||||
@@ -7243,6 +7240,10 @@ var $author$project$Main$update = F2(
|
||||
continue update;
|
||||
} else {
|
||||
var mode = _v12.a;
|
||||
var items = A2(
|
||||
$elm$core$List$filter,
|
||||
$author$project$Main$itemInSelection(model.state.selection),
|
||||
A2($author$project$Main$targetItemsFor, mode, model));
|
||||
return _Utils_Tuple2(
|
||||
model,
|
||||
A2(
|
||||
@@ -7252,7 +7253,7 @@ var $author$project$Main$update = F2(
|
||||
$author$project$Api$sendRequest,
|
||||
mode,
|
||||
$elm$core$String$fromInt(model.player.id),
|
||||
A2($author$project$Main$buildPayload, mode, model))));
|
||||
items)));
|
||||
}
|
||||
case 'UndoLastAction':
|
||||
return _Utils_Tuple2(
|
||||
|
||||
75
src/Api.elm
75
src/Api.elm
@@ -186,35 +186,52 @@ undoLastAction id = Http.request
|
||||
, tracker = Nothing
|
||||
}
|
||||
|
||||
sendRequest : ViewMode -> String -> E.Value -> Cmd Msg
|
||||
sendRequest mode id payload =
|
||||
let
|
||||
(endpoint, method) = case mode of
|
||||
Modes.Add ->
|
||||
( "http://localhost:8088/api/players/" ++ id ++ "/loot"
|
||||
, "POST"
|
||||
)
|
||||
Modes.Buy ->
|
||||
( "http://localhost:8088/api/players/" ++ id ++ "/loot"
|
||||
, "PUT"
|
||||
)
|
||||
Modes.Sell ->
|
||||
( "http://localhost:8088/api/players/" ++ id ++ "/loot"
|
||||
, "DELETE"
|
||||
)
|
||||
Modes.Grab ->
|
||||
( "http://localhost:8088/api/players/" ++ id ++ "/claims"
|
||||
, "POST")
|
||||
in
|
||||
Http.request
|
||||
{ method = method
|
||||
, headers = []
|
||||
, url = endpoint
|
||||
, body = Http.jsonBody payload
|
||||
, expect = Http.expectJson GotActionResult apiResponseDecoder
|
||||
, timeout = Nothing
|
||||
, tracker = Nothing
|
||||
}
|
||||
buildPayload : ViewMode -> List Item -> E.Value
|
||||
buildPayload mode items =
|
||||
case mode of
|
||||
Modes.Buy -> E.object
|
||||
[ ( "items", items |> E.list (\i -> E.list identity [E.int i.id, E.null]))
|
||||
, ("global_mod", E.null )
|
||||
]
|
||||
Modes.Sell -> E.object
|
||||
[ ( "items", items |> E.list (\i -> E.list identity [E.int i.id, E.null]))
|
||||
, ("global_mod", E.null )
|
||||
]
|
||||
Modes.Grab -> E.object
|
||||
[ ( "items", items |> E.list (\i -> E.int i.id))
|
||||
, ("global_mod", E.null )
|
||||
]
|
||||
Modes.Add -> E.object
|
||||
[ ( "items", items |> E.list (\i -> E.int i.id))
|
||||
, ("global_mod", E.null )
|
||||
]
|
||||
|
||||
sendRequest : ViewMode -> String -> List Item -> Cmd Msg
|
||||
sendRequest mode id items =
|
||||
let
|
||||
(endpoint, method) = case mode of
|
||||
Modes.Add ->
|
||||
( "http://localhost:8088/api/players/" ++ id ++ "/loot"
|
||||
, "POST" )
|
||||
Modes.Buy ->
|
||||
( "http://localhost:8088/api/players/" ++ id ++ "/loot"
|
||||
, "PUT" )
|
||||
Modes.Sell ->
|
||||
( "http://localhost:8088/api/players/" ++ id ++ "/loot"
|
||||
, "DELETE" )
|
||||
Modes.Grab ->
|
||||
( "http://localhost:8088/api/players/" ++ id ++ "/claims"
|
||||
, "POST" )
|
||||
in
|
||||
Http.request
|
||||
{ method = method
|
||||
, headers = []
|
||||
, url = endpoint
|
||||
, body = Http.jsonBody <| buildPayload mode items
|
||||
, expect = Http.expectJson GotActionResult apiResponseDecoder
|
||||
, timeout = Nothing
|
||||
, tracker = Nothing
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
36
src/Main.elm
36
src/Main.elm
@@ -205,8 +205,18 @@ update msg model =
|
||||
case model.state.activeMode of
|
||||
Nothing ->
|
||||
update (ModeSwitched Nothing) model
|
||||
|
||||
Just mode ->
|
||||
(model, Cmd.map ApiMsg <| Api.sendRequest mode (String.fromInt model.player.id) (buildPayload mode model))
|
||||
let items = targetItemsFor mode model
|
||||
|> List.filter (itemInSelection model.state.selection)
|
||||
in
|
||||
( model
|
||||
, Cmd.map ApiMsg
|
||||
<| Api.sendRequest
|
||||
mode
|
||||
(String.fromInt model.player.id)
|
||||
items
|
||||
)
|
||||
|
||||
UndoLastAction ->
|
||||
(model, Cmd.map ApiMsg <| Api.undoLastAction model.player.id)
|
||||
@@ -226,30 +236,6 @@ targetItemsFor mode model =
|
||||
Modes.Sell ->Maybe.withDefault [] model.loot
|
||||
Modes.Grab -> Maybe.withDefault [] model.groupLoot
|
||||
|
||||
buildPayload : ViewMode -> Model -> E.Value
|
||||
buildPayload mode model =
|
||||
let
|
||||
items = targetItemsFor mode model
|
||||
|> List.filter (itemInSelection model.state.selection)
|
||||
in
|
||||
case mode of
|
||||
Modes.Buy -> E.object
|
||||
[ ( "items", items |> E.list (\i -> E.list identity [E.int i.id, E.null]))
|
||||
, ("global_mod", E.null )
|
||||
]
|
||||
Modes.Sell -> E.object
|
||||
[ ( "items", items |> E.list (\i -> E.list identity [E.int i.id, E.null]))
|
||||
, ("global_mod", E.null )
|
||||
]
|
||||
Modes.Grab -> E.object
|
||||
[ ( "items", items |> E.list (\i -> E.int i.id))
|
||||
, ("global_mod", E.null )
|
||||
]
|
||||
Modes.Add -> E.object
|
||||
[ ( "items", items |> E.list (\i -> E.int i.id))
|
||||
, ("global_mod", E.null )
|
||||
]
|
||||
|
||||
-- DbUpdates always refer to the active player's loot
|
||||
applyUpdate : Api.Update -> Model -> Model
|
||||
applyUpdate u model =
|
||||
|
||||
Reference in New Issue
Block a user