feat: delete link
This commit is contained in:
+32
-20
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user