mirror of
https://github.com/R0m1k3/Priceflow.git
synced 2026-10-13 18:26:20 +02:00
129 lines
3.4 KiB
Python
129 lines
3.4 KiB
Python
"""
|
|
Seed default enseignes (stores) for the catalog module
|
|
"""
|
|
|
|
import logging
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.models import Enseigne
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# Data for the 9 enseignes
|
|
ENSEIGNES_DATA = [
|
|
{
|
|
"nom": "Gifi",
|
|
"slug_bonial": "Gifi",
|
|
"couleur": "#E30613",
|
|
"site_url": "https://www.gifi.fr",
|
|
"description": "Décoration, maison, bazar",
|
|
"ordre_affichage": 1,
|
|
},
|
|
{
|
|
"nom": "Action",
|
|
"slug_bonial": "Action",
|
|
"couleur": "#0066B3",
|
|
"site_url": "https://www.action.com/fr-fr/",
|
|
"description": "Discount non-alimentaire",
|
|
"ordre_affichage": 2,
|
|
},
|
|
{
|
|
"nom": "Centrakor",
|
|
"slug_bonial": "Centrakor",
|
|
"couleur": "#E94E1B",
|
|
"site_url": "https://www.centrakor.com",
|
|
"description": "Décoration, maison",
|
|
"ordre_affichage": 3,
|
|
},
|
|
{
|
|
"nom": "La Foir'Fouille",
|
|
"slug_bonial": "La-Foir-Fouille",
|
|
"couleur": "#009639",
|
|
"site_url": "https://www.lafoirfouille.fr",
|
|
"description": "Bazar, décoration",
|
|
"ordre_affichage": 4,
|
|
},
|
|
{
|
|
"nom": "Stokomani",
|
|
"slug_bonial": "Stokomani",
|
|
"couleur": "#FF6600",
|
|
"site_url": "https://www.stokomani.fr",
|
|
"description": "Déstockage textile et maison",
|
|
"ordre_affichage": 5,
|
|
},
|
|
{
|
|
"nom": "B&M",
|
|
"slug_bonial": "BM",
|
|
"couleur": "#D4145A",
|
|
"site_url": "https://bmstores.fr",
|
|
"description": "Discount britannique",
|
|
"ordre_affichage": 6,
|
|
},
|
|
{
|
|
"nom": "L'Incroyable",
|
|
"slug_bonial": "L-incroyable",
|
|
"couleur": "#8B0000",
|
|
"site_url": "https://www.lincroyable.fr",
|
|
"description": "Décoration et mobilier discount (Groupe Althys, siège à Denain)",
|
|
"ordre_affichage": 7,
|
|
},
|
|
{
|
|
"nom": "Bazarland",
|
|
"slug_bonial": "Bazarland",
|
|
"couleur": "#FFCC00",
|
|
"site_url": None,
|
|
"description": "Bazar discount",
|
|
"ordre_affichage": 8,
|
|
},
|
|
{
|
|
"nom": "Noz",
|
|
"slug_bonial": "Noz",
|
|
"couleur": "#003366",
|
|
"site_url": "https://www.noz.fr",
|
|
"description": "Déstockage généraliste",
|
|
"ordre_affichage": 9,
|
|
},
|
|
]
|
|
|
|
|
|
def seed_enseignes(db: Session) -> int:
|
|
"""
|
|
Seed the default enseignes if they don't exist.
|
|
|
|
Returns:
|
|
Number of enseignes created
|
|
"""
|
|
created = 0
|
|
|
|
for data in ENSEIGNES_DATA:
|
|
# Check if enseigne already exists
|
|
existing = db.query(Enseigne).filter_by(slug_bonial=data["slug_bonial"]).first()
|
|
|
|
if not existing:
|
|
enseigne = Enseigne(**data)
|
|
db.add(enseigne)
|
|
created += 1
|
|
logger.info(f"Created enseigne: {data['nom']}")
|
|
else:
|
|
logger.debug(f"Enseigne already exists: {data['nom']}")
|
|
|
|
db.commit()
|
|
logger.info(f"Seeding complete: {created} enseigne(s) created")
|
|
|
|
return created
|
|
|
|
|
|
def get_enseigne_by_slug(db: Session, slug: str) -> Enseigne | None:
|
|
"""Get an enseigne by its Bonial slug"""
|
|
return db.query(Enseigne).filter_by(slug_bonial=slug).first()
|
|
|
|
|
|
def get_all_active_enseignes(db: Session) -> list[Enseigne]:
|
|
"""Get all active enseignes ordered by display order"""
|
|
return (
|
|
db.query(Enseigne)
|
|
.filter_by(is_active=True)
|
|
.order_by(Enseigne.ordre_affichage)
|
|
.all()
|
|
)
|