Add migration for enforcing uniqueness of an application name within a portfolio and update create/update Applicaiton domain methods.

This commit is contained in:
leigh-mil
2019-12-13 14:49:39 -05:00
parent 483b00a947
commit 22dd5d7b85
7 changed files with 87 additions and 18 deletions

View File

@@ -1,4 +1,7 @@
from sqlalchemy.exc import IntegrityError
from . import BaseDomainClass
from .exceptions import AlreadyExistsError
from flask import g
from atst.database import db
from atst.domain.application_roles import ApplicationRoles
@@ -28,7 +31,12 @@ class Applications(BaseDomainClass):
if environment_names:
Environments.create_many(user, application, environment_names)
db.session.commit()
try:
db.session.commit()
except IntegrityError:
db.session.rollback()
raise AlreadyExistsError("application")
return application
@classmethod
@@ -54,7 +62,12 @@ class Applications(BaseDomainClass):
g.current_user, application, new_data["environment_names"]
)
db.session.add(application)
db.session.commit()
try:
db.session.commit()
except IntegrityError:
db.session.rollback()
raise AlreadyExistsError("application")
return application

View File

@@ -1,4 +1,4 @@
from sqlalchemy import and_, Column, ForeignKey, String
from sqlalchemy import and_, Column, ForeignKey, String, UniqueConstraint
from sqlalchemy.orm import relationship, synonym
from atst.models.base import Base
@@ -34,6 +34,11 @@ class Application(
),
)
members = synonym("roles")
__table_args__ = (
UniqueConstraint(
"name", "portfolio_id", name="name_portfolio_id_unique_constraint"
),
)
@property
def users(self):