67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
from atst.database import db
|
|
from atst.domain.authz import Authorization
|
|
from atst.domain.environments import Environments
|
|
from atst.domain.exceptions import NotFoundError
|
|
from atst.models.permissions import Permissions
|
|
from atst.models.project import Project
|
|
from atst.models.environment import Environment
|
|
from atst.models.environment_role import EnvironmentRole
|
|
|
|
|
|
class Projects(object):
|
|
@classmethod
|
|
def create(cls, user, workspace, name, description, environment_names):
|
|
project = Project(workspace=workspace, name=name, description=description)
|
|
db.session.add(project)
|
|
|
|
Environments.create_many(project, environment_names)
|
|
|
|
db.session.commit()
|
|
return project
|
|
|
|
@classmethod
|
|
def get(cls, user, workspace, project_id):
|
|
# TODO: this should check permission for this particular project
|
|
Authorization.check_workspace_permission(
|
|
user,
|
|
workspace,
|
|
Permissions.VIEW_APPLICATION_IN_WORKSPACE,
|
|
"view project in workspace",
|
|
)
|
|
|
|
try:
|
|
project = db.session.query(Project).filter_by(id=project_id).one()
|
|
except NoResultFound:
|
|
raise NotFoundError("project")
|
|
|
|
return project
|
|
|
|
@classmethod
|
|
def for_user(self, user, workspace):
|
|
return (
|
|
db.session.query(Project)
|
|
.join(Environment)
|
|
.join(EnvironmentRole)
|
|
.filter(Project.workspace_id == workspace.id)
|
|
.filter(EnvironmentRole.user_id == user.id)
|
|
.all()
|
|
)
|
|
|
|
@classmethod
|
|
def get_all(cls, user, workspace_user, workspace):
|
|
Authorization.check_workspace_permission(
|
|
user,
|
|
workspace,
|
|
Permissions.VIEW_APPLICATION_IN_WORKSPACE,
|
|
"view project in workspace",
|
|
)
|
|
|
|
try:
|
|
projects = (
|
|
db.session.query(Project).filter_by(workspace_id=workspace.id).all()
|
|
)
|
|
except NoResultFound:
|
|
raise NotFoundError("projects")
|
|
|
|
return projects
|