Skip to content

✅[2] Migliorare OPIS-Manager #46

@Helias

Description

@Helias

BACKEND

Web scraper in Python: l'obiettivo di questo scraper è estrarre i dati degli anni 2021/2022, 2022/2023, 2023/2024, 2024/2025.
I dati estratti dovranno essere scritti in formato SQL compatibile con la struttura del database corrente, ovvero https://github.com/UNICT-DMI/opis-manager-core/tree/dev/dumps
Il codice sarà sviluppato nella repository opis-manager-scraper in una cartella apposita per la nuova versione dello scraper in python (https://github.com/UNICT-DMI/opis-manager-scraper).

Questionari OPIS dall'anno 2012/2013 all'anno 2024/2025: https://www.unict.it/it/didattica/valutazione-didattica-opinione-studenti

Ecco alcune mappature (parziali) delle API OPIS per il db corrente

getDepartments json -> table dipartimento

  • id autoincrement
  • nome = name
  • unict_id = code
  • anno_accademico = anno selezionato

getCourses json -> table corso_di_studi

  • id autoincrement
  • unict_id = ??? (dal 2021 in poi non c'è apparentemente)
  • anno_accademico = anno selezionato
  • nome,classe = name (es. "Informatica L-31" -> nome: "Informatica", classe: "L-31")
    • nota: negli anni precedenti probabilmente non era un'unica stringa nome+classe ma erano due campi separati
  • id_dipartimento = dipartimento.id, selezionato un dipartimento, si ottiene l'id dell'anno_accademico selezionato

getActivities json -> table insegnamento

  • id autoincrement
  • codice_gomp = activityCode
  • id_cds = corso_di_studi.id, verifica come effettuare questa corrispondenza in maniera univoca
  • anno_accademico = anno selezionato
  • nome = activityName
  • docente = professorLastName + professorName
  • canale = "no" se non ci sono altri canali (o poli), altrimenti se è il primo canale usa "1" o "2" per il secondo e così via.
    • esempio: 2 per "PROGRAMMAZIONE I E LABORATORIO" anno 2021/2022
    • Problema: ci sono due parti di programmazione 1, ("PROGRAMMAZIONE I" e "LABORATORIO"), lo stesso dovrebbe essere per RETI DI CALCOLATORI, alternativamente vanno considerati come due corsi separati
    • Problema 2: i canali prima erano segnati con "A-L" o "M-Z", questo potrebbe causare problemi nel frontend per incoerenza di nome del canale, bisognerebbe pensare ad una soluzione di come interpretare questi dati e comprendere se il corso con un nome di canale diverso è sempre lo stesso
  • ssd = INF/01

getQuestions json -> table schede_opis

  • id autoincrement
  • anno_accademico = anno selezionato
  • id_insegnamento = insegnamento.id, verifica come effettuare questa corrispondenza in maniera univoca
  • domande = array di 60 valori, ovvero 5 valori consecutivi per domanda (decisamente no, più no che si, più si che no, Decisamente si, Non so) -> 5x12=60. Questi dati si dovrebbero poter estrarre da clusterData -> questions o counter.
  • totale_schede = il numero di schede compilate
  • eta = si dovrebbe poter estrarre da "ageClass"

In schede_opis ci sono molti dati, forse non tutti sono "retro compatibili", ma un buon 80% dovrebbero corrispondere.
Purtroppo il formato dei dati è cambiato negli anni, nell'opis manager si è cercato di adattare la struttura a ciò che restituivano le vecchie interfacce web, purtroppo le API adesso hanno una struttura totalmente diversa.

FRONTEND

repo: https://github.com/UNICT-DMI/OPIS-Manager

  • aggiornare Angular alla versione 20 (o possibilmente 21)
  • migrare tslint ad eslint
  • migrare da karma a vitest https://angular.dev/guide/testing/migrating-to-vitest
  • CI & CD
    • creare un file workflow per il lint
    • creare un file workflow per i test
    • creare un file workflow per il build
    • aggiornare la versione di nodejs nella pipeline main.yml e rinominare main.yml in deploy.yml
  • eliminare e2e/ (protractor è stato deprecato da tempo)
  • aggiornare o sostituire @m0t0r/ngx-slider Migrate ng5-slider to ngx-slider UNICT-DMI/OPIS-Manager#38
  • scrivere unit tests coprendo il 75% di:
    • academic-year.component.ts
    • cds.component.ts
    • home.component.ts
    • teaching.component.ts

(opzionali) idealmente sarebbe ottimo:

  • migrare inputs/outputs a signals (la maggior parte si possono migrare automaticamente https://angular.dev/reference/migrations/signal-inputs , inoltre, con vscode si possono utilizzare utilizzare delle hotkeys per migrare singoli inputs/outputs con pochi click)
  • convertire tutti i componenti in standalone components
  • impostare tutti i componenti OnPush
  • convertire tutti gli import dei servizi usando inject() e non il costruttore
  • dividere i componenti in più componenti

Studenti coinvolti @FilippoMarletta, @ChiaraZuccaro

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions