MIF_E31230069/spk_mobile/lib/services/review_service.dart

179 lines
4.8 KiB
Dart

import 'dart:convert';
import 'package:http/http.dart' as http;
import '../config/app_config.dart';
import 'auth_service.dart';
class ReviewService {
final AuthService _authService = AuthService();
Map<String, String> get _headers {
final headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
};
if (_authService.token != null) {
headers['Authorization'] = 'Bearer ${_authService.token}';
}
return headers;
}
// Add review for kontrakan
Future<Map<String, dynamic>> addKontrakanReview({
required int kontrakanId,
required double rating,
required String comment,
}) async {
try {
final response = await http.post(
Uri.parse('${AppConfig.baseUrl}/reviews/kontrakan/$kontrakanId'),
headers: _headers,
body: jsonEncode({'rating': rating, 'comment': comment}),
);
final data = jsonDecode(response.body);
if (response.statusCode == 401) {
await _authService.handleUnauthorized(response.statusCode);
return {
'success': false,
'message': 'Sesi expired, silakan login ulang',
};
}
if (response.statusCode == 201 && data['success'] == true) {
return {
'success': true,
'message': data['message'] ?? 'Review berhasil ditambahkan',
'data': data['data'],
};
} else {
return {
'success': false,
'message': data['message'] ?? 'Gagal menambahkan review',
'errors': data['errors'],
};
}
} catch (e) {
return {'success': false, 'message': 'Error: $e'};
}
}
// Add review for laundry
Future<Map<String, dynamic>> addLaundryReview({
required int laundryId,
required double rating,
required String comment,
}) async {
try {
final response = await http.post(
Uri.parse('${AppConfig.baseUrl}/reviews/laundry/$laundryId'),
headers: _headers,
body: jsonEncode({'rating': rating, 'comment': comment}),
);
final data = jsonDecode(response.body);
if (response.statusCode == 401) {
await _authService.handleUnauthorized(response.statusCode);
return {
'success': false,
'message': 'Sesi expired, silakan login ulang',
};
}
if (response.statusCode == 201 && data['success'] == true) {
return {
'success': true,
'message': data['message'] ?? 'Review berhasil ditambahkan',
'data': data['data'],
};
} else {
return {
'success': false,
'message': data['message'] ?? 'Gagal menambahkan review',
'errors': data['errors'],
};
}
} catch (e) {
return {'success': false, 'message': 'Error: $e'};
}
}
// Update review
Future<Map<String, dynamic>> updateReview({
required int reviewId,
required double rating,
required String comment,
}) async {
try {
final response = await http.put(
Uri.parse('${AppConfig.baseUrl}/reviews/$reviewId'),
headers: _headers,
body: jsonEncode({'rating': rating, 'comment': comment}),
);
final data = jsonDecode(response.body);
if (response.statusCode == 401) {
await _authService.handleUnauthorized(response.statusCode);
return {
'success': false,
'message': 'Sesi expired, silakan login ulang',
};
}
if (response.statusCode == 200 && data['success'] == true) {
return {
'success': true,
'message': data['message'] ?? 'Review berhasil diperbarui',
'data': data['data'],
};
} else {
return {
'success': false,
'message': data['message'] ?? 'Gagal memperbarui review',
'errors': data['errors'],
};
}
} catch (e) {
return {'success': false, 'message': 'Error: $e'};
}
}
// Delete review
Future<Map<String, dynamic>> deleteReview(int reviewId) async {
try {
final response = await http.delete(
Uri.parse('${AppConfig.baseUrl}/reviews/$reviewId'),
headers: _headers,
);
final data = jsonDecode(response.body);
if (response.statusCode == 401) {
await _authService.handleUnauthorized(response.statusCode);
return {
'success': false,
'message': 'Sesi expired, silakan login ulang',
};
}
if (response.statusCode == 200 && data['success'] == true) {
return {
'success': true,
'message': data['message'] ?? 'Review berhasil dihapus',
};
} else {
return {
'success': false,
'message': data['message'] ?? 'Gagal menghapus review',
};
}
} catch (e) {
return {'success': false, 'message': 'Error: $e'};
}
}
}