service/src/piracyshield_service/ticket/tasks/ticket_initialize.py
2024-02-07 14:53:48 +01:00

67 lines
1.7 KiB
Python

from piracyshield_service.task.base import BaseTask
from piracyshield_data_model.ticket.status.model import TicketStatusModel
from piracyshield_data_storage.ticket.storage import TicketStorage
from piracyshield_service.log.ticket.create import LogTicketCreateService
class TicketInitializeTask(BaseTask):
"""
Operations scheduled after the creation of a ticket.
"""
ticket_id = None
ticket_storage = None
log_ticket_create_service = None
def __init__(self, ticket_id: str):
super().__init__()
self.ticket_id = ticket_id
def run(self) -> bool:
"""
Starts the operations for the new ticket.
The status gets set to `open` as we make it visible for API pulls and notifications
"""
# TODO: must check if the ticket exists.
# change status
self.ticket_storage.update_status(
ticket_id = self.ticket_id,
ticket_status = TicketStatusModel.OPEN.value
)
def before_run(self):
"""
Initialize required modules.
"""
self.ticket_storage = TicketStorage()
self.log_ticket_create_service = LogTicketCreateService()
def after_run(self):
# log the operation
self.log_ticket_create_service.execute(
ticket_id = self.ticket_id,
message = f'Changed status to `{TicketStatusModel.OPEN.value}`.'
)
def on_failure(self):
self.logger.error(f'Could not update the ticket `{self.ticket_id}`')
self.ticket_storage.update_status(
ticket_id = self.ticket_id,
ticket_status = TicketStatusModel.CREATED.value
)
def ticket_initialize_task_caller(**kwargs):
t = TicketInitializeTask(**kwargs)
return t.execute()