cdb_ui/lib/api.dart
2024-09-05 10:25:18 +02:00

166 lines
3.9 KiB
Dart

import 'dart:convert';
import 'package:http/http.dart' as http;
class API {
static String instance = "http://192.168.178.30:8080";
Future<String> getRequest(String url) async {
var resp = await http.get(Uri.parse(url), headers: <String, String>{
'Access-Control-Allow-Origin': '*',
});
return resp.body;
}
Future<String> postRequest(String url, Map<String, dynamic> data) async {
var resp = await http.post(Uri.parse(url),
headers: <String, String>{
'Access-Control-Allow-Origin': '*',
},
body: data);
return resp.body;
}
Future<List<dynamic>> getItems() async {
var resp = jsonDecode(await getRequest("$instance/items"));
var lst = resp["items"];
return lst as List<dynamic>;
}
Future<List<dynamic>> getUniqueField(
String item, String variant, String field) async {
return jsonDecode(await getRequest(
"$instance/item/$item/$variant/unique?field=$field")) as List<dynamic>;
}
Future<Map<String, dynamic>> getLocations() async {
return jsonDecode(await getRequest("$instance/locations"));
}
Future<Item> getItem(String item) async {
return Item(jsonDecode(await getRequest("$instance/item/$item")));
}
Future<Transaction> getTransaction(String id) async {
return Transaction(
jsonDecode(await getRequest("$instance/transaction/$id")));
}
Future<List<Transaction>> getInventory(String item) async {
var resp = jsonDecode(await getRequest("$instance/item/$item/inventory"))
as List<dynamic>;
return resp.map((x) => Transaction(x)).toList();
}
Future<List<Transaction>> getInventoryOfVariant(
String item, String variant) async {
var resp =
jsonDecode(await getRequest("$instance/item/$item/$variant/inventory"))
as List<dynamic>;
return resp.map((x) => Transaction(x)).toList();
}
Future<String> supplyItem(String item, String variant, String price,
String? origin, String? location) async {
if (origin!.isEmpty) {
origin = null;
}
if (location!.isEmpty) {
location = null;
}
return jsonDecode(await postRequest("$instance/supply", {
"item": item,
"variant": variant,
"price": price,
"origin": origin,
"location": location
}))["uuid"];
}
String getImageURL(String item) {
return "$instance/$item/image";
}
}
class Item {
late String id;
late String name;
late String category;
late Map<String, ItemVariant> variants;
Item(Map<String, dynamic> json) {
id = json["uuid"];
name = json["name"];
category = json["category"];
variants = <String, ItemVariant>{};
json["variants"].forEach((key, value) {
variants[key] = ItemVariant(value);
});
}
}
class ItemVariant {
late String item;
late String variant;
late String name;
int? min;
int? expiry;
ItemVariant(Map<String, dynamic> json) {
item = json["item"];
variant = json["variant"];
name = json["name"];
min = json["min"];
expiry = json["expiry"];
}
}
class Price {
late double value;
late String currency;
Price(Map<String, dynamic> json) {
value = json["value"];
currency = json["currency"];
}
}
class Transaction {
late String uuid;
late String item;
late String variant;
late Price price;
late String? origin;
late int timestamp;
late ConsumeInfo consumed;
late bool expired;
Transaction(Map<String, dynamic> json) {
uuid = json["uuid"];
item = json["item"];
variant = json["variant"];
price = Price(json["price"]);
origin = json["origin"];
timestamp = json["timestamp"];
expired = json["expired"];
consumed = ConsumeInfo(json["consumed"]);
}
}
class ConsumeInfo {
late String destination;
late Price price;
late int timestamp;
ConsumeInfo(Map<String, dynamic> json) {
destination = json["destination"];
price = Price(json["price"]);
timestamp = json["timestamp"];
}
}