From 84dc75efd0e0ffc2a67b233f7e6c1e352c5dbd2f Mon Sep 17 00:00:00 2001 From: Efrain Date: Fri, 6 May 2022 11:28:08 -0500 Subject: [PATCH] [Domain] Added a model to represent the character birthday. Added a few date util methods --- .../extensions/datetime_extensions.dart | 7 ++++++ .../character_birthday_model.dart | 15 +++++++++++++ lib/domain/models/models.dart | 1 + lib/domain/services/genshin_service.dart | 2 ++ lib/domain/services/locale_service.dart | 2 +- lib/domain/services/telemetry_service.dart | 2 ++ lib/domain/utils/date_utils.dart | 22 +++++++++++++++++++ 7 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 lib/domain/extensions/datetime_extensions.dart create mode 100644 lib/domain/models/birthdays_per_month/character_birthday_model.dart diff --git a/lib/domain/extensions/datetime_extensions.dart b/lib/domain/extensions/datetime_extensions.dart new file mode 100644 index 000000000..095965bb6 --- /dev/null +++ b/lib/domain/extensions/datetime_extensions.dart @@ -0,0 +1,7 @@ +extension DateTimeExtensions on DateTime { + bool isAfterInclusive(DateTime other) => compareTo(other) >= 0; + + bool isBeforeInclusive(DateTime other) => compareTo(other) <= 0; + + bool isBetweenInclusive(DateTime first, DateTime last) => isAfterInclusive(first) && isBeforeInclusive(last); +} diff --git a/lib/domain/models/birthdays_per_month/character_birthday_model.dart b/lib/domain/models/birthdays_per_month/character_birthday_model.dart new file mode 100644 index 000000000..6ce4293ca --- /dev/null +++ b/lib/domain/models/birthdays_per_month/character_birthday_model.dart @@ -0,0 +1,15 @@ +import 'package:freezed_annotation/freezed_annotation.dart'; + +part 'character_birthday_model.freezed.dart'; + +@freezed +class CharacterBirthdayModel with _$CharacterBirthdayModel { + const factory CharacterBirthdayModel({ + required String key, + required String name, + required String image, + required DateTime birthday, + required String birthdayString, + required int daysUntilBirthday, + }) = _CharacterBirthdayModel; +} diff --git a/lib/domain/models/models.dart b/lib/domain/models/models.dart index cdbe6c3b1..a3da02398 100644 --- a/lib/domain/models/models.dart +++ b/lib/domain/models/models.dart @@ -2,6 +2,7 @@ export 'artifacts/artifact_card_model.dart'; export 'banner_history/banner_history_item_model.dart'; export 'banner_history/banner_history_period_model.dart'; export 'banner_history/item_release_history_model.dart'; +export 'birthdays_per_month/character_birthday_model.dart'; export 'calculator_asc_materials/ascension_materials_summary.dart'; export 'calculator_asc_materials/calculator_session_model.dart'; export 'calculator_asc_materials/character_skill.dart'; diff --git a/lib/domain/services/genshin_service.dart b/lib/domain/services/genshin_service.dart index b1bee1bac..abb78e662 100644 --- a/lib/domain/services/genshin_service.dart +++ b/lib/domain/services/genshin_service.dart @@ -96,4 +96,6 @@ abstract class GenshinService { List getTopCharts(ChartType type); List getCharacterBirthdaysForCharts(); List getElementsForCharts(); + + List getCharacterBirthdays({int? month, int? day}); } diff --git a/lib/domain/services/locale_service.dart b/lib/domain/services/locale_service.dart index 47056f724..83be5b74b 100644 --- a/lib/domain/services/locale_service.dart +++ b/lib/domain/services/locale_service.dart @@ -8,7 +8,7 @@ abstract class LocaleService { String getFormattedLocale(AppLanguageType language); - DateTime getCharBirthDate(String? birthday); + DateTime getCharBirthDate(String? birthday, {bool useCurrentYear = false}); String formatCharBirthDate(String? birthday); diff --git a/lib/domain/services/telemetry_service.dart b/lib/domain/services/telemetry_service.dart index 3b8cdb1c8..de33c3d81 100644 --- a/lib/domain/services/telemetry_service.dart +++ b/lib/domain/services/telemetry_service.dart @@ -69,4 +69,6 @@ abstract class TelemetryService { Future trackItemReleaseHistoryOpened(String itemKey); Future trackChartsOpened(); + + Future trackBirthdaysPerMonthOpened(int month); } diff --git a/lib/domain/utils/date_utils.dart b/lib/domain/utils/date_utils.dart index af7665857..095f89f6d 100644 --- a/lib/domain/utils/date_utils.dart +++ b/lib/domain/utils/date_utils.dart @@ -22,4 +22,26 @@ class DateUtils { final format = useTwentyFourHoursFormat ? twentyFourHoursFormat : defaultFormat; return formatDate(date, format: format); } + + static int getLastDayOfMonth(int month) { + final now = DateTime.now(); + return DateTime(now.year, month + 1, 0).day; + } + + static String getMonthFullName(int month) { + final formatter = DateFormat('MMMM'); + final formatted = formatter.format(DateTime(DateTime.now().year, month)); + //languages like spanish need the first letter in upper case + return toBeginningOfSentenceCase(formatted)!; + } + + static List getAllMonthsName({String format = 'MMM'}) { + final now = DateTime.now(); + final formatter = DateFormat(format); + return List.generate(DateTime.monthsPerYear, (int index) { + final date = DateTime(now.year, index + 1); + final formatted = formatter.format(date); + return toBeginningOfSentenceCase(formatted)!; + }); + } }