import 'package:get/get.dart'; import 'package:solian/exceptions/request.dart'; import 'package:solian/exceptions/unauthorized.dart'; import 'package:solian/models/post.dart'; import 'package:solian/providers/auth.dart'; class PostProvider extends GetxController { Future seeWhatsNew(int pivot) async { final AuthProvider auth = Get.find(); final client = await auth.configureClient('co'); final resp = await client.get('/whats-new?pivot=$pivot'); if (resp.statusCode != 200) { throw RequestException(resp); } return resp; } Future listRecommendations(int page, {String? realm, String? channel, int take = 10}) async { final queries = [ 'take=$take', 'offset=$page', if (realm != null) 'realm=$realm', ]; final AuthProvider auth = Get.find(); final client = await auth.configureClient('interactive'); final resp = await client.get( channel == null ? '/recommendations?${queries.join('&')}' : '/recommendations/$channel?${queries.join('&')}', ); if (resp.statusCode != 200) { throw RequestException(resp); } return resp; } Future listDraft(int page) async { final AuthProvider auth = Get.find(); if (auth.isAuthorized.isFalse) throw const UnauthorizedException(); final queries = [ 'take=${10}', 'offset=$page', ]; final client = await auth.configureClient('interactive'); final resp = await client.get('/posts/drafts?${queries.join('&')}'); if (resp.statusCode != 200) { throw RequestException(resp); } return resp; } Future listPost(int page, {String? realm, String? author, tag, category, int take = 10}) async { final queries = [ 'take=$take', 'offset=$page', if (tag != null) 'tag=$tag', if (category != null) 'category=$category', if (author != null) 'author=$author', if (realm != null) 'realm=$realm', ]; final AuthProvider auth = Get.find(); final client = await auth.configureClient('co'); final resp = await client.get('/posts?${queries.join('&')}'); if (resp.statusCode != 200) { throw RequestException(resp); } return resp; } Future listPostReplies(String alias, int page) async { final AuthProvider auth = Get.find(); final client = await auth.configureClient('co'); final resp = await client.get('/posts/$alias/replies?take=${10}&offset=$page'); if (resp.statusCode != 200) { throw RequestException(resp); } return resp; } Future> listPostFeaturedReply(String alias, {int take = 1}) async { final AuthProvider auth = Get.find(); final client = await auth.configureClient('co'); final resp = await client.get('/posts/$alias/replies/featured?take=$take'); if (resp.statusCode != 200) { throw RequestException(resp); } return List.from(resp.body.map((x) => Post.fromJson(x))); } Future getPost(String alias) async { final AuthProvider auth = Get.find(); final client = await auth.configureClient('co'); final resp = await client.get('/posts/$alias'); if (resp.statusCode != 200) { throw RequestException(resp); } return resp; } }