Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion lib/app/pet/controller/all_pets_controller.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import 'package:petjournal/app/pet/models/pet_model.dart';
import 'package:petjournal/app/settings/controllers/settings_controller.dart';
import 'package:petjournal/constants/linked_record_type.dart';
import 'package:petjournal/data/mapper/pet_mapper.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:petjournal/data/database/database_service.dart';
Expand All @@ -10,6 +12,7 @@ class AllPetsController extends _$AllPetsController {
late final DatabaseService _databaseService =
// ignore: avoid_manual_providers_as_generated_provider_dependency
ref.read(DatabaseService.provider);
late final _settingsFuture = ref.watch(settingsControllerProvider.future);

@override
Stream<List<PetModel>> build() {
Expand Down Expand Up @@ -42,7 +45,11 @@ class AllPetsController extends _$AllPetsController {
pet.imageUrl,
);

return newPet == null ? null : PetMapper.mapToModel(newPet);
// create linked journal entry if required
if (newPet == null) return null;
final newPetModel = PetMapper.mapToModel(newPet);
await _createLinkedJournalEntry(newPetModel);
return newPetModel;
} else {
await _databaseService.updatePet(
pet.petId!,
Expand Down Expand Up @@ -74,4 +81,30 @@ class AllPetsController extends _$AllPetsController {
Future<int> deletePet(int id) {
return _databaseService.deletePet(id);
}

/// If required, create / update the linked journal entry
Future<void> _createLinkedJournalEntry(
PetModel pet, {
bool createNew = true,
}) async {
final settings = await _settingsFuture;
if (settings.createLinkedJournalEntries) {
if (createNew) {
await _databaseService.createJournalEntryForPet(
entryText: pet.notes ?? '',
petIdList: [pet.petId!],
tags: [],
linkedRecordId: pet.petId,
linkedRecordType: LinkedRecordType.pet,
linkedRecordTitle: 'Pet ${pet.name} created',
);
} else {
await _databaseService.updateLinkedJournalEntry(
linkedRecordId: pet.petId!,
linkedRecordType: LinkedRecordType.pet,
linkedRecordTitle: 'Pet ${pet.name} created (updated)',
);
}
}
}
}
2 changes: 1 addition & 1 deletion lib/app/pet/controller/all_pets_controller.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 37 additions & 1 deletion lib/app/pet/controller/pet_meds_controller.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import 'package:petjournal/app/pet/models/pet_med_model.dart';
import 'package:petjournal/app/settings/controllers/settings_controller.dart';
import 'package:petjournal/constants/linked_record_type.dart';
import 'package:petjournal/data/mapper/pet_med_mapper.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:petjournal/data/database/database_service.dart';
Expand All @@ -10,6 +12,7 @@ class PetMedsController extends _$PetMedsController {
late final DatabaseService _databaseService =
// ignore: avoid_manual_providers_as_generated_provider_dependency
ref.read(DatabaseService.provider);
late final _settingsFuture = ref.watch(settingsControllerProvider.future);

@override
Stream<List<PetMedModel>?> build(int petId) {
Expand All @@ -29,7 +32,11 @@ class PetMedsController extends _$PetMedsController {
petMed.notes,
);

return newPetMed == null ? null : PetMedMapper.mapToModel(newPetMed);
// create linked journal entry if required
if (newPetMed == null) return null;
final newPetMedModel = PetMedMapper.mapToModel(newPetMed);
await _createLinkedJournalEntry(newPetMedModel);
return newPetMedModel;
} else {
await _databaseService.updatePetMed(
petMed.petMedId!,
Expand All @@ -39,11 +46,40 @@ class PetMedsController extends _$PetMedsController {
petMed.endDate,
petMed.notes,
);

await _createLinkedJournalEntry(petMed, createNew: false);

return petMed;
}
}

Future<int> deletePetMed(int id) {
return _databaseService.deletePetMed(id);
}

/// If required, create / update the linked journal entry
Future<void> _createLinkedJournalEntry(
PetMedModel petMed, {
bool createNew = true,
}) async {
final settings = await _settingsFuture;
if (settings.createLinkedJournalEntries) {
if (createNew) {
await _databaseService.createJournalEntryForPet(
entryText: petMed.notes ?? '',
petIdList: [petMed.petId],
tags: [],
linkedRecordId: petMed.petMedId,
linkedRecordType: LinkedRecordType.medication,
linkedRecordTitle: 'Medication ${petMed.name} prescribed',
);
} else {
await _databaseService.updateLinkedJournalEntry(
linkedRecordId: petMed.petMedId!,
linkedRecordType: LinkedRecordType.medication,
linkedRecordTitle: 'Medication ${petMed.name} prescribed (updated)',
);
}
}
}
}
2 changes: 1 addition & 1 deletion lib/app/pet/controller/pet_meds_controller.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

67 changes: 51 additions & 16 deletions lib/app/pet/controller/pet_vaccinations_controller.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import 'package:petjournal/app/pet/models/pet_vaccination_model.dart';
import 'package:petjournal/app/settings/controllers/settings_controller.dart';
import 'package:petjournal/constants/linked_record_type.dart';
import 'package:petjournal/data/mapper/pet_vaccination_mapper.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:petjournal/data/database/database_service.dart';
Expand All @@ -10,6 +12,7 @@ class PetVaccinationsController extends _$PetVaccinationsController {
late final DatabaseService _databaseService =
// ignore: avoid_manual_providers_as_generated_provider_dependency
ref.read(DatabaseService.provider);
late final _settingsFuture = ref.watch(settingsControllerProvider.future);

@override
Stream<List<PetVaccinationModel>> build(int petId) {
Expand All @@ -20,38 +23,70 @@ class PetVaccinationsController extends _$PetVaccinationsController {

Future<PetVaccinationModel?> save(PetVaccinationModel petVaccination) async {
if (petVaccination.petVaccinationId == null) {
final newPetMed = await _databaseService.createPetVaccination(
petVaccination.petId,
petVaccination.name,
petVaccination.administeredDate,
petVaccination.expiryDate,
petVaccination.reminderDate,
petVaccination.notes,
final newPetVaccination = await _databaseService.createPetVaccination(
petVaccination.petId,
petVaccination.name,
petVaccination.administeredDate,
petVaccination.expiryDate,
petVaccination.reminderDate,
petVaccination.notes,
petVaccination.vaccineBatchNumber,
petVaccination.vaccineManufacturer,
petVaccination.administeredBy,
);

return newPetMed == null
? null
: PetVaccinationMapper.mapToModel(newPetMed);
// create linked journal entry if required
if (newPetVaccination == null) return null;
final newPetVaccinationModel = PetVaccinationMapper.mapToModel(newPetVaccination);
await _createLinkedJournalEntry(newPetVaccinationModel);
return newPetVaccinationModel;
} else {
await _databaseService.updatePetVaccination(
petVaccination.petVaccinationId!,
petVaccination.name,
petVaccination.administeredDate,
petVaccination.expiryDate,
petVaccination.reminderDate,
petVaccination.notes,
petVaccination.petVaccinationId!,
petVaccination.name,
petVaccination.administeredDate,
petVaccination.expiryDate,
petVaccination.reminderDate,
petVaccination.notes,
petVaccination.vaccineBatchNumber,
petVaccination.vaccineManufacturer,
petVaccination.administeredBy,
);

await _createLinkedJournalEntry(petVaccination, createNew: false);

return petVaccination;
}
}

Future<int> deletePetVaccination(int id) {
return _databaseService.deletePetVaccination(id);
}

/// If required, create / update the linked journal entry
Future<void> _createLinkedJournalEntry(
PetVaccinationModel petVaccination, {
bool createNew = true,
}) async {
final settings = await _settingsFuture;
if (settings.createLinkedJournalEntries) {
if (createNew) {
await _databaseService.createJournalEntryForPet(
entryText: petVaccination.notes ?? '',
petIdList: [petVaccination.petId],
tags: [],
linkedRecordId: petVaccination.petVaccinationId,
linkedRecordType: LinkedRecordType.vaccination,
linkedRecordTitle: 'Vaccination ${petVaccination.name} administered',
);
} else {
await _databaseService.updateLinkedJournalEntry(
linkedRecordId: petVaccination.petVaccinationId!,
linkedRecordType: LinkedRecordType.vaccination,
linkedRecordTitle:
'Vaccination ${petVaccination.name} administered (updated)',
);
}
}
}
}
2 changes: 1 addition & 1 deletion lib/app/pet/controller/pet_vaccinations_controller.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

41 changes: 38 additions & 3 deletions lib/app/pet/controller/pet_weights_controller.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import 'package:petjournal/app/pet/models/pet_weight_model.dart';
import 'package:petjournal/app/settings/controllers/settings_controller.dart';
import 'package:petjournal/constants/linked_record_type.dart';
import 'package:petjournal/data/mapper/pet_weight_mapper.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:petjournal/data/database/database_service.dart';
Expand All @@ -10,6 +12,7 @@ class PetWeightsController extends _$PetWeightsController {
late final DatabaseService _databaseService =
// ignore: avoid_manual_providers_as_generated_provider_dependency
ref.read(DatabaseService.provider);
late final _settingsFuture = ref.watch(settingsControllerProvider.future);

@override
Stream<List<PetWeightModel>> build(int petId) {
Expand All @@ -28,9 +31,11 @@ class PetWeightsController extends _$PetWeightsController {
petWeight.notes,
);

return newPetWeight == null
? null
: PetWeightMapper.mapToModel(newPetWeight);
// create linked journal entry if required
if (newPetWeight == null) return null;
final newPetWeightModel = PetWeightMapper.mapToModel(newPetWeight);
await _createLinkedJournalEntry(newPetWeightModel);
return newPetWeightModel;
} else {
await _databaseService.updatePetWeight(
petWeight.petWeightId!,
Expand All @@ -39,11 +44,41 @@ class PetWeightsController extends _$PetWeightsController {
petWeight.weightUnit,
petWeight.notes,
);

await _createLinkedJournalEntry(petWeight, createNew: false);

return petWeight;
}
}

Future<int> deletePetWeight(int id) {
return _databaseService.deletePetWeight(id);
}

/// If required, create / update the linked journal entry
Future<void> _createLinkedJournalEntry(
PetWeightModel petWeight, {
bool createNew = true,
}) async {
final settings = await _settingsFuture;
if (settings.createLinkedJournalEntries) {
if (createNew) {
await _databaseService.createJournalEntryForPet(
entryText: petWeight.notes ?? '',
petIdList: [petWeight.petId],
tags: [],
linkedRecordId: petWeight.petWeightId,
linkedRecordType: LinkedRecordType.weight,
linkedRecordTitle: 'Weight ${petWeight.niceName()} recorded',
);
} else {
await _databaseService.updateLinkedJournalEntry(
linkedRecordId: petWeight.petWeightId!,
linkedRecordType: LinkedRecordType.weight,
linkedRecordTitle:
'Weight ${petWeight.niceName()} recorded (updated)',
);
}
}
}
}
2 changes: 1 addition & 1 deletion lib/app/pet/controller/pet_weights_controller.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions lib/app/pet/models/journal_model.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter/foundation.dart';
import 'package:petjournal/constants/linked_record_type.dart';

part 'journal_model.freezed.dart';
part 'journal_model.g.dart';
Expand All @@ -13,6 +14,9 @@ abstract class JournalModel with _$JournalModel {
DateTime? lastUpdatedDateTime,
required List<int> petIdList,
required List<String> tags,
int? linkedRecordId,
LinkedRecordType? linkedRecordType,
String? linkedRecordTitle,
}) = _JournalModel;

factory JournalModel.fromJson(Map<String, Object?> json) =>
Expand Down
Loading