Skip to content

Commit

Permalink
refactor(model): extract shorter JSON field names
Browse files Browse the repository at this point in the history
  • Loading branch information
albertms10 committed Dec 4, 2021
1 parent 6cb11f7 commit ae0689d
Show file tree
Hide file tree
Showing 9 changed files with 146 additions and 79 deletions.
35 changes: 23 additions & 12 deletions lib/model/booking.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@ import 'package:cabin_booking/utils/time_of_day_extension.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

abstract class _JsonFields {
static const description = 'de';
static const date = 'd';
static const startTime = 'st';
static const endTime = 'et';
static const status = 's';
static const isLocked = 'il';
}

class Booking extends Item {
String? description;
DateTime? date;
Expand Down Expand Up @@ -33,23 +42,25 @@ class Booking extends Item {
}) : super(id: id);

Booking.from(Map<String, dynamic> other)
: description = other['description'] as String?,
date = DateTime.tryParse(other['date'] as String),
startTime = TimeOfDayExtension.tryParse(other['startTime'] as String),
endTime = TimeOfDayExtension.tryParse(other['endTime'] as String),
status = BookingStatus.values[other['status'] as int],
isLocked = other['isLocked'] as bool,
: description = other[_JsonFields.description] as String?,
date = DateTime.tryParse(other[_JsonFields.date] as String),
startTime =
TimeOfDayExtension.tryParse(other[_JsonFields.startTime] as String),
endTime =
TimeOfDayExtension.tryParse(other[_JsonFields.endTime] as String),
status = BookingStatus.values[other[_JsonFields.status] as int],
isLocked = other[_JsonFields.isLocked] as bool,
super.from(other);

@override
Map<String, dynamic> toJson() => {
...super.toJson(),
'description': description,
'date': date!.toIso8601String().split('T').first,
'startTime': startTime!.format24Hour(),
'endTime': endTime!.format24Hour(),
'status': status.index,
'isLocked': isLocked,
_JsonFields.description: description,
_JsonFields.date: date!.toIso8601String().split('T').first,
_JsonFields.startTime: startTime!.format24Hour(),
_JsonFields.endTime: endTime!.format24Hour(),
_JsonFields.status: status.index,
_JsonFields.isLocked: isLocked,
};

DateTime get startDateTime => date!.addTimeOfDay(startTime);
Expand Down
25 changes: 17 additions & 8 deletions lib/model/cabin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ import 'package:cabin_booking/model/item.dart';
import 'package:cabin_booking/model/recurring_booking.dart';
import 'package:flutter/material.dart';

abstract class _JsonFields {
static const number = 'n';
static const elements = 'e';
static const bookings = 'b';
static const recurringBookings = 'rb';
}

class Cabin extends Item {
int number;
late CabinElements elements;
Expand All @@ -26,23 +33,25 @@ class Cabin extends Item {
}

Cabin.from(Map<String, dynamic> other)
: number = other['number'] as int,
: number = other[_JsonFields.number] as int,
elements = CabinElements.from(
other['elements'] as Map<String, dynamic>,
other[_JsonFields.elements] as Map<String, dynamic>,
),
_bookingManager = BookingManager.from(
bookings: other['bookings'] as List<dynamic>,
recurringBookings: other['recurringBookings'] as List<dynamic>,
bookings: other[_JsonFields.bookings] as List<dynamic>,
recurringBookings:
other[_JsonFields.recurringBookings] as List<dynamic>,
),
super.from(other);

@override
Map<String, dynamic> toJson() => {
...super.toJson(),
'number': number,
'elements': elements.toJson(),
'bookings': _bookingManager.bookingsToJson(),
'recurringBookings': _bookingManager.recurringBookingsToJson(),
_JsonFields.number: number,
_JsonFields.elements: elements.toJson(),
_JsonFields.bookings: _bookingManager.bookingsToJson(),
_JsonFields.recurringBookings:
_bookingManager.recurringBookingsToJson(),
};

Cabin simplified() => Cabin(id: id, number: number);
Expand Down
48 changes: 17 additions & 31 deletions lib/model/cabin_elements/cabin_elements.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
import 'package:cabin_booking/model/cabin_elements/piano.dart';

abstract class _JsonFields {
static const pianos = 'p';
static const lecterns = 'l';
static const chairs = 'c';
static const tables = 't';
}

class CabinElements {
late List<Piano> pianos;
int lecterns;
Expand All @@ -14,40 +23,17 @@ class CabinElements {
}

CabinElements.from(Map<String, dynamic> other)
: pianos = (other['pianos'] as List<dynamic>)
: pianos = (other[_JsonFields.pianos] as List<dynamic>)
.map((piano) => Piano.from(piano))
.toList(),
lecterns = other['lecterns'] as int,
chairs = other['chairs'] as int,
tables = other['tables'] as int;

Map<String, dynamic> toJson() => {
'pianos': pianos.map((piano) => piano.toJson()).toList(),
'lecterns': lecterns,
'chairs': chairs,
'tables': tables,
};
}

class Piano {
String? brand;
String? model;
bool isElectronic;

Piano({
this.brand,
this.model,
this.isElectronic = false,
});

Piano.from(Map<String, dynamic> other)
: brand = other['brand'] as String?,
model = other['model'] as String?,
isElectronic = other['isElectronic'] as bool;
lecterns = other[_JsonFields.lecterns] as int,
chairs = other[_JsonFields.chairs] as int,
tables = other[_JsonFields.tables] as int;

Map<String, dynamic> toJson() => {
'brand': brand,
'model': model,
'isElectronic': isElectronic,
_JsonFields.pianos: pianos.map((piano) => piano.toJson()).toList(),
_JsonFields.lecterns: lecterns,
_JsonFields.chairs: chairs,
_JsonFields.tables: tables,
};
}
28 changes: 28 additions & 0 deletions lib/model/cabin_elements/piano.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
abstract class _JsonFields {
static const brand = 'b';
static const model = 'm';
static const isElectronic = 'ie';
}

class Piano {
String? brand;
String? model;
bool isElectronic;

Piano({
this.brand,
this.model,
this.isElectronic = false,
});

Piano.from(Map<String, dynamic> other)
: brand = other[_JsonFields.brand] as String?,
model = other[_JsonFields.model] as String?,
isElectronic = other[_JsonFields.isElectronic] as bool;

Map<String, dynamic> toJson() => {
_JsonFields.brand: brand,
_JsonFields.model: model,
_JsonFields.isElectronic: isElectronic,
};
}
13 changes: 9 additions & 4 deletions lib/model/date_range.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ import 'package:cabin_booking/model/item.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';

abstract class _JsonFields {
static const startDate = 'sd';
static const endDate = 'ed';
}

class DateRange extends Item {
DateTime? startDate;
DateTime? endDate;
Expand All @@ -18,15 +23,15 @@ class DateRange extends Item {
}

DateRange.from(Map<String, dynamic> other)
: startDate = DateTime.tryParse(other['startDate'] as String),
endDate = DateTime.tryParse(other['endDate'] as String),
: startDate = DateTime.tryParse(other[_JsonFields.startDate] as String),
endDate = DateTime.tryParse(other[_JsonFields.endDate] as String),
super.from(other);

@override
Map<String, dynamic> toJson() => {
...super.toJson(),
'startDate': startDate!.toIso8601String().split('T').first,
'endDate': endDate!.toIso8601String().split('T').first,
_JsonFields.startDate: startDate!.toIso8601String().split('T').first,
_JsonFields.endDate: endDate!.toIso8601String().split('T').first,
};

@override
Expand Down
8 changes: 6 additions & 2 deletions lib/model/holiday.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import 'package:cabin_booking/model/date_range.dart';

abstract class _JsonFields {
static const kind = 'k';
}

class Holiday extends DateRange {
final HolidayKind kind;

Expand All @@ -15,13 +19,13 @@ class Holiday extends DateRange {
);

Holiday.from(Map<String, dynamic> other)
: kind = HolidayKind.values[other['kind'] as int],
: kind = HolidayKind.values[other[_JsonFields.kind] as int],
super.from(other);

@override
Map<String, dynamic> toJson() => {
...super.toJson(),
'kind': kind.index,
_JsonFields.kind: kind.index,
};
}

Expand Down
31 changes: 21 additions & 10 deletions lib/model/item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@ import 'package:cabin_booking/model/serializable.dart';
import 'package:flutter/material.dart';
import 'package:uuid/uuid.dart';

abstract class _JsonFields {
static const id = 'id';
static const creationDateTime = 'cdt';
static const modificationDateTime = 'mdt';
static const modificationCount = 'mc';
}

abstract class Item implements Comparable<Item>, Serializable {
late String id;
final DateTime creationDateTime;
Expand All @@ -15,22 +22,26 @@ abstract class Item implements Comparable<Item>, Serializable {
}

Item.from(Map<String, dynamic> other)
: id = other['id'] as String,
: id = other[_JsonFields.id] as String,
creationDateTime =
DateTime.tryParse(other['creationDateTime'] as String)!,
modificationDateTime = other.containsKey('modificationDateTime')
? DateTime.tryParse(other['modificationDateTime'] as String)
: null,
modificationCount = other['modificationCount'] as int;
DateTime.tryParse(other[_JsonFields.creationDateTime] as String)!,
modificationDateTime =
other.containsKey(_JsonFields.modificationDateTime)
? DateTime.tryParse(
other[_JsonFields.modificationDateTime] as String,
)
: null,
modificationCount = other[_JsonFields.modificationCount] as int;

@override
@mustCallSuper
Map<String, dynamic> toJson() => {
'id': id,
'creationDateTime': creationDateTime.toIso8601String(),
_JsonFields.id: id,
_JsonFields.creationDateTime: creationDateTime.toIso8601String(),
if (modificationDateTime != null)
'modificationDateTime': modificationDateTime!.toIso8601String(),
'modificationCount': modificationCount,
_JsonFields.modificationDateTime:
modificationDateTime!.toIso8601String(),
_JsonFields.modificationCount: modificationCount,
};

Item copyWith();
Expand Down
28 changes: 18 additions & 10 deletions lib/model/recurring_booking.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@ import 'package:cabin_booking/model/booking.dart';
import 'package:collection/collection.dart' show IterableExtension;
import 'package:flutter/material.dart';

abstract class _JsonFields {
static const periodicity = 'p';
static const repeatEvery = 're';
static const recurringEndDate = 'edt';
static const occurrences = 'o';
}

class RecurringBooking extends Booking {
Periodicity periodicity;
int repeatEvery;
Expand Down Expand Up @@ -37,13 +44,13 @@ class RecurringBooking extends Booking {
);

RecurringBooking.from(Map<String, dynamic> other)
: periodicity = Periodicity.values[other['periodicityIndex'] as int],
repeatEvery = other['repeatEvery'] as int,
_recurringEndDate = other.containsKey('endDate')
? DateTime.tryParse(other['endDate'] as String)
: periodicity = Periodicity.values[other[_JsonFields.periodicity] as int],
repeatEvery = other[_JsonFields.repeatEvery] as int,
_recurringEndDate = other.containsKey(_JsonFields.recurringEndDate)
? DateTime.tryParse(other[_JsonFields.recurringEndDate] as String)
: null,
_occurrences = other.containsKey('occurrences')
? other['occurrences'] as int?
_occurrences = other.containsKey(_JsonFields.occurrences)
? other[_JsonFields.occurrences] as int?
: null,
super.from(other);

Expand Down Expand Up @@ -73,12 +80,13 @@ class RecurringBooking extends Booking {
@override
Map<String, dynamic> toJson() => {
...super.toJson(),
'periodicityIndex': periodicity.index,
'repeatEvery': repeatEvery,
_JsonFields.periodicity: periodicity.index,
_JsonFields.repeatEvery: repeatEvery,
if (method == RecurringBookingMethod.endDate)
'endDate': _recurringEndDate!.toIso8601String().split('T').first
_JsonFields.recurringEndDate:
_recurringEndDate!.toIso8601String().split('T').first
else if (method == RecurringBookingMethod.occurrences)
'occurrences': _occurrences,
_JsonFields.occurrences: _occurrences,
};

RecurringBookingMethod get method => _recurringEndDate != null
Expand Down
9 changes: 7 additions & 2 deletions lib/model/school_year.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ import 'package:cabin_booking/model/date_range.dart';
import 'package:cabin_booking/model/holiday.dart';
import 'package:intl/intl.dart';

abstract class _JsonFields {
static const holidays = 'h';
}

class SchoolYear extends DateRange {
late Set<Holiday> holidays;

Expand All @@ -22,15 +26,16 @@ class SchoolYear extends DateRange {

SchoolYear.from(Map<String, dynamic> other)
: holidays = SplayTreeSet.from(
(other['holidays'] as List<dynamic>)
(other[_JsonFields.holidays] as List<dynamic>)
.map<Holiday>((holiday) => Holiday.from(holiday)),
),
super.from(other);

@override
Map<String, dynamic> toJson() => {
...super.toJson(),
'holidays': holidays.map((holiday) => holiday.toJson()).toList(),
_JsonFields.holidays:
holidays.map((holiday) => holiday.toJson()).toList(),
};

Duration get holidaysDuration {
Expand Down

0 comments on commit ae0689d

Please sign in to comment.