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

48 lines
1.2 KiB
Crystal

require "CrystalEmail"
require "granite"
module MW
module Db
class User < Granite::Base
table users
has_one :admin
has_one :teacher
has_one :student
column id : Int64, primary: true
column firstname : String
column lastname : String
column email : String
column password : String
column role : String
column blocked : Bool = false
validate :email, "needs to be an email address" do |user|
CrystalEmail::Rfc5322::Public.validates?(user.email)
end
validate :role, "needs to be a valid role" do |user|
UserRole.parse?(user.role).in?(UserRole.values)
end
validate :role, "user external needs to be a valid role" do |user|
if user.admin.nil? && user.teacher.nil? && user.student.nil?
true
else
!!case UserRole.parse(user.role)
when UserRole::Admin
user.admin && user.teacher.nil? && user.student.nil?
when UserRole::Teacher
user.admin.nil? && user.teacher && user.student.nil?
when UserRole::Student
user.admin.nil? && user.teacher.nil? && user.student
else
false
end
end
end
end
end
end