Fin des appel à l'appi

pull/1/head
Enzo 2 years ago
parent 4778f2b5fb
commit 23864f1566

@ -4,25 +4,26 @@ import 'package:tuple/tuple.dart';
abstract class IDataStrategy { abstract class IDataStrategy {
// Create user // Create user
Future<bool> postUser(String email, String hash, String username); Future<Tuple2<bool, String>> postUser(
String email, String hash, String username);
// Delete user // Delete user
Future<void> deleteUser(String token); Future<Tuple2<bool, String>> deleteUser(String token);
// Get Token validate // Get Token validate
Future<void> connexion(String email, String hash); Future<Tuple2<bool, String>> connexion(String email, String hash);
// Get all files for user // Get all files for user
//Future<void> getFiles(String token); Future<Tuple2> getFiles(String token);
// Upload file on BDD // Upload file on BDD
Future<Tuple2<bool, String>> uploadFile(String token, File file); Future<Tuple2<bool, String>> uploadFile(String token, File file);
// Get one file by id // Get one file by id
Future<Tuple2<bool, String>> getFile(String token, String fileUuid); Future<Tuple2> getFile(String token, String fileUuid);
// Delete one file on BDD // Delete one file on BDD
//Future<void> deleteFile(String token, String idFile); Future<Tuple2<bool, String>> deleteFile(String token, String fileUuid);
/* -> Modification attribut /* -> Modification attribut
// Update email // Update email

@ -11,31 +11,48 @@ class RequestApi extends IDataStrategy {
"https://codefirst.iut.uca.fr/containers/SmartFit-smartfit_api"; "https://codefirst.iut.uca.fr/containers/SmartFit-smartfit_api";
@override @override
Future<Tuple2<bool, String>> getFile(String token, String fileUuid) async { Future<Tuple2> getFile(String token, String fileUuid) async {
final response = await http.get(Uri.parse('$urlApi/user/files/$fileUuid'), final url = Uri.parse('$urlApi/user/files/$fileUuid');
headers: <String, String>{'Authorization': token});
var request = http.Request('GET', url);
request.headers.addAll(<String, String>{'Authorization': token});
var streamedResponse = await request.send();
final response = await http.Response.fromStream(streamedResponse);
// !! Crée un fichier comme ca avec les bytes !!
//File("//").writeAsBytes(response.bodyBytes);
if (response.statusCode == 200) { if (response.statusCode == 200) {
/*return Classe.fromJson(jsonDecode(response.body) as Map<String, dynamic>);*/ return Tuple2(true, response.bodyBytes);
throw UnimplementedError();
} else {
throw UnimplementedError();
} }
if ((response.statusCode == 401)) {
return const Tuple2(false, "401 - UNAUTHORIZED");
}
if ((response.statusCode == 404)) {
return const Tuple2(false, "404 - NOT FOUND");
}
return const Tuple2(false, "Fail");
} }
@override @override
Future<bool> deleteFile(String token, String idFile) async { Future<Tuple2<bool, String>> deleteFile(String token, String fileUuid) async {
final response = await http.delete(Uri.parse('$urlApi/$token/files')); final response = await http.delete(Uri.parse('$urlApi/user/files'),
headers: <String, String>{'Authorization': token});
if (response.statusCode == 200) { if (response.statusCode == 200) {
/*return Classe.fromJson(jsonDecode(response.body) as Map<String, dynamic>);*/ return const Tuple2(true, "Successful");
throw UnimplementedError(); }
} else { if (response.statusCode == 401) {
throw UnimplementedError(); return const Tuple2(false, "401 - UNAUTHORIZED");
}
if (response.statusCode == 404) {
return const Tuple2(false, "404 - NOT FOUND");
} }
return const Tuple2(false, "Fail");
} }
@override @override
Future<Tuple2> deleteUser(String token) async { Future<Tuple2<bool, String>> deleteUser(String token) async {
final response = await http.delete(Uri.parse('$urlApi/user'), final response = await http.delete(Uri.parse('$urlApi/user'),
headers: <String, String>{'Authorization': token}); headers: <String, String>{'Authorization': token});
if (response.statusCode == 200) { if (response.statusCode == 200) {
@ -51,44 +68,45 @@ class RequestApi extends IDataStrategy {
} }
@override @override
Future<String> getFiles(String token) async { Future<Tuple2> getFiles(String token) async {
final response = await http.get(Uri.parse('$urlApi/$token/files')); final response = await http.get(Uri.parse('$urlApi/user/files'),
headers: <String, String>{'Authorization': token});
if (response.statusCode == 200) { if (response.statusCode == 200) {
/*return Classe.fromJson(jsonDecode(response.body) as Map<String, dynamic>);*/ return Tuple2(true, response.body);
throw UnimplementedError(); }
} else { if (response.statusCode == 401) {
throw UnimplementedError(); return const Tuple2(false, "401 - UNAUTHORIZED");
} }
return const Tuple2(false, "Fail");
} }
@override @override
Future<Tuple2> connexion(String email, String hash) async { Future<Tuple2<bool, String>> connexion(String email, String hash) async {
final response = final response =
await http.get(Uri.parse('$urlApi/user/login/$email/$hash')); await http.get(Uri.parse('$urlApi/user/login/$email/$hash'));
if (response.statusCode == 200) { if (response.statusCode == 200) {
Map<String, String> json = Map<String, dynamic> json = jsonDecode(response.body);
jsonDecode(response.body) as Map<String, String>; return Tuple2<bool, String>(true, json['token'].toString());
return Tuple2<bool, String>(true, json['token']!);
} else if (response.statusCode == 401) { } else if (response.statusCode == 401) {
return const Tuple2<bool, String>(false, "UNAUTHORIZED"); return const Tuple2<bool, String>(false, "UNAUTHORIZED");
} }
return const Tuple2(false, "Fail"); return const Tuple2(false, "Fail");
} }
/*
@override @override
Future<Tuple2> postUser(String email, String hash, String username) async { Future<Tuple2<bool, String>> postUser(
final response = String email, String hash, String username) async {
await http.post(Uri.parse('$urlApi/user'), headers: <String, String>{ final response = await http.post(Uri.parse('$urlApi/user'),
'Content-Type': 'application/json; charset=UTF-8', body: <String, String>{
}, body: { "email": email,
"email": "'$email'", "hash": hash,
"hash": "'$hash'", "username": username
"username": "'$username'" });
});
if (response.statusCode == 200) { if (response.statusCode == 200) {
return const Tuple2(true, "Successful"); Map<String, dynamic> json = jsonDecode(response.body);
return Tuple2(true, json['token'].toString());
} }
if (response.statusCode == 400) { if (response.statusCode == 400) {
return const Tuple2(false, "400 BAD REQUEST - Json mal formaté"); return const Tuple2(false, "400 BAD REQUEST - Json mal formaté");
@ -98,7 +116,7 @@ class RequestApi extends IDataStrategy {
false, "409 CONFLICT - Déja un compte avec cet email"); false, "409 CONFLICT - Déja un compte avec cet email");
} }
return const Tuple2(false, "Fail"); return const Tuple2(false, "Fail");
}*/ }
/* /*
@override @override
@ -161,7 +179,7 @@ class RequestApi extends IDataStrategy {
var request = http.MultipartRequest('POST', uri); var request = http.MultipartRequest('POST', uri);
final httpImage = http.MultipartFile.fromBytes( final httpImage = http.MultipartFile.fromBytes(
'file_FIT', await file.readAsBytes(), 'file', await file.readAsBytes(),
filename: file.path.split('/').last); filename: file.path.split('/').last);
request.files.add(httpImage); request.files.add(httpImage);
request.headers.addAll(headers); request.headers.addAll(headers);
@ -182,10 +200,4 @@ class RequestApi extends IDataStrategy {
} }
return const Tuple2(false, "Fail "); return const Tuple2(false, "Fail ");
} }
@override
Future<bool> postUser(String email, String hash, String username) {
// TODO: implement postUser
throw UnimplementedError();
}
} }

@ -1,21 +1,12 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:ffi';
import 'dart:io'; import 'dart:io';
import 'package:csv/csv.dart'; import 'package:csv/csv.dart';
import 'package:fit_tool/fit_tool.dart'; import 'package:fit_tool/fit_tool.dart';
import 'package:fl_chart/fl_chart.dart'; import 'package:fl_chart/fl_chart.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:smartfit_app_mobile/Modele/Api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/Modele/Api/request_api.dart';
import 'package:smartfit_app_mobile/Modele/activity.dart'; import 'package:smartfit_app_mobile/Modele/activity.dart';
class ManagerFile { class ManagerFile {
final IDataStrategy _dataStrategy = RequestApi();
//List<dynamic>? _contentFile;
//List<dynamic>? get contentFile => _contentFile;
// ----- //
// ----- Read csv File ------- // // ----- Read csv File ------- //
Future<List<dynamic>> readCSVFile(String path) async { Future<List<dynamic>> readCSVFile(String path) async {
if (File(path).exists() == false) return List.empty(); if (File(path).exists() == false) return List.empty();
@ -27,13 +18,6 @@ class ManagerFile {
return fields; return fields;
} }
// ------ Import File and save it in BDD
Future<bool> importFileAndSaveInBDD(String path, String tokenUser) async {
if (File(path).existsSync() == false) return false;
_dataStrategy.uploadFile(tokenUser, File(path));
return true;
}
// ----- Read a file FIT --- // // ----- Read a file FIT --- //
Future<List<dynamic>> readFitFile(String path) async { Future<List<dynamic>> readFitFile(String path) async {
if (File(path).existsSync() == false) return List.empty(); if (File(path).existsSync() == false) return List.empty();
@ -46,14 +30,14 @@ class ManagerFile {
} }
// ------------- Get The path of application --- // // ------------- Get The path of application --- //
Future<String> get _localPath async { Future<String> get localPath async {
final directory = await getApplicationDocumentsDirectory(); final directory = await getApplicationDocumentsDirectory();
return directory.path; return directory.path;
} }
// --- A modifier si utilisé --- // // --- A modifier si utilisé --- //
Future<bool> writeFile(String nameFileWithExtension, File file) async { Future<bool> writeFile(String nameFileWithExtension, File file) async {
final outFile = File("${await _localPath}\\Files\\$nameFileWithExtension"); final outFile = File("${await localPath}\\Files\\$nameFileWithExtension");
if (outFile.existsSync() == false) { if (outFile.existsSync() == false) {
outFile.createSync(recursive: true); outFile.createSync(recursive: true);
} }

@ -1,12 +1,18 @@
import 'dart:convert';
import 'package:crypto/crypto.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'package:file_picker/file_picker.dart'; import 'package:file_picker/file_picker.dart';
import 'dart:io'; import 'dart:io';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/Modele/Api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/Modele/Api/request_api.dart';
import 'package:smartfit_app_mobile/Modele/activity.dart'; import 'package:smartfit_app_mobile/Modele/activity.dart';
import 'package:smartfit_app_mobile/Modele/manager_file.dart'; import 'package:smartfit_app_mobile/Modele/manager_file.dart';
import 'package:smartfit_app_mobile/Modele/user.dart'; import 'package:smartfit_app_mobile/Modele/user.dart';
import 'package:tuple/tuple.dart';
// ----------- File --------------- // // ----------- File --------------- //
@ -56,6 +62,7 @@ class TestPage extends StatefulWidget {
class _TestPage extends State<TestPage> { class _TestPage extends State<TestPage> {
// Lire un fichier avec picker // Lire un fichier avec picker
FilePickerResult? result; FilePickerResult? result;
IDataStrategy strategy = RequestApi();
//late File x = File(file.path); //late File x = File(file.path);
Future<void> readFile() async { Future<void> readFile() async {
@ -74,6 +81,90 @@ class _TestPage extends State<TestPage> {
} }
} }
Future<void> createUser() async {
String mds = "1234";
var byte = utf8.encode(mds);
var digest = sha256.convert(byte);
print(digest.toString());
print("Appel");
Tuple2<bool, String> res =
await strategy.postUser("toto@gmail.com", digest.toString(), "toto");
print(res.item1);
print(res.item2);
}
Future<void> login() async {
String mds = "1234";
var byte = utf8.encode(mds);
var digest = sha256.convert(byte);
print(digest.toString());
print("Appel");
Tuple2<bool, String> res =
await strategy.connexion("toto@gmail.com", digest.toString());
print(res.item1);
print(res.item2);
}
Future<void> deleteUser() async {
String token =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiYjA3OThmMjAtN2ZiMy0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgyNDI3fQ.2_bnvEC7_pwchielF3Kpu9fFtXDv_KabdOU8T07UnWI";
print("Appel");
Tuple2<bool, String> res = await strategy.deleteUser(token);
print(res.item1);
print(res.item2);
}
Future<void> getFiles() async {
String token =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgyNzk3fQ.b_zsOHj2C-Y28CrcozbSjEz8BUWL8kgjjx5CDhES8PI";
print("Appel");
Tuple2 res = await strategy.getFiles(token);
print(res.item1);
print(res.item2);
}
Future<void> modifAttribut() async {
String nameAtt = "username";
String newValue = "toto2";
String token =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgzMDM4fQ.umN7LmUDbKUOeIToLcsOUIioQ7u4wsReHggRDB68VPQ";
print("Appel");
Tuple2 res = await strategy.modifAttribut(token, nameAtt, newValue);
print(res.item1);
print(res.item2);
}
Future<void> uploadFile() async {
PlatformFile t = result!.files.single;
String token =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgzNjM5fQ.0TmfJ9eYnszw4_RkNwPkMzkJxvsIFs5BI9uhQ7qYb0g";
String? lol = t.path!;
print("Appel");
Tuple2 res = await strategy.uploadFile(token, File(lol));
print(res.item1);
print(res.item2);
}
Future<void> getOneFile() async {
String ui = "fc6e234c-7fc6-11ee-bafd-02420a5a001f";
String token =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgzOTE3fQ.TUdrGEo7A0auQlUfO5RQm874QWuGXFBSKbJ8qTGPF2M";
print("Appel");
Tuple2 res = await strategy.getFile(token, ui);
print(res.item1);
print(res.item2);
ManagerFile x = ManagerFile();
File file = File("${await x.localPath}/Walking_2023-11-08T10_57_28.fit");
await file.create();
await file.writeAsBytes(res.item2);
print(await x.localPath);
print("Save");
print(await x
.readFitFile("${await x.localPath}/Walking_2023-11-08T10_57_28.fit"));
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -101,7 +192,18 @@ class _TestPage extends State<TestPage> {
} }
}, },
child: const Text("File - ")), child: const Text("File - ")),
ElevatedButton(onPressed: readFile, child: const Text("Read Data")) ElevatedButton(onPressed: login, child: const Text("Connexion")),
ElevatedButton(
onPressed: createUser, child: const Text("Create User")),
ElevatedButton(
onPressed: deleteUser, child: const Text("Delete User")),
ElevatedButton(onPressed: getFiles, child: const Text("getFiles")),
ElevatedButton(
onPressed: modifAttribut, child: const Text("modif attribut")),
ElevatedButton(
onPressed: uploadFile, child: const Text("Upload File")),
ElevatedButton(
onPressed: getOneFile, child: const Text("Get One File"))
], ],
), ),
); );

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/Modele/user.dart'; import 'package:smartfit_app_mobile/Modele/user.dart';
import 'package:smartfit_app_mobile/View/on_boarding/started_view.dart'; import 'package:smartfit_app_mobile/View/on_boarding/started_view.dart';
import 'package:smartfit_app_mobile/View/page_test.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart'; import 'package:smartfit_app_mobile/common/colo_extension.dart';
void main() { void main() {
@ -36,7 +37,8 @@ class MyApp extends StatelessWidget {
// tested with just a hot reload. // tested with just a hot reload.
primaryColor: TColor.primaryColor1, primaryColor: TColor.primaryColor1,
fontFamily: "Poppins"), fontFamily: "Poppins"),
home: const StartedView(), //home: const StartedView(),
home: const TestPage(),
); );
} }
} }

@ -53,6 +53,7 @@ dependencies:
http: ^1.1.0 http: ^1.1.0
provider: ^6.0.5 provider: ^6.0.5
tuple: ^2.0.2 tuple: ^2.0.2
crypto: ^3.0.3
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

Loading…
Cancel
Save