Sistema d’Importació i Enriquiment de Dades
Relacionat amb: Fase 4 del roadmap (4B–4E).
Objectiu: disposar d’un sistema robust per importar, revisar i publicar dades de balls/cançons procedents de fonts externes, sense trencar l’MVP actual.
1. Context i objectius
1.1. Problema
- La informació de balls i cançons està dispersa:
- portals de stepsheets,
- webs de coreògrafs,
- YouTube,
- llistes pròpies en Excel/CSV,
- altres webs especialitzades.
- L’MVP actual permet fer CRUD manual, però això no escala per grans volums.
1.2. Objectius
- Poder importar dades des de:
- portals externs (scraping o APIs),
- fitxers CSV proporcionats per usuaris,
- fonts diverses amb formats heterogenis.
- Mantenir un pipeline controlat:
- Ingesta
- Parsing i normalització
- Validació i deduplicació
- Staging (revisió manual)
- Publicació a taules finals
- Assegurar:
- control de qualitat,
- traçabilitat (origen de la dada),
- evitar duplicats,
- no sobreescriure dades bones amb dades pitjors.
2. Arquitectura general del sistema
Pipeline lògic:
- Ingesta
- Parsing & mapping
- Validació & deduplicació
- Staging (revisió manual, ADMIN)
- Publicació cap a taules finals (
dances,songs,links,choreographers, etc.)
2.1. Ingesta
Fonts previstes:
- Web scraping (més endavant):
- portals tipus CopperKnob, Kickit i similars.
- YouTube Data API:
- recuperar metadades de vídeos (títol, canal, URL, durada…).
- Import CSV:
- fitxers d’usuari amb llistes de balls/cançons (p. ex. “500 balls” d’un professor).
2.2. Parsing i mapping
Per a cada font, es defineix un mapper que converteix dades brutes en un format intern homogeni, per exemple:
RawSource -> ImportedRow (format intern comú)
Exemples de camps d’ImportedRow:
dance_namesong_titleartistbpmlevelstep_sheet_urlvideo_urlsource_name(p. ex. "CopperKnob", "CSV_User_X")
El resultat d’aquesta fase no escriu encara a les taules de domini, sinó a una taula de staging (veure secció 3).
2.3. Validació i deduplicació
Abans de passar a staging:
- Validacions bàsiques:
- camps obligatoris (
dance_nameosong_title), - valors numèrics (
bpm > 0), - URLs amb format correcte.
- camps obligatoris (
- Deduplicació:
- comparació per:
dance_name + choreographer,song_title + artist,
- similitud de cadenes (fuzzy matching),
- assignar un nivell de confiança al match (alta / mitjana / baixa).
- comparació per:
Les anomalies i dubtes es marquen amb flags perquè l’admin les pugui revisar a l’UI.
3. Model de staging
La idea és tenir una taula import_staging que actuï com a “zona intermèdia”:
import_staging(
id,
source_name, -- p. ex. "CSV_User_X", "CopperKnob"
payload_json, -- dades brutes o semi-normalitzades
mapped_dance_name?,
mapped_song_title?,
mapped_artist?,
mapped_bpm?,
mapping_confidence?, -- percentatge o label (HIGH/MEDIUM/LOW)
status, -- PENDING / APPROVED / REJECTED / PUBLISHED
error_msg?,
created_at,
updated_at
)
3.1. Flux d’estats
PENDING→ creat automàticament pel procés d’import.APPROVED→ marcat manualment per un admin, després de revisar/corregir.REJECTED→ descartat manualment (dades incorrectes o duplicades).PUBLISHED→ ja aplicat a les taules finals; pot quedar com a traça.
Només usuaris amb rol adequat (p. ex. ADMIN) poden:
- editar camps mapejats,
- canviar l’estat,
- veure l’històric d’errors i correccions.
4. UI d’Admin per a import
Es preveu una pantalla (o conjunt de pantalles) d’admin per:
4.1. Llista de registres de staging
- Veure registres d’import pendents.
- Filtrar per:
source_name,- data,
- estat (
PENDING,APPROVED,REJECTED,PUBLISHED), - nivell de confiança.
4.2. Detall d’un registre
En obrir un registre de staging, l’admin ha de poder veure:
- Dades brutes (tal com han arribat).
- Dades mapejades (camps interpretats).
- Suggeriments de match amb
dancesisongsexistents.
I ha de poder:
- corregir valors (p. ex. BPM, títol, coreògraf),
- decidir si es crea un nou ball/cançó o s’enllaça amb un existent,
- aprovar (
APPROVED) o rebutjar (REJECTED).
4.3. Accions típiques a la pantalla
[Corregir dades][Guardar][Descartar][Veure coincidències existents](mostrar balls similars, etc.)
Només quan un registre està en estat APPROVED passa a la fase de publicació.
5. Publicació (aplicació a les taules finals)
Un cop un registre de staging està en estat APPROVED, entra en joc un servei de publicació que:
- Llegeix
import_stagingambstatus = APPROVED. - Crea o actualitza entitats:
dances,songs,links,choreographers(si cal),- i altres entitats relacionades.
- Marca el registre com a
PUBLISHEDi guarda:- referències a les noves IDs creades,
- o enllaços amb entitats existents.
5.1. Decisions clau (a definir)
- Quan crear un nou
dancevs reutilitzar-ne un d’existent. - Quan crear un nou
songvs associar-se’n a un existent. - Política de “font preferida” si hi ha conflictes:
- p. ex. dades oficials vs dades d’usuari.
6. Fonts d’import i roadmap
6.1. Fase 4B – Import CSV simple
- Importar CSV d’usuari amb capçaleres conegudes.
- Mapping fix (poc condicionals).
- UI d’admin mínima per staging:
- veure registres,
- aprovar / rebutjar,
- crear balls/cançons bàsics.
6.2. Fase 4C – Sistema d’import complet amb staging
- Generalitzar el model perquè serveixi per a qualssevol font.
- Afegir:
source_name,payload_json,- camps de mapping.
- Millorar UI:
- vista de diff entre staging i dades existents,
- filtres per confiança, fonts, etc.
6.3. Fase 4D – Enriquiment de dades
- Afegir informació extra a partir de fonts externes:
- BPM,
- durada,
- etiquetes d’estil,
- enllaços addicionals.
- Reutilitzar la mateixa infraestructura de staging:
- si es detecta un canvi dubtós, demanar confirmació manual.
6.4. Fase 4E – Scraping i connectors
- Implementar connectors específics:
- p. ex. un scraper per a un portal de stepsheets.
- Definir:
- freqüència d’actualització,
- limitació de càrrega,
- respecte total a TOS i drets dels portals.
7. Seguretat i permisos
Només rols alts (p. ex. ADMIN) poden:
- fer imports massius,
- aprovar / publicar dades,
- configurar fonts.
El backend ha de:
- validar JWT i rols,
- registrar auditories:
- qui ha aprovat què,
- quan s’han publicat canvis.
8. Criteris d’acceptació
Per considerar una primera versió del sistema d’import “usable”:
- Hi ha un endpoint/API i/o UI per pujar un CSV.
- Es creen registres a
import_stagingamb estatPENDING. - Existeix una pantalla d’admin per:
- veure aquests registres,
- editar camps essencials,
- aprovar / rebutjar.
- Existeix un procés de publicació (manual o programat) que:
- crea balls/cançons nous o enllaça amb existents,
- marca registres com
PUBLISHED.
- Hi ha logs suficients per entendre:
- què ha entrat,
- què s’ha descartat,
- què s’ha publicat.
9. Documents relacionats
- Roadmap (Fase 4):
roadmap/roadmap-global - Detalls tècnics del roadmap:
roadmap/roadmap-technical-details - Redisseny de base de dades:
architecture/db-redesign-plan - Seguretat i rols:
architecture/security