71 lines
2.1 KiB
Gleam
71 lines
2.1 KiB
Gleam
import gleam/dynamic/decode
|
|
import gleam/json
|
|
import spacetraders_sdk/models/account.{type Account}
|
|
import spacetraders_sdk/models/agent.{type Agent}
|
|
import spacetraders_sdk/models/agent_symbol.{type AgentSymbol}
|
|
import spacetraders_sdk/models/contract.{type Contract}
|
|
import spacetraders_sdk/models/faction.{type Faction}
|
|
import spacetraders_sdk/models/faction_symbol.{type FactionSymbol}
|
|
import spacetraders_sdk/models/ship.{type Ship}
|
|
import spacetraders_sdk/utils/api.{type ApiResponse}
|
|
import spacetraders_sdk/utils/auth.{
|
|
type AccountToken, type AgentToken, AccountAuth, AgentAuth,
|
|
}
|
|
|
|
pub fn get_account(token: AgentToken) -> ApiResponse(Account) {
|
|
let request = api.get(AgentAuth(token), "/my/account")
|
|
use response <- api.try_send(request)
|
|
case response.status {
|
|
200 ->
|
|
api.parse_data_response(
|
|
response,
|
|
decode.field("account", account.decoder(), decode.success),
|
|
)
|
|
_ -> api.parse_error_response(response)
|
|
}
|
|
}
|
|
|
|
pub type AgentRegistered {
|
|
AgentRegistered(
|
|
token: AgentToken,
|
|
agent: Agent,
|
|
faction: Faction,
|
|
contract: Contract,
|
|
ships: List(Ship),
|
|
)
|
|
}
|
|
|
|
pub fn register_new_agent(
|
|
token: AccountToken,
|
|
agent_symbol: AgentSymbol,
|
|
faction_symbol: FactionSymbol,
|
|
) -> ApiResponse(AgentRegistered) {
|
|
let request =
|
|
api.post_json(
|
|
AccountAuth(token),
|
|
"/register",
|
|
json.object([
|
|
#("symbol", agent_symbol.encode(agent_symbol)),
|
|
#("faction", faction_symbol.encode(faction_symbol)),
|
|
]),
|
|
)
|
|
use response <- api.try_send(request)
|
|
case response.status {
|
|
201 ->
|
|
api.parse_data_response(response, {
|
|
use token <- decode.field("token", auth.agent_token_decoder())
|
|
use agent <- decode.field("agent", agent.decoder())
|
|
use faction <- decode.field("faction", faction.decoder())
|
|
use contract <- decode.field("contract", contract.decoder())
|
|
use ships <- decode.field("ships", decode.list(ship.decoder()))
|
|
decode.success(AgentRegistered(
|
|
token:,
|
|
agent:,
|
|
faction:,
|
|
contract:,
|
|
ships:,
|
|
))
|
|
})
|
|
_ -> api.parse_error_response(response)
|
|
}
|
|
}
|