# Configure logger import logging from fastapi import APIRouter from modules.connectors.connectorTicketJira import ConnectorTicketJira from modules.connectors.connectorSharepoint import ConnectorSharepoint from modules.interfaces.interfaceTicketObjects import TicketSharepointSyncInterface logger = logging.getLogger(__name__) router = APIRouter( prefix="/api/jira", tags=["JIRA Sync"], ) @router.post("/sync/delta-group") async def sync_jira(): logger.info("Syncing Jira issues...") # Sharepoint connection parameters sharepoint_client_id = None sharepoint_client_secret = None sharepoint_site_url = None # Jira connection parameters jira_username = None jira_api_token = None jira_url = "https://deltasecurity.atlassian.net" project_code = "DCS" issue_type = "Task" # Basic validation (credentials will be added later) if not all([sharepoint_client_id, sharepoint_client_secret, sharepoint_site_url]): logger.warning("SharePoint credentials not configured - sync will fail") if not all([jira_username, jira_api_token]): logger.warning("JIRA credentials not configured - sync will fail") # Define the task sync definition task_sync_definition = { # key=excel-header, [get:jira>excel | put: excel>jira, jira-xml-field-list] "ID": ["get", ["key"]], "Module Category": ["get", ["fields", "customfield_10058", "value"]], "Summary": ["get", ["fields", "summary"]], "Description": ["get", ["fields", "description"]], "References": ["get", ["fields", "customfield_10066"]], "Priority": ["get", ["fields", "priority", "name"]], "Issue Status": ["get", ["fields", "customfield_10062"]], "Assignee": ["get", ["fields", "assignee", "displayName"]], "Issue Created": ["get", ["fields", "created"]], "Due Date": ["get", ["fields", "duedate"]], "DELTA Comments": ["get", ["fields", "customfield_10060"]], "SELISE Ticket References": ["put", ["fields", "customfield_10067"]], "SELISE Status Values": ["put", ["fields", "customfield_10065"]], "SELISE Comments": ["put", ["fields", "customfield_10064"]], } # SharePoint file configuration sync_folder = "/sites//Shared Documents/TicketSync" sync_file = "delta_group_selise_ticket_exchange_list.csv" backup_folder = "/sites//Shared Documents/TicketSync/Backups" audit_folder = "/sites//Shared Documents/TicketSync/AuditLogs" # Create the jira connector instance jira_connector = await ConnectorTicketJira.create( jira_username=jira_username, jira_api_token=jira_api_token, jira_url=jira_url, project_code=project_code, issue_type=issue_type, ) # Create the sharepoint connector instance ctx = ConnectorSharepoint.get_client_context_from_app( site_url=sharepoint_site_url, client_id=sharepoint_client_id, client_secret=sharepoint_client_secret, ) sharepoint_connector = await ConnectorSharepoint.create(ctx=ctx) # Create the sync interface instance sync_interface = await TicketSharepointSyncInterface.create( connector_ticket=jira_connector, connector_sharepoint=sharepoint_connector, task_sync_definition=task_sync_definition, sync_folder=sync_folder, sync_file=sync_file, backup_folder=backup_folder, audit_folder=audit_folder, ) # Create a backup of the current sync file await sync_interface.create_backup() # Sync from JIRA to CSV in Sharepoint await sync_interface.sync_from_jira_to_csv() # Sync from CSV in Sharepoint to JIRA await sync_interface.sync_from_csv_to_jira() # Return a response return {"status": "Sync completed"}