103 lines
3.7 KiB
Python
103 lines
3.7 KiB
Python
# 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 = "Shared Documents/TicketSync"
|
|
sync_file = "delta_group_selise_ticket_exchange_list.csv"
|
|
backup_folder = "Shared Documents/TicketSync/Backups"
|
|
audit_folder = "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"}
|