redroundrobin / swe-api Goto Github PK
View Code? Open in Web Editor NEWswe-thirema // Componente per le API del sistema
Home Page: http://api.redroundrobin.site
License: MIT License
swe-thirema // Componente per le API del sistema
Home Page: http://api.redroundrobin.site
License: MIT License
Basandosi su https://api.docs.redroundrobin.site/
/devices/cmdEnabled
--> /devices?cmdEnabled=
{true/false} (da fare come request param)/devices/{deviceId}/sensors/cmdEnabled
--> /devices/{deviceId}/sensors?cmdEnabled=
{true/false} (idem)/gateways/command..
--> /sensors/{sensorId}
[PUT]/gateways/config/{gatewayId}
--> /gateways/{gatewayId}
(body differente in cui abbiamo reconfig=true
)Descrizione del bug
Se tento di aggiungere un utente con la stessa email, mi da errore 500
Modifica da fare
Deve essere visibile l'errore effettivo alla sua aggiunta.
in generale sono da utilizzare questi errori:
se ora vengono generati altri errori oltre a quelli elencati sopra scriveteli nella issue che vediamo come gestirli
Creazione funzione per il check dell'username di Telegram ed eventuale salvataggio della chat id. Lo scheletro della funzione è già presente nella repo nel branch feature/aggiuntaPostgreSpring.
La funzione deve ritornare un int non una String
CODICI:
0 se l'username di telegram non è presente nel Database
1 se l'username di Telegram è presente e il chatId è vuoto (Bisogna quindi inserirlo)
2 se L'username di Telegram è presente e c'è già la chatId
Descrizione del bug
Un admin non può modificare un ente dalla webapp.
Modifica da fare
Un admin deve poter modificare un ente qualunque nelle sue due informazioni (nome e luogo).
Descrizione del bug
Se un utente o moderatore ha le seguenti caratteristiche:
RA-F-60
Modifica da fare
Secondo voi serve trattarla come cosa o è sufficiente l'errore di questo genere?
I log conterranno:
Desc | Operation | Data |
---|---|---|
Login | auth.login | ["webapp", "sent tfa code", "telegram"] |
Modifica delle impostazioni | user.settings_edit | |
Modifica della password | user.password_edit | |
Ricezione codice telegram | auth.login | tfa confirmed |
Creazione utente | user.add | {ID utente creato} |
Modifica utente | user.edit | {ID utente modificato} |
Disattivazione utente | user.delete | {ID utente disattivato} |
Reset Password | user.password_reset | {ID utente a cui è stata resettata la password} |
Creazione alert | alert.add | {ID alert creato} |
Modifica alert | alert.edit | {ID alert modificato} |
Rimozione alert | alert.delete | ["alerts with sensorId = {sensorId}", {ID alert rimosso (rimozione logica)}] |
Creazione ente | entity.add | {ID ente creato} |
Modifica ente | entity.edit | {ID ente modificato} |
Disattivazione ente | entity.delete | {ID ente disattivato (rimozione logica a cascata per users e alerts)} |
Aggiunta dispositivo | device.add | {ID gateway e ID reale dispositivo aggiunto} |
Modifica dispositivo | device.edit | {ID gateway e ID reale dispositivo modificato} |
Rimozione dispositivo | device.delete | {ID gateway e ID reale dispositivo rimosso (rimozione fisica)} |
Aggiunta sensore | sensor.add | {ID gateway e ID reale dispositivo aggiunto} |
Modifica sensore | sensor.edit | {ID gateway e ID reale dispositivo modificato} |
Rimozione sensore | sensor.delete | {ID gateway e ID reale dispositivo rimosso (rimozione fisica)} |
Modifica sensore ente | entity.assign_sensor | {ID ente a cui è stato aggiunto o rimosso il sensore} |
Invio input telegram | sensor.input | {ID sensore logico} |
Invio Configurazione gateway | gateway.reconfig | {gateway a cui è stata inviata la configurazione} |
Le dipendenze circolari identificate dopo la riunione riguardano:
I models utilizzano necessariamente il collegamento bidirezionale per mantenere la struttura del database di Postgresql e timescaledb.
Non è richiesto nessun tipo di fix, la funzionalità è prevista da Spring.
I services, invece, fanno uso di altri XxxxServices in modo improprio dal momento che sarebbe sufficiente implementare le repository di Spring, nelle quali sono presenti i metodi necessari.
Soluzione: cambiare gli XxxxxServices con i Repos al fine di rimuovere le dipendenze circolari. Le uniche dipendenze saranno quindi (ad esempio):
Descrizione del bug
La ricezione del codice di auteticazione tramite Telegram non funziona
Modifica da fare
Potrebbe essere un problema delle API
Tipo di richiesta (TYPE)
GET
Permessi
USER, MOD, ADMIN
INPUT
Verrà inoltrata una richiesta per ritornare delle stats specifiche che verranno mostrate nella dashboard. In particolare, in riferimento all'AdR, UC 2 - Visualizzazione dashboard.
OUTPUT
Deve essere mostrato un numero intero che va da 0 a N per ogni richiesta.
Può essere gestita singolarmente o anche in modo univoco (una richiesta generica e un intero array di risposta).
Note aggiuntive
//
Tipo di richiesta (TYPE)
GET
Permessi
USER/MOD
INPUT
niente
OUTPUT
403 ma dovrebbe tornare la lista di gateways che puo' vedere solo il mod
Note aggiuntive
IMPORTANTE
NB: il token di autenticazione viene conservato fino alla fine della sessione
####Autenticazione
/* Richiede: username e password
*/ Ritorna: un oggetto "utente" ed il relativo token sse il 2FA non e' attivo
/* Richiede: username e password
* Ritorna: un oggetto "utente" ed una notifica che e' richiesta
*/ l'autenticazione tramite telegram
Autenticazione-telegram "2FA"
/* Richiede: username di telegram e il token inserito dall'utente
*/ Ritorna: un oggetto "utente" ed il relativo token
####Gestione Utente
/* Richiede: il token utente
*/ Ritorna: un oggetto "utente"
/* Richiede: il token utente e un oggetto utente ben formato
* che contiene una configurazione valida per l'utente
*/ Ritorna:
/* Richiede: il token utente e un oggetto utente ben formato
* che contiene una configurazione valida per un nuovo l'utente
*/ Ritorna:
#####Gestione Ente
/* Richiede: il token utente
*/ Ritorna: un oggetto "ente"
/* Richiede: il token utente e un oggetto ente ben formato
* che contiene una configurazione valida per l'ente
*/ Ritorna:
/* Richiede: il token utente e un oggetto utente ben formato
* che contiene una configurazione valida per un nuovo l'ente
*/ Ritorna:
//todo cambio config utente
/utente autenticato/
#####Dispositivi
/Richiede: il token && l'id di un device
Ritorna: un .JSON contenente lista degli id dei sensori connessi al device richiesto + info del device
&&
il numero dei sensori connessi al device/
#####Sensori
/Richiede: il token && l'id di un device && l'id di un sensore connesso al device
Ritorna: un .JSON contenente le informazioni del sensore/
####Gateway- modifica configurazione
/Richiede: il token && l'id di un gateway
Ritorna: una stringa di testo che dice se è avvenuta la modifica o meno/
####Gateway-richiesta configurazione
/Richiede: il token && l'id di un gateway
Ritorna: un .JSON contenente la configurazione corrente del gateway richiesto/
#####Gateway/Topic
/* Richiede: il token utente
*/ Ritorna: un array di oggetti topic
/* Richiede: il token utente e l'id del topic
*/ Ritorna: un oggetto topic
Descrizione del bug
I nuovi ID di qualunque entità nel DB partono da 76
Modifica da fare
Gli ID dovrebbero andare avanti in modo incrementale e non dovrebbero partire da 76.
Descrizione del bug
Data ora invio ultima configurazione non viene aggiornato nel DB.
Modifica da fare
Ogni volta che si riceve un poke di invio nuova configurazione a un determinato gateway, va fatta una query per aggiornare a NOW()
l'ultimo invio.
Test metodi telegram
Test metodi webapp:
Guardare issue #53
Tipo di richiesta (TYPE)
GET
Permessi
USER, MOD, ADMIN
INPUT
Richiesta Coffee/ vuota
OUTPUT
Risposta in protocollo http 418
Note aggiuntive
//
Descrizione del bug
Quando si rimuove un dispositivo, gli alert attivi e gli alert disabilitati per quel dispositivo non vengono rimossi, causando alterazione delle tabelle del DB.
Modifica da fare
Il sistema deve rimuovere automaticamente gli alert attivi di un dispositivo non più censito.
In kafka DB, se un dispositivo viene eliminato, i suoi sensori devono essere eliminati.
@Maxelweb --> modifico KafkaDB
Tipo di richiesta (TYPE)
consumatore Kafka
Permessi
USER/MOD/ADMIN
INPUT
Le API devono mandare a Telegram il messaggio contenente l'alert. Il messaggio che viene ricevuto dal topic di kafka contiene il sensore, il dispositivo, una lista di chat id, il valore attuale del sensore e la soglia che è stata superata
OUTPUT
Quello che dovrete inoltrare a Telegram sarà il tipo di richiesta (req_type), l'id del dispositivo (device_id), l'id del sensore (sensor_id), sensor_value, threshold, value_type e chat id;
Da valutare se mandare n richieste (quindi un messaggio per ogni chat id ricevuta) o una lista di chat id in un singolo messaggio
Note aggiuntive
Questo implica che anche quando viene mandato il codice di autenticazione sarà necessario aggiungere un campo req_type al messaggio inviato per poter discriminare i vari tipi di richiesta
Per testare è necessario seguire i seguenti passi:
docker-compose up -d
Vanno scritte le seguenti strutture dati:
Devices
String message
Devices()
String setMessage(List<JsonObject> devices)
Device
final String ID
String message
Device(String id)
String setMessage(JsonObject device)
Sensor
final String deviceID
final String sensorID
Sensor(String deviceId, String sensorId)
String setMessage(JsonObject sensor)
Vanno scritti i seguenti metodi nella classe DataFetch
List<JsonObject> getDevices()
JsonObject getDevice(String deviceId)
JsonObject getSensor(String deviceId, String sensorId)
Le funzioni fano il fetch dei dati da tutti i topic (la lista dei topic è presente nella classe DataFetch come membro final)
Per fare le funzioni si consiglia di usare la funzione DataFetch.getForTopics(String[] topics) (che prende un messaggio per ogni topic specificato ed inserisce i suoi elementi in una lista che poi viene ritornata). Potrebbe essere una buona idea prendere quindi la lista di JsonObject ritornata (nella forma [{DeviceId, Timestamp , sensori:[{SensorId, Timestamp, Valore}, {...altro sensore...}, ...]})
NB: Ogni JsonObject dovrebbe rappresentare un dispositivo con i suoi sensori in teoria
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.