From 2ab178596836c3f9a1271c0268bceb7cfdd59d23 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sat, 5 Oct 2019 21:38:03 +0300 Subject: [PATCH] Settings --- lib/data/repositories/client_repository.dart | 3 +- .../repositories/document_repository.dart | 4 +- lib/data/repositories/expense_repository.dart | 3 +- lib/data/repositories/invoice_repository.dart | 3 +- lib/data/repositories/payment_repository.dart | 3 +- lib/data/repositories/product_repository.dart | 3 +- lib/data/repositories/project_repository.dart | 3 +- lib/data/repositories/quote_repository.dart | 3 +- .../repositories/settings_repository.dart | 10 ++-- lib/data/repositories/task_repository.dart | 3 +- lib/data/repositories/vendor_repository.dart | 3 +- lib/data/web_client.dart | 52 ++++++++++++------- stubs/data/repositories/stub_repository | 2 +- 13 files changed, 61 insertions(+), 34 deletions(-) diff --git a/lib/data/repositories/client_repository.dart b/lib/data/repositories/client_repository.dart index 4ea16c456..065ef349b 100644 --- a/lib/data/repositories/client_repository.dart +++ b/lib/data/repositories/client_repository.dart @@ -61,7 +61,8 @@ class ClientRepository { if (action != null) { url += '&action=' + action.toString(); } - response = await webClient.put(url, credentials.token, json.encode(data)); + response = + await webClient.put(url, credentials.token, data: json.encode(data)); } final ClientItemResponse clientResponse = diff --git a/lib/data/repositories/document_repository.dart b/lib/data/repositories/document_repository.dart index 52ec39f90..d9a41e21b 100644 --- a/lib/data/repositories/document_repository.dart +++ b/lib/data/repositories/document_repository.dart @@ -68,8 +68,8 @@ class DocumentRepository { if (action != null) { url += '?action=' + action.toString(); } - response = - await webClient.put(url, credentials.token, json.encode(data)); + response = await webClient.put(url, credentials.token, + data: json.encode(data)); } } diff --git a/lib/data/repositories/expense_repository.dart b/lib/data/repositories/expense_repository.dart index 51c479382..fa03fe065 100644 --- a/lib/data/repositories/expense_repository.dart +++ b/lib/data/repositories/expense_repository.dart @@ -56,7 +56,8 @@ class ExpenseRepository { if (action != null) { url += '?action=' + action.toString(); } - response = await webClient.put(url, credentials.token, json.encode(data)); + response = + await webClient.put(url, credentials.token, data: json.encode(data)); } final ExpenseItemResponse expenseResponse = diff --git a/lib/data/repositories/invoice_repository.dart b/lib/data/repositories/invoice_repository.dart index b64bacf8b..04b6acf7d 100644 --- a/lib/data/repositories/invoice_repository.dart +++ b/lib/data/repositories/invoice_repository.dart @@ -58,7 +58,8 @@ class InvoiceRepository { if (action != null) { url += '?action=' + action.toString(); } - response = await webClient.put(url, credentials.token, json.encode(data)); + response = + await webClient.put(url, credentials.token, data: json.encode(data)); } final InvoiceItemResponse invoiceResponse = diff --git a/lib/data/repositories/payment_repository.dart b/lib/data/repositories/payment_repository.dart index 13192cf59..c72c370a8 100644 --- a/lib/data/repositories/payment_repository.dart +++ b/lib/data/repositories/payment_repository.dart @@ -51,7 +51,8 @@ class PaymentRepository { if (action != null) { url += '&action=' + action.toString(); } - response = await webClient.put(url, credentials.token, json.encode(data)); + response = + await webClient.put(url, credentials.token, data: json.encode(data)); } final PaymentItemResponse paymentResponse = diff --git a/lib/data/repositories/product_repository.dart b/lib/data/repositories/product_repository.dart index f4368219c..eb3c709f0 100644 --- a/lib/data/repositories/product_repository.dart +++ b/lib/data/repositories/product_repository.dart @@ -45,7 +45,8 @@ class ProductRepository { if (action != null) { url += '?action=' + action.toString(); } - response = await webClient.put(url, credentials.token, json.encode(data)); + response = + await webClient.put(url, credentials.token, data: json.encode(data)); } final ProductItemResponse productResponse = diff --git a/lib/data/repositories/project_repository.dart b/lib/data/repositories/project_repository.dart index a50ded650..90d905eeb 100644 --- a/lib/data/repositories/project_repository.dart +++ b/lib/data/repositories/project_repository.dart @@ -56,7 +56,8 @@ class ProjectRepository { if (action != null) { url += '?action=' + action.toString(); } - response = await webClient.put(url, credentials.token, json.encode(data)); + response = + await webClient.put(url, credentials.token, data: json.encode(data)); } final ProjectItemResponse projectResponse = diff --git a/lib/data/repositories/quote_repository.dart b/lib/data/repositories/quote_repository.dart index e7da01cf3..646815673 100644 --- a/lib/data/repositories/quote_repository.dart +++ b/lib/data/repositories/quote_repository.dart @@ -58,7 +58,8 @@ class QuoteRepository { if (action != null) { url += '?action=' + action.toString(); } - response = await webClient.put(url, credentials.token, json.encode(data)); + response = + await webClient.put(url, credentials.token, data: json.encode(data)); } final InvoiceItemResponse quoteResponse = diff --git a/lib/data/repositories/settings_repository.dart b/lib/data/repositories/settings_repository.dart index 5712d5030..648f06bfa 100644 --- a/lib/data/repositories/settings_repository.dart +++ b/lib/data/repositories/settings_repository.dart @@ -21,7 +21,8 @@ class SettingsRepository { dynamic response; final url = credentials.url + '/companies/${company.id}'; - response = await webClient.put(url, credentials.token, json.encode(data)); + response = + await webClient.put(url, credentials.token, data: json.encode(data)); final LoginResponse clientResponse = serializers.deserializeWith(LoginResponse.serializer, response); @@ -34,7 +35,8 @@ class SettingsRepository { dynamic response; final url = credentials.url + '/users/${user.id}'; - response = await webClient.put(url, credentials.token, json.encode(data)); + response = + await webClient.put(url, credentials.token, data: json.encode(data)); final UserItemResponse userResponse = serializers.deserializeWith(UserItemResponse.serializer, response); @@ -46,7 +48,9 @@ class SettingsRepository { final url = '${credentials.url}/companies'; final dynamic response = await webClient.post(url, credentials.token, - data: {'name': 'logo'}, filePath: path, fileIndex: 'logo'); + filePath: path, + fileIndex: 'logo', + data: {'_method': 'PUT', 'name': 'TEST'}); debugPrint('### UPLOAD LOGO RESPONSE: $response'); diff --git a/lib/data/repositories/task_repository.dart b/lib/data/repositories/task_repository.dart index 3bfc038aa..0dfb683bc 100644 --- a/lib/data/repositories/task_repository.dart +++ b/lib/data/repositories/task_repository.dart @@ -61,7 +61,8 @@ class TaskRepository { if (action != null) { url += '?action=' + action.toString(); } - response = await webClient.put(url, credentials.token, json.encode(data)); + response = + await webClient.put(url, credentials.token, data: json.encode(data)); } final TaskItemResponse taskResponse = diff --git a/lib/data/repositories/vendor_repository.dart b/lib/data/repositories/vendor_repository.dart index d27aa8952..59c6645f5 100644 --- a/lib/data/repositories/vendor_repository.dart +++ b/lib/data/repositories/vendor_repository.dart @@ -56,7 +56,8 @@ class VendorRepository { if (action != null) { url += '?action=' + action.toString(); } - response = await webClient.put(url, credentials.token, json.encode(data)); + response = + await webClient.put(url, credentials.token, data: json.encode(data)); } final VendorItemResponse vendorResponse = diff --git a/lib/data/web_client.dart b/lib/data/web_client.dart index 0243d0e71..fdcb5bdd5 100644 --- a/lib/data/web_client.dart +++ b/lib/data/web_client.dart @@ -36,25 +36,15 @@ class WebClient { } Future post(String url, String token, - {dynamic data, String filePath, String fileIndex = 'file'}) async { + {dynamic data, String filePath, String fileIndex}) async { url = _checkUrl(url); print('POST: $url'); print('Data: $data'); http.Response response; if (filePath != null) { - final file = File(filePath); - final stream = http.ByteStream(DelegatingStream.typed(file.openRead())); - final length = await file.length(); - - final request = http.MultipartRequest('POST', Uri.parse(url)) - ..fields.addAll(data ?? {}) - ..headers.addAll(_getHeaders(token)) - ..files.add(http.MultipartFile(fileIndex, stream, length, - filename: basename(file.path))); - - response = await http.Response.fromStream(await request.send()) - .timeout(const Duration(minutes: 10)); + response = await _uploadFile(url, token, filePath, + fileIndex: fileIndex, data: data); } else { response = await http.Client() .post(url, body: data, headers: _getHeaders(token)) @@ -66,16 +56,24 @@ class WebClient { return json.decode(response.body); } - Future put(String url, String token, dynamic data) async { + Future put(String url, String token, + {dynamic data, String filePath, String fileIndex = 'file'}) async { url = _checkUrl(url); print('PUT: $url'); print('Data: $data'); - final http.Response response = await http.Client().put( - url, - body: data, - headers: _getHeaders(token), - ); + http.Response response; + + if (filePath != null) { + response = await _uploadFile(url, token, filePath, + fileIndex: fileIndex, data: data, method: 'PUT'); + } else { + response = await http.Client().put( + url, + body: data, + headers: _getHeaders(token), + ); + } _checkResponse(response); @@ -180,3 +178,19 @@ bool _isVersionSupported(String version) { minor >= kMinMinorAppVersion && patch >= kMinPatchAppVersion; } + +Future _uploadFile(String url, String token, String filePath, + {String method = 'POST', String fileIndex = 'file', dynamic data}) async { + final file = File(filePath); + final stream = http.ByteStream(DelegatingStream.typed(file.openRead())); + final length = await file.length(); + + final request = http.MultipartRequest(method, Uri.parse(url)) + ..fields.addAll(data ?? {}) + ..headers.addAll(_getHeaders(token)) + ..files.add(http.MultipartFile(fileIndex, stream, length, + filename: basename(file.path))); + + return await http.Response.fromStream(await request.send()) + .timeout(const Duration(minutes: 10)); +} diff --git a/stubs/data/repositories/stub_repository b/stubs/data/repositories/stub_repository index d8c412296..ed8cafcc1 100644 --- a/stubs/data/repositories/stub_repository +++ b/stubs/data/repositories/stub_repository @@ -59,7 +59,7 @@ class StubRepository { if (action != null) { url += '?action=' + action.toString(); } - response = await webClient.put(url, credentials.token, json.encode(data)); + response = await webClient.put(url, credentials.token, data: json.encode(data)); } final StubItemResponse stubResponse =