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 equipmentNeeded; final double yieldAmount; final double caffeinePer100ml; final int waterTemperature; final int bloomTime; final int totalExtractionTime; final String grindToWaterRatio; final List 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 json) => _$RecipeFromJson(json); Map toJson() => _$RecipeToJson(this); }