from db import db from typing import Optional, List, Dict from flask import g from sqlalchemy.sql import and_ from models import UserProject from models.user import user_label from models.campaign import Campaign from models.projects import Project class BasicAnalyticsRepository: def get_campaigns_dates(self, label_id: Optional[int], project_id: Optional[str]) -> List[Dict]: query = ( db.session.query(Campaign.start_date, Campaign.end_date) .join(Project) .outerjoin(user_label, and_(user_label.c.label_id == Project.label_id, user_label.c.user_id == g.user_id)) .outerjoin(UserProject, and_(UserProject.project_id == Project.id, UserProject.user_id == g.user_id)) .filter(and_(Campaign.is_deleted.is_(False), Project.is_deleted.is_(False))) .order_by(Campaign.start_date) ) if label_id: query = query.filter(Project.label_id == label_id) if project_id: query = query.filter(Project.id == project_id) return query.all()