mentorenwahl/docker/backend/src/mw/schema/mutation.cr
2022-01-08 13:29:22 +01:00

137 lines
3.7 KiB
Crystal

require "graphql"
module MW
module Schema
@[GraphQL::Object]
class Mutation < GraphQL::BaseMutation
@[GraphQL::Field]
def login(input : LoginInput) : LoginPayload
user = Db::User.find_by(email: input.email)
raise "Auth failed" unless user && Auth.verify_password?(input.password, user.password)
LoginPayload.new(
user: User.new(user),
token: Auth.create_user_jwt(user.id.not_nil!.to_i),
)
end
@[GraphQL::Field]
def create_user(context : Context, input : UserCreateInput) : User
context.admin!
user = Db::User.create!(
firstname: input.firstname,
lastname: input.lastname,
email: input.email,
password: Auth.hash_password(input.password),
role: input.role.to_s,
blocked: input.blocked,
)
if input.role
case input.role
when UserRole::Teacher
user.teacher = Db::Teacher.create!(user_id: user.id, max_students: input.teacher.not_nil!.max_students)
when UserRole::Student
user.student = Db::Student.create!(user_id: user.id, skif: input.student.not_nil!.skif)
end
user.save!
end
User.new(user)
end
@[GraphQL::Field]
def delete_user(context : Context, id : Int32) : Int32
context.admin!
user = Db::User.find!(id)
user.destroy!
id
end
@[GraphQL::Field]
def create_admin(context : Context, input : AdminCreateInput) : Admin
context.admin!
admin = Db::Admin.create!(user_id: input.user_id)
Admin.new(admin)
end
@[GraphQL::Field]
def delete_admin(context : Context, id : Int32) : Int32
context.admin!
admin = Db::Admin.find!(id)
admin.destroy!
id
end
@[GraphQL::Field]
def create_teacher(context : Context, input : TeacherCreateInput) : Teacher
context.admin!
teacher = Db::Teacher.create!(user_id: input.user_id, max_students: input.max_students)
Teacher.new(teacher)
end
@[GraphQL::Field]
def delete_teacher(context : Context, id : Int32) : Int32
context.admin!
teacher = Db::Teacher.find!(id)
teacher.destroy!
id
end
@[GraphQL::Field]
def create_student(context : Context, input : StudentCreateInput) : Student
context.admin!
user = Db::User.find!(input.user_id)
raise "User not a student" unless UserRole.parse(user.role) == UserRole::Student
student = Db::Student.create!(user_id: user.id)
Student.new(student)
end
@[GraphQL::Field]
def delete_student(context : Context, id : Int32) : Int32
context.admin!
student = Db::Student.find!(id)
student.destroy!
id
end
@[GraphQL::Field]
def create_vote(context : Context, input : VoteCreateInput) : Vote
# context.admin!
# student = Db::Student.find!(input.student_id)
# # student.vote = Db::Vote.new(student_id: student.id)
# # student.save!
# pp! Db::Vote.create!(student_id: student.id.not_nil!)
# pp! student
# pp! student.vote
# input.teacher_ids.not_nil!.each_with_index do |t_id, i|
# Db::TeacherVote.create!(vote_id: student.vote.not_nil!.id.not_nil!, teacher_id: t_id, priority: i)
# end if input.teacher_ids
# pp! student.vote.not_nil!.teacher_votes.to_a
# Vote.new(student.vote.not_nil!)
context.role! UserRole::Student
student = context.external.not_nil!.as(Db::Student)
vote = Db::Vote.create!(student_id: student.id)
Vote.new(vote)
end
end
end
end