import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../core/api/api_client.dart'; import '../../core/auth/auth_provider.dart'; import '../../shared/models/user.dart'; final profileServiceProvider = Provider((ref) { return ProfileService(ref.read(apiClientProvider)); }); class UpdateProfileRequest { final String? name; final int? heightCm; final double? weightKg; final String? dateOfBirth; final String? gender; final String? activity; final String? goal; final String? language; final List? mealTypes; final int? dailyCalories; const UpdateProfileRequest({ this.name, this.heightCm, this.weightKg, this.dateOfBirth, this.gender, this.activity, this.goal, this.language, this.mealTypes, this.dailyCalories, }); Map toJson() { final map = {}; if (name != null) map['name'] = name; if (heightCm != null) map['height_cm'] = heightCm; if (weightKg != null) map['weight_kg'] = weightKg; if (dateOfBirth != null) map['date_of_birth'] = dateOfBirth; if (gender != null) map['gender'] = gender; if (activity != null) map['activity'] = activity; if (goal != null) map['goal'] = goal; if (dailyCalories != null) map['daily_calories'] = dailyCalories; // Build preferences patch — backend merges into existing JSONB. final prefPatch = {}; if (language != null) prefPatch['language'] = language; if (mealTypes != null) prefPatch['meal_types'] = mealTypes; if (prefPatch.isNotEmpty) map['preferences'] = prefPatch; return map; } } class ProfileService { final ApiClient _client; ProfileService(this._client); Future getProfile() async { final json = await _client.get('/profile'); return User.fromJson(json); } Future updateProfile(UpdateProfileRequest req) async { final json = await _client.put('/profile', data: req.toJson()); return User.fromJson(json); } }