use TimeOfDay instead of String

This commit is contained in:
Rafeek-Khoudare
2025-07-07 17:07:38 +03:00
parent 368b1be3c0
commit 42c410d982
5 changed files with 47 additions and 28 deletions

View File

@ -1,5 +1,6 @@
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/bookable_spaces_params.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/bookable_spaces_params.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/bookable_spaces_service.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/bookable_spaces_service.dart';
import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart'; import 'package:syncrow_web/pages/space_management_v2/main_module/shared/models/paginated_data_model.dart';
@ -16,8 +17,8 @@ class DummyBookableSpacesService implements BookableSpacesService {
configUuid: 'uuid', configUuid: 'uuid',
bookableDays: ['wed', 'saturday'], bookableDays: ['wed', 'saturday'],
availability: true, availability: true,
bookingEndTime: '08:00 PM', bookingEndTime: const TimeOfDay(hour: 13, minute: 20),
bookingStartTime: '5:00 PM', bookingStartTime: const TimeOfDay(hour: 13, minute: 20),
cost: 6, cost: 6,
), ),
spaceUuid: 'uuiiddd', spaceUuid: 'uuiiddd',
@ -29,8 +30,8 @@ class DummyBookableSpacesService implements BookableSpacesService {
configUuid: 'uuid', configUuid: 'uuid',
bookableDays: ['wed', 'thur'], bookableDays: ['wed', 'thur'],
availability: true, availability: true,
bookingEndTime: '08:00 PM', bookingEndTime: const TimeOfDay(hour: 13, minute: 20),
bookingStartTime: '5:00 PM', bookingStartTime: const TimeOfDay(hour: 13, minute: 20),
cost: 6, cost: 6,
), ),
spaceUuid: 'uuiiddd', spaceUuid: 'uuiiddd',
@ -42,8 +43,8 @@ class DummyBookableSpacesService implements BookableSpacesService {
configUuid: 'uuid', configUuid: 'uuid',
bookableDays: ['wed', 'fri', 'tues'], bookableDays: ['wed', 'fri', 'tues'],
availability: true, availability: true,
bookingEndTime: '08:00 PM', bookingEndTime: const TimeOfDay(hour: 13, minute: 20),
bookingStartTime: '5:00 PM', bookingStartTime: const TimeOfDay(hour: 13, minute: 20),
cost: 6, cost: 6,
), ),
spaceUuid: 'uuiiddd', spaceUuid: 'uuiiddd',

View File

@ -1,3 +1,4 @@
import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_config.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart';
@ -17,8 +18,8 @@ class DummyNonNookableSpaces implements NonBookableSpacesService {
configUuid: 'uuid', configUuid: 'uuid',
bookableDays: ['wed', 'saturday'], bookableDays: ['wed', 'saturday'],
availability: true, availability: true,
bookingEndTime: '08:00 PM', bookingEndTime: const TimeOfDay(hour: 13, minute: 20),
bookingStartTime: '5:00 PM', bookingStartTime: const TimeOfDay(hour: 6, minute: 20),
cost: 6, cost: 6,
), ),
spaceUuid: 'uuiiddd', spaceUuid: 'uuiiddd',
@ -30,8 +31,8 @@ class DummyNonNookableSpaces implements NonBookableSpacesService {
configUuid: 'uuid', configUuid: 'uuid',
bookableDays: ['wed', 'saturday', 'thuresday'], bookableDays: ['wed', 'saturday', 'thuresday'],
availability: true, availability: true,
bookingEndTime: '08:00 PM', bookingEndTime: const TimeOfDay(hour: 13, minute: 20),
bookingStartTime: '5:00 PM', bookingStartTime: const TimeOfDay(hour: 5, minute: 20),
cost: 5, cost: 5,
), ),
spaceUuid: 'uuiiddd', spaceUuid: 'uuiiddd',
@ -50,8 +51,8 @@ class DummyNonNookableSpaces implements NonBookableSpacesService {
'thuresday' 'thuresday'
], ],
availability: true, availability: true,
bookingEndTime: '08:00 PM', bookingEndTime: const TimeOfDay(hour: 13, minute: 20),
bookingStartTime: '5:00 PM', bookingStartTime: const TimeOfDay(hour: 15, minute: 20),
cost: 2, cost: 2,
), ),
spaceUuid: 'uuiiddd', spaceUuid: 'uuiiddd',

View File

@ -1,8 +1,10 @@
import 'package:flutter/material.dart';
class BookableSpaceConfig { class BookableSpaceConfig {
String configUuid; String configUuid;
List<String> bookableDays; List<String> bookableDays;
String bookingStartTime; TimeOfDay bookingStartTime;
String bookingEndTime; TimeOfDay bookingEndTime;
int cost; int cost;
bool availability; bool availability;
BookableSpaceConfig({ BookableSpaceConfig({
@ -17,8 +19,8 @@ class BookableSpaceConfig {
configUuid: '', configUuid: '',
bookableDays: [], bookableDays: [],
availability: false, availability: false,
bookingEndTime: '', bookingEndTime: TimeOfDay.now(),
bookingStartTime: '', bookingStartTime: TimeOfDay.now(),
cost: -1, cost: -1,
); );
factory BookableSpaceConfig.fromJson(Map<String, dynamic> json) => factory BookableSpaceConfig.fromJson(Map<String, dynamic> json) =>
@ -26,14 +28,18 @@ class BookableSpaceConfig {
configUuid: json['uuid'] as String, configUuid: json['uuid'] as String,
bookableDays: json['daysAvailable'] as List<String>, bookableDays: json['daysAvailable'] as List<String>,
availability: (json['active'] as bool?) ?? false, availability: (json['active'] as bool?) ?? false,
bookingEndTime: json['startTime'] as String, bookingEndTime: parseTimeOfDay(json['startTime'] as String),
bookingStartTime: json['endTime'] as String, bookingStartTime: parseTimeOfDay(json['endTime'] as String),
cost: json['points'] as int, cost: json['points'] as int,
); );
static TimeOfDay parseTimeOfDay(String timeString) {
final parts = timeString.split(':');
final hour = int.parse(parts[0]);
final minute = int.parse(parts[1]);
return TimeOfDay(hour: hour, minute: minute);
}
bool get isValid => bool get isValid =>
configUuid.isNotEmpty && configUuid.isNotEmpty && bookableDays.isNotEmpty && cost > 0;
bookableDays.isNotEmpty &&
bookingStartTime.isNotEmpty &&
bookingEndTime.isNotEmpty &&
cost > 0;
} }

View File

@ -1,4 +1,5 @@
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
import 'package:syncrow_web/utils/string_utils.dart';
class SendBookableSpacesToApiParams { class SendBookableSpacesToApiParams {
List<String> spaceUuids; List<String> spaceUuids;
@ -22,8 +23,10 @@ class SendBookableSpacesToApiParams {
.expand((space) => space.spaceConfig.bookableDays) .expand((space) => space.spaceConfig.bookableDays)
.toSet() .toSet()
.toList(), .toList(),
startTime: bookableSpaces.first.spaceConfig.bookingStartTime, startTime: formatTimeOfDayTo24HourString(
endTime: bookableSpaces.first.spaceConfig.bookingEndTime, bookableSpaces.first.spaceConfig.bookingStartTime),
endTime: formatTimeOfDayTo24HourString(
bookableSpaces.first.spaceConfig.bookingEndTime),
points: bookableSpaces.first.spaceConfig.cost, points: bookableSpaces.first.spaceConfig.cost,
); );
} }

View File

@ -1,5 +1,6 @@
import 'package:bloc/bloc.dart'; import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/models/bookable_space_model.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/params/non_bookable_spaces_params.dart';
import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/non_bookable_spaces_service.dart'; import 'package:syncrow_web/pages/access_management/manage_bookable_spaces/domain/service/non_bookable_spaces_service.dart';
@ -20,6 +21,12 @@ class NonBookableSpacesBloc
on<RemoveFromBookableSpaceEvent>(_onRemoveFromBookableSpaceEvent); on<RemoveFromBookableSpaceEvent>(_onRemoveFromBookableSpaceEvent);
on<SendBookableSpacesToApi>(_onSendBookableSpacesToApi); on<SendBookableSpacesToApi>(_onSendBookableSpacesToApi);
} }
TimeOfDay get endTime =>
selectedBookableSpaces.first.spaceConfig.bookingEndTime;
TimeOfDay get startTime =>
selectedBookableSpaces.first.spaceConfig.bookingStartTime;
Future<void> _onLoadUnBookableSpacesEvent(LoadUnBookableSpacesEvent event, Future<void> _onLoadUnBookableSpacesEvent(LoadUnBookableSpacesEvent event,
Emitter<NonBookableSpacesState> emit) async { Emitter<NonBookableSpacesState> emit) async {
emit(NonBookableSpacesLoading()); emit(NonBookableSpacesLoading());
@ -80,7 +87,8 @@ class NonBookableSpacesBloc
try { try {
await nonBookableSpacesService.sendBookableSpacesToApi( await nonBookableSpacesService.sendBookableSpacesToApi(
SendBookableSpacesToApiParams.fromBookableSpacesModel( SendBookableSpacesToApiParams.fromBookableSpacesModel(
selectedBookableSpaces), selectedBookableSpaces,
),
); );
} catch (e) { } catch (e) {
emit( emit(