Files
ubicloud/routes/api/project.rb
Burak Yucesoy 69ecb12e8d Combine all serializers under top level namespace
We merged all web and api serializers. There is no need for separate namespaces
anymore.
2024-05-28 21:42:31 +03:00

65 lines
1.7 KiB
Ruby

# frozen_string_literal: true
class CloverApi
hash_branch("project") do |r|
r.get true do
result = Project.authorized(@current_user.id, "Project:view").where(visible: true).paginated_result(
start_after: r.params["start_after"],
page_size: r.params["page_size"],
order_column: r.params["order_column"]
)
{
items: Serializers::Project.serialize(result[:records]),
count: result[:count]
}
end
r.post true do
required_parameters = ["name"]
request_body_params = Validation.validate_request_body(r.body.read, required_parameters)
project = @current_user.create_project_with_default_policy(request_body_params["name"])
Serializers::Project.serialize(project)
end
r.on String do |project_ubid|
@project = Project.from_ubid(project_ubid)
@project = nil unless @project&.visible
unless @project
response.status = r.delete? ? 204 : 404
r.halt
end
unless @project.accounts.any? { _1.id == @current_user.id }
fail Authorization::Unauthorized
end
r.delete true do
Authorization.authorize(@current_user.id, "Project:delete", @project.id)
# If it has some resources, do not allow to delete it.
if @project.has_resources
fail DependencyError.new("'#{@project.name}' project has some resources. Delete all related resources first.")
end
@project.soft_delete
response.status = 204
r.halt
end
r.get true do
Authorization.authorize(@current_user.id, "Project:view", @project.id)
Serializers::Project.serialize(@project)
end
r.hash_branches(:project_prefix)
end
end
end