Arhitecturi moderne - solutie no-code pentru transformarea datelor in insight-uri actionabile

Tehnologii

C#, ASP.NET, Angular, NATS, Elasticsearch, Quartz.NET, MediatR, EPPlus, Entity Framework Core, PostgreeSql

Scopul proiectului a fost acela de a crea o aplicatie web care sa permita generarea de rapoarte dinamice si vizualizari grafice personalizate, folosind atat date externe, cat si locale.

Provocarile

Clientul avea nevoie de o solutie care sa ofere flexibilitate maxima in manipularea si vizualizarea datelor, fara sa compromita usurinta de utilizare. Principalele provocari au fost:
  • Generarea de rapoarte dinamice cu surse de date multiple si configurabile.
  • Personalizarea si configurarea avansata a chart-urilor dinamice.
  • Necesitatea de a avea date actualizate in timp real pentru o experienta fluida.
  • Exporta in format excel atat calculele, cat si formulele de calcul, fapt ce permite utilizatorului manipularea si posibilitatea de simulari cu datele rezultate.
  • Asigurarea unei performante ridicate si gestionarea eficienta a volumelor mari de date.

Solutia

Solutia dezvoltata are ca scop oferirea unei platforme intuitive, capabile sa indeplineasca cerintele de flexibilitate in gestionarea datelor, interactivitate in vizualizarea acestora si exportul facil al rezultatelor intr-o gama variata de formate.

Proiectul este o aplicatie web dezvoltata utilizand C# (ASP.NET Core) pentru partea de back-end si Angular pentru partea de front-end.

Roluri acoperite

1Project manager
1 Project Architect
1Developer

Solutii

Dynamic report generation

Solutia dezvoltata ofera o flexibilitate totala in generarea rapoartelor dinamice. Utilizatorii pot importa date din surse externe (API-uri) sau locale si pot crea rapoarte personalizate.

Fiecare coloana din raport este complet configurabila – utilizatorii pot seta denumiri personalizate, stiluri si aplica formule complexe de calcul care integreaza datele din diferite surse.

Exemplu de formula:: Utilizatorii pot combina date din fisiere Excel cu date externe folosind formule de tipul =SUM([0] + {1}), unde [0] reprezinta prima coloana din datele externe si {1} reprezinta a doua coloana din fisierul Excel exportat.

Dynamic chart creation & configuration

Utilizatorii pot crea chart-uri dinamice pe baza rapoartelor generate. Fiecare element al unui chart – de la axele X si Y la label-uri si culori – poate fi configurat individual.
Pentru o personalizare avansata, utilizatorii au posibilitatea de a crea si aranja grupuri de chart-uri pe pagina folosind cod HTML personalizat, adaptand astfel layout-ul in functie de nevoile lor specifice.

Interactive Charts 

Pe langa faptul ca graficele sunt complet personalizabile, acestea sunt si interactive. Utilizatorii pot face click pe anumite dataset-uri din chart pentru a accesa informatii suplimentare legate de datele vizualizate. Aceasta functionalitate ofera o explorare mai detaliata si dinamica a datelor, ceea ce contribuie la o experienta mai interactiva si mai informativa.

Real-time Data Communication with NATS 

Pentru a asigura o experienta fluida si interactiva, aplicatia foloseste NATS, un sistem de mesagerie scalabil, pentru a transmite date in timp real intre server si interfata (front). Utilizatorii beneficiaza de actualizarea automata a rapoartelor si chart-urilor fara sa fie nevoie de reimprospatarea manuala a paginii.

Exemplu: In Angular, aplicatia se conecteaza la fluxuri de date prin pachetul nats.ws, care permite reincarcarea automata a componentelor vizuale atunci cand apar modificari.

Elasticsearch for Efficient Data Search 

Pentru a gestiona volume mari de date si a permite interogari rapide, am integrat Elasticsearch. Aceasta solutie permite cautari eficiente si analize rapide ale datelor inregistrate, in special in contextul gestionarii log-urilor si auditului.

Scheduled Tasks with Quartz.NET 

Pentru a gestiona si automatiza calculul periodic al rapoartelor complexe, cat si generarea de tabele temporare - cache), am folosit Quartz.NET. Acest framework permite programarea si rularea sarcinilor recurente, precum generarea si salvarea automata a rapoartelor in cache, optimizand astfel performanta generala a aplicatiei.

Simplified Request Management with MediatR 

Prin utilizarea MediatR, am simplificat gestionarea cererilor si raspunsurilor in aplicatie, aplicand principiul decuplarii intre componente. Aceasta solutie a redus complexitatea codului si a facilitat integrarea modelului CQRS (Command Query Responsibility Segregation).

Excel Integration with EPPlus 

Pentru a permite utilizatorilor sa exporte rapoartele si chart-urile generate intr-un format utilizabil si usor de partajat, am integrat biblioteca EPPlus. Aceasta ofera capacitatea de a genera fisiere Excel care includ atat datele sursa, cat si graficele vizualizate.

Database Interaction with Entity Framework Core 

Aplicatia foloseste Entity Framework Core pentru gestionarea interactiunilor cu baza de date, permitand maparea simplificata a claselor C# la tabelele bazei de date. Acest lucru elimina necesitatea scrierii de cod SQL manual si asigura migrarea automata a modificarilor la structura bazei de date.

PostgreSQL 

Aplicatia foloseste PostgreSQL ca sistem de gestionare a bazelor de date relationale. PostgreSQL este un software open-source, recunoscut pentru fiabilitatea, scalabilitatea si performanta sa.
Avantaje principale:
  • Performanta si scalabilitate: PostgreSQL gestioneaza eficient volume mari de date si functioneaza excelent in medii de productie mari.
  • Extensibilitate: Suporta extensii avansate si tipuri de date precum JSON, facandu-l ideal pentru aplicatii moderne si flexibile.

Concourse (CI/CD) 

Concourse CI este utilizat pentru a automatiza procesele de Continuous Integration si Continuous Deployment (CI/CD).

La fiecare modificare a codului pe GitLab, sunt create automat imagini Docker. Inainte de fiecare proces de deploy, se face automat un backup al bazei de date, iar scripturile SQL pentru migrarea bazei de date sunt executate automat.

Fluxul automatizat functioneaza astfel:
  • Backup automat al bazei de date: Se executa un script care salveaza baza de date curenta pe un server extern.
  • Rularea scripturilor SQL: Dupa backup, scripturile SQL necesare pentru actualizari sau migratii sunt rulate automat.
  • Deploy automat al aplicatiei: Odata ce baza de date este actualizata, aplicatia este construita si lansata automat.

Rezultate

Implementarea acestei solutii a permis clientului sa isi imbunatateasca eficienta in gestionarea datelor si prezentarea acestora, oferindu-le utilizatorilor o experienta flexibila si interactiva.

Printre beneficiile obtinute se numara:
  • Rapoarte si chart-uri personalizabile: Flexibilitatea completa a configurarii rapoartelor si chart-urilor a permis utilizatorilor sa isi adapteze solutia la propriile nevoi.
  • Actualizare in timp real: Comunicarea in timp real prin NATS asigura o experienta interactiva si dinamica, fara reimprospatarea manuala a paginilor.
  • Export versatil: Utilizatorii pot exporta usor rapoartele si graficele in formate variate, inclusiv Excel si JSON, facilitand partajarea si analiza ulterioara.
  • Performanta ridicata: Utilizarea Elasticsearch pentru cautarea si filtrarea datelor a asigurat un timp de raspuns rapid, chiar si pe volume mari de date.
  • Automatizare eficienta: Quartz.NET a permis rularea automata a sarcinilor recurente, optimizand resursele sistemului si experienta utilizatorilor.

Fluxul de utilizare

Import de dateUtilizatorii incarca date din baza locala sau acceseaza surse de date externe.
Creare raport Se configureaza rapoarte dinamice prin selectarea si denumirea coloanelor, aplicarea de formule de calcul si stilizarea coloanelor.
Generare chart-uriPe baza rapoartelor, utilizatorii creeaza vizualizari grafice personalizate, pe care le pot ajusta vizual in functie de nevoi.
Export si interactiuneRapoartele si chart-urile pot fi exportate in formate variate, iar chart-urile sunt interactive, permitand accesarea de date suplimentare prin click.