61 lines
2.1 KiB
Dart
61 lines
2.1 KiB
Dart
import 'package:pmd_labs/data/dto/album_dto.dart';
|
||
import 'package:pmd_labs/data/mapper/album_mapper.dart';
|
||
import 'package:dio/dio.dart';
|
||
import 'package:pmd_labs/card_data.dart';
|
||
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
|
||
|
||
abstract class ApiInterface {
|
||
Future<List<CardData>?> loadData();
|
||
}
|
||
|
||
class AlbumRepository extends ApiInterface {
|
||
static final Dio _dio = Dio()
|
||
..interceptors.add(PrettyDioLogger(
|
||
requestHeader: true,
|
||
requestBody: true,
|
||
));
|
||
|
||
static const String apiKey = '535d9d508a785fae99bfb492d8f15a58';
|
||
static const String _baseUrl = 'https://api.your_album_api.com';
|
||
|
||
@override
|
||
Future<List<CardData>?> loadData({String? albumName, int page = 1, int pageSize = 5}) async {
|
||
if (albumName == null || albumName == "") albumName = 'a';
|
||
final String url =
|
||
'https://ws.audioscrobbler.com/2.0/?method=album.search&album=$albumName&api_key=$apiKey&format=json&limit=$pageSize&page=$page';
|
||
|
||
try {
|
||
final response = await _dio.get(url);
|
||
|
||
if (response.statusCode == 200) {
|
||
final List<AlbumDataDto> albumsData =
|
||
AlbumDataDto().fetchAlbums(response.data['results']['albummatches']['album']);
|
||
|
||
return albumsData.map((album) => album.toDomain()).toList();
|
||
} else {
|
||
throw Exception('Failed to load albums: ${response.statusCode}');
|
||
}
|
||
} catch (e) {
|
||
throw Exception('Error during fetching albums: $e');
|
||
}
|
||
}
|
||
|
||
// Получение информации об альбоме
|
||
Future<AlbumDataDto?> getAlbumInfo(AlbumDataDto album) async {
|
||
final String url =
|
||
'https://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=$apiKey&artist=${album.artist}&album=${album.title}&format=json';
|
||
|
||
try {
|
||
final response = await _dio.get(url);
|
||
|
||
if (response.statusCode == 200) {
|
||
return await AlbumDataDto().fetchAlbumDetails(response.data, album);
|
||
} else {
|
||
throw Exception('Failed to load album info: ${response.statusCode}');
|
||
}
|
||
} catch (e) {
|
||
throw Exception('Error during fetching album info: $e');
|
||
}
|
||
}
|
||
}
|