elCaribe app - customization and branding

This commit is contained in:
2025-12-12 19:09:42 -04:00
parent 9e5d0d8ebf
commit ba7deac9f3
402 changed files with 31833 additions and 0 deletions

View File

@@ -0,0 +1,171 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:news/data/models/authorModel.dart';
import 'package:news/utils/api.dart';
import 'package:news/utils/constant.dart';
import 'package:news/utils/hiveBoxKeys.dart';
import 'package:news/utils/uiUtils.dart';
import 'package:news/cubits/Auth/authCubit.dart';
import 'package:news/utils/strings.dart';
import 'package:news/data/repositories/Auth/authLocalDataSource.dart';
import 'package:news/data/repositories/Auth/authRemoteDataSource.dart';
class AuthRepository {
static final AuthRepository _authRepository = AuthRepository._internal();
late AuthLocalDataSource _authLocalDataSource;
late AuthRemoteDataSource _authRemoteDataSource;
factory AuthRepository() {
_authRepository._authLocalDataSource = AuthLocalDataSource();
_authRepository._authRemoteDataSource = AuthRemoteDataSource();
return _authRepository;
}
AuthRepository._internal();
AuthLocalDataSource get authLocalDataSource => _authLocalDataSource;
//to get auth detials stored in hive box
getLocalAuthDetails() {
return {
"isLogIn": _authLocalDataSource.checkIsAuth(),
ID: _authLocalDataSource.getId(),
NAME: _authLocalDataSource.getName(),
EMAIL: _authLocalDataSource.getEmail(),
MOBILE: _authLocalDataSource.getMobile(),
TYPE: _authLocalDataSource.getType(),
PROFILE: _authLocalDataSource.getProfile(),
STATUS: _authLocalDataSource.getStatus(),
TOKEN: _authLocalDataSource.getJWTtoken(),
AUTHOR_BIO: _authLocalDataSource.getAuthorBio(),
AUTHOR_STATUS: _authLocalDataSource.getAuthorStatus().name,
AUTHOR_WHATSAPP_LINK: _authLocalDataSource.getAuthorWhatsappLink(),
AUTHOR_FACEBOOK_LINK: _authLocalDataSource.getAuthorFacebookLink(),
AUTHOR_TELEGRAM_LINK: _authLocalDataSource.getAuthorTelegramLink(),
AUTHOR_LINKEDIN_LINK: _authLocalDataSource.getAuthorLinkedInLink()
};
}
setLocalAuthDetails(
{required bool authStatus,
required String id,
required String name,
required String email,
required String mobile,
required String type,
required String profile,
required String status,
required String role,
required String jwtToken,
required int isAuthor,
Author? authorDetails}) {
_authLocalDataSource.changeAuthStatus(authStatus);
_authLocalDataSource.setId(id);
_authLocalDataSource.setName(name);
_authLocalDataSource.setEmail(email);
_authLocalDataSource.setMobile(mobile);
_authLocalDataSource.setType(type);
_authLocalDataSource.setProfile(profile);
_authLocalDataSource.setStatus(status);
_authLocalDataSource.setJWTtoken(jwtToken);
_authLocalDataSource.setAuthorStatus((authorDetails != null) ? authorDetails.status! : AuthorStatus.rejected);
_authLocalDataSource.setAuthorBio((authorDetails != null) ? authorDetails.bio : "");
_authLocalDataSource.setSocialMediaLinks((authorDetails != null) ? authorDetails.whatsappLink : "", (authorDetails != null) ? authorDetails.facebookLink : "",
(authorDetails != null) ? authorDetails.telegramLink : "", (authorDetails != null) ? authorDetails.linkedinLink : "");
}
//First we signin user with given provider then add user details
Future<Map<String, dynamic>> signInUser({required BuildContext context, required AuthProviders authProvider, String? email, String? password, String? otp, String? verifiedId}) async {
try {
final result = await _authRemoteDataSource.socialSignInUser(context: context, authProvider: authProvider, email: email, password: password, verifiedId: verifiedId, otp: otp);
final user = result['user'] as User;
var providerData = user.providerData[0];
if (authProvider == AuthProviders.email && !user.emailVerified) {
throw ApiException(UiUtils.getTranslatedLabel(context, 'verifyEmailMsg'));
}
Map<String, dynamic> userDataTest = await _authRemoteDataSource.loginAuth(
mobile: providerData.phoneNumber ?? "",
email: providerData.email ?? "",
firebaseId: user.uid,
name: providerData.displayName ?? "",
profile: providerData.photoURL ?? "",
type: authProvider.name);
if (!userDataTest[ERROR]) {
if (userDataTest[DATA][STATUS].toString() != "0") {
setLocalAuthDetails(
type: userDataTest[DATA][TYPE] ?? "",
profile: userDataTest[DATA][PROFILE] ?? "",
name: userDataTest[DATA][NAME] ?? "",
email: userDataTest[DATA][EMAIL] ?? "",
authStatus: true,
id: (userDataTest[DATA][ID].toString() != "") ? userDataTest[DATA][ID].toString() : "0",
mobile: userDataTest[DATA][MOBILE] ?? "",
role: userDataTest[DATA][ROLE].toString(),
status: userDataTest[DATA][STATUS].toString(),
jwtToken: userDataTest[DATA][TOKEN] ?? "",
isAuthor: userDataTest[DATA][IS_AUTHOR] ?? 0,
authorDetails: (userDataTest[DATA][IS_AUTHOR] == 1 && userDataTest[DATA][AUTHOR] != null) ? Author.fromJson(userDataTest[DATA][AUTHOR]) : null);
}
return userDataTest;
} else {
signOut(authProvider);
throw ApiMessageAndCodeException(errorMessage: userDataTest[MESSAGE]);
}
} catch (e) {
signOut(authProvider);
throw ApiMessageAndCodeException(errorMessage: e.toString());
}
}
Future<dynamic> updateUserData(
{String? name, String? mobile, String? email, String? filePath, String? authorBio, String? whatsappLink, String? facebookLink, String? telegramLink, String? linkedInLink}) async {
final result = await _authRemoteDataSource.updateUserData(
email: email,
name: name,
mobile: mobile,
filePath: filePath,
authorBio: authorBio,
whatsappLink: whatsappLink,
facebookLink: facebookLink,
telegramLink: telegramLink,
linkedInLink: linkedInLink);
if (name != null) _authLocalDataSource.setName(name);
if (mobile != null) _authLocalDataSource.setMobile(mobile);
if (email != null) _authLocalDataSource.setEmail(email);
if (filePath != null && filePath.isNotEmpty) _authLocalDataSource.setProfile(result[PROFILE]);
if (authorBio != null) _authLocalDataSource.setAuthorBio(authorBio);
if (whatsappLink != null || facebookLink != null || telegramLink != null || linkedInLink != null) _authLocalDataSource.setSocialMediaLinks(whatsappLink, facebookLink, telegramLink, linkedInLink);
return result;
}
Future<Map<String, dynamic>> registerToken({required String fcmId, required BuildContext context}) async {
final result = await _authRemoteDataSource.registerToken(fcmId: fcmId, context: context);
return result;
}
//to delete my account
Future<dynamic> deleteUser() async {
final result = await _authRemoteDataSource.deleteUserAcc();
return result;
}
Future<void> signOut(AuthProviders authProvider) async {
_authRemoteDataSource.signOut(authProvider);
await _authLocalDataSource.changeAuthStatus(false);
await _authLocalDataSource.setId("0");
await _authLocalDataSource.setName("");
await _authLocalDataSource.setEmail("");
await _authLocalDataSource.setMobile("");
await _authLocalDataSource.setType("");
await _authLocalDataSource.setProfile("");
await _authLocalDataSource.setStatus("");
await _authLocalDataSource.setJWTtoken("");
await _authLocalDataSource.setAuthorBio("");
await _authLocalDataSource.setAuthorStatus(AuthorStatus.rejected);
await _authLocalDataSource.setSocialMediaLinks("", "", "", "");
await Hive.box(authBoxKey).clear();
}
}