diff --git a/atst/domain/environments.py b/atst/domain/environments.py index 3f15fb17..66910c6e 100644 --- a/atst/domain/environments.py +++ b/atst/domain/environments.py @@ -1,7 +1,12 @@ +from sqlalchemy.orm.exc import NoResultFound + from atst.database import db from atst.models.environment import Environment from atst.models.environment_role import EnvironmentRole, CSPRole from atst.models.project import Project +from atst.domain.users import Users + +from .exceptions import NotFoundError class Environments(object): @@ -39,3 +44,28 @@ class Environments(object): .filter(Project.id == Environment.project_id) .all() ) + + def get(cls, environment_id): + try: + env = db.session.query(Environment).filter_by(id=environment_id).one() + except NoResultFound: + raise NotFoundError("environment") + + return env + + @classmethod + def update_environment_role(cls, environment_data, workspace_user): + # TODO need to check permissions? + new_role = environment_data["user_role_name"] + environment = Environments.get(cls=cls, environment_id=environment_data["id"]) + if workspace_user.has_environment_roles: + env_role = EnvironmentRole.get(workspace_user.user_id, environment.id) + env_role.role = new_role + else: + env_role = EnvironmentRole( + user=workspace_user.user, + environment=environment, + role=new_role + ) + db.session.add(env_role) + db.session.commit() diff --git a/atst/models/environment_role.py b/atst/models/environment_role.py index 594b46f3..f396d9cd 100644 --- a/atst/models/environment_role.py +++ b/atst/models/environment_role.py @@ -4,6 +4,8 @@ from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from atst.models import Base, types, mixins +from atst.database import db +from .types import Id class CSPRole(Enum): @@ -24,6 +26,18 @@ class EnvironmentRole(Base, mixins.TimestampsMixin): user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=False) user = relationship("User", backref="environment_roles") + @classmethod + def get(cls, user_id, environment_id): + existing_env_role = ( + db.session.query(EnvironmentRole) + .filter( + EnvironmentRole.user_id == user_id, + EnvironmentRole.environment_id == environment_id, + ) + .one_or_none() + ) + return existing_env_role + Index( "environments_role_user_environment", diff --git a/atst/routes/workspaces.py b/atst/routes/workspaces.py index 5319474c..ef156dc8 100644 --- a/atst/routes/workspaces.py +++ b/atst/routes/workspaces.py @@ -242,7 +242,13 @@ def update_member(workspace_id, member_id): ) new_role_name = member.role_displayname if form.data["environment_role"]: - print (form.data) + new_env_role = form.data["environment_role"] + environment_data = { + "id": "9432c6a5-2f9d-4c9c-b553-4c175852fb65", + "name": "this environment", + "user_role_name": new_env_role, + } + Environments.update_environment_role(environment_data, member) return redirect( url_for( diff --git a/js/components/forms/edit_workspace_member.js b/js/components/forms/edit_workspace_member.js index f483656d..1c31fb69 100644 --- a/js/components/forms/edit_workspace_member.js +++ b/js/components/forms/edit_workspace_member.js @@ -18,7 +18,7 @@ export default { props: { choices: Array, - initialData: String + initialData: Object }, data: function () { diff --git a/templates/workspaces/members/edit.html b/templates/workspaces/members/edit.html index e4c89a98..ffdd99c2 100644 --- a/templates/workspaces/members/edit.html +++ b/templates/workspaces/members/edit.html @@ -86,7 +86,6 @@ Cancel - {% endcall %}