Files
bit/app/routes.cr
T
2025-03-18 11:07:34 +01:00

54 lines
1.3 KiB
Crystal

require "./controllers/**"
module App
# CORS handling middleware
before_all do |env|
if env.request.path.starts_with?("/api/")
env.response.headers["Access-Control-Allow-Origin"] = "*"
env.response.headers["Access-Control-Allow-Methods"] = "GET, POST, PUT, DELETE, OPTIONS"
env.response.headers["Access-Control-Allow-Headers"] = "Content-Type, Accept, Origin, X-Api-Key"
end
end
# Error handling middleware
error 404 do |env|
{error: "Not Found"}.to_json
end
error 500 do |env|
{error: "Internal Server Error"}.to_json
end
get "/:slug" do |env|
Controllers::LinkController.new(env).redirect
end
# Namespace /api
get "/api/ping" do |env|
Controllers::PingController.new(env).ping
end
get "/api/links" do |env|
Controllers::LinkController.new(env).list_all
end
get "/api/links/:id" do |env|
Controllers::LinkController.new(env).get
end
get "/api/links/:id/clicks" do |env|
Controllers::LinkController.new(env).list_clicks
end
post "/api/links" do |env|
Controllers::LinkController.new(env).create
end
put "/api/links/:id" do |env|
Controllers::LinkController.new(env).update
end
delete "/api/links/:id" do |env|
Controllers::LinkController.new(env).delete
end
end