defmodule ApiBrasil.Platform.Account do @moduledoc """ Conta: saldo, faturas, notificações e tickets. alias ApiBrasil.Platform.Account {:ok, saldo} = Account.balance(client) {:ok, _} = Account.create_ticket(client, %{"subject" => "Dúvida", "message" => "Olá!"}) """ use ApiBrasil.Core.Service @doc "Marca uma notificação como lida: `PATCH /notifications/{id}/read`." @spec mark_notification_read(Client.t(), String.t() | integer(), keyword()) :: result() def mark_notification_read(client, id, opts \\ []) do Service.patch(client, "notifications/#{Service.encode_path(id)}/read", nil, opts) end @doc """ Como `mark_notification_read/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha. """ @spec mark_notification_read!(Client.t(), String.t() | integer(), keyword()) :: map() def mark_notification_read!(client, id, opts \\ []) do Service.unwrap!(mark_notification_read(client, id, opts)) end @doc "Atualiza um ticket: `PUT /ticket/{id}`." @spec update_ticket(Client.t(), String.t() | integer(), term(), keyword()) :: result() def update_ticket(client, id, body \\ nil, opts \\ []) do Service.put(client, "ticket/#{Service.encode_path(id)}", body, opts) end @doc "Como `update_ticket/4`, mas levanta `ApiBrasil.Core.Error` em caso de falha." @spec update_ticket!(Client.t(), String.t() | integer(), term(), keyword()) :: map() def update_ticket!(client, id, body \\ nil, opts \\ []) do Service.unwrap!(update_ticket(client, id, body, opts)) end @doc "Lista as mensagens de um ticket: `GET /ticket/{id}/messages`." @spec ticket_messages(Client.t(), String.t() | integer(), keyword()) :: result() def ticket_messages(client, id, opts \\ []) do Service.get(client, "ticket/#{Service.encode_path(id)}/messages", opts) end @doc "Como `ticket_messages/3`, mas levanta `ApiBrasil.Core.Error` em caso de falha." @spec ticket_messages!(Client.t(), String.t() | integer(), keyword()) :: map() def ticket_messages!(client, id, opts \\ []) do Service.unwrap!(ticket_messages(client, id, opts)) end @doc "Responde um ticket: `POST /ticket/{id}/messages`." @spec add_ticket_message(Client.t(), String.t() | integer(), term(), keyword()) :: result() def add_ticket_message(client, id, body \\ nil, opts \\ []) do Service.post(client, "ticket/#{Service.encode_path(id)}/messages", body, opts) end @doc """ Como `add_ticket_message/4`, mas levanta `ApiBrasil.Core.Error` em caso de falha. """ @spec add_ticket_message!(Client.t(), String.t() | integer(), term(), keyword()) :: map() def add_ticket_message!(client, id, body \\ nil, opts \\ []) do Service.unwrap!(add_ticket_message(client, id, body, opts)) end route_get(:balance, "balance", "Saldo/créditos da conta: `GET /balance`.") route_get(:plan, "plan", "Plano atual: `GET /plan`.") route_get(:invoices, "invoices", "Lista as faturas: `GET /invoices`.") route_get(:invoice_notes, "invoices/notes", "Notas fiscais das faturas: `GET /invoices/notes`.") route_get(:jobs, "jobs", "Jobs em fila do usuário: `GET /jobs`.") route_get(:credentials, "credentials", "Credenciais do usuário: `GET /credentials`.") route_get(:indications, "indications", "Indicações do usuário: `GET /indications`.") route_get(:notifications, "notifications", "Lista as notificações: `GET /notifications`.") route_get(:tickets, "tickets", "Lista os tickets de suporte: `GET /tickets`.") route_post(:pay_invoice, "invoices/pay", "Paga uma fatura: `POST /invoices/pay`.") route_post(:requests, "requests", "Histórico de requisições da conta: `POST /requests`.") route_post( :api_requests, "api/requests", "Histórico de requisições por API: `POST /api/requests`." ) route_post(:create_ticket, "ticket", "Abre um ticket: `POST /ticket`.") route_empty( :mark_all_notifications_read, :post, "notifications/mark-all-read", "Marca todas as notificações como lidas: `POST /notifications/mark-all-read`." ) end