From 4d0388b262a1df22d69a4b4e0152895109f90400 Mon Sep 17 00:00:00 2001 From: Alexander Laevens Date: Wed, 7 Dec 2022 02:13:34 -0700 Subject: [PATCH] +Add quantity field to ingredients +Clear list now requires confirmation +Confirm / Cancel buttons are now coloured --- one_trip/lib/api/models/list.dart | 14 +- one_trip/lib/api/models/listingredient.dart | 41 ++++-- one_trip/lib/api/models/recipeingredient.dart | 38 +++++- one_trip/lib/pages/list_page/list_page.dart | 27 ++-- .../lib/pages/list_page/widgets/listrow.dart | 4 +- ...ecipes.dart => search_recipes_dialog.dart} | 26 ++-- .../widgets/invite_homegroup_dialog.dart | 7 +- .../widgets/recipe_card_widget.dart | 33 +++-- one_trip/lib/screens/home_screen.dart | 1 - one_trip/lib/theme.dart | 25 ++++ one_trip/lib/widgets/confirm_dialog.dart | 67 ++++++++++ one_trip/lib/widgets/ingredient_dialog.dart | 122 ++++++++++++++++++ one_trip/lib/widgets/text_entry_dialog.dart | 10 +- ...pdates_listingredient_quantity_and_more.py | 27 ++++ one_trip_api/api/models.py | 3 +- one_trip_api/api/serializers.py | 10 +- one_trip_api/api/views.py | 2 +- planning/backend-structure.dia | Bin 2606 -> 2623 bytes planning/backend-structure.png | Bin 60532 -> 62025 bytes readme.md | 22 ++-- 20 files changed, 396 insertions(+), 83 deletions(-) rename one_trip/lib/pages/list_page/widgets/{search_recipes.dart => search_recipes_dialog.dart} (89%) create mode 100644 one_trip/lib/widgets/confirm_dialog.dart create mode 100644 one_trip/lib/widgets/ingredient_dialog.dart create mode 100644 one_trip_api/api/migrations/0006_remove_list_updates_listingredient_quantity_and_more.py diff --git a/one_trip/lib/api/models/list.dart b/one_trip/lib/api/models/list.dart index 5b60843..0d58b8c 100644 --- a/one_trip/lib/api/models/list.dart +++ b/one_trip/lib/api/models/list.dart @@ -9,12 +9,10 @@ import 'package:one_trip/api/models/recipeingredient.dart'; class ShoppingList { List ingredients; - int updates; int homegroup; ShoppingList({ required this.ingredients, - required this.updates, required this.homegroup, }); @@ -25,9 +23,7 @@ class ShoppingList { } return ShoppingList( - ingredients: ingredients, - updates: json["updates"] as int, - homegroup: json["homegroup"] as int); + ingredients: ingredients, homegroup: json["homegroup"] as int); } static Future get(int id) async { @@ -72,8 +68,8 @@ class ShoppingList { bool anySuccesses = false; for (RecipeIngredient ingredient in recipe.ingredients) { - ListIngredient? newIngredient = - await ListIngredient.create(ingredient.name, homegroup); + ListIngredient? newIngredient = await ListIngredient.create( + homegroup, ingredient.name, ingredient.quantity); if (newIngredient != null) { anySuccesses = true; @@ -81,7 +77,7 @@ class ShoppingList { } if (anySuccesses) { - return patch(updates: updates + 1); + return get(homegroup); } return null; @@ -98,7 +94,7 @@ class ShoppingList { } if (anySuccess) { - return patch(updates: updates + 1); + return get(homegroup); } return null; diff --git a/one_trip/lib/api/models/listingredient.dart b/one_trip/lib/api/models/listingredient.dart index 8ad23a3..4e1dadf 100644 --- a/one_trip/lib/api/models/listingredient.dart +++ b/one_trip/lib/api/models/listingredient.dart @@ -7,12 +7,14 @@ import 'package:http/http.dart' as http; class ListIngredient { int id; String name; + String? quantity; int list; bool inCart; ListIngredient({ required this.id, required this.name, + required this.quantity, required this.list, required this.inCart, }); @@ -21,21 +23,33 @@ class ListIngredient { return ListIngredient( id: json["id"] as int, name: json["name"] as String, + quantity: json["quantity"] as String?, list: json["list"] as int, inCart: json["in_cart"] as bool, ); } - static Future create(String name, int list) async { + static Future create( + int list, String name, String? quantity) async { const String requestURL = "$baseURL/api/listingredients/"; String token = TokenSingleton().getToken(); + + Map body = { + "name": name, + "list": list, + }; + + if (quantity != null) { + body["quantity"] = quantity; + } + http.Response response = await http.post( Uri.parse(requestURL), - headers: {"Authorization": "Token $token"}, - body: { - "name": name, - "list": "$list", + headers: { + "Authorization": "Token $token", + "Content-Type": "application/json", }, + body: jsonEncode(body), ); if (response.statusCode == 201) { @@ -45,21 +59,27 @@ class ListIngredient { } } - Future patch({String? name, bool? inCart}) async { + Future patch( + {String? name, String? quantity, bool? inCart}) async { String requestURL = "$baseURL/api/listingredients/$id/"; String token = TokenSingleton().getToken(); - Map body = {}; + Map body = {"quantity": quantity ?? this.quantity}; + if (name != null) { body["name"] = name; } if (inCart != null) { - body["in_cart"] = "$inCart"; + body["in_cart"] = inCart; } http.Response response = await http.patch(Uri.parse(requestURL), - headers: {"Authorization": "Token $token"}, body: body); + headers: { + "Authorization": "Token $token", + "Content-Type": "application/json", + }, + body: jsonEncode(body)); if (response.statusCode == 200) { return ListIngredient.fromJson(jsonDecode(response.body)); @@ -86,8 +106,9 @@ class ListIngredient { other is ListIngredient && other.id == id && other.name == name && + other.quantity == quantity && other.inCart == inCart; @override - int get hashCode => Object.hash(id, name, inCart); + int get hashCode => Object.hash(id, name, quantity, inCart); } diff --git a/one_trip/lib/api/models/recipeingredient.dart b/one_trip/lib/api/models/recipeingredient.dart index 8fe2258..f85e9df 100644 --- a/one_trip/lib/api/models/recipeingredient.dart +++ b/one_trip/lib/api/models/recipeingredient.dart @@ -7,11 +7,13 @@ import 'package:http/http.dart' as http; class RecipeIngredient { int id; String name; + String? quantity; int recipe; RecipeIngredient({ required this.id, required this.name, + required this.quantity, required this.recipe, }); @@ -19,20 +21,32 @@ class RecipeIngredient { return RecipeIngredient( id: json["id"] as int, name: json["name"] as String, + quantity: json["quantity"] as String?, recipe: json["recipe"] as int, ); } - static Future create(String name, int recipeID) async { + static Future create( + int recipeID, String name, String? quantity) async { const String requestURL = "$baseURL/api/recipeingredients/"; String token = TokenSingleton().getToken(); + + Map body = { + "name": name, + "recipe": recipeID, + }; + + if (quantity != null) { + body["quantity"] = quantity; + } + http.Response response = await http.post( Uri.parse(requestURL), - headers: {"Authorization": "Token $token"}, - body: { - "name": name, - "recipe": "$recipeID", + headers: { + "Authorization": "Token $token", + "Content-Type": "application/json", }, + body: jsonEncode(body), ); if (response.statusCode == 201) { @@ -42,12 +56,22 @@ class RecipeIngredient { } } - Future patch(String name) async { + Future patch({String? name, String? quantity}) async { + Map body = {"quantity": quantity}; + + if (name != null) { + body["name"] = name; + } + String requestURL = "$baseURL/api/recipeingredients/$id/"; String token = TokenSingleton().getToken(); http.Response response = await http.patch(Uri.parse(requestURL), - headers: {"Authorization": "Token $token"}, body: {"name": name}); + headers: { + "Authorization": "Token $token", + "Content-Type": "application/json", + }, + body: jsonEncode(body)); if (response.statusCode == 200) { return RecipeIngredient.fromJson(jsonDecode(response.body)); diff --git a/one_trip/lib/pages/list_page/list_page.dart b/one_trip/lib/pages/list_page/list_page.dart index 3377412..41d2aef 100644 --- a/one_trip/lib/pages/list_page/list_page.dart +++ b/one_trip/lib/pages/list_page/list_page.dart @@ -6,8 +6,9 @@ import 'package:one_trip/api/models/list.dart'; import 'package:one_trip/api/models/listingredient.dart'; import 'package:one_trip/api/models/user.dart'; import 'package:one_trip/pages/list_page/widgets/listrow.dart'; -import 'package:one_trip/pages/list_page/widgets/search_recipes.dart'; -import 'package:one_trip/widgets/text_entry_dialog.dart'; +import 'package:one_trip/pages/list_page/widgets/search_recipes_dialog.dart'; +import 'package:one_trip/widgets/confirm_dialog.dart'; +import 'package:one_trip/widgets/ingredient_dialog.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; class ListPage extends StatefulWidget { @@ -56,8 +57,8 @@ class _ListPageState extends State { } } }, + // ignore: avoid_print onError: (error) => print("Websocket error: $error"), - onDone: () => print("Websocket Done"), ); } @@ -108,15 +109,18 @@ class _ListPageState extends State { return ListArea( list: _list!, onAddOne: () async { - String? itemName = - await textEntryDialog(context, "Item Name", "Item"); + IngredientDetails? details = + await ingredientDialog(context, "", ""); - if (itemName == null || itemName == "") { + if (details == null || details.name == "") { return; } - ListIngredient? newIngredient = - await ListIngredient.create(itemName, _list!.homegroup); + ListIngredient? newIngredient = await ListIngredient.create( + _list!.homegroup, + details.name, + details.quantity != "" ? details.quantity : null); + if (newIngredient == null) { return; } @@ -288,7 +292,12 @@ class ListArea extends StatelessWidget { foregroundColor: MaterialStatePropertyAll( Theme.of(context).colorScheme.onError), ), - onPressed: () => onClear(), + onPressed: () async { + bool doDelete = await confirmDialog(context, "Clear List"); + if (doDelete) { + onClear(); + } + }, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: const [Icon(Icons.delete), Text("Clear List")], diff --git a/one_trip/lib/pages/list_page/widgets/listrow.dart b/one_trip/lib/pages/list_page/widgets/listrow.dart index f00c536..2e242d8 100644 --- a/one_trip/lib/pages/list_page/widgets/listrow.dart +++ b/one_trip/lib/pages/list_page/widgets/listrow.dart @@ -67,7 +67,9 @@ class _ListRowState extends State { Expanded( child: Text( // _ingredient.name, - widget.ingredient.name, + widget.ingredient.quantity == null + ? widget.ingredient.name + : "${widget.ingredient.name} - ${widget.ingredient.quantity}", style: Theme.of(context).textTheme.titleMedium!.copyWith( decoration: widget.ingredient.inCart ? TextDecoration.lineThrough diff --git a/one_trip/lib/pages/list_page/widgets/search_recipes.dart b/one_trip/lib/pages/list_page/widgets/search_recipes_dialog.dart similarity index 89% rename from one_trip/lib/pages/list_page/widgets/search_recipes.dart rename to one_trip/lib/pages/list_page/widgets/search_recipes_dialog.dart index 4d8bd08..14a1daa 100644 --- a/one_trip/lib/pages/list_page/widgets/search_recipes.dart +++ b/one_trip/lib/pages/list_page/widgets/search_recipes_dialog.dart @@ -80,6 +80,7 @@ class _SearchRecipesDialogState extends State { child: PaginationListView( state: _listState, shrinkWrap: true, + prefetchOne: true, itemBuilder: (context, data) { return GestureDetector( behavior: HitTestBehavior.translucent, @@ -98,7 +99,13 @@ class _SearchRecipesDialogState extends State { color: selectedIDs.contains(data.id) ? Theme.of(context).colorScheme.secondary : null, - child: Text(data.name), + child: Text( + data.name, + style: TextStyle( + color: selectedIDs.contains(data.id) + ? Theme.of(context).colorScheme.onSecondary + : null), + ), ), ); }, @@ -106,16 +113,6 @@ class _SearchRecipesDialogState extends State { return const Divider(); }, dataProvider: (int page) async { - // SearchResult result = - // await SimpleUser.search(_searchController.text, page); - // List users = List.from(result.results); - - // if (result.next == null) { - // users.add(null); - // } - - // return users; - SearchResult result = await Recipe.search(_searchController.text, page); List recipes = @@ -137,12 +134,15 @@ class _SearchRecipesDialogState extends State { mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ ElevatedButton( + style: negativeButtonStyle(context), onPressed: () => Navigator.pop(context), child: const Text("Cancel"), ), ElevatedButton( - onPressed: () => Navigator.pop(context, selectedIDs), - child: const Text("Done")), + style: positiveButtonStyle(context), + onPressed: () => Navigator.pop(context, selectedIDs), + child: const Text("Done"), + ), ], ), ) diff --git a/one_trip/lib/pages/profile_page/widgets/invite_homegroup_dialog.dart b/one_trip/lib/pages/profile_page/widgets/invite_homegroup_dialog.dart index 76cd102..a14d012 100644 --- a/one_trip/lib/pages/profile_page/widgets/invite_homegroup_dialog.dart +++ b/one_trip/lib/pages/profile_page/widgets/invite_homegroup_dialog.dart @@ -139,12 +139,15 @@ class _InviteHomegroupDialogState extends State { mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ ElevatedButton( + style: negativeButtonStyle(context), onPressed: () => Navigator.pop(context), child: const Text("Cancel"), ), ElevatedButton( - onPressed: () => Navigator.pop(context, selectedIDs), - child: const Text("Done")), + style: positiveButtonStyle(context), + onPressed: () => Navigator.pop(context, selectedIDs), + child: const Text("Done"), + ), ], ), ) diff --git a/one_trip/lib/pages/recipes_page/widgets/recipe_card_widget.dart b/one_trip/lib/pages/recipes_page/widgets/recipe_card_widget.dart index 45aeb25..5e36a10 100644 --- a/one_trip/lib/pages/recipes_page/widgets/recipe_card_widget.dart +++ b/one_trip/lib/pages/recipes_page/widgets/recipe_card_widget.dart @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; import 'package:one_trip/api/models/recipeingredient.dart'; import 'package:one_trip/api/models/recipe.dart'; import 'package:one_trip/theme.dart'; -import 'package:one_trip/widgets/text_entry_dialog.dart'; +import 'package:one_trip/widgets/ingredient_dialog.dart'; class RecipeCard extends StatefulWidget { final Recipe recipe; @@ -145,15 +145,18 @@ class _RecipeCardState extends State with TickerProviderStateMixin { shape: const MaterialStatePropertyAll( RoundedRectangleBorder())), onPressed: () async { - String? name = await textEntryDialog( - context, "Ingredient Name", "Ingredient"); + IngredientDetails? details = + await ingredientDialog(context, "", ""); - if (name == null || name == "") { + if (details == null || details.name == "") { return; } RecipeIngredient? ingredient = - await RecipeIngredient.create(name, widget.recipe.id); + await RecipeIngredient.create( + widget.recipe.id, + details.name, + details.quantity != "" ? details.quantity : null); if (ingredient != null) { widget.onChanged(); } @@ -233,21 +236,29 @@ class _IngredientSectionState extends State { children: [ Expanded( child: Text( - widget.ingredients[index].name, + widget.ingredients[index].quantity == null + ? widget.ingredients[index].name + : "${widget.ingredients[index].name} - ${widget.ingredients[index].quantity}", style: Theme.of(context).textTheme.titleMedium, )), IconButton( onPressed: () async { - String? name = await textEntryDialog( - context, "Change Ingredient Name", "Ingredient", - defaultValue: widget.ingredients[index].name); + IngredientDetails? details = await ingredientDialog( + context, + widget.ingredients[index].name, + widget.ingredients[index].quantity ?? ""); - if (name == null || name == "") { + if (details == null || details.name == "") { return; } RecipeIngredient? changed = - await widget.ingredients[index].patch(name); + await widget.ingredients[index].patch( + name: details.name, + quantity: details.quantity != "" + ? details.quantity + : null); + if (changed != null) { widget.onChanged(); } diff --git a/one_trip/lib/screens/home_screen.dart b/one_trip/lib/screens/home_screen.dart index aa51075..10c0a37 100644 --- a/one_trip/lib/screens/home_screen.dart +++ b/one_trip/lib/screens/home_screen.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:one_trip/pages/list_page/list_page.dart'; import 'package:one_trip/pages/profile_page/profile_page.dart'; import 'package:one_trip/pages/recipes_page/recipes_page.dart'; -import 'package:one_trip/pages/themetest.dart'; class HomeScreen extends StatefulWidget { const HomeScreen({super.key}); diff --git a/one_trip/lib/theme.dart b/one_trip/lib/theme.dart index 1882547..7dafeca 100644 --- a/one_trip/lib/theme.dart +++ b/one_trip/lib/theme.dart @@ -38,3 +38,28 @@ class MyBehavior extends ScrollBehavior { return child; } } + +ButtonStyle positiveButtonStyle(BuildContext context) { + Brightness brightness = Theme.of(context).colorScheme.brightness; + + if (brightness == Brightness.dark) { + return ButtonStyle( + backgroundColor: MaterialStatePropertyAll(Colors.green[200]), + foregroundColor: MaterialStatePropertyAll(Colors.green[900]), + ); + } else { + return ButtonStyle( + backgroundColor: MaterialStatePropertyAll(Colors.green[900]), + foregroundColor: const MaterialStatePropertyAll(Colors.white), + ); + } +} + +ButtonStyle negativeButtonStyle(BuildContext context) { + return ButtonStyle( + backgroundColor: + MaterialStatePropertyAll(Theme.of(context).colorScheme.error), + foregroundColor: + MaterialStatePropertyAll(Theme.of(context).colorScheme.onError), + ); +} diff --git a/one_trip/lib/widgets/confirm_dialog.dart b/one_trip/lib/widgets/confirm_dialog.dart new file mode 100644 index 0000000..29fad06 --- /dev/null +++ b/one_trip/lib/widgets/confirm_dialog.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; +import 'package:one_trip/theme.dart'; + +class ConfirmForm extends StatefulWidget { + final String title; + const ConfirmForm({super.key, required this.title}); + + @override + State createState() => _ConfirmFormState(); +} + +class _ConfirmFormState extends State { + @override + Widget build(BuildContext context) { + return Card( + margin: EdgeInsets.zero, + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.title, + style: Theme.of(context).textTheme.titleMedium, + ), + const Divider(), + const Text("This action is permanent. Do you want to continue?"), + Padding( + padding: const EdgeInsets.only(top: 8), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + ElevatedButton( + style: positiveButtonStyle(context), + onPressed: () => Navigator.pop(context, false), + child: const Text("Go Back"), + ), + ElevatedButton( + style: negativeButtonStyle(context), + onPressed: () => Navigator.pop(context, true), + child: const Text("Continue"), + ), + ], + ), + ), + ], + ), + ), + ); + } +} + +Future confirmDialog(BuildContext context, String title) async { + bool? value = await showDialog( + context: context, + builder: (context) { + return Dialog( + child: ConfirmForm( + title: title, + ), + ); + }, + ); + + return value ?? false; +} diff --git a/one_trip/lib/widgets/ingredient_dialog.dart b/one_trip/lib/widgets/ingredient_dialog.dart new file mode 100644 index 0000000..9eaa342 --- /dev/null +++ b/one_trip/lib/widgets/ingredient_dialog.dart @@ -0,0 +1,122 @@ +import 'package:flutter/material.dart'; +import 'package:one_trip/theme.dart'; + +class IngredientDetails { + String name; + String quantity; + + IngredientDetails({required this.name, required this.quantity}); +} + +class IngredientForm extends StatefulWidget { + final String nameStartingValue; + final String quantityStartingValue; + const IngredientForm( + {super.key, + required this.nameStartingValue, + required this.quantityStartingValue}); + + @override + State createState() => _IngredientFormState(); +} + +class _IngredientFormState extends State { + late TextEditingController _nameController; + late TextEditingController _quantityController; + + @override + void dispose() { + _nameController.dispose(); + _quantityController.dispose(); + super.dispose(); + } + + @override + void initState() { + super.initState(); + _nameController = TextEditingController(text: widget.nameStartingValue); + _quantityController = + TextEditingController(text: widget.quantityStartingValue); + } + + @override + Widget build(BuildContext context) { + return Card( + margin: EdgeInsets.zero, + child: Padding( + padding: const EdgeInsets.all(8), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "Add / Edit Ingredient", + style: Theme.of(context).textTheme.titleMedium, + ), + const Divider(), + TextFormField( + autofocus: true, + controller: _nameController, + textInputAction: TextInputAction.next, + // onFieldSubmitted: (value) { + // Navigator.pop(context, value); + // }, + decoration: const InputDecoration(hintText: "Name"), + ), + TextFormField( + controller: _quantityController, + textInputAction: TextInputAction.done, + onFieldSubmitted: (value) => Navigator.pop( + context, + IngredientDetails( + name: _nameController.text, + quantity: _quantityController.text), + ), + decoration: const InputDecoration(hintText: "Quantity"), + ), + Padding( + padding: const EdgeInsets.only(top: 8), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + ElevatedButton( + style: negativeButtonStyle(context), + onPressed: () => Navigator.pop(context), + child: const Text("Cancel"), + ), + ElevatedButton( + style: positiveButtonStyle(context), + onPressed: () => Navigator.pop( + context, + IngredientDetails( + name: _nameController.text, + quantity: _quantityController.text), + ), + child: const Text("Done"), + ), + ], + ), + ), + ], + ), + ), + ); + } +} + +Future ingredientDialog( + BuildContext context, String currentName, String currentQuantity) async { + IngredientDetails? details = await showDialog( + context: context, + builder: (context) { + return Dialog( + child: IngredientForm( + nameStartingValue: currentName, + quantityStartingValue: currentQuantity, + ), + ); + }, + ); + + return details; +} diff --git a/one_trip/lib/widgets/text_entry_dialog.dart b/one_trip/lib/widgets/text_entry_dialog.dart index ee8a5a6..0472ef9 100644 --- a/one_trip/lib/widgets/text_entry_dialog.dart +++ b/one_trip/lib/widgets/text_entry_dialog.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:one_trip/theme.dart'; class TextEntryForm extends StatefulWidget { final String title; @@ -55,13 +56,16 @@ class _TextEntryFormState extends State { mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ ElevatedButton( + style: negativeButtonStyle(context), onPressed: () => Navigator.pop(context), child: const Text("Cancel"), ), ElevatedButton( - onPressed: () => - Navigator.pop(context, _textController.text), - child: const Text("Done")), + style: positiveButtonStyle(context), + onPressed: () => + Navigator.pop(context, _textController.text), + child: const Text("Done"), + ), ], ), ), diff --git a/one_trip_api/api/migrations/0006_remove_list_updates_listingredient_quantity_and_more.py b/one_trip_api/api/migrations/0006_remove_list_updates_listingredient_quantity_and_more.py new file mode 100644 index 0000000..5cd99a3 --- /dev/null +++ b/one_trip_api/api/migrations/0006_remove_list_updates_listingredient_quantity_and_more.py @@ -0,0 +1,27 @@ +# Generated by Django 4.1.3 on 2022-12-06 22:34 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('api', '0005_list_updates'), + ] + + operations = [ + migrations.RemoveField( + model_name='list', + name='updates', + ), + migrations.AddField( + model_name='listingredient', + name='quantity', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AddField( + model_name='recipeingredient', + name='quantity', + field=models.CharField(blank=True, max_length=50, null=True), + ), + ] diff --git a/one_trip_api/api/models.py b/one_trip_api/api/models.py index 412d466..169c4f0 100644 --- a/one_trip_api/api/models.py +++ b/one_trip_api/api/models.py @@ -26,7 +26,6 @@ class Homegroup(models.Model): class List(models.Model): # Foreign Key ListIngredient -> List [as ingredients] homegroup = models.OneToOneField(Homegroup, on_delete=models.CASCADE, primary_key=True) - updates = models.BigIntegerField(default=0); class Recipe(models.Model): @@ -37,9 +36,11 @@ class Recipe(models.Model): class RecipeIngredient(models.Model): name = models.CharField(max_length=50) + quantity = models.CharField(max_length=50, null=True, blank=True) recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE, related_name="ingredients") class ListIngredient(models.Model): name = models.CharField(max_length=50) + quantity = models.CharField(max_length=50, null=True, blank=True) list = models.ForeignKey(List, on_delete=models.CASCADE, related_name="ingredients") in_cart = models.BooleanField(default=False) \ No newline at end of file diff --git a/one_trip_api/api/serializers.py b/one_trip_api/api/serializers.py index 811dfd3..c4a6225 100644 --- a/one_trip_api/api/serializers.py +++ b/one_trip_api/api/serializers.py @@ -9,12 +9,12 @@ channel_layer = get_channel_layer() class RecipeIngredientSerializer(serializers.ModelSerializer): class Meta: model = RecipeIngredient - fields = ["id", "name", "recipe"] + fields = ["id", "name", "quantity", "recipe"] class ListIngredientSerializer(serializers.ModelSerializer): class Meta: model = ListIngredient - fields = ["id", "name", "list", "in_cart"] + fields = ["id", "name", "quantity", "list", "in_cart"] class RecipeSerializer(serializers.ModelSerializer): ingredients = serializers.SerializerMethodField() @@ -33,13 +33,9 @@ class ListSerializer(serializers.ModelSerializer): class Meta: model = List - fields = ["homegroup", "updates", "ingredients"] + fields = ["homegroup", "ingredients"] read_only_fields = ["homegroup"] - def update(self, instance, validated_data): - # async_to_sync(channel_layer.group_send)(f"group_{instance.homegroup.id}", {"type": "model_update"}) - return super().update(instance, validated_data) - def get_ingredients(self, instance): ingredients = instance.ingredients.all().order_by("name") return ListIngredientSerializer(ingredients, many=True).data diff --git a/one_trip_api/api/views.py b/one_trip_api/api/views.py index 368b30e..c142b77 100644 --- a/one_trip_api/api/views.py +++ b/one_trip_api/api/views.py @@ -12,7 +12,7 @@ class HasHomegroup(permissions.BasePermission): return super().has_permission(request, view) class Pagination(pagination.PageNumberPagination): - page_size = 4 + page_size = 10 class NoListModelViewset(mixins.CreateModelMixin, mixins.DestroyModelMixin, mixins.UpdateModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): pass diff --git a/planning/backend-structure.dia b/planning/backend-structure.dia index 912d771a25394c8275c6838746ed209718edae97..ecab62f805bd9692aa79ff993a5890697e73fa94 100644 GIT binary patch delta 2546 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 diff --git a/planning/backend-structure.png b/planning/backend-structure.png index d4d9e6bbfa764a7193a8c6813023eede9534c334..e81c0e463a02d99db23bf6af6ad7335a0f8e8c92 100644 GIT binary patch literal 62025 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 z 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 Zy8AwFlK=OE@xmjpo?vH@Ztk+>{{XXMWTgNA diff --git a/readme.md b/readme.md index 7d18122..d2e1b95 100644 --- a/readme.md +++ b/readme.md @@ -20,30 +20,36 @@ ## Pictures ### Main Menu -![Login Screen](https://user-images.githubusercontent.com/44736322/204997033-fa10ceae-ae54-4816-b043-a1663532b5b3.png) +![Login Screen](https://user-images.githubusercontent.com/44736322/206134503-490b7b5c-9ef1-4a32-af2f-a664b587c4d6.png) ### Profile Page -![Profile Page](https://user-images.githubusercontent.com/44736322/204997046-d3b09233-266f-4082-8f05-4b97d5369a18.png) +![Profile Page](https://user-images.githubusercontent.com/44736322/206134506-7c035ea7-8431-4116-b61f-f1bbe0b23713.png) ### Search for Users -![Searching for users](https://user-images.githubusercontent.com/44736322/204997074-464c3b0c-96c2-4ac0-8e28-ebc1319c0065.png) +![Searching for users](https://user-images.githubusercontent.com/44736322/206134507-c2e5c805-3c0e-4ead-9c48-b047e5fb75dc.png) + +Searched Users are sorted by first name, then last name, then username ### Create, Edit, and Delete Recipes -![Create Edit Delete Recipes](https://user-images.githubusercontent.com/44736322/204997088-cb4a34e4-9c09-408f-b15d-4b30a8409f5c.png) +![Create Edit Delete Recipes](https://user-images.githubusercontent.com/44736322/206134508-94332b3e-ea62-47e5-8426-c876e9f7ce24.png) Recipes and individual ingredients can be deleted by swiping them off of the screen ### Search for Recipes to add to Shopping List -![Search Recipes](https://user-images.githubusercontent.com/44736322/204997188-7e03d067-a26e-4629-be3f-ef9039eee54b.png) +![Search Recipes](https://user-images.githubusercontent.com/44736322/206134511-c0fd19b3-9816-4d87-bfde-54fb110c2fe5.png) ### Delete Items from List -![swipe](https://user-images.githubusercontent.com/44736322/205004229-c59ef486-edb6-4595-aa0c-846f008ab1a1.gif) +https://user-images.githubusercontent.com/44736322/206134495-b6b97f81-b77b-4068-8359-39e64d5312ca.mp4 + +### Add Additional Items +![Add Individual](https://user-images.githubusercontent.com/44736322/206134513-c6d7bedd-659f-45de-83ef-7aa4b1a9378f.png) ### Shopping List Page -![Shopping List Page](https://user-images.githubusercontent.com/44736322/204997203-5341a35e-9269-43eb-a212-6404c8119482.png) +![Shopping List Page](https://user-images.githubusercontent.com/44736322/206134515-1636e086-80a7-45df-801b-af90c2059d10.png) ### Backend Data Models -![backend-structure](https://user-images.githubusercontent.com/44736322/205004669-9f9387e0-1f76-42ac-8d49-d94cd17518aa.png) +![backend-structure](https://user-images.githubusercontent.com/44736322/206135954-63c728ce-3662-4e10-9914-557ce65f04ee.png) +