Items workflow done
This commit is contained in:
parent
d973954a75
commit
6ba57612fa
5 changed files with 565 additions and 5 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue