Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions queue_services/business-filer/devops/vaults.gcp.env
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ BUSINESS_EVENTS_TOPIC="op://gcp-queue/$APP_ENV/topics/BUSINESS_EVENTS_TOPIC"
BUSINESS_MAILER_TOPIC="op://gcp-queue/$APP_ENV/topics/BUSINESS_EMAILER_TOPIC"
BUSINESS_PAY_TOPIC="op://gcp-queue/$APP_ENV/topics/BUSINESS_PAY_TOPIC"
DOC_CREATE_REC_TOPIC="op://gcp-queue/$APP_ENV/topics/DOC_CREATE_REC_TOPIC"
DOC_UPDATE_REC_TOPIC="op://gcp-queue/$APP_ENV/topics/DOC_UPDATE_REC_TOPIC"
NAMEX_PAY_TOPIC="op://gcp-queue/$APP_ENV/topics/NAMEX_PAY_TOPIC"
VPC_CONNECTOR="op://CD/$APP_ENV/base/VPC_CONNECTOR"

Expand Down
2 changes: 2 additions & 0 deletions queue_services/business-filer/src/business_filer/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ class _Config: # pylint: disable=too-few-public-methods
BUSINESS_MAILER_TOPIC = os.getenv("BUSINESS_MAILER_TOPIC", "business-mailer-dev")
BUSINESS_PAY_TOPIC = os.getenv("BUSINESS_PAY_TOPIC", "business-pay-dev")
DOC_CREATE_REC_TOPIC = os.getenv("DOC_CREATE_REC_TOPIC")
DOC_UPDATE_REC_TOPIC = os.getenv("DOC_UPDATE_REC_TOPIC")
NAMEX_PAY_TOPIC = os.getenv("NAMEX_PAY_TOPIC", "namex-pay-dev")
SUB_AUDIENCE = os.getenv("SUB_AUDIENCE", "")
SUB_SERVICE_ACCOUNT = os.getenv("SUB_SERVICE_ACCOUNT", "")
Expand Down Expand Up @@ -132,6 +133,7 @@ class TestConfig(_Config): # pylint: disable=too-few-public-methods

# Faked out publishing
DOC_CREATE_REC_TOPIC = os.getenv("TEST_DOC_CREATE_REC_TOPIC", "fake-doc-create-rec-topic")
DOC_UPDATE_REC_TOPIC = os.getenv("TEST_DOC_UPDATE_REC_TOPIC", "fake-doc-update-rec-topic")


class ProdConfig(_Config): # pylint: disable=too-few-public-methods
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@

from ..common.services.account_service import AccountService # noqa: TID252
from ..common.services.flag_manager import Flags # noqa: TID252
from . import document_service
from .gcp_auth import verify_gcp_jwt

flags = Flags()
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
transition,
transparency_register,
)
from business_filer.filing_processors.filing_components import business_profile, document_records, name_request
from business_filer.filing_processors.filing_components import business_profile, name_request
from business_filer.services import Flags
from business_filer.services.publish_event import PublishEvent

Expand Down Expand Up @@ -326,9 +326,14 @@ def process_filing(filing_message: FilingMessage): # noqa: PLR0915, PLR0912
if not Flags.is_on("enable-sandbox"):
PublishEvent.publish_email_message(current_app, business, filing_submission, filing_submission.status)

# Update the document record(s) for any client-submitted documents on this filing with
# the filing id, filing date, and business identifier
document_records.update_document_records(business, filing_submission)
try:
# Update the DRS record(s) for any client-submitted documents on this filing with
# the filing id, filing date, and business identifier
PublishEvent.publish_drs_update_message(current_app, business, filing_submission)
except Exception as err:
# log error for ops, but don't prevent filing from completing
current_app.logger.warning(err.with_traceback(None))
current_app.logger.warning(f"Failed to publish DRS update for {filing_submission.id}.")

if filing_type in [
FilingTypes.CHANGEOFLIQUIDATORS,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
import re
import uuid
from datetime import UTC, datetime

# if TYPE_CHECKING:
from business_model.models import Business, Filing
from business_model.models import Business, Document, Filing
from flask import Flask

from business_filer.common.filing import FilingTypes
from business_filer.exceptions import PublishException
from business_filer.services import Flags, gcp_queue
from gcp_queue import SimpleCloudEvent, to_queue_message

# DRS keys are formatted as "{documentClass}-{documentServiceId}", e.g. "COOP-DS0000101951".
# Legacy Minio keys (UUIDs) do not match this pattern.
_DRS_KEY_PATTERN = re.compile(r"^[A-Z]+-DS\d+$")


class PublishEvent:
"""Service to publish specific events onto the GCP Queue."""
Expand Down Expand Up @@ -78,6 +83,39 @@ def publish_drs_create_message(app: Flask, business: Business, filing: Filing):
except Exception as err: # pylint: disable=broad-except;
raise PublishException(err) from err

@staticmethod
def publish_drs_update_message(app: Flask, business: Business, filing: Filing):
"""Publish a drs update record message for each DRS document uploaded with the filing.

Updates the document record(s) with filing/business information once a filing completes,
so the document shows up correctly in the ledger and is searchable in the DRS UI.
"""
try:
subject = app.config.get("DOC_UPDATE_REC_TOPIC")
documents = Document.query.filter_by(filing_id=filing.id).all()
for document in documents:
if not PublishEvent._is_drs_document(document.file_key):
continue
data = {
"accountId": "business-api",
"fileKey": document.file_key,
"businessIdentifier": business.identifier if business else None,
"filingDate": filing.completion_date.isoformat() if filing.completion_date else None,
"filingId": filing.id
}
data = {k: v for k, v in data.items() if v is not None}

ce = PublishEvent._create_cloud_event(app, business, filing, subject, data)
gcp_queue.publish(subject, to_queue_message(ce))

except Exception as err: # pylint: disable=broad-except;
raise PublishException(err) from err

@staticmethod
def _is_drs_document(file_key: str) -> bool:
"""Return True if the file_key is a DRS key."""
return bool(file_key) and bool(_DRS_KEY_PATTERN.match(file_key))

@staticmethod
def publish_mras_email(app: Flask, business: Business, filing: Filing):
"""Publish MRAS email message onto the NATS emailer subject."""
Expand Down
Loading