FEATURE: multiple use invite links (#9813)

This commit is contained in:
Arpit Jalan
2020-06-09 20:49:32 +05:30
committed by GitHub
parent 6b7a2d6d4d
commit 3094459cd9
48 changed files with 1280 additions and 351 deletions

View File

@@ -0,0 +1,9 @@
# frozen_string_literal: true
class InviteLinkSerializer < ApplicationSerializer
attributes :id, :invite_key, :created_at, :max_redemptions_allowed, :redemption_count, :expires_at, :group_names
def group_names
object.groups.pluck(:name).join(", ")
end
end

View File

@@ -1,8 +1,7 @@
# frozen_string_literal: true
class InviteSerializer < ApplicationSerializer
attributes :email, :updated_at, :redeemed_at, :expired, :user
attributes :id, :email, :updated_at, :expired
def include_email?
options[:show_emails] && !object.redeemed?
@@ -11,11 +10,4 @@ class InviteSerializer < ApplicationSerializer
def expired
object.expired?
end
def user
ser = InvitedUserSerializer.new(object.user, scope: scope, root: false)
ser.invited_by = object.invited_by
ser.as_json
end
end

View File

@@ -4,8 +4,15 @@ class InvitedSerializer < ApplicationSerializer
attributes :invites, :can_see_invite_details
def invites
serializer = if object.type == "pending"
InviteSerializer
else
InvitedUserSerializer
end
ActiveModel::ArraySerializer.new(
object.invite_list,
each_serializer: serializer,
scope: scope,
root: false,
show_emails: object.show_emails

View File

@@ -0,0 +1,60 @@
# frozen_string_literal: true
class InvitedUserRecordSerializer < BasicUserSerializer
attributes :topics_entered,
:posts_read_count,
:last_seen_at,
:time_read,
:days_visited,
:days_since_created
attr_accessor :invited_by
def time_read
object.user_stat.time_read
end
def include_time_read?
can_see_invite_details?
end
def days_visited
object.user_stat.days_visited
end
def include_days_visited?
can_see_invite_details?
end
def topics_entered
object.user_stat.topics_entered
end
def include_topics_entered?
can_see_invite_details?
end
def posts_read_count
object.user_stat.posts_read_count
end
def include_posts_read_count?
can_see_invite_details?
end
def days_since_created
((Time.now - object.created_at) / 60 / 60 / 24).ceil
end
def include_days_since_created
can_see_invite_details?
end
private
def can_see_invite_details?
@can_see_invite_details ||= scope.can_see_invite_details?(invited_by)
end
end

View File

@@ -1,54 +1,19 @@
# frozen_string_literal: true
class InvitedUserSerializer < BasicUserSerializer
class InvitedUserSerializer < ApplicationSerializer
attributes :id, :redeemed_at, :user, :invite_source
attributes :topics_entered,
:posts_read_count,
:last_seen_at,
:time_read,
:days_visited,
:days_since_created
attr_accessor :invited_by
def time_read
object.user_stat.time_read
def id
object.invite.id
end
def include_time_read?
scope.can_see_invite_details?(invited_by)
def user
ser = InvitedUserRecordSerializer.new(object.user, scope: scope, root: false)
ser.invited_by = object.invite.invited_by
ser.as_json
end
def days_visited
object.user_stat.days_visited
def invite_source
object.invite.is_invite_link? ? "link" : "email"
end
def include_days_visited?
scope.can_see_invite_details?(invited_by)
end
def topics_entered
object.user_stat.topics_entered
end
def include_topics_entered?
scope.can_see_invite_details?(invited_by)
end
def posts_read_count
object.user_stat.posts_read_count
end
def include_posts_read_count?
scope.can_see_invite_details?(invited_by)
end
def days_since_created
((Time.now - object.created_at) / 60 / 60 / 24).ceil
end
def include_days_since_created
scope.can_see_invite_details?(invited_by)
end
end