#!/usr/bin/env python3 """ Classified Expiry Notifier ========================== Sends email notifications to classified authors 3 days before expiry. Run daily via cron: 0 8 * * * cd /var/www/nordabiznes && venv/bin/python3 scripts/classified_expiry_notifier.py Author: Maciej Pienczyn, InPi sp. z o.o. """ import os import sys # Add project root to path sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from datetime import datetime, timedelta from database import SessionLocal, Classified, User def main(): # Initialize email service from dotenv import load_dotenv load_dotenv() from email_service import init_email_service, send_email init_email_service() db = SessionLocal() try: # Find classifieds expiring in exactly 3 days target_date = datetime.now().date() + timedelta(days=3) next_day = target_date + timedelta(days=1) expiring = db.query(Classified).filter( Classified.is_active == True, Classified.expires_at >= datetime.combine(target_date, datetime.min.time()), Classified.expires_at < datetime.combine(next_day, datetime.min.time()) ).all() if not expiring: print(f"[{datetime.now()}] Brak ogłoszeń wygasających {target_date}") return print(f"[{datetime.now()}] Znaleziono {len(expiring)} ogłoszeń wygasających {target_date}") for classified in expiring: author = db.query(User).filter(User.id == classified.author_id).first() if not author or not author.email: continue # Respect user preference if getattr(author, 'notify_email_classified_expiry', True) is False: print(f" [pomijam] {classified.title} -> {author.email} (wyłączył powiadomienia e-mail o wygasaniu)") continue author_name = author.name or author.email.split('@')[0] expire_date = classified.expires_at.strftime('%d.%m.%Y') extend_url = f"https://nordabiznes.pl/tablica/{classified.id}" subject = f"Twoje ogłoszenie wygasa za 3 dni: {classified.title}" body_text = f"""Cześć {author_name}, Twoje ogłoszenie na portalu NordaBiznes.pl wygasa {expire_date}: „{classified.title}" Jeśli chcesz je przedłużyć o kolejne 30 dni, wejdź na stronę ogłoszenia i kliknij przycisk „Przedłuż o 30 dni": {extend_url} Jeśli ogłoszenie jest już nieaktualne, nie musisz nic robić — wygaśnie automatycznie. Pozdrawiam, Portal NordaBiznes.pl""" body_html = f"""
Cześć {author_name},
Twoje ogłoszenie na portalu NordaBiznes.pl wygasa {expire_date}:
Jeśli chcesz je przedłużyć o kolejne 30 dni, kliknij poniższy przycisk:
Jeśli ogłoszenie jest już nieaktualne, nie musisz nic robić — wygaśnie automatycznie.
Portal NordaBiznes.pl — Izba Gospodarcza Norda Biznes