Skip to content

Commit

Permalink
[api] retire package_user_role_relationship model
Browse files Browse the repository at this point in the history
self.relationships.users will do for packages, self.relationships.packages will do
for users
  • Loading branch information
coolo committed Aug 5, 2013
1 parent fd3d99b commit a2fe3ae
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 26 deletions.
9 changes: 4 additions & 5 deletions src/api/app/models/package.rb
Expand Up @@ -30,7 +30,6 @@ class ReadSourceAccessError < APIException
belongs_to :project, foreign_key: :db_project_id, inverse_of: :packages

has_many :relationships, dependent: :destroy
has_many :package_user_role_relationships
has_many :messages, :as => :db_object, :dependent => :destroy

has_many :taggings, :as => :taggable, :dependent => :destroy
Expand Down Expand Up @@ -490,7 +489,7 @@ def update_from_xml( xmlhash )

#--- update users ---#
usercache = Hash.new
self.package_user_role_relationships.each do |purr|
self.relationships.users.each do |purr|
h = usercache[purr.user.login] ||= Hash.new
h[purr.role.title] = purr
end
Expand All @@ -511,11 +510,11 @@ def update_from_xml( xmlhash )
pcache[person['role']] = :keep
else
#new role
self.package_user_role_relationships.new(user: user, role: Role.rolecache[person['role']])
self.relationships.new(user: user, role: Role.rolecache[person['role']])
pcache[person['role']] = :new
end
else
self.package_user_role_relationships.new(user: user, role: Role.rolecache[person['role']])
self.relationships.new(user: user, role: Role.rolecache[person['role']])
usercache[person['userid']] = { person['role'] => :new }
end
end
Expand Down Expand Up @@ -704,7 +703,7 @@ def add_group( group, role )
end

def each_user( opt={}, &block )
users = package_user_role_relationships.joins(:role, :user).select("users.login as login, roles.title AS role_name").order("role_name, login")
users = relationships.joins(:role, :user).select("users.login as login, roles.title AS role_name").order("role_name, login")
if( block )
users.each do |u|
block.call u.login, u.role_name
Expand Down
13 changes: 0 additions & 13 deletions src/api/app/models/package_user_role_relationship.rb

This file was deleted.

14 changes: 6 additions & 8 deletions src/api/app/models/user.rb
Expand Up @@ -8,8 +8,7 @@ class User < ActiveRecord::Base
has_many :watched_projects, :foreign_key => 'bs_user_id', :dependent => :destroy
has_many :groups_users, :foreign_key => 'user_id'
has_many :roles_users, :foreign_key => 'user_id'
has_many :project_user_role_relationships
has_many :package_user_role_relationships
has_many :relationships

has_many :status_messages
has_many :messages
Expand Down Expand Up @@ -1251,7 +1250,7 @@ def involved_projects_ids
role = Role.rolecache["maintainer"]

### all projects where user is maintainer
projects = ProjectUserRoleRelationship.where(user_id: id, role_id: role.id).pluck(:project_id)
projects = self.relationships.projects.where(role_id: role.id).pluck(:project_id)

# all projects where user is maintainer via a group
projects += Relationship.projects.where(role_id: role.id).joins(:groups_users).where(groups_users: { user_id: self.id }).pluck(:project_id)
Expand All @@ -1273,7 +1272,7 @@ def involved_packages
projects << -1 if projects.empty?

# all packages where user is maintainer
packages = PackageUserRoleRelationship.where(user_id: id, role_id: role.id).joins(:package).where("packages.db_project_id not in (?)", projects).pluck(:package_id)
packages = self.relationships.where(role_id: role.id).joins(:package).where("packages.db_project_id not in (?)", projects).pluck(:package_id)

# all packages where user is maintainer via a group
packages += Relationship.packages.where(role_id: role.id).joins(:groups_users).where(groups_users: { user_id: self.id }).pluck(:package_id)
Expand All @@ -1286,15 +1285,14 @@ def forbidden_project_ids
end

def user_relevant_packages_for_status
purr = "package_user_role_relationships"
role_id = Role.rolecache['maintainer'].id
# First fetch the project ids
projects_ids = self.involved_projects_ids
packages = Package.joins("LEFT OUTER JOIN #{purr} ON (#{purr}.package_id = packages.id AND #{purr}.role_id = #{role_id})")
packages = Package.joins("LEFT OUTER JOIN relationships ON (relationships.package_id = packages.id AND relationships.role_id = #{role_id})")
# No maintainers
packages = packages.where([
"(#{purr}.user_id = ?) OR "\
"(#{purr}.user_id is null AND project_id in (?) )", self.id, projects_ids])
"(relationships.user_id = ?) OR "\
"(relationships.user_id is null AND project_id in (?) )", self.id, projects_ids])
packages.pluck(:id)
end

Expand Down

0 comments on commit a2fe3ae

Please sign in to comment.