Skip to content
This repository was archived by the owner on Sep 3, 2025. It is now read-only.
Merged
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
12 changes: 10 additions & 2 deletions src/dispatch/incident/flows.py
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,13 @@ def add_participant_to_tactical_group(user_email: str, incident_id: int, db_sess
plugin.instance.add(tactical_group.email, [user_email])


@background_task
def incident_create_stable_flow(*, incident_id: int, checkpoint: str = None, db_session=None):
"""Creates all resources necessary when an incident is created as 'stable'."""
incident = incident_create_flow(incident_id=incident_id, db_session=db_session)
incident_stable_status_flow(incident=incident, db_session=db_session)


@background_task
def incident_create_closed_flow(*, incident_id: int, checkpoint: str = None, db_session=None):
"""Creates all resources necessary when an incident is created as 'closed'."""
Expand All @@ -401,15 +408,14 @@ def incident_create_closed_flow(*, incident_id: int, checkpoint: str = None, db_

db_session.add(incident)
db_session.commit()
return


# TODO create some ability to checkpoint
# We could use the model itself as the checkpoint, commiting resources as we go
# Then checking for the existence of those resources before creating them for
# this incident.
@background_task
def incident_create_flow(*, incident_id: int, checkpoint: str = None, db_session=None):
def incident_create_flow(*, incident_id: int, checkpoint: str = None, db_session=None) -> Incident:
"""Creates all resources required for new incidents."""
incident = incident_service.get(db_session=db_session, incident_id=incident_id)

Expand Down Expand Up @@ -632,6 +638,8 @@ def incident_create_flow(*, incident_id: int, checkpoint: str = None, db_session
incident_id=incident.id,
)

return incident


def incident_active_status_flow(incident: Incident, db_session=None):
"""Runs the incident active flow."""
Expand Down
17 changes: 10 additions & 7 deletions src/dispatch/incident/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,26 @@
from fastapi import APIRouter, BackgroundTasks, Depends, HTTPException, Query
from sqlalchemy.orm import Session

from dispatch.enums import Visibility
from dispatch.auth.models import DispatchUser
from dispatch.auth.models import UserRoles
from dispatch.auth.service import get_current_user
from dispatch.database import get_db, search_filter_sort_paginate
from dispatch.enums import Visibility
from dispatch.incident.enums import IncidentStatus

from dispatch.participant_role.models import ParticipantRoleType

from dispatch.auth.models import UserRoles
from .flows import (
incident_add_or_reactivate_participant_flow,
incident_assign_role_flow,
incident_create_closed_flow,
incident_create_flow,
incident_create_stable_flow,
incident_update_flow,
incident_assign_role_flow,
incident_add_or_reactivate_participant_flow,
)
from .metrics import make_forecast
from .models import IncidentCreate, IncidentPagination, IncidentRead, IncidentUpdate
from .service import create, delete, get, update
from .metrics import make_forecast


router = APIRouter()

Expand Down Expand Up @@ -114,7 +115,9 @@ def create_incident(
db_session=db_session, reporter_email=current_user.email, **incident_in.dict()
)

if incident.status == IncidentStatus.closed:
if incident.status == IncidentStatus.stable:
background_tasks.add_task(incident_create_stable_flow, incident_id=incident.id)
elif incident.status == IncidentStatus.closed:
background_tasks.add_task(incident_create_closed_flow, incident_id=incident.id)
else:
background_tasks.add_task(incident_create_flow, incident_id=incident.id)
Expand Down