Merge branch 'master' into othmane2

profile
Othmane BENJELLOUN 2 years ago
commit 6423a885a2

@ -1,32 +1,37 @@
import 'dart:io'; import 'dart:io';
import 'package:smartfit_app_mobile/Modele/user.dart'; import 'package:tuple/tuple.dart';
abstract class IDataStrategy { abstract class IDataStrategy {
// Create user // Create user
Future<bool> postUser(User user); Future<bool> postUser(String email, String hash, String username);
// Delete user // Delete user
Future<void> deleteUser(String token); Future<void> deleteUser(String token);
// Get Token validate // Get Token validate
Future<void> getToken(String uuid, String passwordHash); Future<void> connexion(String email, String hash);
// Get all files for user // Get all files for user
Future<void> getFiles(String token); //Future<void> getFiles(String token);
// Upload file on BDD // Upload file on BDD
Future<bool> 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<void> getFile(String token, String idFile); Future<Tuple2<bool, String>> getFile(String token, String fileUuid);
// Delete one file on BDD // Delete one file on BDD
Future<void> deleteFile(String token, String idFile); //Future<void> deleteFile(String token, String idFile);
/* -> Modification attribut
// Update email // Update email
Future<void> updateEmail(String token, String email); Future<void> updateEmail(String token, String email);
// Update username // Update username
Future<void> updateUsername(String token, String username); Future<void> updateUsername(String token, String username);
*/
Future<Tuple2> modifAttribut(
String token, String nameAttribut, String newValue);
} }

@ -3,15 +3,18 @@ import 'dart:io';
import 'package:smartfit_app_mobile/Modele/Api/i_data_strategy.dart'; import 'package:smartfit_app_mobile/Modele/Api/i_data_strategy.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:smartfit_app_mobile/Modele/user.dart'; import 'package:tuple/tuple.dart';
class RequestApi extends IDataStrategy { class RequestApi extends IDataStrategy {
// Faire attention au URL // Faire attention au URL
String urlApi = ""; String urlApi =
"https://codefirst.iut.uca.fr/containers/SmartFit-smartfit_api";
@override @override
Future<String> getFile(String token, String idFile) async { Future<Tuple2<bool, String>> getFile(String token, String fileUuid) async {
final response = await http.get(Uri.parse('$urlApi/$token/files/$idFile')); final response = await http.get(Uri.parse('$urlApi/user/files/$fileUuid'),
headers: <String, String>{'Authorization': token});
if (response.statusCode == 200) { if (response.statusCode == 200) {
/*return Classe.fromJson(jsonDecode(response.body) as Map<String, dynamic>);*/ /*return Classe.fromJson(jsonDecode(response.body) as Map<String, dynamic>);*/
throw UnimplementedError(); throw UnimplementedError();
@ -32,18 +35,25 @@ class RequestApi extends IDataStrategy {
} }
@override @override
Future<bool> deleteUser(String token) async { Future<Tuple2> deleteUser(String token) async {
final response = await http.delete(Uri.parse('$urlApi/$token')); final response = await http.delete(Uri.parse('$urlApi/user'),
headers: <String, String>{'Authorization': token});
if (response.statusCode == 200) { if (response.statusCode == 200) {
return true; return const Tuple2<bool, String>(true, "Successful");
} else { } else if (response.statusCode == 401) {
return false; return const Tuple2<bool, String>(
false, "401 UNAUTHORIZED - Mauvais ou pas de token");
} else if (response.statusCode == 404) {
return const Tuple2<bool, String>(
false, "404 NOT FOUND - Pas de compte lié");
} }
return const Tuple2<bool, String>(false, "Fail");
} }
@override @override
Future<String> getFiles(String token) async { Future<String> getFiles(String token) async {
final response = await http.get(Uri.parse('$urlApi/$token/files')); final response = await http.get(Uri.parse('$urlApi/$token/files'));
if (response.statusCode == 200) { if (response.statusCode == 200) {
/*return Classe.fromJson(jsonDecode(response.body) as Map<String, dynamic>);*/ /*return Classe.fromJson(jsonDecode(response.body) as Map<String, dynamic>);*/
throw UnimplementedError(); throw UnimplementedError();
@ -53,31 +63,44 @@ class RequestApi extends IDataStrategy {
} }
@override @override
Future<String> getToken(String uuid, String passwordHash) async { Future<Tuple2> connexion(String email, String hash) async {
final response = final response =
await http.get(Uri.parse('$urlApi/$uuid/$passwordHash/token')); await http.get(Uri.parse('$urlApi/user/login/$email/$hash'));
if (response.statusCode == 200) { if (response.statusCode == 200) {
/*return Classe.fromJson(jsonDecode(response.body) as Map<String, dynamic>);*/ Map<String, String> json =
throw UnimplementedError(); jsonDecode(response.body) as Map<String, String>;
} else { return Tuple2<bool, String>(true, json['token']!);
throw UnimplementedError(); } else if (response.statusCode == 401) {
return const Tuple2<bool, String>(false, "UNAUTHORIZED");
} }
return const Tuple2(false, "Fail");
} }
/*
@override @override
Future<bool> postUser(User user) async { Future<Tuple2> postUser(String email, String hash, String username) async {
final response = await http.post(Uri.parse(urlApi), final response =
headers: <String, String>{ await http.post(Uri.parse('$urlApi/user'), headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8', 'Content-Type': 'application/json; charset=UTF-8',
}, }, body: {
body: jsonEncode(<String, User>{'user': user})); "email": "'$email'",
"hash": "'$hash'",
"username": "'$username'"
});
if (response.statusCode == 200) { if (response.statusCode == 200) {
return true; return const Tuple2(true, "Successful");
} else {
return false;
} }
} if (response.statusCode == 400) {
return const Tuple2(false, "400 BAD REQUEST - Json mal formaté");
}
if (response.statusCode == 409) {
return const Tuple2(
false, "409 CONFLICT - Déja un compte avec cet email");
}
return const Tuple2(false, "Fail");
}*/
/*
@override @override
Future<bool> updateEmail(String token, String email) async { Future<bool> updateEmail(String token, String email) async {
final response = await http.put(Uri.parse('$urlApi/$token/email'), final response = await http.put(Uri.parse('$urlApi/$token/email'),
@ -106,19 +129,63 @@ class RequestApi extends IDataStrategy {
} else { } else {
return false; return false;
} }
} }*/
@override @override
Future<bool> uploadFile(String token, File file) async { Future<Tuple2> modifAttribut(
final response = await http.post(Uri.parse('$urlApi/$token/UploadFile'), String token, String nameAttribut, String newValue) async {
final response = await http.put(Uri.parse('$urlApi/user/$nameAttribut'),
headers: <String, String>{ headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8', 'Content-Type': 'application/json; charset=UTF-8',
'Authorization': token
}, },
body: jsonEncode(<String, File>{'file': file})); body: jsonEncode(<String, String>{nameAttribut: newValue}));
if (response.statusCode == 200) { if (response.statusCode == 200) {
return true; return const Tuple2(true, "Successful");
}
if (response.statusCode == 400) {
return const Tuple2(false, "400 - BAD REQUEST");
}
if (response.statusCode == 401) {
return const Tuple2(false, "400 - UNAUTHORIZED");
} else { } else {
return false; return const Tuple2(false, "Fail");
} }
} }
@override
Future<Tuple2<bool, String>> uploadFile(String token, File file) async {
final uri = Uri.parse('$urlApi/user/files');
Map<String, String> headers = {'Authorization': token};
var request = http.MultipartRequest('POST', uri);
final httpImage = http.MultipartFile.fromBytes(
'file_FIT', await file.readAsBytes(),
filename: file.path.split('/').last);
request.files.add(httpImage);
request.headers.addAll(headers);
final response = await request.send();
if (response.statusCode == 200) {
return const Tuple2(true, "Successful");
}
if (response.statusCode == 400) {
return const Tuple2(false, "400 - BAD REQUEST");
}
if (response.statusCode == 401) {
return const Tuple2(false, "401 - UNAUTHORIZED");
}
if (response.statusCode == 409) {
return const Tuple2(false, "409 - CONFLICT");
}
return const Tuple2(false, "Fail ");
}
@override
Future<bool> postUser(String email, String hash, String username) {
// TODO: implement postUser
throw UnimplementedError();
}
} }

@ -1,4 +1,5 @@
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';
@ -102,7 +103,8 @@ class ManagerFile {
firtTimeStamp = ligne[4]; firtTimeStamp = ligne[4];
} }
//result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[7].toInt()]); //result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[7].toInt()]);
result.add(FlSpot((ligne[4] - firtTimeStamp) ~/ 100, ligne[7])); result
.add(FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[7].toDouble()));
} }
} }
return result; return result;
@ -118,27 +120,27 @@ class ManagerFile {
firtTimeStamp = ligne[4]; firtTimeStamp = ligne[4];
} }
//result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[13].toInt()]); //result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[13].toInt()]);
result.add(FlSpot((ligne[4] - firtTimeStamp) ~/ 100, ligne[13])); result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[13].toDouble()));
} }
} }
return result; return result;
} }
int getDistance(ActivityOfUser activity) { double getDistance(ActivityOfUser activity) {
int result = 0; double result = 0.0;
for (int i = activity.contentActivity.length - 1; i >= 0; i--) { for (int i = activity.contentActivity.length - 1; i >= 0; i--) {
if (activity.contentActivity[i].length >= 8 && if (activity.contentActivity[i].length >= 8 &&
activity.contentActivity[i][0] == "Data" && activity.contentActivity[i][0] == "Data" &&
activity.contentActivity[i][6] == "distance") { activity.contentActivity[i][6] == "distance") {
if (activity.contentActivity[i][7] > result) { if (activity.contentActivity[i][7] > result) {
result = activity.contentActivity[i][7].toInt(); result = activity.contentActivity[i][7].toDouble();
} }
} }
} }
return result; return result;
} }
/* En Cours
List<FlSpot> getSpeedWithTime(ActivityOfUser activityOfUser) { List<FlSpot> getSpeedWithTime(ActivityOfUser activityOfUser) {
List<FlSpot> result = List.empty(growable: true); List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0; int firtTimeStamp = 0;
@ -148,11 +150,17 @@ class ManagerFile {
if (firtTimeStamp == 0) { if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4]; firtTimeStamp = ligne[4];
} }
result result.add(
.add(FlSpot((ligne[4] - firtTimeStamp) ~/ 100, ligne[19].toInt())); FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[19].toDouble()));
//result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[19].toInt()]); }
if (ligne[0] == "Data" && ligne[1] == 2) {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[25].toDouble()));
} }
} }
return result; return result;
}*/ }
} }

@ -52,6 +52,7 @@ dependencies:
flutter_form_builder: ^9.1.1 flutter_form_builder: ^9.1.1
http: ^1.1.0 http: ^1.1.0
provider: ^6.0.5 provider: ^6.0.5
tuple: ^2.0.2
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

Loading…
Cancel
Save