diff --git a/src/Project/Controllers/ProjectController.cs b/src/Project/Controllers/ProjectController.cs index 62abcc7ad40a0609c66da29d412108facbd75200..75b5cdd82bb4736833a0fbb32c4341a550ce24b6 100644 --- a/src/Project/Controllers/ProjectController.cs +++ b/src/Project/Controllers/ProjectController.cs @@ -11,25 +11,22 @@ using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; +using Coscine.Configuration; namespace Coscine.Api.Project.Controllers { public class ProjectController : Controller { private readonly Authenticator _authenticator; - private readonly List<IProjectAction> _projectActions; private readonly ProjectModel _projectModel; - + private readonly IConfiguration _configuration; + private readonly Emitter _emitter; public ProjectController() { _authenticator = new Authenticator(this, Program.Configuration); - _projectActions = new List<IProjectAction>() - { - new PIDAction(), - new SharePointSiteAction(), - new SPGroupAction() - }; + _configuration = Program.Configuration; _projectModel = new ProjectModel(); + _emitter = new Emitter(this._configuration); } [Route("[controller]")] @@ -165,17 +162,10 @@ namespace Coscine.Api.Project.Controllers projectInstituteModel.Delete(projectInstitute); } - FireEvents((projectAction, projectEventArgs) => + _emitter.EmitProjectDelete(new ProjectEventArgs(_configuration) { - try - { - projectAction.OnProjectDelete(project, projectEventArgs); - } - catch (Exception) - { - // Filter exception, because sometimes the PID or SharePoint site might not be generated in e.g. tests - } - }, null); + Project = project + }); _projectModel.Delete(project); } @@ -196,19 +186,14 @@ namespace Coscine.Api.Project.Controllers subProjectModel.LinkSubProject(projectObject.ParentId, project.Id); } - FireEvents((projectAction, projectEventArgs) => projectAction.OnProjectCreate(project, projectEventArgs), user); + _emitter.EmitProjectCreate(new ProjectEventArgs(_configuration) + { + Project = project, + ProjectOwner = user + }); return _projectModel.CreateReturnObjectFromDatabaseObject(project); })); } - - private void FireEvents(Action<IProjectAction, ProjectEventArgs> eventAction, User user) - { - ProjectEventArgs projectEventArgs = new ProjectEventArgs(Program.Configuration, new object[] { user }); - foreach (var projectAction in _projectActions) - { - eventAction(projectAction, projectEventArgs); - } - } } } diff --git a/src/Project/Controllers/ProjectRoleController.cs b/src/Project/Controllers/ProjectRoleController.cs index a69af859accd29c9155782abad66489d486653e8..ec97cf803bd4a91c97b80a8376c419eecf36d2b8 100644 --- a/src/Project/Controllers/ProjectRoleController.cs +++ b/src/Project/Controllers/ProjectRoleController.cs @@ -19,17 +19,16 @@ namespace Coscine.Api.Project.Controllers public class ProjectRoleController : Controller { private readonly Authenticator _authenticator; - private readonly List<IUserAction> _userActions; private readonly ProjectRoleModel _projectRoleModel; + private readonly Emitter _emitter; + private readonly Coscine.Configuration.IConfiguration _configuration; public ProjectRoleController() { + _emitter = new Emitter(Program.Configuration); _authenticator = new Authenticator(this, Program.Configuration); - _userActions = new List<IUserAction>() - { - new SPGroupAction() - }; _projectRoleModel = new ProjectRoleModel(); + _configuration = Program.Configuration; } [Route("[controller]/{projectId}")] @@ -104,7 +103,12 @@ namespace Coscine.Api.Project.Controllers var userToAdd = userModel.GetById(projectRoleObject.User.Id); if (projectModel.OwnsProject(user, project)) { - FireEvents((userAction, userEventArgs) => userAction.OnUserSet(userToAdd, project, role, userEventArgs)); + _emitter.EmitUserAdd(new UserEventArgs(this._configuration) + { + Project = project, + Role = role, + User = userToAdd + }); return _projectRoleModel.SetFromObject(projectRoleObject); } else @@ -127,7 +131,12 @@ namespace Coscine.Api.Project.Controllers var project = projectModel.GetById(projectId); UserModel userModel = new UserModel(); var userToRemove = userModel.GetById(userId); - FireEvents((userAction, userEventArgs) => userAction.OnUserDelete(userToRemove, project, userEventArgs)); + + _emitter.EmitUserRemove(new UserEventArgs(this._configuration) + { + Project = project, + User = userToRemove + }); return _projectRoleModel.Delete(_projectRoleModel.GetWhere((projectRole) => projectRole.ProjectId == projectId @@ -140,14 +149,5 @@ namespace Coscine.Api.Project.Controllers } })); } - - private void FireEvents(Action<IUserAction, UserEventArgs> eventAction) - { - UserEventArgs userEventArgs = new UserEventArgs(Program.Configuration, new object[0]); - foreach (var userAction in _userActions) - { - eventAction(userAction, userEventArgs); - } - } } }