diff --git a/src/dispatch/incident/flows.py b/src/dispatch/incident/flows.py index 35c39595cc8e..ecd186ff7010 100644 --- a/src/dispatch/incident/flows.py +++ b/src/dispatch/incident/flows.py @@ -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'.""" @@ -401,7 +408,6 @@ 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 @@ -409,7 +415,7 @@ def incident_create_closed_flow(*, incident_id: int, checkpoint: str = None, db_ # 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) @@ -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.""" diff --git a/src/dispatch/incident/views.py b/src/dispatch/incident/views.py index 181980373e66..a50c5fee1f39 100644 --- a/src/dispatch/incident/views.py +++ b/src/dispatch/incident/views.py @@ -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() @@ -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)