mirror of
https://github.com/Iconica-Development/flutter_availability.git
synced 2025-05-18 20:53:45 +02:00
refactor: move service from user story to data layer
This commit is contained in:
parent
f6d62510b6
commit
1473ea1a7a
21 changed files with 62 additions and 23 deletions
|
@ -10,7 +10,7 @@ command:
|
||||||
|
|
||||||
scripts:
|
scripts:
|
||||||
lint:all:
|
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.
|
description: Run all static analysis checks.
|
||||||
|
|
||||||
get:
|
get:
|
||||||
|
@ -21,7 +21,6 @@ scripts:
|
||||||
upgrade:
|
upgrade:
|
||||||
run: melos exec -c 1 -- "flutter pub upgrade"
|
run: melos exec -c 1 -- "flutter pub upgrade"
|
||||||
|
|
||||||
|
|
||||||
analyze:
|
analyze:
|
||||||
run: |
|
run: |
|
||||||
dart run melos exec -c 1 -- \
|
dart run melos exec -c 1 -- \
|
||||||
|
@ -35,3 +34,9 @@ scripts:
|
||||||
format-check:
|
format-check:
|
||||||
run: dart run melos exec dart format . --set-exit-if-changed
|
run: dart run melos exec dart format . --set-exit-if-changed
|
||||||
description: Run `dart format` checks for all packages.
|
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
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import "package:flutter/material.dart";
|
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_modification.dart";
|
||||||
import "package:flutter_availability/src/ui/screens/availability_overview.dart";
|
import "package:flutter_availability/src/ui/screens/availability_overview.dart";
|
||||||
import "package:flutter_availability/src/ui/screens/template_day_modification.dart";
|
import "package:flutter_availability/src/ui/screens/template_day_modification.dart";
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_availability/flutter_availability.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/availability_view_model.dart";
|
||||||
import "package:flutter_availability/src/ui/view_models/break_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";
|
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/base_page.dart";
|
||||||
import "package:flutter_availability/src/ui/widgets/pause_selection.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/scope.dart";
|
||||||
|
import "package:flutter_availability/src/util/utils.dart";
|
||||||
import "package:flutter_hooks/flutter_hooks.dart";
|
import "package:flutter_hooks/flutter_hooks.dart";
|
||||||
|
|
||||||
/// Screen for modifying the availabilities for a specific daterange
|
/// Screen for modifying the availabilities for a specific daterange
|
||||||
|
@ -84,12 +84,12 @@ class _AvailabilitiesModificationScreenState
|
||||||
if (_availabilityViewModel.templateSelected) {
|
if (_availabilityViewModel.templateSelected) {
|
||||||
await service.applyTemplate(
|
await service.applyTemplate(
|
||||||
template: _availabilityViewModel.templates.first,
|
template: _availabilityViewModel.templates.first,
|
||||||
range: widget.dateRange,
|
range: widget.dateRange.toAvailabilityDateRange(),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
await service.createAvailability(
|
await service.createAvailability(
|
||||||
availability: _availabilityViewModel.toModel(),
|
availability: _availabilityViewModel.toModel(),
|
||||||
range: widget.dateRange,
|
range: widget.dateRange.toAvailabilityDateRange(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
widget.onExit();
|
widget.onExit();
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import "package:flutter/material.dart";
|
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/base_page.dart";
|
||||||
import "package:flutter_availability/src/ui/widgets/calendar.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/ui/widgets/template_legend.dart";
|
||||||
import "package:flutter_availability/src/util/scope.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";
|
import "package:flutter_hooks/flutter_hooks.dart";
|
||||||
|
|
||||||
///
|
///
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import "package:flutter/material.dart";
|
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/ui/view_models/break_view_model.dart";
|
||||||
import "package:flutter_availability/src/util/utils.dart";
|
import "package:flutter_availability/src/util/utils.dart";
|
||||||
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_availability/src/config/availability_translations.dart";
|
import "package:flutter_availability/flutter_availability.dart";
|
||||||
import "package:flutter_availability/src/service/availability_service.dart";
|
|
||||||
import "package:flutter_availability/src/ui/widgets/calendar_grid.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/availability_deviation.dart";
|
||||||
import "package:flutter_availability/src/util/scope.dart";
|
import "package:flutter_availability/src/util/scope.dart";
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_availability/flutter_availability.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/service/pop_handler.dart";
|
||||||
import "package:flutter_availability/src/ui/view_models/break_view_model.dart";
|
import "package:flutter_availability/src/ui/view_models/break_view_model.dart";
|
||||||
import "package:flutter_availability/src/ui/widgets/generic_time_selection.dart";
|
import "package:flutter_availability/src/ui/widgets/generic_time_selection.dart";
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import "package:flutter/material.dart";
|
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/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
|
/// This shows all the templates of a given month and an option to navigate to
|
||||||
/// the template overview
|
/// the template overview
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter/material.dart";
|
||||||
import "package:flutter_availability/src/config/availability_options.dart";
|
import "package:flutter_availability/src/config/availability_options.dart";
|
||||||
import "package:flutter_availability/src/routes.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/service/pop_handler.dart";
|
||||||
import "package:flutter_availability/src/util/scope.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.
|
/// This pushes the availability user story to the navigator stack.
|
||||||
Future<void> openAvailabilitiesForUser(
|
Future<void> openAvailabilitiesForUser(
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import "package:flutter/widgets.dart";
|
import "package:flutter/widgets.dart";
|
||||||
import "package:flutter_availability/src/config/availability_options.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/src/service/pop_handler.dart";
|
||||||
|
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
||||||
|
|
||||||
///
|
///
|
||||||
class AvailabilityScope extends InheritedWidget {
|
class AvailabilityScope extends InheritedWidget {
|
||||||
|
|
|
@ -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
|
/// method to return if 2 dates are at the same time of the day
|
||||||
/// ignoring the date
|
/// ignoring the date
|
||||||
bool isAtSameTime(DateTime date1, DateTime date2) =>
|
bool isAtSameTime(DateTime date1, DateTime date2) =>
|
||||||
date1.hour == date2.hour && date1.minute == date2.minute;
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -11,7 +11,6 @@ environment:
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
rxdart: ^0.27.0
|
|
||||||
flutter_hooks: ^0.20.5
|
flutter_hooks: ^0.20.5
|
||||||
flutter_availability_data_interface:
|
flutter_availability_data_interface:
|
||||||
hosted: https://forgejo.internal.iconica.nl/api/packages/internal/pub
|
hosted: https://forgejo.internal.iconica.nl/api/packages/internal/pub
|
||||||
|
|
|
@ -4,3 +4,5 @@ library flutter_availability_data_interface;
|
||||||
export "src/data_interface.dart";
|
export "src/data_interface.dart";
|
||||||
export "src/models/availability.dart";
|
export "src/models/availability.dart";
|
||||||
export "src/models/templates.dart";
|
export "src/models/templates.dart";
|
||||||
|
export "src/service/availability_service.dart";
|
||||||
|
export "src/utils/public.dart";
|
||||||
|
|
|
@ -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
|
/// Exception thrown when the end is before the start
|
||||||
class BreakEndBeforeStartException implements Exception {}
|
class BreakEndBeforeStartException implements Exception {}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import "package:flutter_availability_data_interface/flutter_availability_data_interface.dart";
|
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/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
|
/// Exception thrown when the end is before the start
|
||||||
class TemplateEndBeforeStartException implements Exception {}
|
class TemplateEndBeforeStartException implements Exception {}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import "package:flutter/material.dart";
|
import "package:flutter_availability_data_interface/src/data_interface.dart";
|
||||||
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/models/templates.dart";
|
||||||
|
import "package:flutter_availability_data_interface/src/utils/public.dart";
|
||||||
import "package:rxdart/rxdart.dart";
|
import "package:rxdart/rxdart.dart";
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -21,7 +23,7 @@ class AvailabilityService {
|
||||||
/// changed
|
/// changed
|
||||||
Future<void> createAvailability({
|
Future<void> createAvailability({
|
||||||
required AvailabilityModel availability,
|
required AvailabilityModel availability,
|
||||||
required DateTimeRange range,
|
required DateRange range,
|
||||||
}) async {
|
}) async {
|
||||||
// apply the startTime and endTime to the availability model
|
// apply the startTime and endTime to the availability model
|
||||||
var updatedAvailability = availability.copyWith(
|
var updatedAvailability = availability.copyWith(
|
||||||
|
@ -68,7 +70,7 @@ class AvailabilityService {
|
||||||
/// [template] to each day in the range
|
/// [template] to each day in the range
|
||||||
Future<void> applyTemplate({
|
Future<void> applyTemplate({
|
||||||
required AvailabilityTemplateModel template,
|
required AvailabilityTemplateModel template,
|
||||||
required DateTimeRange range,
|
required DateRange range,
|
||||||
}) async {
|
}) async {
|
||||||
await dataInterface.applyTemplateForUser(
|
await dataInterface.applyTemplateForUser(
|
||||||
userId,
|
userId,
|
|
@ -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;
|
||||||
|
}
|
|
@ -8,8 +8,12 @@ environment:
|
||||||
sdk: ">=3.4.3 <4.0.0"
|
sdk: ">=3.4.3 <4.0.0"
|
||||||
flutter: ">=1.17.0"
|
flutter: ">=1.17.0"
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
rxdart: ^0.27.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
test: ^1.16.0
|
test: ^1.16.0
|
||||||
|
mocktail: ^1.0.4
|
||||||
flutter_iconica_analysis:
|
flutter_iconica_analysis:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/Iconica-Development/flutter_iconica_analysis
|
url: https://github.com/Iconica-Development/flutter_iconica_analysis
|
||||||
|
|
|
@ -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 {}
|
|
@ -1,6 +1,6 @@
|
||||||
import "package:flutter_availability/src/service/availability_service.dart";
|
import "package:flutter_availability_data_interface/src/service/availability_service.dart";
|
||||||
import "package:flutter_test/flutter_test.dart";
|
|
||||||
import "package:mocktail/mocktail.dart";
|
import "package:mocktail/mocktail.dart";
|
||||||
|
import "package:test/test.dart";
|
||||||
|
|
||||||
import "../mocks.dart";
|
import "../mocks.dart";
|
||||||
|
|
Loading…
Reference in a new issue