app mobile allarmi prima
This commit is contained in:
166
lib/services/api_service.dart
Normal file
166
lib/services/api_service.dart
Normal file
@@ -0,0 +1,166 @@
|
||||
import 'dart:convert';
|
||||
import 'package:http/http.dart' as http;
|
||||
import '../utils/constants.dart';
|
||||
import '../models/user.dart';
|
||||
import '../models/allarme.dart';
|
||||
import '../models/sito.dart';
|
||||
import '../models/statistiche.dart';
|
||||
|
||||
class ApiService {
|
||||
static final ApiService _instance = ApiService._internal();
|
||||
factory ApiService() => _instance;
|
||||
ApiService._internal();
|
||||
|
||||
String? _authToken;
|
||||
|
||||
void setAuthToken(String token) => _authToken = token;
|
||||
void clearAuthToken() => _authToken = null;
|
||||
|
||||
Map<String, String> _getHeaders({bool includeAuth = true}) {
|
||||
final headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
};
|
||||
if (includeAuth && _authToken != null) {
|
||||
headers['Authorization'] = 'Bearer $_authToken';
|
||||
}
|
||||
return headers;
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> _handleResponse(http.Response response) async {
|
||||
if (response.statusCode >= 200 && response.statusCode < 300) {
|
||||
return json.decode(utf8.decode(response.bodyBytes));
|
||||
} else {
|
||||
final error = json.decode(utf8.decode(response.bodyBytes));
|
||||
throw Exception(error['detail'] ?? 'Errore sconosciuto');
|
||||
}
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>> login(String email, String password) async {
|
||||
final response = await http.post(
|
||||
Uri.parse('${AppConstants.apiBaseUrl}/auth/login'),
|
||||
headers: _getHeaders(includeAuth: false),
|
||||
body: json.encode({'email': email, 'password': password}),
|
||||
);
|
||||
return _handleResponse(response);
|
||||
}
|
||||
|
||||
Future<User> getCurrentUser() async {
|
||||
final response = await http.get(
|
||||
Uri.parse('${AppConstants.apiBaseUrl}/auth/me'),
|
||||
headers: _getHeaders(),
|
||||
);
|
||||
final data = await _handleResponse(response);
|
||||
return User.fromJson(data);
|
||||
}
|
||||
|
||||
Future<void> registerFcmToken(String fcmToken) async {
|
||||
final response = await http.post(
|
||||
Uri.parse('${AppConstants.apiBaseUrl}/auth/register-fcm-token'),
|
||||
headers: _getHeaders(),
|
||||
body: json.encode({'fcm_token': fcmToken}),
|
||||
);
|
||||
await _handleResponse(response);
|
||||
}
|
||||
|
||||
Future<AllarmeListResponse> getAllarmi({
|
||||
int page = 1,
|
||||
int pageSize = 20,
|
||||
String? severita,
|
||||
String? stato,
|
||||
}) async {
|
||||
final queryParams = {
|
||||
'page': page.toString(),
|
||||
'page_size': pageSize.toString(),
|
||||
if (severita != null) 'severita': severita,
|
||||
if (stato != null) 'stato': stato,
|
||||
};
|
||||
|
||||
final uri = Uri.parse('${AppConstants.apiBaseUrl}/allarmi')
|
||||
.replace(queryParameters: queryParams);
|
||||
|
||||
final response = await http.get(uri, headers: _getHeaders());
|
||||
final data = await _handleResponse(response);
|
||||
return AllarmeListResponse.fromJson(data);
|
||||
}
|
||||
|
||||
Future<Allarme> getAllarme(int id) async {
|
||||
final response = await http.get(
|
||||
Uri.parse('${AppConstants.apiBaseUrl}/allarmi/$id'),
|
||||
headers: _getHeaders(),
|
||||
);
|
||||
final data = await _handleResponse(response);
|
||||
return Allarme.fromJson(data);
|
||||
}
|
||||
|
||||
Future<Allarme> updateAllarme(int id, {String? stato}) async {
|
||||
final body = <String, dynamic>{};
|
||||
if (stato != null) body['stato'] = stato;
|
||||
|
||||
final response = await http.patch(
|
||||
Uri.parse('${AppConstants.apiBaseUrl}/allarmi/$id'),
|
||||
headers: _getHeaders(),
|
||||
body: json.encode(body),
|
||||
);
|
||||
final data = await _handleResponse(response);
|
||||
return Allarme.fromJson(data);
|
||||
}
|
||||
|
||||
Future<Sito> getSito(int sitoId) async {
|
||||
final response = await http.get(
|
||||
Uri.parse('${AppConstants.apiBaseUrl}/siti/$sitoId'),
|
||||
headers: _getHeaders(),
|
||||
);
|
||||
final data = await _handleResponse(response);
|
||||
return Sito.fromJson(data);
|
||||
}
|
||||
|
||||
Future<List<Sito>> getSiti({String? tipo}) async {
|
||||
final queryParams = <String, String>{};
|
||||
if (tipo != null) queryParams['tipo'] = tipo;
|
||||
|
||||
final uri = Uri.parse('${AppConstants.apiBaseUrl}/siti')
|
||||
.replace(queryParameters: queryParams.isNotEmpty ? queryParams : null);
|
||||
|
||||
final response = await http.get(uri, headers: _getHeaders());
|
||||
final data = await _handleResponse(response);
|
||||
|
||||
final items = (data['items'] as List)
|
||||
.map((item) => Sito.fromJson(item as Map<String, dynamic>))
|
||||
.toList();
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
Future<AllarmeListResponse> getAllarmiBySito(int sitoId, {int page = 1, int pageSize = 20}) async {
|
||||
final queryParams = {
|
||||
'page': page.toString(),
|
||||
'page_size': pageSize.toString(),
|
||||
};
|
||||
|
||||
final uri = Uri.parse('${AppConstants.apiBaseUrl}/allarmi/sito/$sitoId')
|
||||
.replace(queryParameters: queryParams);
|
||||
|
||||
final response = await http.get(uri, headers: _getHeaders());
|
||||
final data = await _handleResponse(response);
|
||||
return AllarmeListResponse.fromJson(data);
|
||||
}
|
||||
|
||||
Future<Statistiche> getStatistiche() async {
|
||||
final response = await http.get(
|
||||
Uri.parse('${AppConstants.apiBaseUrl}/statistiche'),
|
||||
headers: _getHeaders(),
|
||||
);
|
||||
final data = await _handleResponse(response);
|
||||
return Statistiche.fromJson(data);
|
||||
}
|
||||
|
||||
Future<AllarmiPerGiornoResponse> getAllarmiPerGiorno({int giorni = 30}) async {
|
||||
final uri = Uri.parse('${AppConstants.apiBaseUrl}/statistiche/allarmi-per-giorno')
|
||||
.replace(queryParameters: {'giorni': giorni.toString()});
|
||||
|
||||
final response = await http.get(uri, headers: _getHeaders());
|
||||
final data = await _handleResponse(response);
|
||||
return AllarmiPerGiornoResponse.fromJson(data);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user