Houshan-Basa/lib/data/repository/auth_repository.dart

264 lines
8.1 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:cross_file/cross_file.dart';
import 'package:dio/dio.dart';
import 'package:hoshan/core/services/api/dio_service.dart';
import 'package:hoshan/core/utils/strings.dart';
import 'package:hoshan/data/model/auth/login_model.dart';
import 'package:hoshan/data/model/auth/user_info_model.dart';
import 'package:hoshan/data/model/report_model.dart';
import 'package:shamsi_date/shamsi_date.dart';
class AuthRepository {
static final DioService _dioService = DioService();
static Future<UserInfoModel> getUserInfo() async {
try {
Response response =
await _dioService.sendRequest().get(DioService.getInfo);
return UserInfoModel.fromJson(response.data);
} catch (ex) {
rethrow;
}
}
// static Future<Response> registerUser(String number) async {
// try {
// Response response = await _dioService.sendRequest().post(
// DioService.register,
// data: {'mobile_number': number.convertToEnglishNumber()});
// return response;
// } catch (ex) {
// rethrow;
// }
// }
static Future<bool> sendOtp(String number) async {
try {
Response response = await _dioService.sendRequest().post(
DioService.sendOTP,
data: {'mobile_number': number.convertToEnglishNumber()});
return response.data['is_new'];
} catch (ex) {
rethrow;
}
}
static Future<LoginModel> loginWithPassword(
String number, String password) async {
try {
Response response = await _dioService.sendRequest().post(
DioService.loginWithPassword,
data: {'username': number, 'password': password});
return LoginModel.fromJson(response.data);
} catch (ex) {
rethrow;
}
}
static Future<LoginModel> loginWithOTP(String number, String otp) async {
try {
Response response = await _dioService.sendRequest().post(
DioService.loginWithOTP,
data: {"mobile_number": number.convertToEnglishNumber(), "otp": otp});
return LoginModel.fromJson(response.data);
} catch (ex) {
rethrow;
}
}
static Future<bool> checkUsernameIsValid(String username) async {
try {
Response response = await _dioService
.sendRequest()
.post(DioService.checkUsername, data: {"username": username});
return response.data['available'];
} catch (ex) {
rethrow;
}
}
static Future<bool> editUsername(String username) async {
try {
Response response = await _dioService
.sendRequest()
.put(DioService.editUsername, data: {"username": username});
return (response.statusCode!) >= 200 && (response.statusCode!) < 300;
} catch (ex) {
return false;
}
}
static Future<bool> editImageProfile(XFile image) async {
try {
FormData formData = FormData();
MultipartFile multipartFile = await DioService.getMultipartFile(image);
formData.files.add(MapEntry('file', multipartFile));
Response response = await _dioService
.sendRequest()
.put(DioService.editProfile, data: formData);
return (response.statusCode!) >= 200 && (response.statusCode!) < 300;
} catch (ex) {
return false;
}
}
static Future<bool> editPasswordProfile(String password) async {
try {
Response response = await _dioService
.sendRequest()
.put(DioService.editPassword, data: {"password": password});
return (response.statusCode!) >= 200 && (response.statusCode!) < 300;
} catch (ex) {
return false;
}
}
static Future<bool> editCardNumber(String? cardNumber) async {
try {
Response response = await _dioService
.sendRequest()
.put(DioService.cardNumber, data: {"card_number": cardNumber});
return (response.statusCode!) >= 200 && (response.statusCode!) < 300;
} catch (ex) {
return false;
}
}
static Future<String?> checkGiftCode(String code) async {
try {
Response response = await _dioService
.sendRequest()
.post(DioService.giftCode, data: {"code": code});
return response.data['detail'];
} catch (ex) {
rethrow;
}
}
static Future<ReportModel> getReport({required Jalali? startDate}) async {
try {
startDate ??= Jalali.now();
final shamsiYear = startDate.year;
final shamsiMounth = startDate.month;
startDate = Jalali(shamsiYear, shamsiMounth, 1);
Jalali endDate = Jalali(
shamsiYear,
shamsiMounth + 1 > 12 ? 12 : shamsiMounth + 1,
shamsiMounth + 1 > 12 ? 30 : 1)
.addDays(-1);
Gregorian sMiladiDate = startDate.toGregorian();
Gregorian eMiladiDate = endDate.toGregorian();
String sDate =
'${sMiladiDate.year}-${sMiladiDate.month.toString().padLeft(2, '0')}-${sMiladiDate.day.toString().padLeft(2, '0')}';
String eDate =
'${eMiladiDate.year}-${eMiladiDate.month.toString().padLeft(2, '0')}-${eMiladiDate.day.toString().padLeft(2, '0')}';
Response response = await _dioService.sendRequest().get(
DioService.reportPeriodic,
queryParameters: {'start_date': sDate, 'end_date': eDate});
return ReportModel.fromJson(response.data);
} catch (ex) {
rethrow;
}
}
static Future<ReportModel> getReportCoin({required Jalali? startDate}) async {
try {
startDate ??= Jalali.now();
final shamsiYear = startDate.year;
final shamsiMounth = startDate.month;
startDate = Jalali(shamsiYear, shamsiMounth, 1);
Jalali endDate = Jalali(
shamsiYear,
shamsiMounth + 1 > 12 ? 12 : shamsiMounth + 1,
shamsiMounth + 1 > 12 ? 30 : 1)
.addDays(-1);
Gregorian sMiladiDate = startDate.toGregorian();
Gregorian eMiladiDate = endDate.toGregorian();
String sDate =
'${sMiladiDate.year}-${sMiladiDate.month.toString().padLeft(2, '0')}-${sMiladiDate.day.toString().padLeft(2, '0')}';
String eDate =
'${eMiladiDate.year}-${eMiladiDate.month.toString().padLeft(2, '0')}-${eMiladiDate.day.toString().padLeft(2, '0')}';
Response response = await _dioService.sendRequest().get(
DioService.reportPiCoin,
queryParameters: {'start_date': sDate, 'end_date': eDate});
return ReportModel.fromJson(response.data);
} catch (ex) {
rethrow;
}
}
static Future<ReportModel> setFCMtoken(String token) async {
try {
Response response = await _dioService
.sendRequest()
.put(DioService.fCMtoken, data: {"token": token});
return ReportModel.fromJson(response.data);
} catch (ex) {
rethrow;
}
}
static Future<Response> getRemaining() async {
try {
Response response =
await _dioService.sendRequest().get(DioService.remaining);
return response;
} catch (ex) {
rethrow;
}
}
static Future<bool> addSubUser(String mobileNumber, int level) async {
try {
final number = mobileNumber.convertToEnglishNumber();
Response response = await _dioService.sendRequest().post(
DioService.addSubUser,
data: {
"mobile_number": number,
"level": level,
},
);
return (response.statusCode!) >= 200 && (response.statusCode!) < 300;
} catch (ex) {
rethrow;
}
}
static Future<bool> deleteSubUser(String id) async {
try {
final response =
await _dioService.sendRequest().delete(DioService.deleteSubUser(id));
return (response.statusCode ?? 500) >= 200 &&
(response.statusCode ?? 0) < 300;
} catch (ex) {
rethrow;
}
}
static Future<List<Map<String, dynamic>>> getSubUsers() async {
try {
Response response = await _dioService.sendRequest().get(DioService.getSubUsers);
// استخراج لیست کاربران از پاسخ جیسون
// ساختار: { "sub_users": [...], "total_count": 1 }
List<dynamic> data = response.data['sub_users'];
// تبدیل به لیستی از Mapها
return List<Map<String, dynamic>>.from(data);
} catch (ex) {
rethrow;
}
}
}