rup-project/app/lib/services/api_service.dart

142 lines
4.0 KiB
Dart

import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
class ApiService {
// Use 10.0.2.2 for Android Emulator, localhost for iOS/Web
static final String baseUrl = Platform.isAndroid
? 'http://10.0.2.2:3000'
: 'http://localhost:3000';
final Dio _dio = Dio(
BaseOptions(
baseUrl: baseUrl,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
),
);
// Get Initial Master Data (Groups, Species, Breeds, Diseases)
Future<Map<String, dynamic>> getInitialData() async {
try {
final response = await _dio.get('/common/initial-data');
return response.data;
} catch (e) {
debugPrint('Error fetching initial data: $e');
rethrow;
}
}
// Register Pet
Future<Map<String, dynamic>> registerPet({
required int userId,
required String name,
required String species,
required String breed,
required String gender,
required bool isNeutered,
DateTime? birthDate,
required bool isDateUnknown,
double? weight,
String? registrationNumber,
File? profileImage,
List<String>? diseases,
List<String>? pastDiseases,
List<String>? healthConcerns,
}) async {
try {
final formData = FormData.fromMap({
'userId': userId,
'name': name,
'species': species,
'breed': breed,
'gender': gender, // "남아", "여아", "기타"
'isNeutered': isNeutered,
'birthDate': birthDate?.toIso8601String(),
'isDateUnknown': isDateUnknown,
'weight': weight,
'registrationNumber': registrationNumber,
'diseases': diseases != null ? jsonEncode(diseases) : '[]',
'pastDiseases': pastDiseases != null ? jsonEncode(pastDiseases) : '[]',
'healthConcerns': healthConcerns != null
? jsonEncode(healthConcerns)
: '[]',
if (profileImage != null)
'profileImage': await MultipartFile.fromFile(
profileImage.path,
filename: profileImage.path.split('/').last,
),
});
final response = await _dio.post('/pets', data: formData);
return response.data;
} catch (e) {
debugPrint('Error registering pet: $e');
rethrow;
}
}
// Update Pet
Future<Map<String, dynamic>> updatePet({
required int petId,
required String name,
required String species,
required String breed,
required String gender,
required bool isNeutered,
DateTime? birthDate,
required bool isDateUnknown,
double? weight,
String? registrationNumber,
File? profileImage,
List<String>? diseases,
List<String>? pastDiseases,
List<String>? healthConcerns,
}) async {
try {
final formData = FormData.fromMap({
'name': name,
'species': species,
'breed': breed,
'gender': gender,
'isNeutered': isNeutered,
'birthDate': birthDate?.toIso8601String(),
'isDateUnknown': isDateUnknown,
'weight': weight,
'registrationNumber': registrationNumber,
'diseases': diseases != null ? jsonEncode(diseases) : '[]',
'pastDiseases': pastDiseases != null ? jsonEncode(pastDiseases) : '[]',
'healthConcerns': healthConcerns != null
? jsonEncode(healthConcerns)
: '[]',
if (profileImage != null)
'profileImage': await MultipartFile.fromFile(
profileImage.path,
filename: profileImage.path.split('/').last,
),
});
final response = await _dio.put('/pets/$petId', data: formData);
return response.data;
} catch (e) {
debugPrint('Error updating pet: $e');
rethrow;
}
}
// Get Pets
Future<List<dynamic>> getPets(int userId) async {
try {
final response = await _dio.get(
'/pets',
queryParameters: {'userId': userId},
);
return response.data;
} catch (e) {
debugPrint('Error fetching pets: $e');
rethrow;
}
}
}