64 lines
2.4 KiB
Dart
64 lines
2.4 KiB
Dart
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<List<ArticleModel>> getArticles(int page, int itemCount) =>
|
|
BaseService.getSaveFromServer(
|
|
() => _getArticles(page, itemCount),
|
|
List<ArticleModel>.empty()
|
|
);
|
|
|
|
static Future<List<ArticleModel>> searchArticles(int page, int itemCount, String searchWord) =>
|
|
BaseService.getSaveFromServer(
|
|
() => _getArticles(page, itemCount, searchWord: searchWord),
|
|
List<ArticleModel>.empty()
|
|
);
|
|
|
|
static Future<List<ArticleModel>> getArticlesFromOrganisations(int page, int itemCount, List<RepresentedOrganisationModel> organisations) =>
|
|
BaseService.getSaveFromServer(
|
|
() => _getArticles(page, itemCount, organisations: organisations),
|
|
List<ArticleModel>.empty()
|
|
);
|
|
|
|
static Future<List<ArticleModel>> _getArticles(int page, int itemCount, {String? searchWord, List<RepresentedOrganisationModel>? organisations}) async {
|
|
|
|
final parameters = <String, dynamic> {
|
|
_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<ArticleModel>().toList();
|
|
}
|
|
} |