Current section
Files
Jump to
Current section
Files
lib/index.ex
defmodule Index do
alias Dotenv
def start(_type, _args) do
IO.puts("Welcome to the Todo App!")
loop("")
end
defp loop(_choice) do
IO.puts("Choose an option:")
IO.puts("1. Create Todo")
IO.puts("2. View all Todos")
IO.puts("3. View Todo by ID")
IO.puts("4. View Todo by Content")
IO.puts("5. View Todo by Status")
IO.puts("6. Edit Todo")
IO.puts("7. Delete Todo")
IO.puts("8. Exit")
input = IO.gets("Enter your choice: ") |> String.trim() |> String.to_integer()
case input do
1 -> create_todo()
2 -> view_all_todos()
3 -> view_todo_by_id()
4 -> view_todo_by_content()
5 -> view_todo_by_status()
6 -> edit_todo()
7 -> delete_todo()
8 -> exit()
_ -> IO.puts("Invalid choice. Please try again.")
end
loop(input)
end
defp create_todo do
IO.puts("Enter Todo content:")
content = IO.gets("") |> String.trim()
query = """
Todo.create({"todo": "#{content}", "completed": false})
"""
execute_query(query)
end
defp view_all_todos do
query = """
Todo.all()
"""
execute_query(query)
end
defp view_todo_by_id do
IO.puts("Enter Todo ID:")
id = IO.gets("") |> String.trim()
query = """
Todo.byId(#{id})
"""
execute_query(query)
end
defp view_todo_by_content do
IO.puts("Enter Todo content:")
content = IO.gets("") |> String.trim()
query = """
Todo.where(.todo.includes("#{content}"))
"""
execute_query(query)
end
defp view_todo_by_status do
IO.puts("Enter Todo completed status (true/false):")
status = IO.gets("") |> String.trim()
completed = String.to_existing_atom(status)
query = """
Todo.where(.completed == #{completed})
"""
execute_query(query)
end
defp edit_todo do
IO.puts("Enter Todo ID:")
id = IO.gets("") |> String.trim()
IO.puts("Enter new content (press Enter to skip):")
new_content = IO.gets("") |> String.trim()
IO.puts("Enter completed status (true/false):")
completed_str = IO.gets("") |> String.trim()
completed = String.to_existing_atom(completed_str)
query =
if new_content != "" do
"""
let toEdit = Todo.byId(#{id})
toEdit.update({ todo: "#{new_content}", completed: #{completed} })
"""
else
"""
let toEdit = Todo.byId(#{id})
toEdit.update({ completed: #{completed} })
"""
end
execute_query(query)
end
defp delete_todo do
IO.puts("Enter Todo ID:")
id = IO.gets("") |> String.trim()
query = """
let toDelete = Todo.byId(#{id})
toDelete.delete()
"""
execute_query(query)
end
defp execute_query(query) do
key = System.get_env("FAUNA_KEY")
case Faunadoo.query(query, key) do
{:ok, data} ->
IO.puts("Query result: #{Kernel.inspect(data)}")
{:error, reason} ->
IO.puts("Failed to execute query: #{reason}")
end
end
defp exit do
IO.puts("Goodbye!")
System.halt(0)
end
end