179 lines
4.8 KiB
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'};
|
|
}
|
|
}
|
|
}
|