From bee2df808bfd198fe4d284f647f866df652efdaa Mon Sep 17 00:00:00 2001 From: Alexander Bach Date: Fri, 22 May 2015 17:02:10 +0200 Subject: [PATCH] Introduce CreateWorkPackageService --- app/services/create_work_package_service.rb | 59 +++++++++++++++++++ .../projects/available_work_packages_api.rb | 18 ++---- 2 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 app/services/create_work_package_service.rb diff --git a/app/services/create_work_package_service.rb b/app/services/create_work_package_service.rb new file mode 100644 index 0000000000..8bdd8501c2 --- /dev/null +++ b/app/services/create_work_package_service.rb @@ -0,0 +1,59 @@ +#-- encoding: UTF-8 +#-- copyright +# OpenProject is a project management system. +# Copyright (C) 2012-2015 the OpenProject Foundation (OPF) +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2013 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See doc/COPYRIGHT.rdoc for more details. +#++ + +class CreateWorkPackageService + attr_accessor :user, :send_notifications, :project, :work_package + + def initialize(user:, project:, send_notifications: true) + self.user = user + self.project = project + self.send_notifications = send_notifications + + configure_update_notification + end + + def create + hash = { + project: project, + author: user, + type: Type.where(is_default: true).first + } + self.work_package = project.add_work_package(hash) + end + + def save + work_package.save + end + + private + + def configure_update_notification + WorkPackageObserver.instance.send_notification = send_notifications + end +end diff --git a/lib/api/v3/projects/available_work_packages_api.rb b/lib/api/v3/projects/available_work_packages_api.rb index 1e357b44f1..68942e7f77 100644 --- a/lib/api/v3/projects/available_work_packages_api.rb +++ b/lib/api/v3/projects/available_work_packages_api.rb @@ -42,22 +42,14 @@ module API helpers ::API::V3::WorkPackages::WorkPackagesSharedHelpers post do - hash = { + create_service = CreateWorkPackageService.new( + user: current_user, project: @project, - author: current_user, - type: Type.where(is_default: true).first - } - @work_package = @project.add_work_package(hash) + send_notifications: !(params.has_key?(:notify) && params[:notify] == 'false')) + @work_package = create_service.create write_work_package_attributes - send_notifications = !(params.has_key?(:notify) && params[:notify] == 'false') - update_service = UpdateWorkPackageService.new(current_user, - @work_package, - nil, - send_notifications, - WorkPackageObserver) - - if write_request_valid?(WorkPackages::CreateContract) && update_service.save + if write_request_valid?(WorkPackages::CreateContract) && create_service.save @work_package.reload WorkPackages::WorkPackageRepresenter.create(@work_package,