refactor: move service from user story to data layer

This commit is contained in:
Joey Boerwinkel 2024-07-29 10:28:28 +02:00 committed by Freek van de Ven
parent f6d62510b6
commit 1473ea1a7a
21 changed files with 62 additions and 23 deletions

View file

@ -10,7 +10,7 @@ command:
scripts:
lint:all:
run: dart run melos run analyze && dart run melos run format-check
run: dart run melos run analyze && dart run melos run format-check && dart run melos run test
description: Run all static analysis checks.
get:
@ -21,7 +21,6 @@ scripts:
upgrade:
run: melos exec -c 1 -- "flutter pub upgrade"
analyze:
run: |
dart run melos exec -c 1 -- \
@ -35,3 +34,9 @@ scripts:
format-check:
run: dart run melos exec dart format . --set-exit-if-changed
description: Run `dart format` checks for all packages.
test:
run: |
dart run melos exec -c 1 -- \
flutter test -r github --no-test-assets
description: Run `flutter test` to validate all tests for all packages

View file

@ -1,5 +1,4 @@
import "package:flutter/material.dart";
import "package:flutter_availability/src/service/availability_service.dart";
import "package:flutter_availability/src/ui/screens/availability_modification.dart";
import "package:flutter_availability/src/ui/screens/availability_overview.dart";
import "package:flutter_availability/src/ui/screens/template_day_modification.dart";

View file

@ -1,6 +1,5 @@
import "package:flutter/material.dart";
import "package:flutter_availability/flutter_availability.dart";
import "package:flutter_availability/src/service/availability_service.dart";
import "package:flutter_availability/src/ui/view_models/availability_view_model.dart";
import "package:flutter_availability/src/ui/view_models/break_view_model.dart";
import "package:flutter_availability/src/ui/widgets/availability_clear.dart";
@ -9,6 +8,7 @@ import "package:flutter_availability/src/ui/widgets/availabillity_time_selection
import "package:flutter_availability/src/ui/widgets/base_page.dart";
import "package:flutter_availability/src/ui/widgets/pause_selection.dart";
import "package:flutter_availability/src/util/scope.dart";
import "package:flutter_availability/src/util/utils.dart";
import "package:flutter_hooks/flutter_hooks.dart";
/// Screen for modifying the availabilities for a specific daterange
@ -84,12 +84,12 @@ class _AvailabilitiesModificationScreenState
if (_availabilityViewModel.templateSelected) {
await service.applyTemplate(
template: _availabilityViewModel.templates.first,
range: widget.dateRange,
range: widget.dateRange.toAvailabilityDateRange(),
);
} else {
await service.createAvailability(
availability: _availabilityViewModel.toModel(),
range: widget.dateRange,
range: widget.dateRange.toAvailabilityDateRange(),
);
}
widget.onExit();

View file

@ -1,9 +1,9 @@
import "package:flutter/material.dart";
import "package:flutter_availability/src/service/availability_service.dart";
import "package:flutter_availability/src/ui/widgets/base_page.dart";
import "package:flutter_availability/src/ui/widgets/calendar.dart";
import "package:flutter_availability/src/ui/widgets/template_legend.dart";
import "package:flutter_availability/src/util/scope.dart";
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
import "package:flutter_hooks/flutter_hooks.dart";
///

View file

@ -1,5 +1,4 @@
import "package:flutter/material.dart";
import "package:flutter_availability/src/service/availability_service.dart";
import "package:flutter_availability/src/ui/view_models/break_view_model.dart";
import "package:flutter_availability/src/util/utils.dart";
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";

View file

@ -1,6 +1,5 @@
import "package:flutter/material.dart";
import "package:flutter_availability/src/config/availability_translations.dart";
import "package:flutter_availability/src/service/availability_service.dart";
import "package:flutter_availability/flutter_availability.dart";
import "package:flutter_availability/src/ui/widgets/calendar_grid.dart";
import "package:flutter_availability/src/util/availability_deviation.dart";
import "package:flutter_availability/src/util/scope.dart";

View file

@ -1,6 +1,5 @@
import "package:flutter/material.dart";
import "package:flutter_availability/flutter_availability.dart";
import "package:flutter_availability/src/service/availability_service.dart";
import "package:flutter_availability/src/service/pop_handler.dart";
import "package:flutter_availability/src/ui/view_models/break_view_model.dart";
import "package:flutter_availability/src/ui/widgets/generic_time_selection.dart";

View file

@ -1,6 +1,6 @@
import "package:flutter/material.dart";
import "package:flutter_availability/src/service/availability_service.dart";
import "package:flutter_availability/src/util/scope.dart";
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
/// This shows all the templates of a given month and an option to navigate to
/// the template overview

View file

@ -1,9 +1,9 @@
import "package:flutter/material.dart";
import "package:flutter_availability/src/config/availability_options.dart";
import "package:flutter_availability/src/routes.dart";
import "package:flutter_availability/src/service/availability_service.dart";
import "package:flutter_availability/src/service/pop_handler.dart";
import "package:flutter_availability/src/util/scope.dart";
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
/// This pushes the availability user story to the navigator stack.
Future<void> openAvailabilitiesForUser(

View file

@ -1,7 +1,7 @@
import "package:flutter/widgets.dart";
import "package:flutter_availability/src/config/availability_options.dart";
import "package:flutter_availability/src/service/availability_service.dart";
import "package:flutter_availability/src/service/pop_handler.dart";
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
///
class AvailabilityScope extends InheritedWidget {

View file

@ -1,4 +1,13 @@
import "package:flutter/material.dart";
import "package:flutter_availability/flutter_availability.dart";
/// method to return if 2 dates are at the same time of the day
/// ignoring the date
bool isAtSameTime(DateTime date1, DateTime date2) =>
date1.hour == date2.hour && date1.minute == date2.minute;
/// extension to bridge between material and flutter agnostic dart package
extension DateRangeConversion on DateTimeRange {
/// Creates a new [DateRange] given the internal [start] and [end] values.
DateRange toAvailabilityDateRange() => DateRange(start: start, end: end);
}

View file

@ -11,7 +11,6 @@ environment:
dependencies:
flutter:
sdk: flutter
rxdart: ^0.27.0
flutter_hooks: ^0.20.5
flutter_availability_data_interface:
hosted: https://forgejo.internal.iconica.nl/api/packages/internal/pub

View file

@ -4,3 +4,5 @@ library flutter_availability_data_interface;
export "src/data_interface.dart";
export "src/models/availability.dart";
export "src/models/templates.dart";
export "src/service/availability_service.dart";
export "src/utils/public.dart";

View file

@ -1,4 +1,4 @@
import "package:flutter_availability_data_interface/src/utils.dart";
import "package:flutter_availability_data_interface/src/utils/private.dart";
/// Exception thrown when the end is before the start
class BreakEndBeforeStartException implements Exception {}

View file

@ -1,6 +1,6 @@
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
import "package:flutter_availability_data_interface/src/models/availability.dart";
import "package:flutter_availability_data_interface/src/utils.dart";
import "package:flutter_availability_data_interface/src/utils/private.dart";
/// Exception thrown when the end is before the start
class TemplateEndBeforeStartException implements Exception {}

View file

@ -1,5 +1,7 @@
import "package:flutter/material.dart";
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
import "package:flutter_availability_data_interface/src/data_interface.dart";
import "package:flutter_availability_data_interface/src/models/availability.dart";
import "package:flutter_availability_data_interface/src/models/templates.dart";
import "package:flutter_availability_data_interface/src/utils/public.dart";
import "package:rxdart/rxdart.dart";
///
@ -21,7 +23,7 @@ class AvailabilityService {
/// changed
Future<void> createAvailability({
required AvailabilityModel availability,
required DateTimeRange range,
required DateRange range,
}) async {
// apply the startTime and endTime to the availability model
var updatedAvailability = availability.copyWith(
@ -68,7 +70,7 @@ class AvailabilityService {
/// [template] to each day in the range
Future<void> applyTemplate({
required AvailabilityTemplateModel template,
required DateTimeRange range,
required DateRange range,
}) async {
await dataInterface.applyTemplateForUser(
userId,

View file

@ -0,0 +1,14 @@
/// Class that combines two dates
class DateRange {
/// Construct the DateRange
const DateRange({
required this.start,
required this.end,
});
/// Start of the range
final DateTime start;
/// End of the range
final DateTime end;
}

View file

@ -8,8 +8,12 @@ environment:
sdk: ">=3.4.3 <4.0.0"
flutter: ">=1.17.0"
dependencies:
rxdart: ^0.27.0
dev_dependencies:
test: ^1.16.0
mocktail: ^1.0.4
flutter_iconica_analysis:
git:
url: https://github.com/Iconica-Development/flutter_iconica_analysis

View file

@ -0,0 +1,8 @@
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
import "package:mocktail/mocktail.dart";
class DataInterfaceMock extends Mock implements AvailabilityDataInterface {}
class MockTemplate extends Mock implements AvailabilityTemplateModel {}
class MockAvailability extends Mock implements AvailabilityModel {}

View file

@ -1,6 +1,6 @@
import "package:flutter_availability/src/service/availability_service.dart";
import "package:flutter_test/flutter_test.dart";
import "package:flutter_availability_data_interface/src/service/availability_service.dart";
import "package:mocktail/mocktail.dart";
import "package:test/test.dart";
import "../mocks.dart";