diameter/lib/models/log_meal.dart

249 lines
8.1 KiB
Dart
Raw Normal View History

2021-10-22 23:08:09 +00:00
import 'package:diameter/components/data_table.dart';
import 'package:diameter/models/log_entry.dart';
import 'package:flutter/material.dart';
import 'package:parse_server_sdk_flutter/parse_server_sdk.dart';
class LogMeal extends DataTableContent {
late String? objectId;
late String logEntry;
late String? meal;
late String value;
late String? source;
late String? category;
late String? portionType;
late double? carbsRatio;
late double? portionSize;
late double? carbsPerPortion;
late String? portionSizeAccuracy;
late String? carbsRatioAccuracy;
late double? bolus;
late int? delayedBolusDuration;
late double? delayedBolusRate;
late String? notes;
LogMeal(ParseObject object) {
objectId = object.get<String>('objectId');
logEntry = object.get<ParseObject>('logEntry')!.get<String>('objectId')!;
meal = object.get<ParseObject>('meal') != null
? object.get<ParseObject>('meal')!.get<String>('objectId')
: null;
value = object.get<String>('value')!;
source = object.get<ParseObject>('source') != null
? object.get<ParseObject>('source')!.get<String>('objectId')
: null;
category = object.get<ParseObject>('category') != null
? object.get<ParseObject>('category')!.get<String>('objectId')
: null;
portionType = object.get<ParseObject>('portionType') != null
? object.get<ParseObject>('portionType')!.get<String>('objectId')
: null;
carbsRatio = object.get<num>('carbsRatio')!.toDouble();
portionSize = object.get<num>('portionSize')!.toDouble();
carbsPerPortion = object.get<num>('carbsPerPortion')!.toDouble();
portionSizeAccuracy = object.get<ParseObject>('portionSizeAccuracy') != null
? object
.get<ParseObject>('portionSizeAccuracy')!
.get<String>('objectId')
: null;
carbsRatioAccuracy = object.get<ParseObject>('carbsRatioAccuracy') != null
? object.get<ParseObject>('carbsRatioAccuracy')!.get<String>('objectId')
: null;
bolus = object.get<num>('bolus') != null
? object.get<num>('bolus')!.toDouble()
: null;
delayedBolusDuration = object.get<num>('delayedBolusDuration') != null
? object.get<num>('delayedBolusDuration')!.toInt()
: null;
delayedBolusRate = object.get<num>('delayedBolusRate') != null
? object.get<num>('delayedBolusRate')!.toDouble()
: null;
notes = object.get<String>('notes');
}
static Future<LogMeal?> get(String objectId) async {
QueryBuilder<ParseObject> query =
QueryBuilder<ParseObject>(ParseObject('LogMeal'))
..whereEqualTo('objectId', objectId);
final ParseResponse apiResponse = await query.query();
if (apiResponse.success && apiResponse.results != null) {
return LogMeal(apiResponse.result.first);
}
}
static Future<List<LogMeal>> fetchAllForLogEntry(LogEntry logEntry) async {
QueryBuilder<ParseObject> query = QueryBuilder<ParseObject>(
ParseObject('LogMeal'))
..whereEqualTo('logEntry',
(ParseObject('LogEntry')..objectId = logEntry.objectId!).toPointer());
final ParseResponse apiResponse = await query.query();
if (apiResponse.success && apiResponse.results != null) {
return apiResponse.results!
.map((e) => LogMeal(e as ParseObject))
.toList();
} else {
return [];
}
}
static Future<void> save({
required String value,
required String logEntry,
String? meal,
String? source,
String? category,
String? portionType,
double? carbsRatio,
double? portionSize,
double? carbsPerPortion,
String? portionSizeAccuracy,
String? carbsRatioAccuracy,
double? bolus,
int? delayedBolusDuration,
double? delayedBolusRate,
String? notes,
}) async {
final logMeal = ParseObject('Meal')
..set('value', value)
..set('logEntry',
(ParseObject('LogEntry')..objectId = logEntry).toPointer())
..set('carbsRatio', carbsRatio)
..set('portionSize', portionSize)
..set('carbsPerPortion', carbsPerPortion)
..set('bolus', bolus)
..set('delayedBolusDuration', delayedBolusDuration)
..set('delayedBolusRate', delayedBolusRate)
..set('notes', notes);
if (meal != null) {
logMeal.set('meal', (ParseObject('Meal')..objectId = meal).toPointer());
}
if (source != null) {
logMeal.set(
'source', (ParseObject('MealSource')..objectId = source).toPointer());
}
if (category != null) {
logMeal.set('category',
(ParseObject('MealCategory')..objectId = category).toPointer());
}
if (portionType != null) {
logMeal.set('portionType',
(ParseObject('MealPortionType')..objectId = portionType).toPointer());
}
if (portionSizeAccuracy != null) {
logMeal.set(
'portionSizeAccuracy',
(ParseObject('Accuracy')..objectId = portionSizeAccuracy)
.toPointer());
}
if (carbsRatioAccuracy != null) {
logMeal.set('carbsRatioAccuracy',
(ParseObject('Accuracy')..objectId = carbsRatioAccuracy).toPointer());
}
await logMeal.save();
}
static Future<void> update(
String objectId, {
String? value,
String? meal,
String? source,
String? category,
String? portionType,
double? carbsRatio,
double? portionSize,
double? carbsPerPortion,
String? portionSizeAccuracy,
String? carbsRatioAccuracy,
double? bolus,
int? delayedBolusDuration,
double? delayedBolusRate,
String? notes,
}) async {
var logMeal = ParseObject('Meal')..objectId = objectId;
if (value != null) {
logMeal.set('value', value);
}
if (meal != null) {
logMeal.set('meal', (ParseObject('Meal')..objectId = meal).toPointer());
}
if (source != null) {
logMeal.set(
'source', (ParseObject('MealSource')..objectId = source).toPointer());
}
if (category != null) {
logMeal.set('category',
(ParseObject('MealCategory')..objectId = category).toPointer());
}
if (portionType != null) {
logMeal.set('portionType',
(ParseObject('MealPortionType')..objectId = portionType).toPointer());
}
if (carbsRatio != null) {
logMeal.set('carbsRatio', carbsRatio);
}
if (portionSize != null) {
logMeal.set('portionSize', portionSize);
}
if (carbsPerPortion != null) {
logMeal.set('carbsPerPortion', carbsPerPortion);
}
if (portionSizeAccuracy != null) {
logMeal.set(
'portionSizeAccuracy',
(ParseObject('Accuracy')..objectId = portionSizeAccuracy)
.toPointer());
}
if (carbsRatioAccuracy != null) {
logMeal.set('carbsRatioAccuracy',
(ParseObject('Accuracy')..objectId = carbsRatioAccuracy).toPointer());
}
if (bolus != null) {
logMeal.set('bolus', bolus);
}
if (delayedBolusDuration != null) {
logMeal.set('delayedBolusDuration', delayedBolusDuration);
}
if (delayedBolusRate != null) {
logMeal.set('delayedBolusRate', delayedBolusRate);
}
if (notes != null) {
logMeal.set('notes', notes);
}
await logMeal.save();
}
Future<void> delete() async {
var logMeal = ParseObject('LogMeal')..objectId = objectId;
await logMeal.delete();
}
@override
List<DataCell> asDataTableCells(List<Widget>? actions) {
return [
DataCell(Text(value)),
DataCell(Text('${(carbsPerPortion ?? '').toString()} g')),
DataCell(Text('${(bolus ?? '').toString()} U')),
DataCell(Text(delayedBolusRate != null
? '${delayedBolusRate.toString()} U/${(delayedBolusDuration ?? '').toString()} min'
: '')),
DataCell(
Row(
children: actions ?? [],
),
),
];
}
static List<DataColumn> asDataTableColumns() {
return [
const DataColumn(label: Expanded(child: Text('Meal'))),
const DataColumn(label: Expanded(child: Text('Carbs'))),
const DataColumn(label: Expanded(child: Text('Bolus'))),
const DataColumn(label: Expanded(child: Text('Delayed Bolus'))),
const DataColumn(label: Expanded(child: Text('Actions'))),
];
}
}