Skip to content

Commit

Permalink
Merge pull request #26 from VineetBala-AOT/main
Browse files Browse the repository at this point in the history
Adding a new document
  • Loading branch information
VineetBala-AOT authored Dec 5, 2024
2 parents 04eb3a6 + 9ec446e commit 9b7267b
Show file tree
Hide file tree
Showing 31 changed files with 326 additions and 300 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ def upgrade():
sa.Column('document_id', sa.String(length=255), nullable=False),
sa.Column('amended_id', sa.Integer(), nullable=True),
sa.Column('document_type', sa.String(length=100), nullable=False),
sa.Column('display_name', sa.Text(), nullable=True),
sa.Column('document_label', sa.Text(), nullable=True),
sa.Column('document_link', sa.Text(), nullable=True),
sa.Column('document_file_name', sa.Text(), nullable=True),
sa.Column('date_issued', sa.Date(), nullable=True),
sa.Column('act', sa.Integer(), nullable=True),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ def upgrade():

# Use op.bulk_insert with the table object
op.bulk_insert(document_categories, [
{'id': 1, 'category_name': 'Exemption Order and Amendments',
{'id': 1, 'category_name': 'Certificate and Amendments',
'created_date': datetime.utcnow(), 'updated_date': datetime.utcnow()},
{'id': 2, 'category_name': 'Certificate and Amendments',
{'id': 2, 'category_name': 'Exemption Order and Amendments',
'created_date': datetime.utcnow(), 'updated_date': datetime.utcnow()},
{'id': 3, 'category_name': 'Other',
'created_date': datetime.utcnow(), 'updated_date': datetime.utcnow()},
Expand All @@ -69,20 +69,14 @@ def upgrade():

# Use op.bulk_insert with the table object
op.bulk_insert(document_types, [
{'id': 1, 'document_category_id': 2, 'document_type': 'Application Materials',
{'id': 1, 'document_category_id': 1, 'document_type': 'Certificate',
'created_date': datetime.utcnow(), 'updated_date': datetime.utcnow()},
{'id': 2, 'document_category_id': 1, 'document_type': 'Order',
{'id': 2, 'document_category_id': 2, 'document_type': 'Exemption Order',
'created_date': datetime.utcnow(), 'updated_date': datetime.utcnow()},
{'id': 3, 'document_category_id': 2, 'document_type': 'Comment/Submission',
'created_date': datetime.utcnow(), 'updated_date': datetime.utcnow()},
{'id': 4, 'document_category_id': 3, 'document_type': 'Other',
'created_date': datetime.utcnow(), 'updated_date': datetime.utcnow()},
{'id': 5, 'document_category_id': 2, 'document_type': 'Decision Materials',
'created_date': datetime.utcnow(), 'updated_date': datetime.utcnow()},
{'id': 6, 'document_category_id': 2, 'document_type': 'Schedule B/Certificate',
'created_date': datetime.utcnow(), 'updated_date': datetime.utcnow()},
{'id': 7, 'document_category_id': 2, 'document_type': 'Amendment',
{'id': 3, 'document_category_id': 1, 'document_type': 'Amendment',
'created_date': datetime.utcnow(), 'updated_date': datetime.utcnow()},
{'id': 4, 'document_category_id': 3, 'document_type': 'Other Order',
'created_date': datetime.utcnow(), 'updated_date': datetime.utcnow()}
])

with op.batch_alter_table("documents", schema='condition') as batch_op:
Expand All @@ -99,11 +93,30 @@ def upgrade():
referent_schema='condition',
ondelete='CASCADE'
)

with op.batch_alter_table("amendments", schema='condition') as batch_op:
batch_op.drop_column("document_type")
batch_op.add_column(sa.Column('document_type_id', sa.Integer(), nullable=True))

op.create_foreign_key(
'fk_document_type_id',
'amendments',
'document_types',
['document_type_id'],
['id'],
source_schema='condition',
referent_schema='condition',
ondelete='CASCADE'
)
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint('fk_document_type_id', 'amendments', type_='foreignkey', schema='condition')
with op.batch_alter_table("amendments", schema='condition') as batch_op:
batch_op.drop_column("document_type_id")
batch_op.add_column(sa.Column('document_type', sa.String(length=100), nullable=True))
op.drop_constraint('fk_document_type_id', 'documents', type_='foreignkey', schema='condition')
with op.batch_alter_table("documents", schema='condition') as batch_op:
batch_op.drop_column("document_type_id")
Expand Down
2 changes: 1 addition & 1 deletion condition-api/src/condition_api/models/amendment.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class Amendment(BaseModel):
id = Column(Integer, primary_key=True, autoincrement=True)
document_id = Column(Integer, ForeignKey('condition.documents.id', ondelete='CASCADE'), nullable=False)
amended_document_id = Column(String(255), nullable=False)
document_type = Column(String(100), nullable=False)
document_type_id = Column(Integer, ForeignKey('condition.document_types.id', ondelete='CASCADE'), nullable=True)
amendment_name = Column(Text)
date_issued = Column(Date)
act = Column(Integer)
Expand Down
3 changes: 2 additions & 1 deletion condition-api/src/condition_api/models/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ class Document(BaseModel):
document_id = Column(String(255), nullable=False)
amended_id = Column(Integer, ForeignKey('condition.documents.id', ondelete='CASCADE'), nullable=True)
document_type_id = Column(Integer, ForeignKey('condition.document_types.id', ondelete='CASCADE'), nullable=True)
display_name = Column(Text)
document_label = Column(Text)
document_link = Column(Text)
document_file_name = Column(Text)
date_issued = Column(Date)
act = Column(Integer)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
from flask_restx import Namespace, Resource, cors
from marshmallow import ValidationError

from condition_api.schemas.condition import ConditionAttributeSchema
from condition_api.schemas.condition_attribute import ConditionAttributeSchema
from condition_api.services.condition_attribute_service import ConditionAttributeService
from condition_api.utils.util import cors_preflight

Expand Down
3 changes: 1 addition & 2 deletions condition-api/src/condition_api/resources/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@

from condition_api.models.document_type import DocumentType
from condition_api.models.project import Project
from condition_api.schemas.document import DocumentTypeSchema
from condition_api.schemas.project import DocumentSchema
from condition_api.schemas.document import DocumentSchema, DocumentTypeSchema
from condition_api.services.document_service import DocumentService
from condition_api.utils.util import cors_preflight

Expand Down
8 changes: 4 additions & 4 deletions condition-api/src/condition_api/resources/subcondition.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from flask_restx import Namespace, Resource, cors
from marshmallow import ValidationError

from condition_api.schemas.condition import SubConditionSchema
from condition_api.schemas.subcondition import SubconditionSchema
from condition_api.services.subcondition_service import SubConditionService
from condition_api.utils.util import cors_preflight

Expand All @@ -30,7 +30,7 @@
"""

subcondition_model = ApiHelper.convert_ma_schema_to_restx_model(
API, SubConditionSchema(), "SubCondition"
API, SubconditionSchema(), "SubCondition"
)

@cors_preflight("PATCH, OPTIONS")
Expand All @@ -49,8 +49,8 @@ class Subconditions(Resource):
def patch():
"""Edit multiple subconditions."""
try:
subconditions_data = SubConditionSchema(many=True).load(API.payload)
subconditions_data = SubconditionSchema(many=True).load(API.payload)
updated_subconditions = SubConditionService.update_subconditions(subconditions_data)
return SubConditionSchema(many=True).dump(updated_subconditions), HTTPStatus.OK
return SubconditionSchema(many=True).dump(updated_subconditions), HTTPStatus.OK
except ValidationError as err:
return {"message": str(err)}, HTTPStatus.BAD_REQUEST
26 changes: 8 additions & 18 deletions condition-api/src/condition_api/schemas/condition.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,8 @@
"""

from marshmallow import Schema, fields

class ConditionAttributeSchema(Schema):
id = fields.Str(required=True, data_key="id")
key = fields.Str(required=True, data_key="key")
value = fields.Raw(allow_none=True, data_key="value")

class SubConditionSchema(Schema):
"""Recursive schema for subconditions."""
subcondition_id = fields.Str(data_key="subcondition_id")
subcondition_identifier = fields.Str(data_key="subcondition_identifier")
subcondition_text = fields.Str(data_key="subcondition_text")

# Recursively define subconditions (i.e., subconditions can have child subconditions)
subconditions = fields.List(fields.Nested(lambda: SubConditionSchema()), data_key="subconditions")
from condition_api.schemas.condition_attribute import ConditionAttributeSchema
from condition_api.schemas.subcondition import SubconditionSchema

class ConditionSchema(Schema):
"""Condition schema."""
Expand All @@ -37,17 +25,19 @@ class ConditionSchema(Schema):
condition_attributes = fields.List(fields.Nested(ConditionAttributeSchema), data_key="condition_attributes")

# Condition can also have its own subconditions (recursive nesting)
subconditions = fields.List(fields.Nested(SubConditionSchema), data_key="subconditions")
subconditions = fields.List(fields.Nested(SubconditionSchema), data_key="subconditions")

class ProjectDocumentConditionSchema(Schema):
"""Top-level schema to include project and document names."""
project_name = fields.Str(data_key="project_name")
document_type = fields.Str(data_key="document_type")
document_category = fields.Str(data_key="document_category")
document_category_id = fields.Str(data_key="document_category_id")
document_label = fields.Str(data_key="document_label")
conditions = fields.List(fields.Nested(ConditionSchema), data_key="conditions")

class ProjectDocumentConditionDetailSchema(Schema):
"""Top-level schema to include project and document names."""
project_name = fields.Str(data_key="project_name")
document_type = fields.Str(data_key="document_type")
display_name = fields.Str(data_key="display_name")
document_category = fields.Str(data_key="document_category")
document_label = fields.Str(data_key="document_label")
condition = fields.Nested(ConditionSchema, data_key="condition")
24 changes: 24 additions & 0 deletions condition-api/src/condition_api/schemas/condition_attribute.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
"""Condition Attribute model class.
Manages the Condition Attribute
"""

from marshmallow import EXCLUDE, Schema, fields

class BaseSchema(Schema):
"""Base schema to exclude unknown fields in the deserialized output."""

class Meta:
unknown = EXCLUDE


class ConditionAttributeSchema(BaseSchema):
"""Condition Attribute schema."""
deliverable_name = fields.Str(data_key="deliverable_name")
is_plan = fields.Bool(data_key="is_plan")
approval_type = fields.Str(data_key="approval_type")
stakeholders_to_consult = fields.List(fields.Str(), data_key="stakeholders_to_consult")
stakeholders_to_submit_to = fields.List(fields.Str(), data_key="stakeholders_to_submit_to")
consultation_required = fields.Bool(data_key="consultation_required")
related_phase = fields.Str(data_key="related_phase")
days_prior_to_commencement = fields.Int(data_key="days_prior_to_commencement")
18 changes: 17 additions & 1 deletion condition-api/src/condition_api/schemas/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"""

from marshmallow import Schema, fields
from condition_api.schemas.condition import ConditionSchema

class DocumentTypeSchema(Schema):
"""Documents type schema."""
Expand All @@ -16,9 +17,24 @@ class DocumentSchema(Schema):
"""Documents schema."""

document_id = fields.Str(data_key="document_id")
document_name = fields.Str(data_key="document_name")
document_label = fields.Str(data_key="document_label")
document_link = fields.Str(data_key="document_link")
document_file_name = fields.Str(data_key="document_file_name")
document_category_id = fields.Str(data_key="document_category_id")
document_category = fields.Str(data_key="document_category")
document_types = fields.List(fields.Str(), data_key="document_types")
document_type_id = fields.Int(data_key="document_type_id")
date_issued = fields.Str(data_key="date_issued")
year_issued = fields.Int(data_key="year_issued")
act = fields.Int(data_key="act")
project_id = fields.Str(data_key="project_id")
first_nations = fields.List(fields.Str(), data_key="first_nations")
consultation_records_required = fields.Bool(data_key="consultation_records_required")
status = fields.Bool(data_key="status")
amendment_count = fields.Int(data_key="amendment_count")

# Each document can have multiple conditions
conditions = fields.List(fields.Nested(ConditionSchema), data_key="conditions")

class ProjectDocumentAllAmendmentsSchema(Schema):
"""Top-level schema to include all amendments related to a document."""
Expand Down
57 changes: 1 addition & 56 deletions condition-api/src/condition_api/schemas/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,69 +4,14 @@
"""

from marshmallow import EXCLUDE, Schema, fields
from condition_api.schemas.document import DocumentSchema

class BaseSchema(Schema):
"""Base schema to exclude unknown fields in the deserialized output."""

class Meta:
unknown = EXCLUDE


class SubconditionSchema(BaseSchema):
"""Subcondition schema."""
subcondition_id = fields.Str(data_key="subcondition_id")
subcondition_identifier = fields.Str(data_key="subcondition_identifier")
subcondition_text = fields.Str(data_key="subcondition_text")

# Recursively define subconditions (i.e., subconditions can have child subconditions)
subconditions = fields.List(fields.Nested(lambda: SubconditionSchema()), data_key="subconditions")

class ConditionAttributeSchema(BaseSchema):
"""Condition Attribute schema."""
deliverable_name = fields.Str(data_key="deliverable_name")
is_plan = fields.Bool(data_key="is_plan")
approval_type = fields.Str(data_key="approval_type")
stakeholders_to_consult = fields.List(fields.Str(), data_key="stakeholders_to_consult")
stakeholders_to_submit_to = fields.List(fields.Str(), data_key="stakeholders_to_submit_to")
consultation_required = fields.Bool(data_key="consultation_required")
related_phase = fields.Str(data_key="related_phase")
days_prior_to_commencement = fields.Int(data_key="days_prior_to_commencement")


class ConditionSchema(BaseSchema):
"""Condition schema."""
condition_name = fields.Str(data_key="condition_name")
condition_number = fields.Int(data_key="condition_number")
condition_text = fields.Str(data_key="condition_text")
topic_tags = fields.List(fields.Str(), data_key="topic_tags")
subtopic_tags = fields.List(fields.Str(), data_key="subtopic_tags")

# Add subconditions and condition attributes to the condition
subconditions = fields.List(fields.Nested(SubconditionSchema), data_key="subconditions")
condition_attributes = fields.List(fields.Nested(ConditionAttributeSchema), data_key="condition_attributes")


class DocumentSchema(BaseSchema):
"""Document schema."""
document_id = fields.Str(data_key="document_id")
display_name = fields.Str(data_key="display_name")
document_file_name = fields.Str(data_key="document_file_name")
document_category_id = fields.Str(data_key="document_category_id")
document_category = fields.Str(data_key="document_category")
document_types = fields.List(fields.Str(), data_key="document_types")
document_type_id = fields.Int(data_key="document_type_id")
date_issued = fields.Str(data_key="date_issued")
act = fields.Int(data_key="act")
project_id = fields.Str(data_key="project_id")
first_nations = fields.List(fields.Str(), data_key="first_nations")
consultation_records_required = fields.Bool(data_key="consultation_records_required")
status = fields.Bool(data_key="status")
amendment_count = fields.Int(data_key="amendment_count")

# Each document can have multiple conditions
conditions = fields.List(fields.Nested(ConditionSchema), data_key="conditions")


class ProjectSchema(BaseSchema):
"""Project schema, including documents, conditions, subconditions, and deliverables."""

Expand Down
22 changes: 22 additions & 0 deletions condition-api/src/condition_api/schemas/subcondition.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
"""Subconditio model class.
Manages the Subconditio
"""

from marshmallow import EXCLUDE, Schema, fields

class BaseSchema(Schema):
"""Base schema to exclude unknown fields in the deserialized output."""

class Meta:
unknown = EXCLUDE


class SubconditionSchema(BaseSchema):
"""Subcondition schema."""
subcondition_id = fields.Str(data_key="subcondition_id")
subcondition_identifier = fields.Str(data_key="subcondition_identifier")
subcondition_text = fields.Str(data_key="subcondition_text")

# Recursively define subconditions (i.e., subconditions can have child subconditions)
subconditions = fields.List(fields.Nested(lambda: SubconditionSchema()), data_key="subconditions")
Loading

0 comments on commit 9b7267b

Please sign in to comment.