diff --git a/lib/entities/PizzaDatabase.dart b/lib/entities/PizzaDatabase.dart new file mode 100644 index 0000000..9355400 --- /dev/null +++ b/lib/entities/PizzaDatabase.dart @@ -0,0 +1,35 @@ +import 'package:floor/floor.dart'; +import 'package:pizzaplanner/entities/PizzaEvent.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/Ingredient.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/PizzaRecipe.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/RecipeStep.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/RecipeSubStep.dart'; +import 'package:pizzaplanner/entities/dao/IngridientDao.dart'; +import 'package:pizzaplanner/entities/dao/PizzaEventDoa.dart'; +import 'package:pizzaplanner/entities/dao/PizzaRecipeDao.dart'; +import 'package:pizzaplanner/entities/dao/RecipeStepDao.dart'; +import 'package:pizzaplanner/entities/dao/RecipeSubStepDao.dart'; + +part 'PizzaDatabase.g.dart'; + +@TypeConverters([DateTimeConverter]) +@Database(version: 1, entities: [PizzaEvent, PizzaRecipe, RecipeStep, RecipeSubStep, Ingredient]) +abstract class PizzaDatabase extends FloorDatabase { + PizzaEventDoa get pizzaEventDoa; + PizzaRecipeDao get pizzaRecipeDao; + RecipeStepDao get recipeStepDao; + RecipeSubStepDao get recipeSubStepDao; + IngredientDao get ingredientDao; +} + +class DateTimeConverter extends TypeConverter { + @override + DateTime decode(int databaseValue) { + return DateTime.fromMillisecondsSinceEpoch(databaseValue); + } + + @override + int encode(DateTime value) { + return value.millisecondsSinceEpoch; + } +} \ No newline at end of file diff --git a/lib/entities/PizzaEvent.dart b/lib/entities/PizzaEvent.dart index a804e1f..84a3bd0 100644 --- a/lib/entities/PizzaEvent.dart +++ b/lib/entities/PizzaEvent.dart @@ -1,8 +1,15 @@ import 'package:pizzaplanner/entities/PizzaRecipe/PizzaRecipe.dart'; +import 'package:floor/floor.dart'; + +@entity class PizzaEvent { + @PrimaryKey(autoGenerate: true) + final int? id; + final String name; + @ignore final PizzaRecipe recipe; final int pizzaCount; final int doughBallSize; @@ -13,6 +20,7 @@ class PizzaEvent { this.recipe, this.pizzaCount, this.doughBallSize, - this.dateTime + this.dateTime, + {this.id,} ); } \ No newline at end of file diff --git a/lib/entities/PizzaRecipe/Ingredient.dart b/lib/entities/PizzaRecipe/Ingredient.dart index c345518..51336ec 100644 --- a/lib/entities/PizzaRecipe/Ingredient.dart +++ b/lib/entities/PizzaRecipe/Ingredient.dart @@ -1,13 +1,19 @@ import 'package:flutter/material.dart'; +import 'package:floor/floor.dart'; + import 'package:pizzaplanner/util.dart'; +@entity class Ingredient { + @PrimaryKey(autoGenerate: true) + final int? id; + final String name; final String unit; final double value; - Ingredient(this.name, this.unit, this.value); + Ingredient(this.name, this.unit, this.value, {this.id}); TableRow getIngredientTableRow(int pizzaCount, int doughBallSize){ return TableRow( diff --git a/lib/entities/PizzaRecipe/PizzaRecipe.dart b/lib/entities/PizzaRecipe/PizzaRecipe.dart index 3b22d9d..65e9af2 100644 --- a/lib/entities/PizzaRecipe/PizzaRecipe.dart +++ b/lib/entities/PizzaRecipe/PizzaRecipe.dart @@ -1,21 +1,28 @@ +import 'package:floor/floor.dart'; import 'package:flutter/material.dart'; +import 'package:pizzaplanner/entities/PizzaDatabase.dart'; import 'package:pizzaplanner/util.dart'; import 'package:pizzaplanner/entities/PizzaRecipe/Ingredient.dart'; -import 'package:pizzaplanner/entities/PizzaRecipe/Ingredients.dart'; import 'package:pizzaplanner/entities/PizzaRecipe/RecipeStep.dart'; import 'package:pizzaplanner/entities/PizzaRecipe/RecipeSubStep.dart'; -import 'package:pizzaplanner/util.dart'; import 'package:yaml/yaml.dart'; +@entity class PizzaRecipe { + @PrimaryKey(autoGenerate: true) + final int? id; + final String name; final String description; + + @ignore final List ingredients; + @ignore final List recipeSteps; - PizzaRecipe(this.name, this.description, this.ingredients, this.recipeSteps); + PizzaRecipe(this.name, this.description, this.ingredients, this.recipeSteps, {this.id}); Table getIngredientsTable(int pizzaCount, int doughBallSize) { return Table( @@ -89,6 +96,17 @@ class PizzaRecipe { ); }); + final database = await $FloorPizzaDatabase.databaseBuilder("app.db").build(); + + final recipeDao = database.pizzaRecipeDao; + await recipeDao.insertPizzaRecipe(PizzaRecipe( + name, + description, + newIngredients, + newRecipeSteps + )); + + return PizzaRecipe( name, description, diff --git a/lib/entities/PizzaRecipe/RecipeStep.dart b/lib/entities/PizzaRecipe/RecipeStep.dart index 8de8b1b..9842659 100644 --- a/lib/entities/PizzaRecipe/RecipeStep.dart +++ b/lib/entities/PizzaRecipe/RecipeStep.dart @@ -1,6 +1,10 @@ +import 'package:floor/floor.dart'; import 'package:pizzaplanner/entities/PizzaRecipe/RecipeSubStep.dart'; +@entity class RecipeStep { + @PrimaryKey(autoGenerate: true) + final int? id; final String name; final String waitDescription; final String waitUnit; @@ -8,9 +12,11 @@ class RecipeStep { final int waitMax; late int waitValue; final String description; + + @ignore final List subSteps; - RecipeStep(this.name, this.description, this.waitDescription, this.waitUnit, this.waitMin, this.waitMax, this.subSteps) { + RecipeStep(this.name, this.description, this.waitDescription, this.waitUnit, this.waitMin, this.waitMax, this.subSteps, {this.id}) { waitValue = waitMin; } diff --git a/lib/entities/PizzaRecipe/RecipeSubStep.dart b/lib/entities/PizzaRecipe/RecipeSubStep.dart index af3b2c1..6b54b23 100644 --- a/lib/entities/PizzaRecipe/RecipeSubStep.dart +++ b/lib/entities/PizzaRecipe/RecipeSubStep.dart @@ -1,6 +1,12 @@ +import 'package:floor/floor.dart'; + +@entity class RecipeSubStep { + @PrimaryKey(autoGenerate: true) + final int? id; + final String name; final String description; - RecipeSubStep(this.name, this.description); + RecipeSubStep(this.name, this.description, {this.id}); } \ No newline at end of file diff --git a/lib/entities/dao/IngridientDao.dart b/lib/entities/dao/IngridientDao.dart new file mode 100644 index 0000000..b525976 --- /dev/null +++ b/lib/entities/dao/IngridientDao.dart @@ -0,0 +1,15 @@ +import 'package:floor/floor.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/Ingredient.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/PizzaRecipe.dart'; + +@dao +abstract class IngredientDao { + @Query("SELECT * FROM Ingredient") + Future> getAllIngredients(); + + @Query("SELECT * FROM Ingredient WHERE id = :id") + Stream findIngredientById(int id); + + @insert + Future insertIngredient(Ingredient ingredient); +} \ No newline at end of file diff --git a/lib/entities/dao/PizzaEventDoa.dart b/lib/entities/dao/PizzaEventDoa.dart new file mode 100644 index 0000000..8b1909b --- /dev/null +++ b/lib/entities/dao/PizzaEventDoa.dart @@ -0,0 +1,14 @@ +import 'package:floor/floor.dart'; +import 'package:pizzaplanner/entities/PizzaEvent.dart'; + +@dao +abstract class PizzaEventDoa { + @Query("SELECT * FROM PizzaEvent") + Future> getAllPizzaEvents(); + + @Query("SELECT * FROM PizzaEvent WHERE id = :id") + Stream findPizzaEventById(int id); + + @insert + Future insertPizzaEvent(PizzaEvent pizzaEvent); +} \ No newline at end of file diff --git a/lib/entities/dao/PizzaRecipeDao.dart b/lib/entities/dao/PizzaRecipeDao.dart new file mode 100644 index 0000000..8df5097 --- /dev/null +++ b/lib/entities/dao/PizzaRecipeDao.dart @@ -0,0 +1,14 @@ +import 'package:floor/floor.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/PizzaRecipe.dart'; + +@dao +abstract class PizzaRecipeDao { + @Query("SELECT * FROM PizzaRecipe") + Future> getAllPizzaRecipes(); + + @Query("SELECT * FROM PizzaRecipe WHERE id = :id") + Stream findPizzaRecipeById(int id); + + @insert + Future insertPizzaRecipe(PizzaRecipe pizzaRecipe); +} \ No newline at end of file diff --git a/lib/entities/dao/RecipeStepDao.dart b/lib/entities/dao/RecipeStepDao.dart new file mode 100644 index 0000000..b4c0b1c --- /dev/null +++ b/lib/entities/dao/RecipeStepDao.dart @@ -0,0 +1,14 @@ +import 'package:floor/floor.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/RecipeStep.dart'; + +@dao +abstract class RecipeStepDao { + @Query("SELECT * FROM RecipeStep") + Future> getAllRecipeSteps(); + + @Query("SELECT * FROM RecipeStep WHERE id = :id") + Stream findRecipeStepById(int id); + + @insert + Future insertRecipeStep(RecipeStep recipeStep); +} \ No newline at end of file diff --git a/lib/entities/dao/RecipeSubStepDao.dart b/lib/entities/dao/RecipeSubStepDao.dart new file mode 100644 index 0000000..7f932e3 --- /dev/null +++ b/lib/entities/dao/RecipeSubStepDao.dart @@ -0,0 +1,14 @@ +import 'package:floor/floor.dart'; +import 'package:pizzaplanner/entities/PizzaRecipe/RecipeSubStep.dart'; + +@dao +abstract class RecipeSubStepDao { + @Query("SELECT * FROM RecipeSubStep") + Future> getAllRecipeSubSteps(); + + @Query("SELECT * FROM RecipeSubStep WHERE id = :id") + Stream findRecipeSubStepById(int id); + + @insert + Future insertRecipeSubStep(RecipeSubStep recipeSubStep); +} \ No newline at end of file diff --git a/pubspec.yaml b/pubspec.yaml index 83b3175..8ea761b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -35,10 +35,15 @@ dependencies: ref: "df4ed6fc2e24725604e90f79aedb98a7af7fb04d" yaml: ^3.1.0 + floor: ^1.1.0 + dev_dependencies: flutter_test: sdk: flutter + floor_generator: ^1.1.0 + build_runner: ^2.0.0 + # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec