Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…utter into 80-돌봄급구-돌봄급구-상세-페이지-ui-구현
  • Loading branch information
Yellowtoast committed Feb 26, 2024
2 parents 1684937 + 0697021 commit c5f4823
Show file tree
Hide file tree
Showing 20 changed files with 152 additions and 130 deletions.
2 changes: 1 addition & 1 deletion lib/app/router/app_router.g.dart

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

42 changes: 42 additions & 0 deletions lib/core/logger/provider_logger.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';

class ProviderLogger extends ProviderObserver {
// 로깅할 Provider
final observingProvider = [
// 'currentTabTypeProvider',
// 'petMateSearchFilterProvider',
// 'petSosSearchFilterProvider',
];

@override
void didAddProvider(ProviderBase<Object?> provider, Object? value,
ProviderContainer container) {
super.didAddProvider(provider, value, container);

if (observingProvider.contains(provider.name)) {
debugPrint('Provider added ::: ${provider.name}');
}
}

@override
void didDisposeProvider(
ProviderBase<Object?> provider, ProviderContainer container) {
super.didDisposeProvider(provider, container);

if (observingProvider.contains(provider.name)) {
debugPrint('Provider disposed ::: ${provider.name}');
}
}

@override
void didUpdateProvider(ProviderBase<Object?> provider, Object? previousValue,
Object? newValue, ProviderContainer container) {
super.didUpdateProvider(provider, previousValue, newValue, container);

if (observingProvider.contains(provider.name)) {
debugPrint(
'Provider updated ::: ${provider.name} ::: ${previousValue.toString()} -> ${newValue.toString()}');
}
}
}
29 changes: 14 additions & 15 deletions lib/core/pagination/pagination_response.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ class PaginationResponse<T> {
required this.page,
required this.size,
required this.items,
required this.isLastPage,
});

PaginationResponse.fromJson(
Expand All @@ -13,27 +14,25 @@ class PaginationResponse<T> {
size = json['size'] as int,
items = (json['items'] as List<dynamic>)
.map((e) => fromJson.call(e))
.toList();
.toList(),
isLastPage = json['is_last_page'] as bool;

final int page;
final int size;
final List<T> items;
final bool isLastPage;

@override
bool operator ==(Object other) {
if (identical(this, other)) return true;

return other is PaginationResponse &&
other.items == items &&
other.page == page &&
other.size == size;
}
bool operator ==(Object other) =>
identical(this, other) ||
other is PaginationResponse<T> &&
runtimeType == other.runtimeType &&
page == other.page &&
size == other.size &&
items == other.items &&
isLastPage == other.isLastPage;

@override
int get hashCode => items.hashCode ^ page.hashCode ^ size.hashCode;

Map<String, dynamic> toJson() => {
'page': page,
'size': size,
};
int get hashCode =>
page.hashCode ^ size.hashCode ^ items.hashCode ^ isLastPage.hashCode;
}
42 changes: 6 additions & 36 deletions lib/features/pet/domain/breeds_pagination_response.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,45 +2,15 @@ import 'package:pets_next_door_flutter/core/pagination/pagination_response.dart'
import 'package:pets_next_door_flutter/features/pet/domain/breed.dart';

/// Metadata used when fetching movies with the paginated search API.
class BreedsPaginationResponse implements PaginationResponse<Breed> {
class BreedsPaginationResponse extends PaginationResponse<Breed> {
BreedsPaginationResponse({
required this.page,
required this.size,
required this.items,
required super.page,
required super.size,
required super.items,
required super.isLastPage,
});

BreedsPaginationResponse.fromJson(
Map<String, dynamic> json,
) : page = json['page'] as int,
size = json['size'] as int,
items = (json['items'] as List<dynamic>)
.map((e) => Breed.fromJson(e))
.toList();

@override
final int page;

@override
final int size;

@override
final List<Breed> items;

@override
bool operator ==(Object other) {
if (identical(this, other)) return true;

return other is BreedsPaginationResponse &&
other.page == page &&
other.size == size;
}

@override
int get hashCode => page.hashCode ^ size.hashCode;

@override
Map<String, dynamic> toJson() {
// TODO: implement toJson
throw UnimplementedError();
}
) : super.fromJson(json, (e) => Breed.fromJson(e));
}
4 changes: 2 additions & 2 deletions lib/features/pet/repository/pet_repository.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import 'package:pets_next_door_flutter/core/utils/result.dart';
import 'package:pets_next_door_flutter/features/pet/domain/breed.dart';
import 'package:pets_next_door_flutter/features/pet/domain/breeds_pagination_request.dart';
import 'package:pets_next_door_flutter/features/pet/domain/breeds_pagination_response.dart';
import 'package:pets_next_door_flutter/features/pet/entities/pet_data_entity.dart';

abstract interface class PetRepository {
Future<Result<List<Breed>>> getBreeds({
Future<Result<BreedsPaginationResponse>> getBreeds({
required BreedsPaginationRequest breedsPaginationRequest,
});

Expand Down
6 changes: 3 additions & 3 deletions lib/features/pet/repository/pet_repository_impl.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:pets_next_door_flutter/core/utils/result.dart';
import 'package:pets_next_door_flutter/features/pet/data/remote/pet_remote_data_source.dart';
import 'package:pets_next_door_flutter/features/pet/domain/breed.dart';
import 'package:pets_next_door_flutter/features/pet/domain/breeds_pagination_request.dart';
import 'package:pets_next_door_flutter/features/pet/domain/breeds_pagination_response.dart';
import 'package:pets_next_door_flutter/features/pet/entities/pet_data_entity.dart';
import 'package:pets_next_door_flutter/features/pet/repository/pet_repository.dart';

Expand All @@ -13,12 +13,12 @@ final class PetRepositoryImpl implements PetRepository {
final PetRemoteDataSource _petRemoteDataSource;

@override
Future<Result<List<Breed>>> getBreeds(
Future<Result<BreedsPaginationResponse>> getBreeds(
{required BreedsPaginationRequest breedsPaginationRequest}) async {
try {
final breedsData = await _petRemoteDataSource.getBreeds(
breedsPaginationRequest: breedsPaginationRequest);
return Result.success(breedsData.items);
return Result.success(breedsData);
} on Exception catch (e) {
return Result.failure(e);
}
Expand Down
9 changes: 5 additions & 4 deletions lib/features/pet/usecases/get_breeds_use_case.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:pets_next_door_flutter/core/utils/result.dart';
import 'package:pets_next_door_flutter/features/pet/domain/breed.dart';
import 'package:pets_next_door_flutter/features/pet/domain/breeds_pagination_request.dart';
import 'package:pets_next_door_flutter/features/pet/domain/breeds_pagination_response.dart';
import 'package:pets_next_door_flutter/features/pet/repository/pet_repository.dart';

final class GetBreedsUseCase {
Expand All @@ -10,9 +10,10 @@ final class GetBreedsUseCase {

final PetRepository _petRepository;

Future<Result<List<Breed>>> call({
Future<Result<BreedsPaginationResponse>> call({
required BreedsPaginationRequest breedsPaginationRequest,
}) async {
return _petRepository.getBreeds(breedsPaginationRequest: breedsPaginationRequest);
return _petRepository.getBreeds(
breedsPaginationRequest: breedsPaginationRequest);
}
}
}
23 changes: 23 additions & 0 deletions lib/features/sos/data/dto/author_dto.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// ignore_for_file: invalid_annotation_target

import 'package:freezed_annotation/freezed_annotation.dart';

part 'author_dto.g.dart';

/// 게시물 작성자 정보 dto
@JsonSerializable()
class AuthorDto {
final int id;
final String nickname;
final String? profileImageUrl;

AuthorDto(
{required this.id,
required this.nickname,
required this.profileImageUrl});

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

Map<String, dynamic> toJson() => _$AuthorDtoToJson(this);
}
19 changes: 19 additions & 0 deletions lib/features/sos/data/dto/author_dto.g.dart

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

41 changes: 6 additions & 35 deletions lib/features/sos/data/dto/sos_pagination_response_dto.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,44 +2,15 @@ import 'package:pets_next_door_flutter/core/pagination/pagination_response.dart'
import 'package:pets_next_door_flutter/features/sos/data/dto/sos_post_dto.dart';

/// Metadata used when fetching movies with the paginated search API.
class SosPostPaginationResponseDto implements PaginationResponse<SosPostDto> {
class SosPostPaginationResponseDto extends PaginationResponse<SosPostDto> {
SosPostPaginationResponseDto({
required this.page,
required this.size,
required this.items,
required super.page,
required super.size,
required super.items,
required super.isLastPage,
});

SosPostPaginationResponseDto.fromJson(
Map<String, dynamic> json,
) : page = json['page'] as int,
size = json['size'] as int,
items = (json['items'] as List<dynamic>)
.map((e) => SosPostDto.fromJson(e))
.toList();

@override
final int page;

@override
final int size;

@override
final List<SosPostDto> items;

@override
bool operator ==(Object other) {
if (identical(this, other)) return true;

return other is SosPostPaginationResponseDto &&
other.page == page &&
other.size == size;
}

@override
int get hashCode => page.hashCode ^ size.hashCode;

@override
Map<String, dynamic> toJson() {
throw UnimplementedError();
}
) : super.fromJson(json, (e) => SosPostDto.fromJson(e));
}
3 changes: 2 additions & 1 deletion lib/features/sos/data/dto/sos_post_dto.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:pets_next_door_flutter/features/media/data/dto/media_image_dto.dart';
import 'package:pets_next_door_flutter/features/pet/data/dto/pet_data_dto.dart';
import 'package:pets_next_door_flutter/features/sos/data/dto/author_dto.dart';
import 'package:pets_next_door_flutter/features/sos/data/dto/sos_condition_dto.dart';

part 'sos_post_dto.g.dart';
Expand All @@ -29,11 +30,11 @@ class SosPostDto {

SosPostDto({
required this.id,
required this.author,
required this.conditions,
required this.content,
required this.media,
required this.title,
required this.authorId,
required this.dateStartAt,
required this.dateEndAt,
required this.thumbnailId,
Expand Down
2 changes: 1 addition & 1 deletion lib/features/sos/data/dto/sos_post_dto.g.dart

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

4 changes: 2 additions & 2 deletions lib/features/sos/repositories/sos_post_repository.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'package:pets_next_door_flutter/core/utils/result.dart';
import 'package:pets_next_door_flutter/features/sos/data/dto/sos_pagination_request_dto.dart';
import 'package:pets_next_door_flutter/features/sos/entities/sos_post_entity.dart';
import 'package:pets_next_door_flutter/features/sos/data/dto/sos_pagination_response_dto.dart';

abstract interface class SosPostRepository {
Future<Result<List<SosPostEntity>>> getSosPosts(
Future<Result<SosPostPaginationResponseDto>> getSosPosts(
SosPostPaginationRequestDto request);
}
10 changes: 3 additions & 7 deletions lib/features/sos/repositories/sos_post_repository_impl.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:pets_next_door_flutter/core/utils/result.dart';
import 'package:pets_next_door_flutter/features/sos/data/dto/sos_pagination_request_dto.dart';
import 'package:pets_next_door_flutter/features/sos/data/dto/sos_pagination_response_dto.dart';
import 'package:pets_next_door_flutter/features/sos/data/remote/sos_post_remote_data_source.dart';
import 'package:pets_next_door_flutter/features/sos/entities/sos_post_entity.dart';
import 'package:pets_next_door_flutter/features/sos/repositories/sos_post_repository.dart';

final class SosPostRepositoryImpl implements SosPostRepository {
Expand All @@ -12,17 +12,13 @@ final class SosPostRepositoryImpl implements SosPostRepository {
final SosPostRemoteDataSource _sosPostRemoteDataSource;

@override
Future<Result<List<SosPostEntity>>> getSosPosts(
Future<Result<SosPostPaginationResponseDto>> getSosPosts(
SosPostPaginationRequestDto request) async {
try {
final sosPostResponse =
await _sosPostRemoteDataSource.getSosPosts(request);

return Result.success(
sosPostResponse.items
.map((postDto) => SosPostEntity.fromDto(postDto))
.toList(),
);
return Result.success(sosPostResponse);
} on Exception catch (e) {
return Result.failure(e);
}
Expand Down
Loading

0 comments on commit c5f4823

Please sign in to comment.