mirror of
https://github.com/wger-project/flutter.git
synced 2026-02-18 00:17:48 +01:00
WIP fixes
This commit is contained in:
@@ -25,7 +25,7 @@ import 'package:wger/models/nutrition/meal_item.dart';
|
||||
import 'package:wger/models/nutrition/nutritional_values.dart';
|
||||
import 'package:wger/models/schema.dart';
|
||||
import 'package:wger/powersync.dart';
|
||||
import 'package:powersync/sqlite3.dart' as sqlite;
|
||||
import 'package:wger/providers/nutrition.dart';
|
||||
|
||||
part 'log.g.dart';
|
||||
|
||||
@@ -82,11 +82,11 @@ class Log {
|
||||
factory Log.fromRow(sqlite.Row row) {
|
||||
return Log(
|
||||
id: int.parse(row['id']),
|
||||
mealId: int.parse(row['meal_id']),
|
||||
ingredientId: int.parse(row['ingredient_id']),
|
||||
weightUnitId: int.parse(row['weight_unit_id']),
|
||||
mealId: row['meal_id'],
|
||||
ingredientId: row['ingredient_id'],
|
||||
weightUnitId: row['weight_unit_id'],
|
||||
amount: row['amount'],
|
||||
planId: int.parse(row['plan_id']),
|
||||
planId: row['plan_id'],
|
||||
datetime: DateTime.parse(row['datetime']),
|
||||
comment: row['comment'],
|
||||
);
|
||||
@@ -109,7 +109,22 @@ class Log {
|
||||
|
||||
static Future<List<Log>> readByPlanId(int planId) async {
|
||||
final results = await db.getAll('SELECT * FROM $tableLogItems WHERE plan_id = ?', [planId]);
|
||||
return results.map((r) => Log.fromRow(r)).toList();
|
||||
return results.map((r) {
|
||||
final log = Log.fromRow(r);
|
||||
// TODO:
|
||||
// need to find a way to set ingredients. since we don't use powersync for it, we need to fetch
|
||||
// but this needs a context, therofere this needs a context, and all callers do, so we should probably
|
||||
// move all that stuff into the nutritionprovider, so we keep context out of the models
|
||||
// however, still unsolved:
|
||||
// mealItem stuff then?
|
||||
// nutrition image
|
||||
// nutrition_ingredientcategory
|
||||
// nutrition_ingredientweightunit
|
||||
// nutrition_weightunit;
|
||||
// nutrition_mealitem
|
||||
log.ingredient = Provider.of<NutritionPlansProvider>(context, listen: false).fetchIngredient(id),
|
||||
return log;
|
||||
}).toList();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -121,22 +136,5 @@ class Log {
|
||||
await db.execute('UPDATE $logItemsTable SET photo_id = ? WHERE id = ?', [photoId, id]);
|
||||
}
|
||||
}
|
||||
|
||||
static Stream<List<TodoList>> watchLists() {
|
||||
// This query is automatically re-run when data in "lists" or "todos" is modified.
|
||||
return db.watch('SELECT * FROM lists ORDER BY created_at, id').map((results) {
|
||||
return results.map(TodoList.fromRow).toList(growable: false);
|
||||
});
|
||||
}
|
||||
|
||||
static Future<TodoList> create(String name) async {
|
||||
final results = await db.execute('''
|
||||
INSERT INTO
|
||||
lists(id, created_at, name, owner_id)
|
||||
VALUES(uuid(), datetime(), ?, ?)
|
||||
RETURNING *
|
||||
''', [name, await getUserId()]);
|
||||
return TodoList.fromRow(results.first);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
import 'package:powersync/sqlite3.dart' as sqlite;
|
||||
import 'package:wger/helpers/consts.dart';
|
||||
import 'package:wger/helpers/json.dart';
|
||||
import 'package:wger/helpers/misc.dart';
|
||||
import 'package:wger/models/nutrition/log.dart';
|
||||
import 'package:wger/models/nutrition/meal_item.dart';
|
||||
import 'package:wger/models/nutrition/nutritional_values.dart';
|
||||
import 'package:powersync/sqlite3.dart' as sqlite;
|
||||
import 'package:wger/models/schema.dart';
|
||||
import 'package:wger/powersync.dart';
|
||||
|
||||
@@ -93,7 +93,7 @@ class Meal {
|
||||
factory Meal.fromRow(sqlite.Row row) {
|
||||
return Meal(
|
||||
id: int.parse(row['id']),
|
||||
plan: int.parse(row['plan']),
|
||||
plan: row['plan'],
|
||||
time: stringToTime(row['time']),
|
||||
name: row['name'],
|
||||
);
|
||||
@@ -125,7 +125,9 @@ class Meal {
|
||||
}
|
||||
|
||||
static Future<List<Meal>> readByPlanId(int planId) async {
|
||||
print('Meal.readByPlanId: SELECT * FROM $tableMeals WHERE plan_id = $planId');
|
||||
final results = await db.getAll('SELECT * FROM $tableMeals WHERE plan_id = ?', [planId]);
|
||||
print(results.rows.length);
|
||||
return results.map((r) => Meal.fromRow(r)).toList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,20 @@
|
||||
import 'package:powersync/powersync.dart';
|
||||
|
||||
/* nutrition tables in postgres:
|
||||
| public | nutrition_image | table>
|
||||
| public | nutrition_ingredient | table> * # millions of ingredients
|
||||
| public | nutrition_ingredientcategory | table>
|
||||
| public | nutrition_ingredientweightunit | table>
|
||||
| public | nutrition_logitem | table> * OK
|
||||
| public | nutrition_meal | table> * OK
|
||||
| public | nutrition_mealitem | table> *
|
||||
| public | nutrition_nutritionplan | table> * OK
|
||||
| public | nutrition_weightunit | table>
|
||||
|
||||
assumptions: nutrition_ingredientcategory, nutrition_weightunit, nutrition_ingredientweightunit globals?
|
||||
*/
|
||||
|
||||
// User,NutritionPlan,Meal,LogItem,MealItem,Ingredient
|
||||
const tableMuscles = 'exercises_muscle';
|
||||
const tableLogItems = 'nutrition_logitem';
|
||||
const tableNutritionPlans = 'nutrition_nutritionplan';
|
||||
|
||||
@@ -34,6 +34,7 @@ import 'package:wger/models/nutrition/nutritional_plan.dart';
|
||||
import 'package:wger/providers/base_provider.dart';
|
||||
|
||||
class NutritionPlansProvider with ChangeNotifier {
|
||||
// TODO: should be able to delete many of these paths and their corresponding code
|
||||
static const _nutritionalPlansPath = 'nutritionplan';
|
||||
static const _nutritionalPlansInfoPath = 'nutritionplaninfo';
|
||||
static const _mealPath = 'meal';
|
||||
@@ -88,44 +89,11 @@ class NutritionPlansProvider with ChangeNotifier {
|
||||
return null;
|
||||
}
|
||||
|
||||
/// Fetches a plan fully, i.e. with all corresponding child objects
|
||||
///
|
||||
/*
|
||||
Future<NutritionalPlan> fetchAndSetPlanFull(int planId) async {
|
||||
// Meals
|
||||
final List<Meal> meals = [];
|
||||
for (final mealData in fullPlanData['meals']) {
|
||||
final List<MealItem> mealItems = [];
|
||||
final meal = Meal.fromJson(mealData);
|
||||
|
||||
// TODO: we should add these ingredients to the ingredient cache
|
||||
for (final mealItemData in mealData['meal_items']) {
|
||||
final mealItem = MealItem.fromJson(mealItemData);
|
||||
|
||||
final ingredient = Ingredient.fromJson(mealItemData['ingredient_obj']);
|
||||
if (mealItemData['image'] != null) {
|
||||
final image = IngredientImage.fromJson(mealItemData['image']);
|
||||
TODO implement:
|
||||
ingredient.image = image;
|
||||
}
|
||||
mealItem.ingredient = ingredient;
|
||||
mealItems.add(mealItem);
|
||||
}
|
||||
meal.mealItems = mealItems;
|
||||
meals.add(meal);
|
||||
}
|
||||
plan.meals = meals;
|
||||
|
||||
// Logs
|
||||
await fetchAndSetLogs(plan);
|
||||
for (final meal in meals) {
|
||||
meal.diaryEntries = plan.diaryEntries.where((e) => e.mealId == meal.id).toList();
|
||||
}
|
||||
|
||||
// ... and done
|
||||
notifyListeners();
|
||||
return plan;
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
Future<NutritionalPlan> addPlan(NutritionalPlan planData) async {
|
||||
|
||||
Reference in New Issue
Block a user