Skip to content

Commit 1e47e65

Browse files
author
Lee Richmond
committed
Enhance API coverage
1 parent 3c5f243 commit 1e47e65

9 files changed

+56
-9
lines changed

app/controllers/departments_controller.rb

+5
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,9 @@ def index
55
departments = Department.all
66
render_jsonapi(departments)
77
end
8+
9+
def show
10+
scope = jsonapi_scope(Department.where(id: params[:id]))
11+
render_jsonapi(scope.resolve.first, scope: false)
12+
end
813
end

app/controllers/goals_controller.rb

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class GoalsController < ApplicationController
2+
jsonapi resource: GoalResource
3+
4+
def index
5+
departments = Goal.all
6+
render_jsonapi(departments)
7+
end
8+
9+
def show
10+
scope = jsonapi_scope(Goal.where(id: params[:id]))
11+
render_jsonapi(scope.resolve.first, scope: false)
12+
end
13+
end

app/resources/department_resource.rb

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
class DepartmentResource < ApplicationResource
22
type :departments
33

4-
belongs_to :employee,
5-
foreign_key: :employee_id,
4+
allow_filter :id
5+
allow_filter :name
6+
7+
has_many :employees,
8+
foreign_key: :department_id,
69
scope: -> { Employee.all },
710
resource: EmployeeResource
11+
has_many :goals,
12+
foreign_key: :department_id,
13+
scope: -> { Goal.all },
14+
resource: GoalResource
815
end

app/resources/employee_resource.rb

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
class EmployeeResource < ApplicationResource
22
type :employees
33

4+
allow_filter :id
5+
allow_filter :department_id
46
allow_filter :name
57
allow_filter :age
68

79
allow_filter :name_prefix do |scope, value|
810
scope.where(["name LIKE ?", "#{value}%"])
911
end
1012

11-
has_many :departments,
13+
belongs_to :department,
1214
scope: -> { Department.all },
13-
foreign_key: :employee_id,
15+
foreign_key: :department_id,
1416
resource: DepartmentResource
1517
end

app/resources/goal_resource.rb

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
class GoalResource < ApplicationResource
22
type :goals
33

4+
allow_filter :department_id
5+
46
belongs_to :department,
57
scope: -> { Department.all },
68
foreign_key: :department_id,

app/serializers/serializable_department.rb

+11-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@ class SerializableDepartment < JSONAPI::Serializable::Resource
33

44
attribute :name
55

6-
has_many :employees
7-
has_many :goals
6+
has_many :employees do
7+
link :related do
8+
@url_helpers.employees_url(filter: { department_id: @object.id })
9+
end
10+
end
11+
12+
has_many :goals do
13+
link :related do
14+
@url_helpers.goals_url(filter: { department_id: @object.id })
15+
end
16+
end
817
end

app/serializers/serializable_employee.rb

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,9 @@ class SerializableEmployee < JSONAPI::Serializable::Resource
33

44
attributes :name, :age, :created_at, :updated_at
55

6-
belongs_to :department
6+
belongs_to :department do
7+
link :related do
8+
@url_helpers.department_url(@object.department_id)
9+
end
10+
end
711
end

app/serializers/serializable_goal.rb

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,9 @@ class SerializableGoal < JSONAPI::Serializable::Resource
33

44
attribute :description
55

6-
belongs_to :department
6+
belongs_to :department do
7+
link :related do
8+
@url_helpers.department_url(@object.department_id)
9+
end
10+
end
711
end

config/routes.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
Rails.application.routes.draw do
22
scope path: '/api' do
33
resources :employees
4-
resources :departments, only: [:index]
4+
resources :departments, only: [:index, :show]
5+
resources :goals, only: [:index, :show]
56
end
67
end

0 commit comments

Comments
 (0)