Viewing File: /home/ubuntu/vedadeals-backend-base/app/Http/Controllers/Api/UserApiController.php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Helpers\Helper;
use DB, Exception, Setting, Hash, Storage;
use App\Models\{ User, Wallet, PasswordReset, UserWallet, Cart, UserWithdrawal };
use App\Services\{ EmailService };
use Illuminate\Validation\Rule;
use App\Jobs\SendEmailJob;
class UserApiController extends Controller
{
protected $loginUser;
protected $skip, $take;
public function __construct(Request $request) {
info(url()->current());
info("Request Data".print_r($request->all(), true));
$this->loginUser = User::find($request->id);
$this->skip = $request->skip ? : 0;
$this->take = $request->take ? : (Setting::get('admin_take_count') ? : TAKE_COUNT);
$this->timezone = $this->loginUser->timezone ?? "America/New_York";
$request->request->add(['time_zone' => $this->timezone]);
}
/**
* @method register()
*
* @uses for user registration
*
* @created Karthick
*
* @updated
*
* @param
*
* @return Json response with user details
*/
public function register(Request $request) {
try {
$basic_rule = ['login_by' => 'required', Rule::in(MANUAL, FACEBOOK, GOOGLE)];
Helper::custom_validator($request->all(), $basic_rule, $custom_errors = []);
if(in_array($request->login_by, [FACEBOOK, GOOGLE])) {
$rules = [
'social_unique_id' => 'required',
'name' => 'nullable|max:255',
'email' => 'required|email|max:255',
// 'dob' => ['nullable', 'date']
];
} else {
$rules = [
'name' => 'required|max:255',
// 'username' => 'required|unique:users,username|regex:/^[a-zA-Z0-9-]+$/u',
'email' => 'required|email|max:255|unique:users,email',
'password' => 'required|min:6',
// 'dob' => ['nullable', 'date']
];
}
$custom_errors = [ 'regex' => api_error(121) ];
$validated = Helper::custom_validator($request->all(), $rules, $custom_errors);
DB::beginTransaction();
$user = User::firstWhere('email' , $request->email);
$send_email = NO;
// Creating the user
if(!$user) {
$user = new User;
$send_email = YES;
} elseif (in_array($user->status, [USER_PENDING , USER_DECLINED])) {
throw new Exception(api_error(1000), 1000);
}
$user->name = $request->name ?? "";
$user->email = $request->email ?? "";
$user->mobile = $request->mobile ?? "";
$user->username = $request->username ?? "";
$user->timezone = $request->timezone ?? "";
$user->social_unique_id = $request->social_unique_id ? : "";
$user->device_token = $request->device_token ? : $user->device_token;
$user->device_type = $request->device_type ? : $user->device_type;
$user->login_by = $request->login_by ? : $user->login_by;
// $user->dob = $request->dob ? : $user->dob;
$user->state = $request->state ? : $user->state;
$user->country = $request->country ? : $user->country;
$user->country_code = $request->country_code ? : $user->country_code;
$user->password = '';
if($request->has('password') && $request->login_by == MANUAL) {
$user->password = $request->password ? : "";
}
if($user->save()) {
if($send_email) {
EmailService::send_user_welcome_email($user);
}
if(in_array($user->status , [USER_DECLINED , USER_PENDING])) {
$response = ['success' => false , 'error' => api_error(1000) , 'error_code' => 1000];
DB::commit();
return response()->json($response, 200);
}
if($user->is_email_verified == USER_EMAIL_VERIFIED) {
$data = User::find($user->id);
if($user->wasRecentlyCreated) {
$success_code = 101;
} elseif($user->login_by != MANUAL) {
$success_code = 102;
}
$response = ['success' => true, 'message' => api_success($success_code), 'data' => $data];
} else {
$data = User::find($user->id);
$response = ['success' => true, 'message' => api_error(1001), 'code' => 1001, 'data' => $data];
DB::commit();
return response()->json($response, 200);
}
} else {
throw new Exception(api_error(103), 103);
}
DB::commit();
return response()->json($response, 200);
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method login()
*
* @uses for user login
*
* @created Karthick
*
* @updated
*
* @param object $request - email, password, device_type, login_by
*
* @return Json response with user details
*/
public function login(Request $request) {
try {
DB::beginTransaction();
$rules = [
'email' => 'required|exists:users,email',
'password' => 'required',
];
$custom_errors = ['email.exists' => api_error(1002)];
$validated = Helper::custom_validator($request->all(), $rules, $custom_errors);
$user = User::where('email', $request->email)->where('status', USER_APPROVED)->first();
if(!$user) {
throw new Exception(api_error(100), 100);
}
if(Hash::check($request->password, $user->password)) {
$user->state = $request->state ? : $user->state;
$user->country = $request->country ? : $user->country;
$user->country_code = $request->country_code ? : $user->country_code;
if($user->is_email_verified != USER_EMAIL_VERIFIED) {
$response = ['success' => true, 'message' => api_error(1001), 'code' => 1001, 'data' => $user];
return response()->json($response, 200);
}
if ($user->is_two_step_auth_enabled) {
$user->verification_code = Helper::generate_email_code();
$user->verification_code_expiry = Helper::generate_email_expiry();
$user->save();
DB::commit();
$user = User::find($user->id);
EmailService::send_two_step_verification_code_email($user);
return $this->sendResponse(api_success(114), $success_code = 114, $data = $user);
}
$user->token = Helper::generate_token();
$user->token_expiry = Helper::generate_token_expiry();
$user->device_token = $request->device_token ? : $user->device_token;
$user->device_type = $request->device_type ? : $user->device_type;
$user->login_by = $request->login_by ? : $user->login_by;
$user->timezone = $request->timezone ? : $user->timezone;
$user->is_logged_in = YES;
$user->save();
DB::commit();
$user = User::find($user->id);
return $this->sendResponse(api_success(102), 102, $user);
} else {
throw new Exception(api_error(1007), 1007);
}
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method profile()
*
* @uses to get the user details
*
* @created Karthick
*
* @updated
*
* @param object $request - if
*
* @return json response with user details
*/
public function profile(Request $request) {
try {
$user = User::withCount(['bellNotifications', 'unReadBellNotifications'])->find($request->id);
if(!$user) {
throw new Exception(api_error(1002) , 1002);
}
$user->created_formatted = common_date($user->created_at, $this->timezone, 'd M Y');
$user->updated_formatted = common_date($user->updated_at, $this->timezone, 'd M Y');
$user->cart_count = Cart::has('product')->where('user_id', $request->id)->count();
Helper::cache_update_for_products($user->id, '');
return $this->sendResponse($message = "", $success_code = "", $user);
} catch(Exception $e) {
return $this->sendError($e->getMessage(), $e->getLine());
}
}
/**
* @method update_profile()
*
* @uses to update the user details
*
* @created Karthick
*
* @updated
*
* @param objecct $request : user details
*
* @return json response with updated user details
*/
public function update_profile(Request $request) {
try {
$rules = [
'name' => 'required|max:255',
// 'username' => 'required|unique:users,username,'.$request->id.'|regex:/^[a-zA-Z0-9-]+$/u',
'email' => 'email|max:255|unique:users,email,'.$request->id,
'mobile' => 'nullable|digits_between:6,13',
'picture' => 'nullable|mimes:jpg,png,jpeg',
'cover' => 'nullable|mimes:jpg,png,jpeg',
'gender' => 'nullable|in:male,female,others,rather-not-select',
'about' => 'nullable|max:250',
'wallet_address' => 'nullable',
// 'dob' => ['nullable', 'date']
];
$custom_errors = [ 'regex' => api_error(121) ];
$validated = Helper::custom_validator($request->all(), $rules, $custom_errors);
$user = User::find($request->id);
DB::beginTransaction();
$user->update($validated);
if($request->hasFile('picture')) {
Helper::storage_delete_file($user->picture, PROFILE_PATH_USER);
$user->picture = Helper::storage_upload_file($request->file('picture'), PROFILE_PATH_USER);
}
if($request->hasFile('cover')) {
Helper::storage_delete_file($user->cover, PROFILE_PATH_USER);
$user->cover = Helper::storage_upload_file($request->file('cover'), PROFILE_PATH_USER);
}
if($user->save()) {
$user->cart_count = Cart::has('product')->where('user_id', $request->id)->count();
DB::commit();
return $this->sendResponse(api_success(103), 103, $user);
} else {
throw new Exception(api_error(1005), 1005);
}
} catch (Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method delete_account()
*
* @uses to delete an user account
*
* @created Karthick
*
* @updated
*
* @param object $request - id, password
*
* @return json results
*/
public function delete_account(Request $request) {
try {
DB::beginTransaction();
$request->request->add(['login_by' => $this->loginUser ? $this->loginUser->login_by : "manual"]);
$rules = ['password' => 'required_if:login_by,manual'];
Helper::custom_validator($request->all(), $rules, $custom_errors = []);
$user = User::find($request->id);
if($user->login_by == 'manual') {
if(!Hash::check($request->password, $user->password)) {
throw new Exception(api_error(1007), 1007);
}
}
if($user->delete()) {
DB::commit();
return $this->sendResponse(api_success(109), 109, []);
} else {
throw new Exception(api_error(1008), 1008);
}
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method change_password()
*
* @uses to change the use password
*
* @created Karthick
*
* @updated
*
* @param -
*
* @return JSON Response
*/
public function change_password(Request $request) {
try {
$rules = [
'old_password' => 'required|min:6',
'password' => 'required|confirmed|min:6',
];
Helper::custom_validator($request->all(), $rules, $custom_errors =[]);
$user = User::find($request->id);
if($user->login_by != "manual") {
throw new Exception(api_error(1010), 1010);
}
if(!Hash::check($request->old_password, $user->password)) {
throw new Exception(api_error(1007), 1007);
}
DB::beginTransaction();
$result = $user->update(['password' => Hash::make($request->password)]);
if(!$result) {
throw new Exception(api_error(1011), 1011);
}
DB::commit();
EmailService::send_change_password_email($user);
return response()->json(['success' => true, 'message' => api_success(110), 'code' => 110]);
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method forgot_password()
*
* @uses to send forgot password email
*
* @created Karthick
*
* @updated
*
* @param -
*
* @return JSON Response
*/
public function forgot_password(Request $request) {
try {
$rules = ['email' => 'required|exists:users,email'];
Helper::custom_validator($request->all(), $rules, $custom_errors =[]);
$user = User::firstWhere('email', $request->email);
DB::beginTransaction();
$token = app('auth.password.broker')->createToken($user);
PasswordReset::where('email', $user->email)->delete();
PasswordReset::insert([
'email' => $user->email,
'token' => $token,
'created_at' => now()
]);
DB::commit();
EmailService::send_forgot_password_email($user, $token);
return response()->json(['success' => true, 'message' => api_success(111), 'code' => 111]);
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method logout()
*
* @uses Logout the user
*
* @created Karthick
*
* @updated
*
* @param
*
* @return
*/
public function logout(Request $request) {
$this->loginUser->update(['is_logged_in' => NO]);
return response()->json(['success' => true, 'message' => api_success(106), 'code' => 106]);
}
/**
* @method verify_email()
*
* @uses
*
* @created Arun
*
* @updated
*
* @param request id
*
* @return JSON Response
*/
public function verify_email(Request $request) {
try {
DB::beginTransaction();
$rules = [
'email' => 'required|exists:users,email',
'verification_code' => 'required|min:6|max:6'
];
Helper::custom_validator($request->all(), $rules, $custom_errors = []);
$user = User::where('email', $request->email)->first();
if (!$user) {
throw new Exception(api_error(100), 100);
}
if($user->verification_code != $request->verification_code) {
throw new Exception(api_error(101), 101);
}
$user->is_email_verified = USER_EMAIL_VERIFIED;
$user->save();
DB::commit();
$data = User::find($user->id);
return $this->sendResponse($message = api_success(112), $code = 112, $data);
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method resend_email_verification_code()
*
* @uses
*
* @created vithya R
*
* @updated Vidhya R, Karthick
*
* @param request email
*
* @return JSON Response
*/
public function resend_email_verification_code(Request $request) {
try {
$rules = [ 'email' => 'required|exists:users,email' ];
Helper::custom_validator($request->all(), $rules);
DB::beginTransaction();
$user = User::firstWhere(['email' => $request->email]);
if(!$user) {
throw new Exception(api_error(100), 100);
}
$user->verification_code = Helper::generate_email_code();
$user->verification_code_expiry = Helper::generate_email_expiry();
$user->save();
EmailService::user_register_job($user);
DB::commit();
return $this->sendResponse($message = api_success(113), $code = 113, $data = []);
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method two_step_auth_login()
*
* @uses To login via two step verification
*
* @created Arun
*
* @updated
*
* @param request email,code
*
* @return JSON Response
*/
public function two_step_auth_login(Request $request) {
try {
DB::beginTransaction();
$user = User::where('email', $request->email)->first();
if(!$user) {
throw new Exception(api_error(1002), 1002);
}
if($user->is_two_step_auth_enabled == NO) {
throw new Exception(api_error(102), 102);
}
$rules = [
'email' => 'required|exists:users,email',
'code' => 'required|min:6|max:6|exists:users,verification_code,email,'.$request->email,
// 'dob' => ['nullable', 'date']
];
Helper::custom_validator($request->all(), $rules);
if($request->code == $user->verification_code){
$user->token = Helper::generate_token();
$user->token_expiry = Helper::generate_token_expiry();
$user->verification_code = '';
$user->verification_code_expiry = '';
$user->device_token = $request->device_token ? : $user->device_token;
$user->device_type = $request->device_type ? : $user->device_type;
$user->login_by = $request->login_by ? : $user->login_by;
$user->timezone = $request->timezone ? : $user->timezone;
$user->dob = $request->dob ? : $user->dob;
$user->state = $request->state ? : $user->state;
$user->country = $request->country ? : $user->country;
$user->country_code = $request->country_code ? : $user->country_code;
$user->save();
DB::commit();
$data = User::find($user->id);
DB::commit();
return $this->sendResponse(api_success(102), 102, $data);
} else {
throw new Exception(api_error(101), 101);
}
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method two_step_auth_update()
*
* @uses To enable/disable the two step verification
*
* @created Arun
*
* @updated
*
* @param request id,email,password
*
* @return JSON Response
*/
public function two_step_auth_update(Request $request) {
try {
DB::beginTransaction();
$rules = [
'password' => 'required',
];
Helper::custom_validator($request->all(), $rules);
$user = User::where('id', $request->id)->first();
// Check the user details
if(!$user) {
throw new Exception(api_error(1002), 1002);
}
if(Hash::check($request->password, $user->password)) {
$user->is_two_step_auth_enabled = $user->is_two_step_auth_enabled ? NO : YES;
$user->save();
$data = User::find($user->id);
$data['cart_count'] = Cart::has('product')->where('user_id', $request->id)->count();
$code = $user->is_two_step_auth_enabled == YES ? 115 : 116;
DB::commit();
return $this->sendResponse(api_success($code), $code, $data);
} else {
throw new Exception(api_error(1007), 1007);
}
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method resend_two_step_auth_code()
*
* @uses To resend the two step verification code
*
* @created Arun
*
* @updated
*
* @param request id
*
* @return JSON Response
*/
public function resend_two_step_auth_code(Request $request) {
try {
DB::beginTransaction();
$rules = [ 'email' => 'required' ];
Helper::custom_validator($request->all(), $rules);
$user = User::where('email', $request->email)->first();
// Check the user details
if(!$user) {
throw new Exception(api_error(1002), 1002);
}
if($user->is_two_step_auth_enabled == NO) {
throw new Exception(api_error(102), 102);
}
$user->verification_code = Helper::generate_email_code();
$user->verification_code_expiry = Helper::generate_email_expiry();
$user->save();
DB::commit();
$user = User::find($user->id);
EmailService::send_two_step_verification_code_email($user);
$response = ['success' => true, 'message' => api_success(114), 'code' => 114];
return response()->json($response, 200);
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method username_validation()
*
* @uses to validate a username is already exists or not while user registration.
*
* @created Karthick
*
* @updated
*
* @param username
*
* @return success / failure message.
*/
public function username_validation(Request $request) {
try {
$rules = [ 'username' => 'required|regex:/^[a-zA-Z0-9-]+$/u' ];
$custom_errors = [ 'regex' => api_error(121) ];
Helper::custom_validator($request->all(), $rules, $custom_errors);
$user = User::where(['username' => $request->username])->exists();
if($user) {
throw new Exception(api_error(120), 120);
}
return $this->sendResponse(api_success(130), 130, []);
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
/**
* @method reset_password()
*
* @uses to reset the password
*
* @created Karthick
*
* @updated
*
* @param object $request - reset_token
*
* @return success / failure message.
*/
public function reset_password(Request $request) {
try {
$rules = [ 'password' => 'required|confirmed|min:6', 'reset_token' => 'required|string|exists:password_resets,token' ];
Helper::custom_validator($request->all(), $rules, $custom_errors = []);
DB::beginTransaction();
$password_reset = PasswordReset::firstWhere(['token' => $request->reset_token]);
$user = User::firstWhere(['email' => $password_reset->email]);
$user->password = Hash::make($request->password);
$user->save();
$result = PasswordReset::where('email', $user->email)->delete();
DB::commit();
EmailService::send_reset_password_email($user);
return $this->sendResponse(api_success(131), 131, []);
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
public function email_test(Request $request) {
try {
$user = User::find($request->id);
$withdrawal_request = UserWithdrawal::find($request->user_withdrawal_id);
// EmailService::send_user_welcome_email($user);
// EmailService::send_admin_welcome_email($user);
// EmailService::send_reset_password_email($user);
// EmailService::send_change_password_email($user);
// EmailService::send_forgot_password_email($user, "1234");
// EmailService::send_forgot_password_success_email($user);
// EmailService::send_two_step_verification_code_email($user);
// EmailService::send_withdrawal_request_paid_email($user->id, 10);
// EmailService::send_withdrawal_request_rejected_email($withdrawal_request);
// EmailService::send_withdrawal_request_cancelled_email($withdrawal_request);
// EmailService::user_register_job($user);
EmailService::order_status_email($request->order_unique_id);
return $this->sendResponse(api_success(111), 111, []);
} catch(Exception $e) {
DB::rollback();
return $this->sendError($e->getMessage(), $e->getCode());
}
}
}
Back to Directory
File Manager