Compare commits

...

2 commits

Author SHA1 Message Date
fullsizemalt
be5921b6ee fix(backend): Ensure import runs on startup via scheduler
Some checks failed
Deploy Fediversion / deploy (push) Failing after 1s
2025-12-30 22:42:41 -08:00
fullsizemalt
f026cb2423 fix(backend): Robust duplicate handling and public API fallback for importer 2025-12-30 22:40:53 -08:00
2 changed files with 22 additions and 4 deletions

View file

@ -5,7 +5,7 @@ Fetches ALL Goose data from El Goose API and populates demo database
import requests import requests
import time import time
from datetime import datetime from datetime import datetime
from sqlmodel import Session, select from sqlmodel import Session, select, or_
from database import engine from database import engine
from models import ( from models import (
Vertical, Venue, Tour, Show, Song, Performance, Artist, Vertical, Venue, Tour, Show, Song, Performance, Artist,
@ -14,7 +14,7 @@ from models import (
from passlib.context import CryptContext from passlib.context import CryptContext
from slugify import generate_slug, generate_show_slug from slugify import generate_slug, generate_show_slug
BASE_URL = "http://elmeg-legacy-api:8000/api/v2" BASE_URL = "https://elgoose.net/api/v2"
ARTIST_ID = 1 # Goose ARTIST_ID = 1 # Goose
pwd_context = CryptContext(schemes=["argon2"], deprecated="auto") pwd_context = CryptContext(schemes=["argon2"], deprecated="auto")
@ -114,6 +114,10 @@ def create_users(session):
print(f"✓ Created/Found {len(users)} users") print(f"✓ Created/Found {len(users)} users")
return users return users
from sqlmodel import Session, select, or_
# ... (imports)
def import_venues(session): def import_venues(session):
"""Import all venues""" """Import all venues"""
print("\n🏛️ Importing venues...") print("\n🏛️ Importing venues...")
@ -123,8 +127,14 @@ def import_venues(session):
venue_map = {} venue_map = {}
for v in venues_data: for v in venues_data:
slug = generate_slug(v['venuename'])
existing = session.exec( existing = session.exec(
select(Venue).where(Venue.name == v['venuename']) select(Venue).where(
or_(
Venue.name == v['venuename'],
Venue.slug == slug
)
)
).first() ).first()
if existing: if existing:
@ -132,7 +142,7 @@ def import_venues(session):
else: else:
venue = Venue( venue = Venue(
name=v['venuename'], name=v['venuename'],
slug=generate_slug(v['venuename']), slug=slug,
city=v.get('city'), city=v.get('city'),
state=v.get('state'), state=v.get('state'),
country=v.get('country'), country=v.get('country'),

View file

@ -17,7 +17,15 @@ def daily_import_job():
except Exception as e: except Exception as e:
logger.error(f"Daily import failed: {e}") logger.error(f"Daily import failed: {e}")
from datetime import datetime, timedelta
def start_scheduler(): def start_scheduler():
# Regular interval
scheduler.add_job(daily_import_job, 'interval', hours=12, id='goose_import') scheduler.add_job(daily_import_job, 'interval', hours=12, id='goose_import')
# Run once on startup (with 10s delay to let server settle)
run_date = datetime.now() + timedelta(seconds=10)
scheduler.add_job(daily_import_job, 'date', run_date=run_date, id='goose_import_startup')
scheduler.start() scheduler.start()
logger.info("Scheduler started with daily import job.") logger.info("Scheduler started with daily import job.")