import 'dart:convert'; import 'package:hiddingsel_app/appflow/model/represented_organisations.dart'; import '../../../services/network.dart'; import '../../model/articles.dart'; import 'package:http/http.dart'; class WordpressController { static const String _baseUrl = 'www.hiddingsel.de'; static const String _path = 'wp-json/wp/v2/posts'; static const String _parameterPage = 'page'; static const String _parameterPerPage = 'per_page'; static const String _parameterSearch = 'search'; static const String _parameterCategories = 'categories'; static const String _parameterEmbed = '_embed'; static const int _httpCodeKeineWeiterenArticel = 400; static Future> getArticles(int page, int itemCount) => BaseService.getSaveFromServer( () => _getArticles(page, itemCount), List.empty() ); static Future> searchArticles(int page, int itemCount, String searchWord) => BaseService.getSaveFromServer( () => _getArticles(page, itemCount, searchWord: searchWord), List.empty() ); static Future> getArticlesFromOrganisations(int page, int itemCount, List organisations) => BaseService.getSaveFromServer( () => _getArticles(page, itemCount, organisations: organisations), List.empty() ); static Future> _getArticles(int page, int itemCount, {String? searchWord, List? organisations}) async { final parameters = { _parameterPage: (page + 1).toString(), _parameterPerPage: itemCount.toString(), _parameterSearch: searchWord, _parameterCategories: organisations?.map((e) => e.wordpressId).join(','), _parameterEmbed: null, }; if(searchWord?.isEmpty ?? true) { parameters.remove(_parameterSearch); } if(organisations?.isEmpty ?? true) { parameters.remove(_parameterCategories); } final uri = Uri.https(_baseUrl, _path, parameters); final response = await get(uri); if (response.statusCode == _httpCodeKeineWeiterenArticel) { return []; } final jsonData = json.decode(response.body); return jsonData.map((article) => ArticleModel.fromWordpressJson(article)).cast().toList(); } }