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