Files
terrain_monitor_app/lib/models/allarme.dart
2025-10-20 19:17:45 +02:00

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;
}