Skip to content

Commit

Permalink
feat: sleep and step data
Browse files Browse the repository at this point in the history
  • Loading branch information
ibrahimozkn committed Dec 17, 2024
1 parent b7bba79 commit 91915a1
Show file tree
Hide file tree
Showing 10 changed files with 105 additions and 11 deletions.
6 changes: 2 additions & 4 deletions core/lib/src/models/fitbit/fitbit_datas/fibit_data.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import 'package:studyu_core/core.dart';

abstract class FitbitData<V> {
abstract class FitbitData {
String type;
DateTime dateTime;

FitbitData(this.type, this.dateTime);

Type getDataType() => V;

@override
String toString() {
return 'FitbitData(dateTime: $dateTime)';
Expand All @@ -18,7 +16,7 @@ abstract class FitbitData<V> {
factory FitbitData.fromJson(Map<String, dynamic> json) {
switch (json['type']) {
case FitbitHeartData.dataType:
return FitbitHeartData.fromJson(json) as FitbitData<V>;
return FitbitHeartData.fromJson(json) as FitbitData;
default:
throw Exception('Unknown FitbitData type: ${json['type']}');
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import 'package:studyu_core/src/models/fitbit/fitbit_datas/fibit_data.dart';
part 'fitbit_heart_data.g.dart';

@JsonSerializable()
class FitbitHeartData extends FitbitData<FitbitHeartData> {
class FitbitHeartData extends FitbitData {
static const String dataType = 'heart';
double value;

Expand Down
23 changes: 23 additions & 0 deletions core/lib/src/models/fitbit/fitbit_datas/fitbit_sleep_data.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:studyu_core/src/models/fitbit/fitbit_datas/fibit_data.dart';

part 'fitbit_sleep_data.g.dart';

@JsonSerializable()
class FitbitSleepData extends FitbitData {
static const String dataType = 'steps';
DateTime dateOfSleep;
String level;

FitbitSleepData(
this.dateOfSleep,
this.level,
DateTime dateTime,
) : super(dataType, dateTime);

factory FitbitSleepData.fromJson(Map<String, dynamic> json) =>
_$FitbitSleepDataFromJson(json);

@override
Map<String, dynamic> toJson() => _$FitbitSleepDataToJson(this);
}
22 changes: 22 additions & 0 deletions core/lib/src/models/fitbit/fitbit_datas/fitbit_sleep_data.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 18 additions & 0 deletions core/lib/src/models/fitbit/fitbit_datas/fitbit_step_data.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:studyu_core/src/models/fitbit/fitbit_datas/fibit_data.dart';

part 'fitbit_step_data.g.dart';

@JsonSerializable()
class FitbitStepData extends FitbitData {
static const String dataType = 'steps';
double value;

FitbitStepData(this.value, DateTime dateTime) : super(dataType, dateTime);

factory FitbitStepData.fromJson(Map<String, dynamic> json) =>
_$FitbitStepDataFromJson(json);

@override
Map<String, dynamic> toJson() => _$FitbitStepDataToJson(this);
}
20 changes: 20 additions & 0 deletions core/lib/src/models/fitbit/fitbit_datas/fitbit_step_data.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions core/lib/src/models/fitbit/fitbit_models.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
export 'fitbit_credentials.dart';
export 'fitbit_datas/fibit_data.dart';
export 'fitbit_datas/fitbit_heart_data.dart';
export 'fitbit_datas/fitbit_step_data.dart';
export 'fitbit_datas/fitbit_sleep_data.dart';
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ class FitbitQuestion extends Question<FitbitQuestion> {
@override
Map<String, dynamic> toJson() => _$FitbitQuestionToJson(this);

Answer<FitbitQuestionType> constructAnswer(FitbitQuestionType data) =>
Answer.forQuestion(
Answer<FitbitData> constructAnswer(FitbitData data) => Answer.forQuestion(
this,
data,
);
}

enum FitbitQuestionType {
heartrate,
sleep,
steps;

String toJson() => name;
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -670,14 +670,24 @@ class FitbitQuestionFormData extends QuestionFormData {
return data;
}

FitbitQuestionType _buildQuestionValue(String value) {
return FitbitQuestionType.fromJson(value);
FitbitData _buildQuestionValue(String value) {
final FitbitQuestionType fitbitType = FitbitQuestionType.fromJson(value);

switch (fitbitType) {
case FitbitQuestionType.heartrate:
return FitbitHeartData(0, DateTime.now());
case FitbitQuestionType.steps:
return FitbitStepData(0, DateTime.now());
case FitbitQuestionType.sleep:
return FitbitSleepData(DateTime.now(), 'deep', DateTime.now());
}
}

@override
Answer constructAnswerFor(dynamic responseOption) {
final question = toQuestion() as FitbitQuestion;
final value = _buildQuestionValue(responseOption as String);
return question.constructAnswer(value);
final fitbitData = _buildQuestionValue(responseOption as String);

return question.constructAnswer(fitbitData);
}
}

0 comments on commit 91915a1

Please sign in to comment.