sarga/packages/Sarga/API/Http/Controllers/Customers.php

147 lines
5.0 KiB
PHP
Raw Normal View History

2022-01-24 12:20:46 +00:00
<?php
namespace Sarga\API\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Event;
2022-02-06 15:29:52 +00:00
use Illuminate\Support\Facades\Hash;
2022-01-25 07:25:49 +00:00
use Illuminate\Support\Facades\Validator;
2022-01-24 12:20:46 +00:00
use Webkul\API\Http\Resources\Customer\Customer as CustomerResource;
2022-02-06 15:29:52 +00:00
use Webkul\RestApi\Http\Controllers\V1\Shop\Customer\AuthController;
2022-01-24 12:20:46 +00:00
2022-02-06 15:29:52 +00:00
class Customers extends AuthController
2022-01-24 12:20:46 +00:00
{
/**
* Method to store user's sign up form data to DB.
*
* @return \Illuminate\Http\Response
*/
2022-02-06 15:38:22 +00:00
public function register(Request $request)
2022-01-24 12:20:46 +00:00
{
2022-01-25 07:25:49 +00:00
$validation = Validator::make($request->all(), [
2022-01-24 12:20:46 +00:00
'first_name' => 'required|string',
'last_name' => 'required|string',
'phone' => 'required|digits:8|unique:customers,phone',
'password' => 'required|min:6',
2022-02-06 15:29:52 +00:00
'gender' => 'in:Male,Female',
'device_name'=> 'required'
2022-01-24 12:20:46 +00:00
]);
2022-01-25 07:25:49 +00:00
if ($validation->fails()) {
return response()->json(['errors'=>$validation->getMessageBag()->all()],422);
}
2022-01-24 12:20:46 +00:00
$data = [
'first_name' => $request->get('first_name'),
'last_name' => $request->get('last_name'),
'phone' => $request->get('phone'),
'password' => bcrypt($request->get('password')),
'channel_id' => core()->getCurrentChannel()->id,
'is_verified' => 1,
'gender' => $request->get('gender'),
2022-02-06 15:38:22 +00:00
'customer_group_id' => $this->customerGroupRepository->findOneWhere(['code' => 'general'])->id
2022-01-24 12:20:46 +00:00
];
Event::dispatch('customer.registration.before');
$customer = $this->customerRepository->create($data);
Event::dispatch('customer.registration.after', $customer);
if (! $jwtToken = auth()->guard($this->guard)->attempt($request->only(['phone', 'password']))) {
return response()->json([
'error' => 'Invalid Email or Password',
], 401);
}
Event::dispatch('customer.after.login', $request->get('phone'));
2022-02-06 15:29:52 +00:00
return response([
'data' => new \Webkul\RestApi\Http\Resources\V1\Shop\Customer\CustomerResource($customer),
'message' => 'Registered in successfully.',
'token' => $customer->createToken($request->device_name, ['role:customer'])->plainTextToken,
2022-01-24 12:20:46 +00:00
]);
}
/**
* Method to store user's sign up form data to DB.
*
* @return \Illuminate\Http\Response
*/
public function login(Request $request)
{
2022-01-25 07:25:49 +00:00
$validation = Validator::make($request->all(), [
'phone' => 'required|digits:8',
'password' => 'required|min:6',
2022-02-06 15:29:52 +00:00
'device_name' => 'required',
2022-01-25 07:25:49 +00:00
]);
if ($validation->fails()) {
return response()->json(['errors'=>$validation->getMessageBag()->all()],422);
}
2022-02-06 15:29:52 +00:00
$customer = $this->customerRepository->where('phone', $request->phone)->first();
2022-01-24 12:20:46 +00:00
2022-02-06 15:29:52 +00:00
if (! $customer || ! Hash::check($request->password, $customer->password)) {
2022-01-24 12:20:46 +00:00
return response()->json([
2022-02-06 15:29:52 +00:00
'error' => 'The provided credentials are incorrect.',
2022-01-24 12:20:46 +00:00
], 401);
}
Event::dispatch('customer.after.login', $request->get('phone'));
2022-02-06 15:29:52 +00:00
/**
* Preventing multiple token creation.
*/
$customer->tokens()->delete();
2022-01-24 12:20:46 +00:00
2022-02-06 15:29:52 +00:00
return response([
'data' => new \Webkul\RestApi\Http\Resources\V1\Shop\Customer\CustomerResource($customer),
2022-01-24 12:20:46 +00:00
'message' => 'Logged in successfully.',
2022-02-06 15:29:52 +00:00
'token' => $customer->createToken($request->device_name, ['role:customer'])->plainTextToken,
2022-01-24 12:20:46 +00:00
]);
}
/**
* Update the specified resource in storage.
*
* @return \Illuminate\Http\Response
*/
2022-01-26 07:06:18 +00:00
public function store(Request $request)
2022-01-24 12:20:46 +00:00
{
2022-02-06 15:29:52 +00:00
$customer = $request->user();
2022-01-24 12:20:46 +00:00
2022-01-25 13:38:24 +00:00
$validation = Validator::make($request->all(), [
2022-01-24 12:20:46 +00:00
'first_name' => 'required',
'last_name' => 'required',
'gender' => 'in:Male,Female',
'date_of_birth' => 'nullable|date|before:today',
'email' => 'email|unique:customers,email,' . $customer->id,
'phone' => 'digits:8|unique:customers,phone,' . $customer->id,
'password' => 'min:6',
]);
2022-01-25 12:59:26 +00:00
if ($validation->fails()) {
return response()->json(['errors'=>$validation->getMessageBag()->all()],422);
}
2022-01-24 12:20:46 +00:00
$data = request()->only('first_name', 'last_name', 'gender', 'date_of_birth', 'email', 'password','phone');
if (! isset($data['password']) || ! $data['password']) {
unset($data['password']);
} else {
$data['password'] = bcrypt($data['password']);
}
$updatedCustomer = $this->customerRepository->update($data, $customer->id);
return response()->json([
'message' => 'Your account has been updated successfully.',
'data' => new CustomerResource($updatedCustomer),
]);
}
}