From db39169907784781ee26c0bfcca1814b38b66ac8 Mon Sep 17 00:00:00 2001 From: Sergey Elpashev Date: Tue, 4 Jun 2024 14:36:43 +0300 Subject: [PATCH] Add: new item interfaces and category interface --- lib/interfaces/items.dart | 72 ++++++++++++++++++++++++++++++++++++++- lib/tools/items.dart | 50 ++++++++++++++++++++++----- 2 files changed, 112 insertions(+), 10 deletions(-) diff --git a/lib/interfaces/items.dart b/lib/interfaces/items.dart index c4af0d9..8eb9939 100644 --- a/lib/interfaces/items.dart +++ b/lib/interfaces/items.dart @@ -1,5 +1,27 @@ import 'dart:convert'; +class ItemsDataResponse { + final List rows; + + ItemsDataResponse({ + required this.rows, + }); + + factory ItemsDataResponse.fromRawJson(String str) => + ItemsDataResponse.fromJson(json.decode(str)); + + String toRawJson() => json.encode(toJson()); + + factory ItemsDataResponse.fromJson(Map json) => + ItemsDataResponse( + rows: List.from(json["rows"].map((x) => GymItem.fromJson(x))), + ); + + Map toJson() => { + "rows": List.from(rows.map((x) => x.toJson())), + }; +} + class GymItem { final String id; final String externalId; @@ -44,7 +66,7 @@ class GymItem { "title": title, "description": description, "count": count, - "price": price * 100, + "price": price, "categoryId": categoryId, "images": List.from(images.map((x) => x.toJson())), }; @@ -78,3 +100,51 @@ class GymImage { "url": url, }; } + +class CategoryDataResponse { + final List rows; + + CategoryDataResponse({ + required this.rows, + }); + + factory CategoryDataResponse.fromRawJson(String str) => + CategoryDataResponse.fromJson(json.decode(str)); + + String toRawJson() => json.encode(toJson()); + + factory CategoryDataResponse.fromJson(Map json) => + CategoryDataResponse( + rows: List.from( + json["rows"].map((x) => GymCategory.fromJson(x))), + ); + + Map toJson() => { + "rows": List.from(rows.map((x) => x.toJson())), + }; +} + +class GymCategory { + final String id; + final String name; + + GymCategory({ + required this.id, + required this.name, + }); + + factory GymCategory.fromRawJson(String str) => + GymCategory.fromJson(json.decode(str)); + + String toRawJson() => json.encode(toJson()); + + factory GymCategory.fromJson(Map json) => GymCategory( + id: json["id"], + name: json["name"], + ); + + Map toJson() => { + "id": id, + "name": name, + }; +} diff --git a/lib/tools/items.dart b/lib/tools/items.dart index 7b86bbc..9a21da1 100644 --- a/lib/tools/items.dart +++ b/lib/tools/items.dart @@ -6,22 +6,30 @@ import 'package:gymlink_module_web/providers/main.dart'; import 'package:http/http.dart' as http; import 'package:provider/provider.dart'; -Future> getItems(BuildContext context) async { +Future> getItems(BuildContext context, + {String searchText = '', String categoryId = ''}) async { final token = context.read().token; if (token != '') { final Uri url = Uri.http('gymlink.freemyip.com:8080', 'api/product/get-list'); try { - final response = await http.get(url, headers: { - 'Authorization': 'Bearer $token', - }); - if (response.statusCode == 200) { - final data = - jsonDecode(utf8.decode(response.bodyBytes)) as List; - final items = data.map((e) => GymItem.fromJson(e)).toList(); + final response = await http.post(url, + headers: { + 'Authorization': 'Bearer $token', + 'Content-Type': 'application/json' + }, + body: jsonEncode({ + "search": searchText, + "page": 0, + "pageSize": 0, + "filter": categoryId, + "direction": 1 + })); + if (response.statusCode == 201) { + final items = ItemsDataResponse.fromRawJson(response.body).rows; return items; } - throw Error(); + throw response.body; } catch (e) { debugPrint('error: $e'); return await Future.delayed( @@ -64,3 +72,27 @@ Future> getItemsByIds( context.read().onError(); return []; } + +Future> getCategories(BuildContext context) async { + final token = context.read().token; + if (token != '') { + final Uri url = Uri.http( + 'gymlink.freemyip.com:8080', 'api/category/get-internal-categories'); + try { + final response = await http.get(url, headers: { + 'Authorization': 'Bearer $token', + }); + if (response.statusCode == 200) { + final categories = CategoryDataResponse.fromRawJson(response.body).rows; + return categories; + } + throw response.body; + } catch (e) { + debugPrint('error: $e'); + return await Future.delayed( + const Duration(seconds: 5), () => getCategories(context)); + } + } + context.read().onError(); + return []; +}