scinote-web/app/controllers/team_repositories_controller.rb
2019-08-09 14:13:01 +02:00

66 lines
2.1 KiB
Ruby

# frozen_string_literal: true
class TeamRepositoriesController < ApplicationController
before_action :load_vars
before_action :check_sharing_permissions, only: %i(create destroy)
# POST :team_id/repositories/:repository_id/team_repositories
def create
team_repository = TeamRepository.new(repository: @repository,
team_id: create_params[:target_team_id],
permission_level: create_params[:permission_level])
if team_repository.save
log_activity(:share_inventory, team_repository)
render json: { team_repository: team_repository }, status: :ok
else
render json: { team_repository: { message: 'not saved!', errors: team_repository.errors } },
status: :unprocessable_entity
end
end
# DELETE :team_id/repositories/:repository_id/team_repositories/:id
def destroy
team_repository = @repository.team_repositories.find_by_id(destory_params[:id])
if team_repository
log_activity(:unshare_inventory, team_repository)
team_repository.destroy
render json: {}, status: :no_content
else
render json: { message: 'Can\'t find sharing relation for destroy' }, status: :unprocessable_entity
end
end
private
def load_vars
@repository = Repository.find_by_id(params[:repository_id])
render_404 unless @repository
end
def create_params
params.permit(:team_id, :repository_id, :target_team_id, :permission_level)
end
def destory_params
params.permit(:team_id, :id)
end
def check_sharing_permissions
render_403 unless can_manage_repository?(@repository)
end
def log_activity(type_of, team_repository)
Activities::CreateActivityService
.call(activity_type: type_of,
owner: current_user,
subject: team_repository.repository,
team: current_team,
message_items: { repository: team_repository.repository.id,
team: team_repository.team.id,
permission_level: team_repository.permission_level })
end
end