Skip to content
Snippets Groups Projects
Commit 7405e79c authored by Benedikt Heinrichs's avatar Benedikt Heinrichs
Browse files

New: Modify SPGroups on User changes (coscine/issues#430)

parent eb457487
No related branches found
No related tags found
3 merge requests!33Sprint/201920,!32New: Modify SPGroups on User changes,!29Modify SPGroups on User changes (coscine/issues#430)
......@@ -26,7 +26,8 @@ namespace Coscine.Api.Project.Controllers
_projectActions = new List<IProjectAction>()
{
new PIDAction(),
new SharePointSiteAction()
new SharePointSiteAction(),
new SPGroupAction()
};
_projectModel = new ProjectModel();
}
......@@ -174,7 +175,7 @@ namespace Coscine.Api.Project.Controllers
{
// Filter exception, because sometimes the PID or SharePoint site might not be generated in e.g. tests
}
});
}, null);
_projectModel.Delete(project);
}
......@@ -195,15 +196,15 @@ namespace Coscine.Api.Project.Controllers
subProjectModel.LinkSubProject(projectObject.ParentId, project.Id);
}
FireEvents((projectAction, projectEventArgs) => projectAction.OnProjectCreate(project, projectEventArgs));
FireEvents((projectAction, projectEventArgs) => projectAction.OnProjectCreate(project, projectEventArgs), user);
return _projectModel.CreateReturnObjectFromDatabaseObject(project);
}));
}
private void FireEvents(Action<IProjectAction, ProjectEventArgs> eventAction)
private void FireEvents(Action<IProjectAction, ProjectEventArgs> eventAction, User user)
{
ProjectEventArgs projectEventArgs = new ProjectEventArgs(Program.Configuration, new object[0]);
ProjectEventArgs projectEventArgs = new ProjectEventArgs(Program.Configuration, new object[] { user });
foreach (var projectAction in _projectActions)
{
eventAction(projectAction, projectEventArgs);
......
using Coscine.Api.Project.Models;
using Coscine.Action;
using Coscine.Action.EventArgs;
using Coscine.Action.Implementations.User;
using Coscine.Api.Project.Models;
using Coscine.Api.Project.ReturnObjects;
using Coscine.ApiCommons;
using Coscine.ApiCommons.Exceptions;
......@@ -16,11 +19,16 @@ namespace Coscine.Api.Project.Controllers
public class ProjectRoleController : Controller
{
private readonly Authenticator _authenticator;
private readonly List<IUserAction> _userActions;
private readonly ProjectRoleModel _projectRoleModel;
public ProjectRoleController()
{
_authenticator = new Authenticator(this, Program.Configuration);
_userActions = new List<IUserAction>()
{
new SPGroupAction()
};
_projectRoleModel = new ProjectRoleModel();
}
......@@ -89,8 +97,14 @@ namespace Coscine.Api.Project.Controllers
{
ProjectRoleObject projectRoleObject = ObjectFactory<ProjectRoleObject>.DeserializeFromStream(Request.Body);
ProjectModel projectModel = new ProjectModel();
if (projectModel.OwnsProject(user, projectModel.GetById(projectRoleObject.ProjectId)))
var project = projectModel.GetById(projectRoleObject.ProjectId);
RoleModel roleModel = new RoleModel();
var role = roleModel.GetById(projectRoleObject.Role.Id);
UserModel userModel = new UserModel();
var userToAdd = userModel.GetById(projectRoleObject.User.Id);
if (projectModel.OwnsProject(user, project))
{
FireEvents((userAction, userEventArgs) => userAction.OnUserSet(userToAdd, project, role, userEventArgs));
return _projectRoleModel.SetFromObject(projectRoleObject);
}
else
......@@ -110,6 +124,11 @@ namespace Coscine.Api.Project.Controllers
{
_projectRoleModel.CheckIfLastOwnerWillBeRemoved(roleId, projectId);
var project = projectModel.GetById(projectId);
UserModel userModel = new UserModel();
var userToRemove = userModel.GetById(userId);
FireEvents((userAction, userEventArgs) => userAction.OnUserDelete(userToRemove, project, userEventArgs));
return _projectRoleModel.Delete(_projectRoleModel.GetWhere((projectRole) =>
projectRole.ProjectId == projectId
&& projectRole.UserId == userId
......@@ -121,5 +140,14 @@ 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);
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment