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

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