- Add V1 Client
- Add StatusResource for responses - Add OK & KO responses - Update composer.json for dependencies - Rename deleteUser to delete
This commit is contained in:
parent
b670f4d106
commit
87ab7fd6a3
5 changed files with 203 additions and 52 deletions
|
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api\v1;
|
|||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\CustomerResource;
|
||||
use App\Http\Resources\StatusResource;
|
||||
use App\Models\Customer;
|
||||
use App\Models\CustomerInfos;
|
||||
use App\Models\CustomerLogin;
|
||||
|
|
@ -11,6 +12,7 @@ use App\Models\CustomerOptInHistory;
|
|||
use App\Models\SingleOptin;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class CustomerController extends Controller
|
||||
|
|
@ -20,11 +22,11 @@ class CustomerController extends Controller
|
|||
/**
|
||||
* Store a newly created resource in storage
|
||||
* @param Request $request
|
||||
* @return CustomerResource|\Illuminate\Http\JsonResponse
|
||||
* @return CustomerResource|StatusResource
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'required|email',
|
||||
'password' => 'required',
|
||||
'firstname' => 'required',
|
||||
|
|
@ -33,6 +35,9 @@ class CustomerController extends Controller
|
|||
'birth_date' => 'date_format:Y-m-d'
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
return new StatusResource(['status' => 'KO', 'code' => 102, 'message' => 'Error on required fields.', 'errors' => $validator->errors()]);
|
||||
|
||||
$brandId = $request->brand_id;
|
||||
$email = filter_var($request->email, FILTER_SANITIZE_EMAIL);
|
||||
$firstname = filter_var($request->firstname, FILTER_SANITIZE_STRING);
|
||||
|
|
@ -55,7 +60,7 @@ class CustomerController extends Controller
|
|||
// Récupère les infos s'ils existent déjà
|
||||
$customerInfos = CustomerInfos::where([['customer_id', $customer->id], ['brand_id', $brandId]])->first();
|
||||
if ($customerInfos)
|
||||
die("L'utilisateur est déjà inscrit sur ce site");
|
||||
return new StatusResource(['status' => 'KO', 'code' => 103, 'message' => 'User already registered on this site.']);
|
||||
}
|
||||
|
||||
$customerInfos = new CustomerInfos();
|
||||
|
|
@ -101,16 +106,14 @@ class CustomerController extends Controller
|
|||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return CustomerResource
|
||||
* @return CustomerResource | StatusResource
|
||||
*/
|
||||
public function show(Request $request, $id)
|
||||
{
|
||||
$brandId = $request->brand_id;
|
||||
$customer = Customer::find($id);
|
||||
if (!$customer){
|
||||
echo json_encode(['message'=>'Not found']);
|
||||
exit;
|
||||
}
|
||||
if (!$customer)
|
||||
return new StatusResource(['status' => 'KO', 'code' => 101, 'message' => 'User not found.']);
|
||||
return new CustomerResource($customer, $brandId);
|
||||
}
|
||||
|
||||
|
|
@ -119,22 +122,25 @@ class CustomerController extends Controller
|
|||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @return CustomerResource
|
||||
* @return CustomerResource|StatusResource
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$request->validate([
|
||||
$validator = Validator::make($request->all(), [
|
||||
'firstname' => 'required',
|
||||
'lastname' => 'required',
|
||||
'opt_in' => 'required',
|
||||
'birth_date' => 'date_format:Y-m-d'
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
return new StatusResource(['status' => 'KO', 'code' => 104, 'message' => 'Error on required fields.', 'errors' => $validator->errors()]);
|
||||
|
||||
$brandId = $request->brand_id;
|
||||
$customer = Customer::find($id);
|
||||
|
||||
if (!$customer)
|
||||
die("Cet utilisateur n'existe pas");
|
||||
return new StatusResource(['status' => 'KO', 'code' => 105, 'message' => 'User not found.']);
|
||||
|
||||
$firstname = filter_var($request->firstname, FILTER_SANITIZE_STRING);
|
||||
$lastname = filter_var($request->lastname, FILTER_SANITIZE_STRING);
|
||||
|
|
@ -172,14 +178,17 @@ class CustomerController extends Controller
|
|||
/**
|
||||
* Authenticate the user
|
||||
* @param Request $request
|
||||
* @return CustomerResource
|
||||
* @return CustomerResource|StatusResource
|
||||
*/
|
||||
public function authenticate(Request $request) {
|
||||
$request->validate([
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'required|email',
|
||||
'password' => 'required',
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
return new StatusResource(['status' => 'KO', 'code' => 115, 'message' => 'Error on required fields.', 'errors' => $validator->errors()]);
|
||||
|
||||
$brandId = $request->brand_id;
|
||||
$email = filter_var($request->email, FILTER_SANITIZE_EMAIL);
|
||||
$password = trim($request->password);
|
||||
|
|
@ -188,20 +197,24 @@ class CustomerController extends Controller
|
|||
$login = $customer->logins()->where('brand_id', $brandId)->first();
|
||||
if ($login) {
|
||||
if ($login->status === 0) {
|
||||
die("Le compte de l'utilisateur n'est pas activé");
|
||||
// "Le compte de l'utilisateur n'est pas activé"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 116, 'message' => 'Account not activated.']);
|
||||
} else {
|
||||
if (Hash::check($password, $login->password)) {
|
||||
$login->last_connection = now();
|
||||
$customer->logins()->save($login);
|
||||
return new CustomerResource($customer, $brandId);
|
||||
}
|
||||
die("Mot de passe incorrect");
|
||||
// "Mot de passe incorrect"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 117, 'message' => 'Authentication failed.']);
|
||||
}
|
||||
} else {
|
||||
die("Ce compte n'est pas enregistré pour cette marque");
|
||||
// "Ce compte n'est pas enregistré pour cette marque"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 118, 'message' => 'User not found.']);
|
||||
}
|
||||
} else {
|
||||
die ("Ce compte n'existe pas dans la CRM");
|
||||
// "Ce compte n'existe pas dans la CRM"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 119, 'message' => 'User not found.']);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -211,10 +224,13 @@ class CustomerController extends Controller
|
|||
* @param $id
|
||||
*/
|
||||
public function changePassword(Request $request, $id) {
|
||||
$request->validate([
|
||||
$validator = Validator::make($request->all(), [
|
||||
'password' => 'required',
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
return new StatusResource(['status' => 'KO', 'code' => 107, 'message' => 'Error on required fields.', 'errors' => $validator->errors()]);
|
||||
|
||||
$brandId = $request->brand_id;
|
||||
$customer = Customer::find($id);
|
||||
$password = trim($request->password);
|
||||
|
|
@ -225,13 +241,14 @@ class CustomerController extends Controller
|
|||
$customerLogin->password = Hash::make($password);
|
||||
$customerLogin->save();
|
||||
} else {
|
||||
die("Ce compte n'est pas enregistré pour cette marque");
|
||||
// "Ce compte n'est pas enregistré pour cette marque"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 108, 'message' => 'User not found.']);
|
||||
}
|
||||
} else {
|
||||
die("Ce compte n'existe pas");
|
||||
// "Ce compte n'existe pas"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 109, 'message' => 'User not found.']);
|
||||
}
|
||||
|
||||
die("Le mot de passe a bien été changé");
|
||||
return new StatusResource(['status' => 'OK', 'message' => 'Update complete.']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -249,22 +266,28 @@ class CustomerController extends Controller
|
|||
if ($login->status === 0) {
|
||||
$login->status = 1;
|
||||
$login->save();
|
||||
die("Le compte a bien été activé");
|
||||
// "Le compte a bien été activé"
|
||||
return new StatusResource(['status' => 'OK', 'message' => 'Update complete.']);
|
||||
} else {
|
||||
die("Ce compte est déjà activé");
|
||||
// "Ce compte est déjà activé"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 110, 'message' => 'User already active.']);
|
||||
}
|
||||
} else {
|
||||
die("Ce compte n'est pas enregistré pour cette marque");
|
||||
// "Ce compte n'est pas enregistré pour cette marque"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 111, 'message' => 'User not found.']);
|
||||
}
|
||||
} else {
|
||||
die("Cet utilisateur n'existe pas dans la CRM");
|
||||
// "Cet utilisateur n'existe pas dans la CRM"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 112, 'message' => 'User not found.']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the user account for the brand
|
||||
* @param Request $request
|
||||
* @param $id
|
||||
*/
|
||||
public function deleteUser(Request $request, $id) {
|
||||
public function delete(Request $request, $id) {
|
||||
die("Not implemented yet");
|
||||
// TODO : A voir pour les stats, obuton dans le bo qui permet de faire les stats sur les customer puis supprimer
|
||||
// TODO : Gestion avec mesBR
|
||||
|
|
@ -278,12 +301,14 @@ class CustomerController extends Controller
|
|||
if (count($customer->infos) === 0 && count($customer->logins) === 0) {
|
||||
$customer->optInHistory()->delete();
|
||||
$customer->delete();
|
||||
die("Suppression du compte de la CRM terminée");
|
||||
// Suppression du compte de la CRM terminée
|
||||
return new StatusResource(['status' => 'OK', 'message' => 'Deletion complete.']);
|
||||
} else {
|
||||
die("Suppression des informations du compte pour la marque terminée");
|
||||
// Suppression des informations du compte pour la marque terminée
|
||||
return new StatusResource(['status' => 'OK', 'message' => 'Deletion complete.']);
|
||||
}
|
||||
} else {
|
||||
die("Cet utilisateur n'existe pas dans la CRM");
|
||||
return new StatusResource(['status' => 'KO', 'code' => 106, 'message' => 'User not found.']);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -310,19 +335,26 @@ class CustomerController extends Controller
|
|||
$optinHistory->save();
|
||||
|
||||
$infos->save();
|
||||
die("Changement effectué");
|
||||
// "Changement effectué"
|
||||
return new StatusResource(['status' => 'OK', 'message' => 'Update complete.']);
|
||||
} else {
|
||||
die("Ce compte n'a pas d'information liés à cette marque");
|
||||
// "Ce compte n'a pas d'information liés à cette marque"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 113, 'message' => 'User not found.']);
|
||||
}
|
||||
} else {
|
||||
die("Cet utilisateur n'existe pas dans la CRM");
|
||||
// "Cet utilisateur n'existe pas dans la CRM"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 114, 'message' => 'User not found.']);
|
||||
}
|
||||
}
|
||||
|
||||
public function addSingleOptin(Request $request) {
|
||||
$request->validate([
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'required|email',
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
return new StatusResource(['status' => 'KO', 'code' => 120, 'message' => 'Error on required fields.', 'errors' => $validator->errors()]);
|
||||
|
||||
$brandId = $request->brand_id;
|
||||
$email = filter_var($request->email, FILTER_SANITIZE_EMAIL);
|
||||
|
||||
|
|
@ -334,9 +366,9 @@ class CustomerController extends Controller
|
|||
$singleOptin->brand_id = $brandId;
|
||||
$singleOptin->save();
|
||||
} else {
|
||||
die("Cet utilisateur est déjà inscrit à la newsletter pour cette marque");
|
||||
// "Cet utilisateur est déjà inscrit à la newsletter pour cette marque"
|
||||
return new StatusResource(['status' => 'KO', 'code' => 121, 'message' => 'This user is already subscribed to the newsletter for this brand.']);
|
||||
}
|
||||
|
||||
die("Optin ajoutée");
|
||||
return new StatusResource(['status' => 'OK' , 'message' => 'Optin added.']);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,19 +24,22 @@ class CustomerResource extends JsonResource
|
|||
$infos = $this->infos()->where('brand_id', $this->brandId)->first();
|
||||
$login = $this->logins()->where('brand_id', $this->brandId)->first();
|
||||
return [
|
||||
'crm_id' => $this->id,
|
||||
'firstname' => $infos->firstname,
|
||||
'lastname' => $infos->lastname,
|
||||
'birth_date' => $infos->birth_date,
|
||||
'address' => $infos->address,
|
||||
'address2' => $infos->address2,
|
||||
'phone' => $infos->phone,
|
||||
'country' => $infos->country,
|
||||
'city' => $infos->city,
|
||||
'postcode' => $infos->postcode,
|
||||
'opt_in' => $infos->opt_in,
|
||||
'hashcode' => $infos->hashcode,
|
||||
'status' => $login->status,
|
||||
'status' => 'OK',
|
||||
'user' => [
|
||||
'crm_id' => $this->id,
|
||||
'firstname' => $infos->firstname,
|
||||
'lastname' => $infos->lastname,
|
||||
'birth_date' => $infos->birth_date,
|
||||
'address' => $infos->address,
|
||||
'address2' => $infos->address2,
|
||||
'phone' => $infos->phone,
|
||||
'country' => $infos->country,
|
||||
'city' => $infos->city,
|
||||
'postcode' => $infos->postcode,
|
||||
'opt_in' => $infos->opt_in,
|
||||
'hashcode' => $infos->hashcode,
|
||||
'status' => $login->status,
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
114
clients/LDCCRM_V1.php
Normal file
114
clients/LDCCRM_V1.php
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
<?php
|
||||
|
||||
namespace LDCCRM;
|
||||
|
||||
class ApiV1
|
||||
{
|
||||
private $endpoint;
|
||||
private $api_key;
|
||||
|
||||
public function __construct($endpoint, $api_key)
|
||||
{
|
||||
$this->endpoint = $endpoint;
|
||||
$this->api_key = $api_key;
|
||||
}
|
||||
|
||||
public function getCustomer($id){
|
||||
return $this->callAPI('GET', "/customer/$id");
|
||||
}
|
||||
|
||||
public function createCustomer($email, $password, $firstname, $lastname, $optin, $birthdate = null, $phone = null, $address = null, $address2 = null, $city = null, $postcode = null, $country = null){
|
||||
$user = [
|
||||
'email' => $email,
|
||||
'password' => $password,
|
||||
'firstname' => $firstname,
|
||||
'lastname' => $lastname,
|
||||
'opt_in' => $optin,
|
||||
'birth_date' => $birthdate,
|
||||
'phone' => $phone,
|
||||
'address' => $address,
|
||||
'address2' => $address2,
|
||||
'city' => $city,
|
||||
'postcode' => $postcode,
|
||||
'country' => $country
|
||||
];
|
||||
return $this->callAPI('POST', '/customer/create', $user);
|
||||
}
|
||||
|
||||
public function updateCustomer($crmId, $firstname, $lastname, $optin, $birthdate = null, $phone = null, $address = null, $address2 = null, $city = null, $postcode = null, $country = null){
|
||||
$user = [
|
||||
'firstname' => $firstname,
|
||||
'lastname' => $lastname,
|
||||
'opt_in' => $optin,
|
||||
'birth_date' => $birthdate,
|
||||
'phone' => $phone,
|
||||
'address' => $address,
|
||||
'address2' => $address2,
|
||||
'city' => $city,
|
||||
'postcode' => $postcode,
|
||||
'country' => $country
|
||||
];
|
||||
return $this->callAPI('PUT', "/customer/$crmId", $user);
|
||||
}
|
||||
|
||||
public function deleteCustomer($id){
|
||||
return $this->callAPI('DELETE', "/customer/$id");
|
||||
}
|
||||
|
||||
public function changePwdCustomer($id, $password){
|
||||
return $this->callAPI('POST', "/customer/$id/change-password", ['password' => $password]);
|
||||
}
|
||||
|
||||
public function activateCustomer($id){
|
||||
return $this->callAPI('POST', "/customer/$id/activate");
|
||||
}
|
||||
|
||||
public function toggleOptInCustomer($id){
|
||||
return $this->callAPI('POST', "/customer/$id/toggle-optin");
|
||||
}
|
||||
|
||||
public function loginCustomer($email, $password){
|
||||
return $this->callAPI('POST', "/customer/login", ['email' => $email, 'password' => $password]);
|
||||
}
|
||||
|
||||
public function createSingleOptin($email){
|
||||
return $this->callAPI('POST', '/single-optin', ['email' => $email]);
|
||||
}
|
||||
|
||||
private function callAPI($method, $url, $data = false){
|
||||
$url = $this->endpoint . '/api/v1' . $url;
|
||||
$curl = curl_init();
|
||||
switch ($method){
|
||||
case "POST":
|
||||
curl_setopt($curl, CURLOPT_POST, 1);
|
||||
if ($data)
|
||||
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
|
||||
break;
|
||||
case "PUT":
|
||||
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
|
||||
if ($data)
|
||||
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
|
||||
break;
|
||||
case "DELETE":
|
||||
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
|
||||
if ($data)
|
||||
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
|
||||
break;
|
||||
default:
|
||||
if ($data)
|
||||
$url = sprintf("%s?%s", $url, http_build_query($data));
|
||||
}
|
||||
curl_setopt($curl, CURLOPT_URL, $url);
|
||||
curl_setopt($curl, CURLOPT_COOKIESESSION, TRUE);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
|
||||
'Accept: application/json',
|
||||
'Authorization: Bearer ' . $this->api_key
|
||||
));
|
||||
|
||||
$result = curl_exec($curl);
|
||||
if(!$result){die("Connection Failure");}
|
||||
curl_close($curl);
|
||||
return json_decode($result);
|
||||
}
|
||||
}
|
||||
|
|
@ -13,7 +13,9 @@
|
|||
"fruitcake/laravel-cors": "^2.0",
|
||||
"guzzlehttp/guzzle": "^7.0.1",
|
||||
"laravel/framework": "^8.12",
|
||||
"laravel/tinker": "^2.5"
|
||||
"laravel/tinker": "^2.5",
|
||||
"ext-curl": "*",
|
||||
"ext-json": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"facade/ignition": "^2.5",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ Route::prefix('v1')->middleware(['auth:api', 'check-brand'])->group(function() {
|
|||
Route::get('/customer/{id}', [CustomerController::class, 'show']);
|
||||
Route::post('/customer/create', [CustomerController::class, 'store']);
|
||||
Route::put('/customer/{id}', [CustomerController::class, 'update']);
|
||||
Route::delete('/customer/{id}', [CustomerController::class, 'deleteUser']);
|
||||
Route::delete('/customer/{id}', [CustomerController::class, 'delete']);
|
||||
Route::post('/customer/{id}/change-password', [CustomerController::class, 'changePassword']);
|
||||
Route::post('/customer/{id}/activate', [CustomerController::class, 'activateAccount']);
|
||||
Route::post('/customer/{id}/toggle-optin', [CustomerController::class, 'toggleOptin']);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue