mirror of
https://github.com/lucaspalomodevelop/eventcally.git
synced 2026-03-13 08:09:37 +00:00
76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
from enum import IntEnum
|
|
|
|
from sqlalchemy import CheckConstraint, Column, Integer, UniqueConstraint
|
|
from sqlalchemy.event import listens_for
|
|
from sqlalchemy.ext.hybrid import hybrid_property
|
|
|
|
from project import db
|
|
from project.dbtypes import IntegerEnum
|
|
from project.models.trackable_mixin import TrackableMixin
|
|
from project.utils import make_check_violation
|
|
|
|
|
|
class AdminUnitVerificationRequestReviewStatus(IntEnum):
|
|
inbox = 1
|
|
verified = 2
|
|
rejected = 3
|
|
|
|
|
|
class AdminUnitVerificationRequestRejectionReason(IntEnum):
|
|
notresponsible = 1
|
|
missinginformation = 2
|
|
unknown = 3
|
|
untrustworthy = 4
|
|
illegal = 5
|
|
irrelevant = 6
|
|
|
|
|
|
class AdminUnitVerificationRequest(db.Model, TrackableMixin):
|
|
__tablename__ = "adminunitverificationrequest"
|
|
__table_args__ = (
|
|
UniqueConstraint("source_admin_unit_id", "target_admin_unit_id"),
|
|
CheckConstraint(
|
|
"source_admin_unit_id != target_admin_unit_id",
|
|
name="auvr_source_neq_target",
|
|
),
|
|
)
|
|
id = Column(Integer(), primary_key=True)
|
|
source_admin_unit_id = db.Column(
|
|
db.Integer, db.ForeignKey("adminunit.id", ondelete="CASCADE"), nullable=False
|
|
)
|
|
target_admin_unit_id = db.Column(
|
|
db.Integer, db.ForeignKey("adminunit.id", ondelete="CASCADE"), nullable=False
|
|
)
|
|
review_status = Column(IntegerEnum(AdminUnitVerificationRequestReviewStatus))
|
|
rejection_reason = Column(IntegerEnum(AdminUnitVerificationRequestRejectionReason))
|
|
|
|
@hybrid_property
|
|
def verified(self):
|
|
return self.review_status == AdminUnitVerificationRequestReviewStatus.verified
|
|
|
|
def validate(self):
|
|
source_id = (
|
|
self.source_admin_unit.id
|
|
if self.source_admin_unit
|
|
else self.source_admin_unit_id
|
|
)
|
|
target_id = (
|
|
self.target_admin_unit.id
|
|
if self.target_admin_unit
|
|
else self.target_admin_unit_id
|
|
)
|
|
if source_id == target_id: # pragma: no cover
|
|
raise make_check_violation("There must be no self-reference.")
|
|
|
|
|
|
@listens_for(AdminUnitVerificationRequest, "before_insert")
|
|
@listens_for(AdminUnitVerificationRequest, "before_update")
|
|
def before_saving_admin_unit_verification_request(mapper, connect, self):
|
|
if self.review_status != AdminUnitVerificationRequestReviewStatus.rejected:
|
|
self.rejection_reason = None
|
|
|
|
if self.rejection_reason == 0:
|
|
self.rejection_reason = None
|
|
|
|
self.validate()
|