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 time
from datetime import datetime
from sqlmodel import Session, select
from sqlmodel import Session, select, or_
from database import engine
from models import (
Vertical, Venue, Tour, Show, Song, Performance, Artist,
@ -14,7 +14,7 @@ from models import (
from passlib.context import CryptContext
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
pwd_context = CryptContext(schemes=["argon2"], deprecated="auto")
@ -114,6 +114,10 @@ def create_users(session):
print(f"✓ Created/Found {len(users)} users")
return users
from sqlmodel import Session, select, or_
# ... (imports)
def import_venues(session):
"""Import all venues"""
print("\n🏛️ Importing venues...")
@ -123,8 +127,14 @@ def import_venues(session):
venue_map = {}
for v in venues_data:
slug = generate_slug(v['venuename'])
existing = session.exec(
select(Venue).where(Venue.name == v['venuename'])
select(Venue).where(
or_(
Venue.name == v['venuename'],
Venue.slug == slug
)
)
).first()
if existing:
@ -132,7 +142,7 @@ def import_venues(session):
else:
venue = Venue(
name=v['venuename'],
slug=generate_slug(v['venuename']),
slug=slug,
city=v.get('city'),
state=v.get('state'),
country=v.get('country'),

View file

@ -17,7 +17,15 @@ def daily_import_job():
except Exception as e:
logger.error(f"Daily import failed: {e}")
from datetime import datetime, timedelta
def start_scheduler():
# Regular interval
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()
logger.info("Scheduler started with daily import job.")