module Backend module API module Schema @[GraphQL::Object] class User < GraphQL::BaseObject include Helpers::DbObject db_object Db::User @[GraphQL::Field] def firstname : String find!.firstname end @[GraphQL::Field] def lastname : String find!.lastname end @[GraphQL::Field] def email : String find!.email end @[GraphQL::Field] def role : UserRole role = Db::UserRole.parse(find!.role) case role when Db::UserRole::Admin UserRole::Admin when Db::UserRole::Teacher UserRole::Teacher when Db::UserRole::Student UserRole::Student else raise "Unknown role: #{role}" end end @[GraphQL::Field] def external_id : Int32? case Db::UserRole.parse(find!.role) when Db::UserRole::Admin find!.admin when Db::UserRole::Teacher find!.teacher when Db::UserRole::Student find!.student end.not_nil!.id.not_nil!.to_i rescue NilAssertionError nil end @[GraphQL::Field] def admin : Admin? admin = find!.admin if admin Admin.new(admin) end end @[GraphQL::Field] def teacher : Teacher? teacher = find!.teacher if teacher Teacher.new(teacher) end end @[GraphQL::Field] def student : Student? student = find!.student if student Student.new(student) end end @[GraphQL::Field] def blocked : Bool find!.blocked end end @[GraphQL::InputObject] class UserCreateInput < GraphQL::BaseInputObject getter firstname getter lastname getter email getter password getter role getter teacher getter student getter create_external getter blocked @[GraphQL::Field] def initialize( @firstname : String, @lastname : String, @email : String, @password : String, @role : UserRole, @teacher : TeacherInput? = nil, @student : StudentInput? = nil, @create_external : Bool = false, @blocked : Bool = false ) end end @[GraphQL::InputObject] class LoginInput < GraphQL::BaseInputObject getter email getter password @[GraphQL::Field] def initialize( @email : String, @password : String ) end end @[GraphQL::Object] class LoginPayload < GraphQL::BaseObject property user property token def initialize( @user : User, @token : String ) end @[GraphQL::Field] def user : User @user end @[GraphQL::Field] def token : String @token end @[GraphQL::Field] def bearer : String Auth::BEARER + @token end end end end end