112 lines
2.9 KiB
Dart
112 lines
2.9 KiB
Dart
class Allarme {
|
|
final int id;
|
|
final int sitoId;
|
|
final String tipo;
|
|
final String severita;
|
|
final String stato;
|
|
final String titolo;
|
|
final String? descrizione;
|
|
final double? valoreRilevato;
|
|
final double? valoreSoglia;
|
|
final String? unitaMisura;
|
|
final Map<String, dynamic>? datiSensori;
|
|
final DateTime timestampRilevamento;
|
|
final DateTime createdAt;
|
|
|
|
Allarme({
|
|
required this.id,
|
|
required this.sitoId,
|
|
required this.tipo,
|
|
required this.severita,
|
|
required this.stato,
|
|
required this.titolo,
|
|
this.descrizione,
|
|
this.valoreRilevato,
|
|
this.valoreSoglia,
|
|
this.unitaMisura,
|
|
this.datiSensori,
|
|
required this.timestampRilevamento,
|
|
required this.createdAt,
|
|
});
|
|
|
|
factory Allarme.fromJson(Map<String, dynamic> json) {
|
|
return Allarme(
|
|
id: json['id'] as int,
|
|
sitoId: json['sito_id'] as int,
|
|
tipo: json['tipo'] as String,
|
|
severita: json['severita'] as String,
|
|
stato: json['stato'] as String,
|
|
titolo: json['titolo'] as String,
|
|
descrizione: json['descrizione'] as String?,
|
|
valoreRilevato: json['valore_rilevato'] != null
|
|
? (json['valore_rilevato'] as num).toDouble()
|
|
: null,
|
|
valoreSoglia: json['valore_soglia'] != null
|
|
? (json['valore_soglia'] as num).toDouble()
|
|
: null,
|
|
unitaMisura: json['unita_misura'] as String?,
|
|
datiSensori: json['dati_sensori'] as Map<String, dynamic>?,
|
|
timestampRilevamento: DateTime.parse(json['timestamp_rilevamento'] as String),
|
|
createdAt: DateTime.parse(json['created_at'] as String),
|
|
);
|
|
}
|
|
|
|
bool get isCritical => severita == 'critical';
|
|
bool get isWarning => severita == 'warning';
|
|
bool get isRisolto => stato == 'risolto';
|
|
|
|
String get tipoReadable {
|
|
final labels = {
|
|
'movimento_terreno': 'Movimento Terreno',
|
|
'deformazione': 'Deformazione',
|
|
'altro': 'Altro',
|
|
};
|
|
return labels[tipo] ?? tipo;
|
|
}
|
|
|
|
String get statoReadable {
|
|
final labels = {
|
|
'nuovo': 'Nuovo',
|
|
'in_gestione': 'In Gestione',
|
|
'risolto': 'Risolto',
|
|
};
|
|
return labels[stato] ?? stato;
|
|
}
|
|
|
|
String get severitaReadable {
|
|
final labels = {
|
|
'critical': 'CRITICO',
|
|
'warning': 'AVVISO',
|
|
'info': 'INFO',
|
|
};
|
|
return labels[severita] ?? severita.toUpperCase();
|
|
}
|
|
}
|
|
|
|
class AllarmeListResponse {
|
|
final int total;
|
|
final List<Allarme> items;
|
|
final int page;
|
|
final int pageSize;
|
|
|
|
AllarmeListResponse({
|
|
required this.total,
|
|
required this.items,
|
|
required this.page,
|
|
required this.pageSize,
|
|
});
|
|
|
|
factory AllarmeListResponse.fromJson(Map<String, dynamic> json) {
|
|
return AllarmeListResponse(
|
|
total: json['total'] as int,
|
|
items: (json['items'] as List)
|
|
.map((item) => Allarme.fromJson(item as Map<String, dynamic>))
|
|
.toList(),
|
|
page: json['page'] as int,
|
|
pageSize: json['page_size'] as int,
|
|
);
|
|
}
|
|
|
|
bool get hasMore => items.length < total;
|
|
}
|