diff --git a/flutter_app/lib/data/dtos/thrones_character_dto.dart b/flutter_app/lib/data/dtos/thrones_character_dto.dart index 70ab86f..277f44a 100644 --- a/flutter_app/lib/data/dtos/thrones_character_dto.dart +++ b/flutter_app/lib/data/dtos/thrones_character_dto.dart @@ -3,56 +3,26 @@ import 'package:json_annotation/json_annotation.dart'; part 'thrones_character_dto.g.dart'; @JsonSerializable(createToJson: false) -class ThronesCharactersDto { - final List characters; - final InfoDto? info; +class ThronesCharacterDto { + final int id; + final String firstName; + final String lastName; + final String fullName; + final String title; + final String family; + final String image; + final String imageUrl; - const ThronesCharactersDto({required this.characters, this.info}); + ThronesCharacterDto({ + required this.id, + required this.firstName, + required this.lastName, + required this.fullName, + required this.title, + required this.family, + required this.image, + required this.imageUrl, + }); - factory ThronesCharactersDto.fromJson(List json) { - final List characters = json - .map((item) => ThronesCharacterDataDto.fromJson(item as Map)) - .toList(); - return ThronesCharactersDto(characters: characters); - } -} - -@JsonSerializable(createToJson: false) -class ThronesCharacterDataDto { - final int? id; - final String? firstName; - final String? lastName; - final String? fullName; - final String? title; - final String? family; - final String? image; - final String? imageUrl; - - const ThronesCharacterDataDto( - {this.id, this.firstName, this.lastName, this.fullName, this.title, this.family, this.image, this.imageUrl,}); - - factory ThronesCharacterDataDto.fromJson(Map json) => - _$ThronesCharacterDataDtoFromJson(json); -} - -@JsonSerializable(createToJson: false) -class InfoDto { - final String? next; - final String? last; - final int? nextPage; - final int? lastPage; - - InfoDto({this.next, this.last}) - : nextPage = _extractPageNumber(next), - lastPage = _extractPageNumber(last); - - static int? _extractPageNumber(String? url) { - if (url == null) return null; - final RegExp regExp = RegExp(r'page=(\d+)'); - final Match? match = regExp.firstMatch(url); - return match != null ? int.parse(match.group(1)!) : null; - } - - factory InfoDto.fromJson(Map json) => - _$InfoDtoFromJson(json); + factory ThronesCharacterDto.fromJson(Map json) => _$ThronesCharacterDtoFromJson(json); } \ No newline at end of file diff --git a/flutter_app/lib/data/dtos/thrones_character_dto.g.dart b/flutter_app/lib/data/dtos/thrones_character_dto.g.dart index 2176d6f..c0e5cfb 100644 --- a/flutter_app/lib/data/dtos/thrones_character_dto.g.dart +++ b/flutter_app/lib/data/dtos/thrones_character_dto.g.dart @@ -6,32 +6,14 @@ part of 'thrones_character_dto.dart'; // JsonSerializableGenerator // ************************************************************************** -ThronesCharactersDto _$ThronesCharactersDtoFromJson( - Map json) => - ThronesCharactersDto( - characters: (json['characters'] as List) - .map((e) => - ThronesCharacterDataDto.fromJson(e as Map)) - .toList(), - info: json['info'] == null - ? null - : InfoDto.fromJson(json['info'] as Map), - ); - -ThronesCharacterDataDto _$ThronesCharacterDataDtoFromJson( - Map json) => - ThronesCharacterDataDto( - id: (json['id'] as num?)?.toInt(), - firstName: json['firstName'] as String?, - lastName: json['lastName'] as String?, - fullName: json['fullName'] as String?, - title: json['title'] as String?, - family: json['family'] as String?, - image: json['image'] as String?, - imageUrl: json['imageUrl'] as String?, - ); - -InfoDto _$InfoDtoFromJson(Map json) => InfoDto( - next: json['next'] as String?, - last: json['last'] as String?, +ThronesCharacterDto _$ThronesCharacterDtoFromJson(Map json) => + ThronesCharacterDto( + id: (json['id'] as num).toInt(), + firstName: json['firstName'] as String, + lastName: json['lastName'] as String, + fullName: json['fullName'] as String, + title: json['title'] as String, + family: json['family'] as String, + image: json['image'] as String, + imageUrl: json['imageUrl'] as String, ); diff --git a/flutter_app/lib/data/mappers/characters_mapper.dart b/flutter_app/lib/data/mappers/characters_mapper.dart index 1c02009..9910fac 100644 --- a/flutter_app/lib/data/mappers/characters_mapper.dart +++ b/flutter_app/lib/data/mappers/characters_mapper.dart @@ -5,7 +5,7 @@ import 'package:flutter_app/domain/models/home.dart'; const _imagePlaceholder = 'https://upload.wikimedia.org/wikipedia/en/archive/b/b1/20210811082420%21Portrait_placeholder.png'; -extension ThronesCharacterDtoToModel on ThronesCharacterDataDto { +extension ThronesCharacterDtoToModel on ThronesCharacterDto { CardData toDomain() => CardData( descriptionText: _makeDescriptionText(title, family), firstName: firstName, @@ -27,10 +27,3 @@ extension ThronesCharacterDtoToModel on ThronesCharacterDataDto { : ''; } } - -extension ThronesCharactersDtoToModel on ThronesCharactersDto { - HomeData toDomain() => HomeData( - data: characters.map((e) => e.toDomain()).toList(), - nextPage: info?.nextPage, - ); -} \ No newline at end of file diff --git a/flutter_app/lib/data/repositories/got_repository.dart b/flutter_app/lib/data/repositories/got_repository.dart index efd96ba..4964cb4 100644 --- a/flutter_app/lib/data/repositories/got_repository.dart +++ b/flutter_app/lib/data/repositories/got_repository.dart @@ -7,11 +7,7 @@ import 'package:flutter_app/domain/models/home.dart'; import 'package:pretty_dio_logger/pretty_dio_logger.dart'; class ThronesRepository extends ApiInterface { - static final Dio _dio = Dio() - ..interceptors.add(PrettyDioLogger( - requestHeader: true, - requestBody: true, - )); + static final Dio _dio = Dio(); static const String _baseUrl = 'https://thronesapi.com'; @@ -24,16 +20,14 @@ class ThronesRepository extends ApiInterface { try { const String url = '$_baseUrl/api/v2/Characters'; - final Response response = await _dio.get>( - url, - ); + final Response response = await _dio.get>(url); - final List characters = (response.data as List) - .map((e) => ThronesCharacterDataDto.fromJson(e as Map)) + final List characters = (response.data as List) + .map((e) => ThronesCharacterDto.fromJson(e as Map)) .toList(); final List data = characters - .where((character) => q == null || character.fullName!.toLowerCase().contains(q.toLowerCase())) + .where((character) => q == null || character.fullName.toLowerCase().contains(q.toLowerCase())) .map((e) => e.toDomain()) .toList();