Skip to content

Commit

Permalink
Merge pull request #80 from seigi0714/feature/refact_trip_entity
Browse files Browse the repository at this point in the history
Tripエンティティのリファクタリング
  • Loading branch information
seigi0714 committed Apr 11, 2023
2 parents 6efb5f2 + a68a20f commit dff5564
Show file tree
Hide file tree
Showing 15 changed files with 415 additions and 138 deletions.
4 changes: 2 additions & 2 deletions lib/features/trips/controller/trip_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const emptyTripTitleMessage = '旅のタイトルを入力してください。'
const tripDateCompareErrorMessage = '帰宅日は出発日以降に設定してください。';

@riverpod
Future<List<Trip>> trips(TripsRef ref) => ref
Future<List<ExistingTrip>> trips(TripsRef ref) => ref
.watch(tripControllerProvider)
.fetchTripsByUserId(ref.watch(appUserControllerProvider).value!.id);

Expand Down Expand Up @@ -46,7 +46,7 @@ class TripController {
}
}

Future<List<Trip>> fetchTripsByUserId(int userId) {
Future<List<ExistingTrip>> fetchTripsByUserId(int userId) {
try {
return _ref.read(tripInteractorProvider).fetchTripsByUserId(userId);
} on Exception catch (e) {
Expand Down
6 changes: 3 additions & 3 deletions lib/features/trips/controller/trip_controller.g.dart

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

5 changes: 3 additions & 2 deletions lib/features/trips/data/models/create_trip_response.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ part 'create_trip_response.g.dart';
@freezed
class CreateTripResponse with _$CreateTripResponse {
const factory CreateTripResponse({
required int id,
required String name,
@DateConverter() required DateTime fromDate,
@DateConverter() required DateTime endDate,
@DateConverter() required DateTime fromDate,
@DateConverter() required DateTime endDate,
}) = _CreateTripResponse;

factory CreateTripResponse.fromJson(Map<String, dynamic> json) =>
Expand Down
32 changes: 26 additions & 6 deletions lib/features/trips/data/models/create_trip_response.freezed.dart

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

2 changes: 2 additions & 0 deletions lib/features/trips/data/models/create_trip_response.g.dart

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

45 changes: 30 additions & 15 deletions lib/features/trips/data/repositories/trip_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import 'package:trip_app_nativeapp/features/trips/domain/entity/trip/value/trip_
import 'package:trip_app_nativeapp/features/trips/domain/entity/trip/value/trip_belonging_num.dart';
import 'package:trip_app_nativeapp/features/trips/domain/entity/trip/value/trip_invitation_num.dart';
import 'package:trip_app_nativeapp/features/trips/domain/entity/trip/value/trip_invitation_status.dart';
import 'package:trip_app_nativeapp/features/trips/domain/entity/trip/value/trip_period.dart';
import 'package:trip_app_nativeapp/features/trips/domain/entity/trip/value/trip_title.dart';
import 'package:trip_app_nativeapp/features/trips/domain/repositories/trip_repository_interface.dart';
import 'package:trip_app_nativeapp/features/user/domain/entity/app_user.dart';

Expand All @@ -37,15 +39,18 @@ class TripRepository implements TripRepositoryInterface {
static const _invitationBasePath = '/trip_invitations';

@override
Future<List<Trip>> fetchTripsByUserId(int userId) async {
Future<List<ExistingTrip>> fetchTripsByUserId(int userId) async {
final res = await privateV1Client.get('/users/$userId$_basePath');
final tripsRes = FetchTripsResponse.fromJson(res.data);
return tripsRes.items
.map(
(tripRes) => Trip.createExistingTrip(
title: tripRes.name,
fromDate: tripRes.fromDate,
endDate: tripRes.endDate,
id: tripRes.id,
title: TripTitle(value: tripRes.name),
period: TripPeriod(
fromDate: tripRes.fromDate,
endDate: tripRes.endDate,
),
members: tripRes.members
.map(
(memberRes) => TripMember.joined(
Expand All @@ -58,28 +63,34 @@ class TripRepository implements TripRepositoryInterface {
),
)
.toList(),
),
// TODO(seigi0714): fetchの際持ち物を追加
belongings: [],
) as ExistingTrip,
)
.toList();
}

@override
Future<Trip> createTrip(Trip trip) async {
Future<ExistingTrip> createTrip(NewTrip trip) async {
final bodyMap = {
'name': trip.title.value,
'from_date': trip.tripPeriod.fromDate.toJsonDateString(),
'end_date': trip.tripPeriod.endDate.toJsonDateString(),
'from_date': trip.period.fromDate.toJsonDateString(),
'end_date': trip.period.endDate.toJsonDateString(),
};
final res = await privateV1Client.post(_basePath, data: bodyMap);
final tripRes = CreateTripResponse.fromJson(res.data);
return Trip.createExistingTrip(
title: tripRes.name,
fromDate: tripRes.fromDate,
endDate: tripRes.endDate,
id: tripRes.id,
title: TripTitle(value: tripRes.name),
period: TripPeriod(
fromDate: tripRes.fromDate,
endDate: tripRes.endDate,
),
members: [
// post のレスポンスにメンバー情報は含まれないので一旦空配列を入れておく
],
);
belongings: [], // post のレスポンスにメンバー情報は含まれないので一旦空配列を入れておく
) as ExistingTrip;
}

@override
Expand Down Expand Up @@ -116,12 +127,16 @@ class TripRepository implements TripRepositoryInterface {

return TripInvitation.createDetailTripInvitation(
trip: Trip.createExistingTrip(
title: invitationRes.trip.name,
fromDate: invitationRes.trip.fromDate,
endDate: invitationRes.trip.endDate,
id: invitationRes.trip.id,
title: TripTitle(value: invitationRes.trip.name),
period: TripPeriod(
fromDate: invitationRes.trip.fromDate,
endDate: invitationRes.trip.endDate,
),
members: [
// 招待レスポンスにメンバー情報は含まれないので一旦空配列を入れておく
],
belongings: [], // 招待レスポンスに持ち物は含まれないので一旦空配列を入れておく
),
invitationUserName: invitationRes.invitationUser.name,
invitationNum: invitationNum,
Expand Down
42 changes: 9 additions & 33 deletions lib/features/trips/domain/entity/trip/trip.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:trip_app_nativeapp/features/trips/domain/entity/trip/trip_belonging.dart';
import 'package:trip_app_nativeapp/features/trips/domain/entity/trip/trip_member.dart';
import 'package:trip_app_nativeapp/features/trips/domain/entity/trip/value/trip_period.dart';
import 'package:trip_app_nativeapp/features/trips/domain/entity/trip/value/trip_title.dart';
Expand All @@ -7,44 +8,19 @@ part 'trip.freezed.dart';

@Freezed(copyWith: false, fromJson: false, toJson: false)
class Trip with _$Trip {
const factory Trip({
required TripTitle title,
required TripPeriod tripPeriod,

/// 新規作成時はメンバーがいないので null 許容
List<TripMember>? members,
}) = _Trip;

/// 新規作成時のfactory関数
factory Trip.createNewTrip({
required String title,
required DateTime fromDate,
required DateTime endDate,
}) {
return Trip(
title: TripTitle(value: title),
tripPeriod: TripPeriod(
fromDate: fromDate,
endDate: endDate,
),
);
}
required TripTitle title,
required TripPeriod period,
}) = NewTrip;

/// 作成済み旅エンティティのfactory関数
/// 現状一緒だけどcreateNewTripと内容変わるはずなので定義しておく
factory Trip.createExistingTrip({
required String title,
required DateTime fromDate,
required DateTime endDate,
required int id,
required TripTitle title,
required TripPeriod period,
required List<TripMember> members,
}) {
return Trip(
title: TripTitle(value: title),
tripPeriod: TripPeriod(
fromDate: fromDate,
endDate: endDate,
),
members: members,
);
}
required List<AddedTripBelonging> belongings,
}) = ExistingTrip;
}
Loading

0 comments on commit dff5564

Please sign in to comment.