99 lines
2.9 KiB
Gleam
99 lines
2.9 KiB
Gleam
import gleam/dynamic/decode.{type Decoder}
|
|
import gleam/option.{type Option}
|
|
import models/agent.{type Agent}
|
|
import models/agent_event.{type AgentEvent}
|
|
import models/agent_symbol.{type AgentSymbol}
|
|
import models/public_agent.{type PublicAgent}
|
|
import utils/api.{type ApiResponse, type PagedData}
|
|
import utils/auth.{type AgentToken, AgentAuth}
|
|
|
|
pub type ListPublicAgentsResponse {
|
|
ListPublicAgentsResponse(agents: List(PublicAgent))
|
|
}
|
|
|
|
fn list_public_agents_response_decoder() -> Decoder(ListPublicAgentsResponse) {
|
|
use agents <- decode.then(decode.list(public_agent.decoder()))
|
|
decode.success(ListPublicAgentsResponse(agents:))
|
|
}
|
|
|
|
pub fn list_public_agents(
|
|
token: AgentToken,
|
|
page: Option(Int),
|
|
limit: Option(Int),
|
|
) -> ApiResponse(PagedData(ListPublicAgentsResponse)) {
|
|
let request = api.get_page(AgentAuth(token), "/agents", page, limit)
|
|
use response <- api.try_send(request)
|
|
case response.status {
|
|
200 ->
|
|
api.parse_paged_data_response(
|
|
response,
|
|
list_public_agents_response_decoder(),
|
|
)
|
|
_ -> api.parse_error_response(response)
|
|
}
|
|
}
|
|
|
|
pub type GetPublicAgentResponse {
|
|
GetPublicAgentResponse(agent: PublicAgent)
|
|
}
|
|
|
|
fn get_public_agent_response_decoder() -> Decoder(GetPublicAgentResponse) {
|
|
use agent <- decode.then(public_agent.decoder())
|
|
decode.success(GetPublicAgentResponse(agent:))
|
|
}
|
|
|
|
pub fn get_public_agent(
|
|
token: AgentToken,
|
|
agent_symbol: AgentSymbol,
|
|
) -> ApiResponse(GetPublicAgentResponse) {
|
|
let request =
|
|
api.get(
|
|
AgentAuth(token),
|
|
"/agents/" <> agent_symbol.to_string(agent_symbol),
|
|
)
|
|
use response <- api.try_send(request)
|
|
case response.status {
|
|
200 ->
|
|
api.parse_data_response(response, get_public_agent_response_decoder())
|
|
_ -> api.parse_error_response(response)
|
|
}
|
|
}
|
|
|
|
pub type GetAgentResponse {
|
|
GetAgentResponse(agent: Agent)
|
|
}
|
|
|
|
fn get_agent_response_decoder() -> decode.Decoder(GetAgentResponse) {
|
|
use agent <- decode.then(agent.decoder())
|
|
decode.success(GetAgentResponse(agent:))
|
|
}
|
|
|
|
pub fn get_agent(token: AgentToken) -> ApiResponse(GetAgentResponse) {
|
|
let request = api.get(AgentAuth(token), "/my/agent")
|
|
use response <- api.try_send(request)
|
|
case response.status {
|
|
200 -> api.parse_data_response(response, get_agent_response_decoder())
|
|
_ -> api.parse_error_response(response)
|
|
}
|
|
}
|
|
|
|
pub type GetAgentEventsResponse {
|
|
GetAgentEventsResponse(events: List(AgentEvent))
|
|
}
|
|
|
|
fn get_agent_events_response_decoder() -> Decoder(GetAgentEventsResponse) {
|
|
use events <- decode.then(decode.list(agent_event.decoder()))
|
|
decode.success(GetAgentEventsResponse(events:))
|
|
}
|
|
|
|
pub fn get_agent_events(
|
|
token: AgentToken,
|
|
) -> ApiResponse(GetAgentEventsResponse) {
|
|
let request = api.get(AgentAuth(token), "/my/agent/events")
|
|
use response <- api.try_send(request)
|
|
case response.status {
|
|
200 ->
|
|
api.parse_data_response(response, get_agent_events_response_decoder())
|
|
_ -> api.parse_error_response(response)
|
|
}
|
|
}
|