defmodule Mix.Tasks.Todos do
use Mix.Task
@moduledoc """
Get all TODOs from the specified databases
"""
alias Notion.{Database, Filter, Sort, PropertyFilter, PeopleFilter, Query, SelectFilter}
@shortdoc "Get all PDP TODOs"
def run(_) do
Mix.Task.run("app.start")
%{
"Anna" => "6c176b4016c54878b20b0ebe45c9a1f1",
"Anton" => "3f3d34c5519245888b1e35b6146453de",
"Emanuel" => "a79657050f8b441d9111f11c4eaa19c8",
"Robert" => "245d2853965d4ddd8dbf42565a1501bd",
"Ronald" => "b1ecb99451f845b895e9b873dfcccac2",
"Leon" => "279f4f67e3bc4c6ea9c1a63aaed63851",
"Vlad" => "3b3fe8e3be824d149c0a3b9b1f6c288d"
}
|> Map.values()
|> Enum.reduce([], fn db_id, acc ->
sort = %Sort{
property: "Session",
direction: Sort.Direction.Ascending.value()
}
filter = %Filter{
and: [
%PropertyFilter{
property: "Owner",
people: %PeopleFilter{
contains: "9441c930-2a75-40c9-9c00-bd5ad030fd2f"
}
},
%PropertyFilter{
property: "Status",
select: %SelectFilter{
equals: "ToDo"
}
}
]
}
query = %Query{
filter: filter,
sorts: [sort]
}
with {:ok, json_string} <- Jason.encode(query),
{:ok, payload} <- Jason.decode(json_string),
{:ok, %Tesla.Env{} = env} <- Notion.query_database(db_id, payload) do
acc ++ env.body.results
end
end)
|> Enum.map(fn result ->
struct(Database, result)
end)
|> Enum.flat_map(fn database ->
database.properties[:Task][:title]
|> Enum.map(fn title_property ->
title_property[:plain_text]
end)
end)
end
end