mentorenwahl/docker/backend/src/backend/api/schema/user.cr
Dominic Grimm 5bc10f8aaf
Some checks failed
continuous-integration/drone/push Build is failing
Added worker
2022-01-23 09:12:57 +01:00

153 lines
3.2 KiB
Crystal

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