Move LDAP user data in user API model
This commit is contained in:
parent
d264d76b06
commit
37a60a89ed
|
@ -19,39 +19,33 @@ module Backend
|
|||
module Schema
|
||||
# Schema helper macros
|
||||
module Helpers
|
||||
# Object helpers
|
||||
module ObjectMacros
|
||||
# Defines field property and GraphQL specific getter
|
||||
macro field(type)
|
||||
property {{ type.var }} {% if type.value %} = {{ type.value }}{% end %}
|
||||
# Defines field property and GraphQL specific getter
|
||||
macro field(type)
|
||||
property {{ type.var }} {% if type.value %} = {{ type.value }}{% end %}
|
||||
|
||||
@[GraphQL::Field]
|
||||
def {{ type.var }} : {{ type.type }}
|
||||
@{{ type.var }}
|
||||
end
|
||||
@[GraphQL::Field]
|
||||
def {{ type.var }} : {{ type.type }}
|
||||
@{{ type.var }}
|
||||
end
|
||||
end
|
||||
|
||||
# DB model field helpers
|
||||
module DbObject
|
||||
# Defines DB model field helper functions
|
||||
macro db_object(type)
|
||||
private property model
|
||||
# Defines DB model field helper functions
|
||||
macro db_object(type)
|
||||
private property model
|
||||
|
||||
def initialize(@model : {{ type }})
|
||||
end
|
||||
def initialize(@model : {{ type }})
|
||||
end
|
||||
|
||||
def initialize(id : Int32)
|
||||
@model = {{ type }}.find!(id)
|
||||
end
|
||||
def initialize(id : Int32)
|
||||
@model = {{ type }}.find!(id)
|
||||
end
|
||||
|
||||
{% space_name = type.names.last.underscore.gsub(/_/, " ").capitalize %}
|
||||
{% space_name = type.names.last.underscore.gsub(/_/, " ").capitalize %}
|
||||
|
||||
@[GraphQL::Field]
|
||||
# {{ space_name }}'s ID
|
||||
def id : Int32
|
||||
@model.id.not_nil!.to_i
|
||||
end
|
||||
@[GraphQL::Field]
|
||||
# {{ space_name }}'s ID
|
||||
def id : Int32
|
||||
@model.id.not_nil!.to_i
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -20,7 +20,7 @@ module Backend
|
|||
@[GraphQL::Object]
|
||||
# Student model
|
||||
class Student < GraphQL::BaseObject
|
||||
include Helpers::DbObject
|
||||
include Helpers
|
||||
|
||||
db_object Db::Student
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ module Backend
|
|||
@[GraphQL::Object]
|
||||
# Teacher model
|
||||
class Teacher < GraphQL::BaseObject
|
||||
include Helpers::DbObject
|
||||
include Helpers
|
||||
|
||||
db_object Db::Teacher
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ module Backend
|
|||
@[GraphQL::Object]
|
||||
# Teacher vote model
|
||||
class TeacherVote < GraphQL::BaseObject
|
||||
include Helpers::DbObject
|
||||
include Helpers
|
||||
|
||||
db_object Db::TeacherVote
|
||||
|
||||
|
|
|
@ -20,26 +20,34 @@ module Backend
|
|||
@[GraphQL::Object]
|
||||
# User model
|
||||
class User < GraphQL::BaseObject
|
||||
include Helpers::DbObject
|
||||
include Helpers
|
||||
|
||||
db_object Db::User
|
||||
|
||||
# LDAP user data
|
||||
getter ldap : Ldap::User?
|
||||
|
||||
# Refreshes LDAP user data
|
||||
def refresh_ldap : Ldap::User
|
||||
(@ldap ||= Ldap::User.from_json(Redis::CLIENT.get("ldap:user:#{id}").as(String))).not_nil!
|
||||
end
|
||||
|
||||
@[GraphQL::Field]
|
||||
# User's first name
|
||||
def first_name : String
|
||||
@model.first_name
|
||||
refresh_ldap.first_name
|
||||
end
|
||||
|
||||
@[GraphQL::Field]
|
||||
# User's last name
|
||||
def last_name : String
|
||||
@model.last_name
|
||||
refresh_ldap.last_name
|
||||
end
|
||||
|
||||
@[GraphQL::Field]
|
||||
# User's full name
|
||||
def name : String
|
||||
@model.name
|
||||
refresh_ldap.name
|
||||
end
|
||||
|
||||
@[GraphQL::Field]
|
||||
|
@ -51,7 +59,7 @@ module Backend
|
|||
@[GraphQL::Field]
|
||||
# User's email
|
||||
def email : String
|
||||
@model.email
|
||||
refresh_ldap.email
|
||||
end
|
||||
|
||||
@[GraphQL::Field]
|
||||
|
|
|
@ -20,7 +20,7 @@ module Backend
|
|||
@[GraphQL::Object]
|
||||
# Vote model
|
||||
class Vote < GraphQL::BaseObject
|
||||
include Helpers::DbObject
|
||||
include Helpers
|
||||
|
||||
db_object Db::Vote
|
||||
|
||||
|
|
|
@ -20,9 +20,6 @@ module Backend
|
|||
class User < Granite::Base
|
||||
table users
|
||||
|
||||
# LDAP user data
|
||||
getter ldap : Ldap::User?
|
||||
|
||||
has_one :teacher
|
||||
has_one :student
|
||||
|
||||
|
@ -38,31 +35,6 @@ module Backend
|
|||
# User is admin
|
||||
column admin : Bool = false
|
||||
|
||||
# User's first name
|
||||
def first_name : String
|
||||
refresh_ldap.first_name
|
||||
end
|
||||
|
||||
# User's last name
|
||||
def last_name : String
|
||||
refresh_ldap.last_name
|
||||
end
|
||||
|
||||
# User's full name
|
||||
def name : String
|
||||
"#{first_name} #{last_name}"
|
||||
end
|
||||
|
||||
# User's email
|
||||
def email : String
|
||||
refresh_ldap.email
|
||||
end
|
||||
|
||||
# Refreshes LDAP user data
|
||||
def refresh_ldap : Ldap::User
|
||||
(@ldap ||= Ldap::User.from_json(Redis::CLIENT.get("ldap:user:#{@id}").as(String))).not_nil!
|
||||
end
|
||||
|
||||
validate :role, "needs to be a valid role" do |user|
|
||||
UserRole.parse(user.role).in?(UserRole.values)
|
||||
end
|
||||
|
|
|
@ -39,6 +39,11 @@ module Backend
|
|||
def initialize(@first_name : String, @last_name : String, @email : String)
|
||||
end
|
||||
|
||||
# Name
|
||||
def name : String
|
||||
"#{first_name} #{last_name}"
|
||||
end
|
||||
|
||||
# Creates user data from LDAP entry
|
||||
def self.from_raw(raw : Raw) : self
|
||||
self.new(
|
||||
|
|
|
@ -22,7 +22,7 @@ module Backend
|
|||
address email: Backend.config.smtp.username, name: Backend.config.smtp.name
|
||||
end
|
||||
|
||||
def initialize(user : Db::User)
|
||||
def initialize(user : Ldap::User)
|
||||
to name: user.name, email: user.email
|
||||
subject "Mentorenwahl Lehrer Registrierung"
|
||||
text Kilt.render("#{__DIR__}/templates/teacher_registration_mailer.txt.ecr")
|
||||
|
|
|
@ -27,7 +27,13 @@ module Backend
|
|||
.map(&.as(String).split(":")[2].to_i64)
|
||||
.concat(Db::User.all.map(&.id.not_nil!))
|
||||
.uniq!
|
||||
.each { |id| CacheLdapUserJob.new(id).enqueue }
|
||||
.each do |id|
|
||||
spawn do
|
||||
CacheLdapUserJob.new(id).enqueue
|
||||
end
|
||||
end
|
||||
|
||||
Fiber.yield
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -32,8 +32,9 @@ module Backend
|
|||
fail
|
||||
end
|
||||
|
||||
log "Sending teacher registration email to #{user.email} (#{user.id})"
|
||||
Mailers::TeacherRegistrationMailer.new(user).deliver
|
||||
ldap_user = Ldap.user(Ldap::Constructor.uid(user.username))
|
||||
log "Sending teacher registration email to #{ldap_user.email} (#{user.id})"
|
||||
Mailers::TeacherRegistrationMailer.new(ldap_user).deliver
|
||||
|
||||
channel.send(nil)
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue