diff --git a/docker/backend/src/backend/api/schema/helpers.cr b/docker/backend/src/backend/api/schema/helpers.cr index 137841b..9c4174c 100644 --- a/docker/backend/src/backend/api/schema/helpers.cr +++ b/docker/backend/src/backend/api/schema/helpers.cr @@ -32,60 +32,25 @@ module Backend end end - # DB model leverage helpers - module ObjectDbInit - # Defines a DB model specific initializer - macro db_init(type) - def initialize(obj : {{ type }}) - initialize(obj.id.not_nil!) - 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 module DbObject # Defines DB model field helper functions macro db_object(type) + private property model + + def initialize(@model : {{ type }}) + end + + def initialize(id : Int32) + @model = {{ type }}.find(id).not_nil! + end + {% space_name = type.names.last.underscore.gsub(/_/, " ").capitalize %} - include ::Backend::Api::Schema::Helpers::ObjectDbInit - include ::Backend::Api::Schema::Helpers::ObjectFinders - - db_init {{ type }} - finders {{ type }} - - property id - - def initialize(@id : Int32) - end - - def initialize(obj : {{ type }}) - @id = obj.id.not_nil!.to_i - end - @[GraphQL::Field] # {{ space_name }}'s ID def id : Int32 - @id + @model.id.not_nil!.to_i32 end end end diff --git a/docker/backend/src/backend/api/schema/student.cr b/docker/backend/src/backend/api/schema/student.cr index 586e519..4f803b3 100644 --- a/docker/backend/src/backend/api/schema/student.cr +++ b/docker/backend/src/backend/api/schema/student.cr @@ -27,19 +27,19 @@ module Backend @[GraphQL::Field] # Student's user def user : User - User.new(find!.user) + User.new(@model.user) end @[GraphQL::Field] # Student at SKIF def skif : Bool - find!.skif + @model.skif end @[GraphQL::Field] # Student's vote def vote : Vote? - find!.vote.try { |v| Vote.new(v) } + @model.vote.try { |v| Vote.new(v) } end end diff --git a/docker/backend/src/backend/api/schema/teacher.cr b/docker/backend/src/backend/api/schema/teacher.cr index 992c7f8..47e27ca 100644 --- a/docker/backend/src/backend/api/schema/teacher.cr +++ b/docker/backend/src/backend/api/schema/teacher.cr @@ -27,19 +27,19 @@ module Backend @[GraphQL::Field] # Teacher's user def user : User - User.new(find!.user) + User.new(@model.user) end @[GraphQL::Field] # Teacher's max students def max_students : Int32 - find!.max_students + @model.max_students end @[GraphQL::Field] # Teacher is at SKIF def skif : Bool - find!.skif + @model.skif end end diff --git a/docker/backend/src/backend/api/schema/teacher_vote.cr b/docker/backend/src/backend/api/schema/teacher_vote.cr index 4bc29c4..e053119 100644 --- a/docker/backend/src/backend/api/schema/teacher_vote.cr +++ b/docker/backend/src/backend/api/schema/teacher_vote.cr @@ -27,13 +27,13 @@ module Backend @[GraphQL::Field] # Voted teacher def teacher : Teacher - Teacher.new(find!.teacher.not_nil!) + Teacher.new(@model.teacher.not_nil!) end @[GraphQL::Field] # Teacher vote's priority def priority : Int32 - find!.priority + @model.priority end end diff --git a/docker/backend/src/backend/api/schema/user.cr b/docker/backend/src/backend/api/schema/user.cr index 9561f17..38d1994 100644 --- a/docker/backend/src/backend/api/schema/user.cr +++ b/docker/backend/src/backend/api/schema/user.cr @@ -27,43 +27,43 @@ module Backend @[GraphQL::Field] # User's first name def first_name : String - find!.first_name + @model.first_name end @[GraphQL::Field] # User's last name def last_name : String - find!.last_name + @model.last_name end @[GraphQL::Field] # User's full name def name : String - find!.name + @model.name end @[GraphQL::Field] # User's LDAP username def username : String - find!.username + @model.username end @[GraphQL::Field] # User's email def email : String - find!.email + @model.email end @[GraphQL::Field] # User is admin def admin : Bool - find!.admin + @model.admin end @[GraphQL::Field] # User's role def role : UserRole - role = Db::UserRole.parse(find!.role) + role = Db::UserRole.parse(@model.role) case role when .teacher? UserRole::Teacher @@ -77,11 +77,11 @@ module Backend @[GraphQL::Field] # User's external ID def external_id : Int32? - case Db::UserRole.parse(find!.role) + case Db::UserRole.parse(@model.role) when .teacher? - find!.teacher + @model.teacher when .student? - find!.student + @model.student end.not_nil!.id.not_nil!.to_i rescue NilAssertionError nil @@ -90,7 +90,7 @@ module Backend @[GraphQL::Field] # User's external teacher object def teacher : Teacher? - teacher = find!.teacher + teacher = @model.teacher if teacher Teacher.new(teacher) end @@ -99,7 +99,7 @@ module Backend @[GraphQL::Field] # User's external student object def student : Student? - student = find!.student + student = @model.student if student Student.new(student) end diff --git a/docker/backend/src/backend/api/schema/vote.cr b/docker/backend/src/backend/api/schema/vote.cr index cf24394..82978d8 100644 --- a/docker/backend/src/backend/api/schema/vote.cr +++ b/docker/backend/src/backend/api/schema/vote.cr @@ -27,13 +27,13 @@ module Backend @[GraphQL::Field] # Student who voted def student : Student - Student.new(find!.student) + Student.new(@model.student) end @[GraphQL::Field] # Teacher votes for student def teacher_votes : Array(TeacherVote) - find!.teacher_votes.map { |tv| TeacherVote.new(tv) } + @model.teacher_votes.map { |tv| TeacherVote.new(tv) } end end