Fix API performance #73
6 changed files with 32 additions and 48 deletions
|
@ -42,46 +42,30 @@ module Backend
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# DB model finder helpers
|
|
||||||
module ObjectFinders
|
|
||||||
# Defines finder
|
|
||||||
macro finders(type)
|
|
||||||
# Finds object by ID
|
|
||||||
def find : {{ type }}?
|
|
||||||
{{ type }}.find(@id)
|
|
||||||
end
|
|
||||||
|
|
||||||
# :ditto:
|
|
||||||
def find! : {{ type }}
|
|
||||||
obj = find
|
|
||||||
raise "#{{{ type }}} not found" unless obj
|
|
||||||
|
|
||||||
obj
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# DB model field helpers
|
# DB model field helpers
|
||||||
module DbObject
|
module DbObject
|
||||||
# Defines DB model field helper functions
|
# Defines DB model field helper functions
|
||||||
macro db_object(type)
|
macro db_object(type)
|
||||||
{% space_name = type.names.last.underscore.gsub(/_/, " ").capitalize %}
|
|
||||||
|
|
||||||
include ::Backend::Api::Schema::Helpers::ObjectDbInit
|
include ::Backend::Api::Schema::Helpers::ObjectDbInit
|
||||||
include ::Backend::Api::Schema::Helpers::ObjectFinders
|
|
||||||
|
|
||||||
db_init {{ type }}
|
db_init {{ type }}
|
||||||
finders {{ type }}
|
|
||||||
|
|
||||||
property id
|
private property model
|
||||||
|
private property id
|
||||||
|
|
||||||
|
def initialize(@id : Int32, @model : {{ type }})
|
||||||
|
end
|
||||||
|
|
||||||
def initialize(@id : Int32)
|
def initialize(@id : Int32)
|
||||||
|
@model = {{ type }}.find(@id).not_nil!
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(obj : {{ type }})
|
def initialize(@model : {{ type }})
|
||||||
@id = obj.id.not_nil!.to_i
|
@id = model.id.not_nil!.to_i
|
||||||
end
|
end
|
||||||
|
|
||||||
|
{% space_name = type.names.last.underscore.gsub(/_/, " ").capitalize %}
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# {{ space_name }}'s ID
|
# {{ space_name }}'s ID
|
||||||
def id : Int32
|
def id : Int32
|
||||||
|
|
|
@ -27,19 +27,19 @@ module Backend
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# Student's user
|
# Student's user
|
||||||
def user : User
|
def user : User
|
||||||
User.new(find!.user)
|
User.new(@model.user)
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# Student at SKIF
|
# Student at SKIF
|
||||||
def skif : Bool
|
def skif : Bool
|
||||||
find!.skif
|
@model.skif
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# Student's vote
|
# Student's vote
|
||||||
def vote : Vote?
|
def vote : Vote?
|
||||||
find!.vote.try { |v| Vote.new(v) }
|
@model.vote.try { |v| Vote.new(v) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -27,19 +27,19 @@ module Backend
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# Teacher's user
|
# Teacher's user
|
||||||
def user : User
|
def user : User
|
||||||
User.new(find!.user)
|
User.new(@model.user)
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# Teacher's max students
|
# Teacher's max students
|
||||||
def max_students : Int32
|
def max_students : Int32
|
||||||
find!.max_students
|
@model.max_students
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# Teacher is at SKIF
|
# Teacher is at SKIF
|
||||||
def skif : Bool
|
def skif : Bool
|
||||||
find!.skif
|
@model.skif
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -27,13 +27,13 @@ module Backend
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# Voted teacher
|
# Voted teacher
|
||||||
def teacher : Teacher
|
def teacher : Teacher
|
||||||
Teacher.new(find!.teacher.not_nil!)
|
Teacher.new(@model.teacher.not_nil!)
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# Teacher vote's priority
|
# Teacher vote's priority
|
||||||
def priority : Int32
|
def priority : Int32
|
||||||
find!.priority
|
@model.priority
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -27,43 +27,43 @@ module Backend
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# User's first name
|
# User's first name
|
||||||
def first_name : String
|
def first_name : String
|
||||||
find!.first_name
|
@model.first_name
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# User's last name
|
# User's last name
|
||||||
def last_name : String
|
def last_name : String
|
||||||
find!.last_name
|
@model.last_name
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# User's full name
|
# User's full name
|
||||||
def name : String
|
def name : String
|
||||||
find!.name
|
@model.name
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# User's LDAP username
|
# User's LDAP username
|
||||||
def username : String
|
def username : String
|
||||||
find!.username
|
@model.username
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# User's email
|
# User's email
|
||||||
def email : String
|
def email : String
|
||||||
find!.email
|
@model.email
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# User is admin
|
# User is admin
|
||||||
def admin : Bool
|
def admin : Bool
|
||||||
find!.admin
|
@model.admin
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# User's role
|
# User's role
|
||||||
def role : UserRole
|
def role : UserRole
|
||||||
role = Db::UserRole.parse(find!.role)
|
role = Db::UserRole.parse(@model.role)
|
||||||
case role
|
case role
|
||||||
when .teacher?
|
when .teacher?
|
||||||
UserRole::Teacher
|
UserRole::Teacher
|
||||||
|
@ -77,11 +77,11 @@ module Backend
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# User's external ID
|
# User's external ID
|
||||||
def external_id : Int32?
|
def external_id : Int32?
|
||||||
case Db::UserRole.parse(find!.role)
|
case Db::UserRole.parse(@model.role)
|
||||||
when .teacher?
|
when .teacher?
|
||||||
find!.teacher
|
@model.teacher
|
||||||
when .student?
|
when .student?
|
||||||
find!.student
|
@model.student
|
||||||
end.not_nil!.id.not_nil!.to_i
|
end.not_nil!.id.not_nil!.to_i
|
||||||
rescue NilAssertionError
|
rescue NilAssertionError
|
||||||
nil
|
nil
|
||||||
|
@ -90,7 +90,7 @@ module Backend
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# User's external teacher object
|
# User's external teacher object
|
||||||
def teacher : Teacher?
|
def teacher : Teacher?
|
||||||
teacher = find!.teacher
|
teacher = @model.teacher
|
||||||
if teacher
|
if teacher
|
||||||
Teacher.new(teacher)
|
Teacher.new(teacher)
|
||||||
end
|
end
|
||||||
|
@ -99,7 +99,7 @@ module Backend
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# User's external student object
|
# User's external student object
|
||||||
def student : Student?
|
def student : Student?
|
||||||
student = find!.student
|
student = @model.student
|
||||||
if student
|
if student
|
||||||
Student.new(student)
|
Student.new(student)
|
||||||
end
|
end
|
||||||
|
|
|
@ -27,13 +27,13 @@ module Backend
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# Student who voted
|
# Student who voted
|
||||||
def student : Student
|
def student : Student
|
||||||
Student.new(find!.student)
|
Student.new(@model.student)
|
||||||
end
|
end
|
||||||
|
|
||||||
@[GraphQL::Field]
|
@[GraphQL::Field]
|
||||||
# Teacher votes for student
|
# Teacher votes for student
|
||||||
def teacher_votes : Array(TeacherVote)
|
def teacher_votes : Array(TeacherVote)
|
||||||
find!.teacher_votes.map { |tv| TeacherVote.new(tv) }
|
@model.teacher_votes.map { |tv| TeacherVote.new(tv) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue