Skip to content

Commit

Permalink
Add events for creating and deleting relationships
Browse files Browse the repository at this point in the history
Co-authored-by: Rubhan Azeem <rubhan.azeem@suse.com>
  • Loading branch information
eduardoj and rubhanazeem committed Mar 3, 2022
1 parent 6f7a0b6 commit 135988e
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/api/app/mixins/has_relationships.rb
Expand Up @@ -55,6 +55,7 @@ def remove_role(what, role)
end
rel = rel.where(role_id: role.id) if role
transaction do
rel.map(&:create_event_before_delete)
rel.delete_all
write_to_backend
end
Expand Down
7 changes: 7 additions & 0 deletions src/api/app/models/event/relationship.rb
@@ -0,0 +1,7 @@
module Event
class Relationship < Base
self.abstract_class = true
payload_keys :description, :who, :user, :group, :project, :package, :role
shortenable_key :description
end
end
6 changes: 6 additions & 0 deletions src/api/app/models/event/relationship_create.rb
@@ -0,0 +1,6 @@
module Event
class RelationshipCreate < Relationship
self.message_bus_routing_key = 'relationship.create'
self.description = 'Relationship was created'
end
end
6 changes: 6 additions & 0 deletions src/api/app/models/event/relationship_delete.rb
@@ -0,0 +1,6 @@
module Event
class RelationshipDelete < Relationship
self.message_bus_routing_key = 'relationship.delete'
self.description = 'Relationship was deleted'
end
end
29 changes: 29 additions & 0 deletions src/api/app/models/relationship.rb
Expand Up @@ -60,6 +60,8 @@ class Relationship < ApplicationRecord
bugowners.joins(:user).merge(User.with_email)
}

after_create :create_event_after_create

# we only care for project<->user relationships, but the cache is not *that* expensive
# to recalculate
after_create :discard_cache
Expand Down Expand Up @@ -125,6 +127,12 @@ def self.with_groups_and_roles
with_groups_and_roles_query.pluck('groups.title', 'roles.title')
end

def create_event_before_delete
return unless User.session

Event::RelationshipDelete.create(event_parameters)
end

private

class << self
Expand Down Expand Up @@ -158,6 +166,27 @@ def check_global_role
def allowed_user
raise NotFoundError, "Couldn't find user #{user.login}" if user && user.is_nobody?
end

def create_event_after_create
return unless User.session

Event::RelationshipCreate.create(event_parameters)
end

def event_parameters
parameters = { who: User.session.login,
user: user&.login,
group: group&.title,
role: role.title }
if package
parameters[:project] = package.project.name
parameters[:package] = package.name
else
parameters[:project] = project.name
end

parameters
end
end

# == Schema Information
Expand Down
2 changes: 2 additions & 0 deletions src/api/spec/models/relationship_spec.rb
Expand Up @@ -57,6 +57,7 @@
end

it { expect { project.store }.to change(Relationship, :count).by(1) }
it { expect { project.store }.to change(Event::RelationshipCreate, :count).by(1) }
end
end

Expand Down Expand Up @@ -96,6 +97,7 @@
end

it { expect { project.store }.to change(Relationship, :count).by(1) }
it { expect { project.store }.to change(Event::RelationshipCreate, :count).by(1) }
end
end

Expand Down

0 comments on commit 135988e

Please sign in to comment.