from campaigns.repositories.campaigns_repository import CampaignsRepository from campaigns.repositories.campaigns_tab_repository import CampaignsTabRepository from projects.repositories.projects_repository import ProjectsRepository from campaigns.services.campaigns_history_service import CampaignHistoryService from campaigns.services.campaigns_service import CampaignsService from campaigns.schemas import CampaignsTabResponseSchema, CampaignTabRequestModel, CampaignAssignSchema from flask import g from typing import List class CampaignsTabService: campaigns_repository = CampaignsRepository() project_repository = ProjectsRepository() history_service = CampaignHistoryService() campaigns_tab_repository = CampaignsTabRepository() campaigns_service = CampaignsService() def get_campaigns_tab_by_project( self, params: CampaignTabRequestModel, project_id: int ) -> CampaignsTabResponseSchema: total_count = self.campaigns_tab_repository.get_filtered_campaigns_tab_count(params, project_id, g.user_id) campaigns = self.campaigns_tab_repository.get_filtered_campaigns_tab(params, project_id, g.user_id) currency = self.project_repository.get_project_currency(project_id) items = self.campaigns_service.map_campaigns(campaigns, currency) return CampaignsTabResponseSchema(items=items, limit=params.limit, offset=params.offset, total=total_count) def get_campaigns_tab_by_unassigned_project( self, params: CampaignTabRequestModel, unassigned_project_id: int ) -> CampaignsTabResponseSchema: total_count = self.campaigns_tab_repository.get_filtered_campaigns_tab_count( params, unassigned_project_id, g.user_id ) campaigns = self.campaigns_tab_repository.get_filtered_campaigns_tab(params, unassigned_project_id, g.user_id) currency = self.project_repository.get_project_currency(unassigned_project_id) items = self.campaigns_service.map_campaigns(campaigns, currency) return CampaignsTabResponseSchema(items=items, limit=params.limit, offset=params.offset, total=total_count) def get_campaigns_by_external_id(self, external_campaign_ids: List[str]): mapped_ids = [external_id.split("_")[1] for external_id in external_campaign_ids] return self.campaigns_repository.get_campaigns_by_external_ids(mapped_ids) def get_campaign_uuids_by_external_ids(self, external_campaign_ids: List[str]): return [campaign.uuid for campaign in self.get_campaigns_by_external_id(external_campaign_ids)]