class Servicio {
final String id;
final String nombre;
final String categoria;
final double precioBase;
final bool activo;
final String fechaCreacion;
const Servicio({
required this.id,
required this.nombre,
required this.categoria,
required this.precioBase,
required this.activo,
required this.fechaCreacion,
});
/// Deserialización con switch pattern (type-safe)
factory Servicio.fromJson(
Map<String, dynamic> json
) {
return switch (json) {
{
'id': final String id,
'nombre': final String nombre,
'precio_base': final num precio,
'activo': final bool activo,
'fecha_creacion': final String fecha,
} =>
Servicio(
id: id, nombre: nombre,
categoria: json['categoria'] as String,
precioBase: precio.toDouble(),
activo: activo,
fechaCreacion: fecha,
),
_ => throw const FormatException(
'JSON de Servicio inválido.'),
};
}
/// Serialización: Servicio → JSON Map
Map<String, dynamic> toJson() => {
'id': id,
'nombre': nombre,
'categoria': categoria,
'precio_base': precioBase,
'activo': activo,
'fecha_creacion': fechaCreacion,
};
}
class Propuesta {
final String id;
final String servicioId;
final String cliente;
final String estado;
final double importe;
final String fecha;
final String notas;
const Propuesta({ /* ... required params ... */ });
factory Propuesta.fromJson(
Map<String, dynamic> json
) {
return switch (json) {
{
'id': final String id,
'servicio_id': final String svcId,
'cliente': final String cliente,
'estado': final String estado,
'importe': final num importe,
'fecha': final String fecha,
'notas': final String notas,
} =>
Propuesta(
id: id, servicioId: svcId,
cliente: cliente, estado: estado,
importe: importe.toDouble(),
fecha: fecha, notas: notas,
),
_ => throw const FormatException(
'JSON de Propuesta inválido.'),
};
}
Map<String, dynamic> toJson() => {
'id': id, 'servicio_id': servicioId,
'cliente': cliente, 'estado': estado,
'importe': importe, 'fecha': fecha,
'notas': notas,
};
}