Items workflow done

This commit is contained in:
Andrew 2023-04-12 01:22:50 +07:00
parent d973954a75
commit 6ba57612fa
5 changed files with 565 additions and 5 deletions

View file

@ -1,5 +1,6 @@
import 'dart:async';
import 'dart:convert';
import 'package:get/get.dart';
import 'package:tuuli_app/api/model/access_token_model.dart';
import 'package:http/browser_client.dart';
import 'package:http/http.dart';
@ -23,6 +24,8 @@ class ErrorOrData<T> {
}
typedef FutureErrorOrData<T> = Future<ErrorOrData<T>>;
typedef TableItemsData = Map<String, dynamic>;
typedef TableItemsDataList = List<TableItemsData>;
class ApiClient {
final BrowserClient _client = BrowserClient();
@ -142,6 +145,155 @@ class ApiClient {
return ErrorOrData(ignored, error);
}
FutureErrorOrData<TableItemsDataList> getTableItems(TableModel table) async {
TableItemsDataList? data;
Exception? error;
final response = await post(
'/items/${Uri.encodeComponent(table.tableName)}',
body: {
"fields": ["*"]
},
headers: {
'Content-Type': 'application/json',
},
);
if (response.statusCode == 200) {
final body = json.decode(await response.stream.bytesToString())
as Map<String, dynamic>;
if (body['error'] != null) {
error = Exception(body['error']);
} else if (body['items'] == null) {
error = Exception('Server error');
} else {
data = (body['items'] as List)
.map((e) => e as TableItemsData)
.toList(growable: false);
}
} else if (response.statusCode == 422) {
error = Exception('Invalid request parameters');
} else {
error = Exception('HTTP ${response.statusCode}');
}
return ErrorOrData(data, error);
}
FutureErrorOrData<bool> insertItem(
TableModel table, TableItemsData newItem) async {
bool? ignored;
Exception? error;
final response = await post(
'/items/${Uri.encodeComponent(table.tableName)}/+',
body: newItem.map((key, value) =>
MapEntry(key, value is DateTime ? value.toIso8601String() : value)),
headers: {
'Content-Type': 'application/json',
},
);
if (response.statusCode == 200) {
final body = json.decode(await response.stream.bytesToString());
if (body['error'] != null) {
error = Exception(body['error']);
} else {
ignored = true;
}
} else if (response.statusCode == 422) {
error = Exception('Invalid request parameters');
} else {
error = Exception('HTTP ${response.statusCode}');
}
return ErrorOrData(ignored, error);
}
FutureErrorOrData<bool> updateItem(
TableModel table, TableItemsData newItem, TableItemsData oldItem) async {
bool? ignored;
Exception? error;
final response = await post(
'/items/${Uri.encodeComponent(table.tableName)}/*',
body: {
"item": newItem.map((key, value) =>
MapEntry(key, value is DateTime ? value.toIso8601String() : value)),
"oldItem": oldItem.map((key, value) =>
MapEntry(key, value is DateTime ? value.toIso8601String() : value)),
},
headers: {
'Content-Type': 'application/json',
},
);
if (response.statusCode == 200) {
final body = json.decode(await response.stream.bytesToString());
if (body['error'] != null) {
error = Exception(body['error']);
} else {
ignored = true;
}
} else if (response.statusCode == 422) {
error = Exception('Invalid request parameters');
} else {
error = Exception('HTTP ${response.statusCode}');
}
return ErrorOrData(ignored, error);
}
FutureErrorOrData<bool> deleteItem(TableModel table, TableItemsData e) async {
bool? ignored;
Exception? error;
TableField? primaryField =
table.columns.firstWhereOrNull((el) => el.isPrimary);
TableField? uniqueField =
table.columns.firstWhereOrNull((el) => el.isUnique);
final response = await post(
'/items/${Uri.encodeComponent(table.tableName)}/-',
body: {
"defs": [
if (primaryField != null)
{
"name": primaryField.fieldName,
"value": e[primaryField.fieldName],
}
else if (uniqueField != null)
{
"name": uniqueField.fieldName,
"value": e[uniqueField.fieldName],
}
else
for (final field in table.columns)
{
"name": field.fieldName,
"value": e[field.fieldName],
}
],
},
headers: {
'Content-Type': 'application/json',
},
);
if (response.statusCode == 200) {
final body = json.decode(await response.stream.bytesToString());
if (body['error'] != null) {
error = Exception(body['error']);
} else {
ignored = true;
}
} else if (response.statusCode == 422) {
error = Exception('Invalid request parameters');
} else {
error = Exception('HTTP ${response.statusCode}');
}
return ErrorOrData(ignored, error);
}
// REGION: HTTP Methods implementation
Future<StreamedResponse> get(
String path, {
Map<String, String>? headers,