CoffeeAtHome/lib/models/machine.dart
2026-03-29 08:13:38 -07:00

170 lines
4.0 KiB
Dart

import 'package:json_annotation/json_annotation.dart';
part 'machine.g.dart';
enum MachineType {
@JsonValue('Espresso')
espresso,
@JsonValue('Drip')
drip,
@JsonValue('Percolation')
percolation,
@JsonValue('French Press')
frenchPress,
@JsonValue('Cold Brew')
coldBrew,
@JsonValue('E61')
e61,
@JsonValue('Pod')
pod,
@JsonValue('Espresso Pod')
espressoPod,
@JsonValue('Grinder')
grinder,
}
@JsonSerializable()
class Portafilter {
final String id;
final String size;
final String material;
Portafilter({required this.id, required this.size, required this.material});
factory Portafilter.fromJson(Map<String, dynamic> json) =>
_$PortafilterFromJson(json);
Map<String, dynamic> toJson() => _$PortafilterToJson(this);
}
@JsonSerializable()
class Machine {
final String id;
final String manufacturer;
final int year;
final String model;
final MachineType type;
final bool steamWand;
final String details;
final bool isOwned;
final double rating;
final int popularity;
final List<Portafilter> portafilters;
final Map<String, dynamic> specifications;
Machine({
required this.id,
required this.manufacturer,
required this.year,
required this.model,
required this.type,
required this.steamWand,
required this.details,
required this.isOwned,
required this.rating,
required this.popularity,
required this.portafilters,
required this.specifications,
});
factory Machine.fromJson(Map<String, dynamic> json) =>
_$MachineFromJson(json);
Map<String, dynamic> toJson() => _$MachineToJson(this);
}
@JsonSerializable()
class EspressoMachine extends Machine {
final String boilerType;
final String capacity;
final String? grinder;
final String heatSourceDescription;
final bool hopper;
final bool isDosing;
final int maxPressureBars;
final bool pressureGaugeIncluded;
final bool programmable;
final bool usesLever;
final int waterCapacity;
final Portafilter? portafilter;
EspressoMachine({
required super.id,
required super.manufacturer,
required super.year,
required super.model,
required super.type,
required super.steamWand,
required super.details,
required super.isOwned,
required super.rating,
required super.popularity,
required super.portafilters,
required super.specifications,
required this.boilerType,
required this.capacity,
this.grinder,
required this.heatSourceDescription,
required this.hopper,
required this.isDosing,
required this.maxPressureBars,
required this.pressureGaugeIncluded,
required this.programmable,
required this.usesLever,
required this.waterCapacity,
this.portafilter,
});
factory EspressoMachine.fromJson(Map<String, dynamic> json) =>
_$EspressoMachineFromJson(json);
@override
Map<String, dynamic> toJson() => _$EspressoMachineToJson(this);
}
@JsonSerializable()
class DripCoffee extends Machine {
final String brewerType;
final bool caraffe;
final String filterType;
final bool programmable;
DripCoffee({
required super.id,
required super.manufacturer,
required super.year,
required super.model,
required super.type,
required super.steamWand,
required super.details,
required super.isOwned,
required super.rating,
required super.popularity,
required super.portafilters,
required super.specifications,
required this.brewerType,
required this.caraffe,
required this.filterType,
required this.programmable,
});
factory DripCoffee.fromJson(Map<String, dynamic> json) =>
_$DripCoffeeFromJson(json);
@override
Map<String, dynamic> toJson() => _$DripCoffeeToJson(this);
}
@JsonSerializable()
class Grinder {
final String id;
final String burrType;
final int grindSettingsCount;
Grinder({
required this.id,
required this.burrType,
required this.grindSettingsCount,
});
factory Grinder.fromJson(Map<String, dynamic> json) =>
_$GrinderFromJson(json);
Map<String, dynamic> toJson() => _$GrinderToJson(this);
}