# Mentorenwahl: A fullstack application for assigning mentors to students based on their whishes. # Copyright (C) 2022 Dominic Grimm # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . module Backend module Api module Schema @[GraphQL::Object] # User model class User < GraphQL::BaseObject include Helpers::DbObject db_object Db::User @[GraphQL::Field] # User's first name def firstname : String find!.firstname end @[GraphQL::Field] # User's last name def lastname : String find!.lastname end @[GraphQL::Field] # User's full name def name : String find!.name end @[GraphQL::Field] # User's LDAP username def username : String find!.username end @[GraphQL::Field] # User's email def email : String find!.email end @[GraphQL::Field] # User is admin def admin : Bool find!.admin end @[GraphQL::Field] # User's role def role : UserRole role = Db::UserRole.parse(find!.role) case role when .teacher? UserRole::Teacher when .student? UserRole::Student else raise "Unknown role: #{role}" end end @[GraphQL::Field] # User's external ID def external_id : Int32? case Db::UserRole.parse(find!.role) when .teacher? find!.teacher when .student? find!.student end.not_nil!.id.not_nil!.to_i rescue NilAssertionError nil end @[GraphQL::Field] # User's external teacher object def teacher : Teacher? teacher = find!.teacher if teacher Teacher.new(teacher) end end @[GraphQL::Field] # User's external student object def student : Student? student = find!.student if student Student.new(student) end end end @[GraphQL::InputObject] # User creation input class UserCreateInput < GraphQL::BaseInputObject getter username getter role @[GraphQL::Field] def initialize( @username : String, @role : UserRole ) end end @[GraphQL::Object] # Login payload returned after successful login class LoginPayload < GraphQL::BaseObject # Logged in user property user # JWT token property token def initialize( @user : User, @token : String ) end @[GraphQL::Field] # Logged in user def user : User @user end @[GraphQL::Field] # Raw bearer token def token : String @token end @[GraphQL::Field] # Ready to use bearer token def bearer : String Auth::BEARER + @token end end end end end