mentorenwahl/docker/backend/src/backend/api/schema/user.cr
Dominic Grimm 0da7f11239
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/pr Build is failing
Added login page
2022-02-02 15:38:36 +01:00

147 lines
3 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 .admin?
find!.admin
when .teacher?
find!.teacher
when .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 blocked
@[GraphQL::Field]
def initialize(
@firstname : String,
@lastname : String,
@email : String,
@password : String,
@role : UserRole,
@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