153 lines
3.2 KiB
Crystal
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
|