From 6b21bc0cd6502584c40b648944a61d4cbec37bd2 Mon Sep 17 00:00:00 2001 From: Juan Rodriguez Date: Mon, 13 May 2024 22:56:06 +0200 Subject: [PATCH] feat: cli create_user + list_users + delete_user --- scripts/cli.cr | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 scripts/cli.cr diff --git a/scripts/cli.cr b/scripts/cli.cr new file mode 100644 index 0000000..d2d3978 --- /dev/null +++ b/scripts/cli.cr @@ -0,0 +1,68 @@ +require "uuid" +require "option_parser" + +require "../app/config/*" +require "../app/lib/*" +require "../app/models/*" + +option_parser = OptionParser.parse do |parser| + parser.on("--create-user=NAME", "Create a new user with the given name") do |name| + create_user(name) + exit + end + + parser.on("--list-users", "List all users") do + list_users + exit + end + + parser.on("--delete-user=USER_ID", "Delete a user by ID") do |user_id| + delete_user(user_id) + exit + end + + if ARGV.empty? + puts "Usage: ./cli [options]" + puts "Options:" + puts " --create-user=NAME Create a new user with the given name" + puts " --list-users List all users" + puts " --delete-user=USER_ID Delete a user by ID" + end +end + +def create_user(name) + user = App::Models::User.new + user.id = UUID.v4.to_s + user.name = name + user.api_key = Random::Secure.urlsafe_base64() + + changeset = App::Lib::Database.insert(user) + if !changeset.valid? + puts changeset.errors + else + puts "New user created: Name: #{user.name}, X-Api-Key: #{user.api_key}" + end +end + +def list_users + users = App::Lib::Database.all(App::Models::User) + + if users.empty? + puts "No users found." + else + puts "Users:" + users.each do |user| + puts "- ID: #{user.id}, Name: #{user.name}, X-Api-Key: #{user.api_key}" + end + end +end + +def delete_user(user_id) + result = App::Lib::Database.raw_exec("DELETE FROM users WHERE id = (?)", user_id) # tempfix: Database.delete does not work + + if result.rows_affected == 0 + puts "Failed to delete user: #{result}" + else + puts "User with ID #{user_id} deleted successfully." + end +end