121 lines
2.5 KiB
Dart
121 lines
2.5 KiB
Dart
import 'package:json_annotation/json_annotation.dart';
|
|
|
|
part 'recipe.g.dart';
|
|
|
|
enum ServingTemp {
|
|
@JsonValue('Hot')
|
|
hot,
|
|
@JsonValue('Cold')
|
|
cold,
|
|
@JsonValue('Iced')
|
|
iced,
|
|
}
|
|
|
|
enum MilkType {
|
|
@JsonValue('Whole')
|
|
whole,
|
|
@JsonValue('Skim')
|
|
skim,
|
|
@JsonValue('Soy')
|
|
soy,
|
|
@JsonValue('Almond')
|
|
almond,
|
|
@JsonValue('Coconut')
|
|
coconut,
|
|
@JsonValue('Oat')
|
|
oat,
|
|
@JsonValue('Pistachio')
|
|
pistachio,
|
|
}
|
|
|
|
enum BrewMethod {
|
|
@JsonValue('Drip')
|
|
drip,
|
|
@JsonValue('French Press')
|
|
frenchPress,
|
|
@JsonValue('Pour Over')
|
|
pourOver,
|
|
@JsonValue('Espresso')
|
|
espresso,
|
|
}
|
|
|
|
enum GrindSize {
|
|
@JsonValue('Fine')
|
|
fine,
|
|
@JsonValue('Medium')
|
|
medium,
|
|
@JsonValue('Coarse')
|
|
coarse,
|
|
}
|
|
|
|
enum Difficulty {
|
|
@JsonValue('Beginner')
|
|
beginner,
|
|
@JsonValue('Intermediate')
|
|
intermediate,
|
|
@JsonValue('Advanced')
|
|
advanced,
|
|
}
|
|
|
|
@JsonSerializable()
|
|
class Recipe {
|
|
final String id;
|
|
final String name;
|
|
final ServingTemp servingTemp;
|
|
final MilkType? milkType;
|
|
final BrewMethod brewMethod;
|
|
final GrindSize grindSize;
|
|
final double coffeeAmount; // in grams
|
|
final double waterAmount; // in ml
|
|
final int brewTime; // in seconds
|
|
final String instructions;
|
|
final String? notes;
|
|
final Difficulty difficulty;
|
|
final List<String> equipmentNeeded;
|
|
final double yieldAmount;
|
|
final double caffeinePer100ml;
|
|
final int waterTemperature;
|
|
final int bloomTime;
|
|
final int totalExtractionTime;
|
|
final String grindToWaterRatio;
|
|
final List<String> tags;
|
|
final String origin;
|
|
final double rating;
|
|
final int popularity;
|
|
final String createdBy;
|
|
final bool isPublic;
|
|
final DateTime lastModified;
|
|
|
|
Recipe({
|
|
required this.id,
|
|
required this.name,
|
|
required this.servingTemp,
|
|
this.milkType,
|
|
required this.brewMethod,
|
|
required this.grindSize,
|
|
required this.coffeeAmount,
|
|
required this.waterAmount,
|
|
required this.brewTime,
|
|
required this.instructions,
|
|
this.notes,
|
|
required this.difficulty,
|
|
required this.equipmentNeeded,
|
|
required this.yieldAmount,
|
|
required this.caffeinePer100ml,
|
|
required this.waterTemperature,
|
|
required this.bloomTime,
|
|
required this.totalExtractionTime,
|
|
required this.grindToWaterRatio,
|
|
required this.tags,
|
|
required this.origin,
|
|
required this.rating,
|
|
required this.popularity,
|
|
required this.createdBy,
|
|
required this.isPublic,
|
|
required this.lastModified,
|
|
});
|
|
|
|
factory Recipe.fromJson(Map<String, dynamic> json) => _$RecipeFromJson(json);
|
|
Map<String, dynamic> toJson() => _$RecipeToJson(this);
|
|
}
|