| import os |
| import datetime |
| import firebase_admin |
| from firebase_admin import credentials, firestore, messaging |
|
|
| |
| def run_inactivity_check(): |
| |
| if not firebase_admin._apps: |
| cred = credentials.ApplicationDefault() |
| firebase_admin.initialize_app(cred) |
| |
| db = firestore.client() |
| |
| |
| print("📡 Fetching CMS templates...") |
| cms_doc = db.collection('system_config').document('notifications').get() |
| if cms_doc.exists: |
| template = cms_doc.to_dict().get('practice_reminder', {}) |
| else: |
| template = { |
| 'title': 'המורה מתגעגעת 🧮', |
| 'body': 'היי! לא תרגלנו כבר שבוע. יש משהו שאפשר לעזור בו?' |
| } |
| |
| print(f"📝 CMS Template loaded: {template.get('title')}") |
|
|
| |
| seven_days_ago = (datetime.datetime.now() - datetime.timedelta(days=7)).strftime('%Y-%m-%d') |
| print(f"🔍 Searching for users active last on: {seven_days_ago}") |
|
|
| |
| users_ref = db.collection('users') |
| inactive_users = users_ref.where('last_active_date', '==', seven_days_ago).stream() |
|
|
| total_sent = 0 |
| for user in inactive_users: |
| data = user.to_dict() |
| fcm_token = data.get('fcm_token') or data.get('fcmToken') |
| uid = data.get('uid') |
| name = data.get('name', 'תלמיד/ה') |
|
|
| if fcm_token: |
| print(f"🚀 Sending push to {name} ({uid})...") |
| try: |
| |
| body = template.get('body', '').replace('{name}', name) |
| |
| message = messaging.Message( |
| notification=messaging.Notification( |
| title=template.get('title'), |
| body=body, |
| ), |
| token=fcm_token, |
| data={ |
| 'type': 'practice_reminder', |
| 'click_action': 'FLUTTER_NOTIFICATION_CLICK' |
| } |
| ) |
| messaging.send(message) |
| total_sent += 1 |
| except Exception as e: |
| print(f"❌ Failed to send to {uid}: {e}") |
| else: |
| print(f"⚠️ No FCM token for {name} ({uid})") |
|
|
| print(f"✅ Inactivity check done. Total pushes sent: {total_sent}") |
|
|
| if __name__ == "__main__": |
| run_inactivity_check() |
|
|