feat: delete link

This commit is contained in:
Juan Rodriguez
2024-05-13 10:23:20 +02:00
parent ded84e7fa5
commit 80feadfbd2
11 changed files with 86 additions and 34 deletions
+32 -20
View File
@@ -8,20 +8,16 @@ module App::Controllers::Link
include App::Lib
def call(env)
json_params = env.params.json.to_h
url = json_params.has_key?("url") ? json_params["url"] : nil
raise App::BadRequestException.new(env, {"url" => "Required field"}) if !url
body = parse_body(env, ["url"])
link = Link.new
link.id = UUID.v4.to_s
link.url = url.to_s
link.url = body["url"].to_s
link.slug = Random::Secure.urlsafe_base64(4)
changeset = Database.insert(link)
if !changeset.valid?
errors = {"errors" => map_changeset_errors(changeset.errors)}
raise App::UnprocessableEntityException.new(env, errors)
raise App::UnprocessableEntityException.new(env, map_changeset_errors(changeset.errors))
end
response = {"data" => App::Serializers::Link.new(link)}
@@ -36,7 +32,8 @@ module App::Controllers::Link
def call(env)
slug = env.params.url["slug"]
link = Database.get_by!(Link, slug: slug)
link = Database.get_by(Link, slug: slug)
raise App::NotFoundException.new(env) if !link
spawn do
link.click_counter = link.click_counter! + 1
@@ -47,18 +44,19 @@ module App::Controllers::Link
end
end
env.redirect link.url!
env.redirect link.url!, 301
end
end
class Get < App::Lib::BaseController
class Read < App::Lib::BaseController
include App::Models
include App::Lib
def call(env)
id = env.params.url["id"]
link = Database.get!(Link, id)
link = Database.get(Link, id)
raise App::NotFoundException.new(env) if !link
response = {"data" => App::Serializers::Link.new(link)}
response.to_json
@@ -71,20 +69,17 @@ module App::Controllers::Link
def call(env)
id = env.params.url["id"]
body = parse_body(env, ["url"])
json_params = env.params.json.to_h
url = json_params.has_key?("url") ? json_params["url"] : nil
raise App::BadRequestException.new(env, {"url" => "Required field"}) if !url
link = Database.get(Link, id)
raise App::NotFoundException.new(env) if !link
link = Database.get!(Link, id)
link.url = url.to_s
link.url = body["url"].to_s
link.click_counter = 0
changeset = Database.update(link)
if !changeset.valid?
errors = {"errors" => map_changeset_errors(changeset.errors)}
raise App::UnprocessableEntityException.new(env, errors)
raise App::UnprocessableEntityException.new(env, map_changeset_errors(changeset.errors))
end
response = {"data" => App::Serializers::Link.new(link)}
@@ -92,5 +87,22 @@ module App::Controllers::Link
end
end
# TODO: delete
class Delete < App::Lib::BaseController
include App::Models
include App::Lib
def call(env)
id = env.params.url["id"]
link = Database.get(Link, id)
raise App::NotFoundException.new(env) if !link
result = Database.raw_exec("DELETE FROM links WHERE id = (?)", link.id) # tempfix: Database.delete does not work
if result.rows_affected == 0
raise App::UnprocessableEntityException.new(env, { "id" => ["Row delete failed"] })
end
env.response.status_code = 204
end
end
end