update contact recode and clean up

This commit is contained in:
hazim
2019-03-07 15:31:16 +08:00
parent 4848e1bd5b
commit 46fe8430ef
16 changed files with 572 additions and 6 deletions
@@ -8,9 +8,23 @@ use Illuminate\Http\Request;
class UpdateContact
{
/** @var Contact */
private $repository;
/**
* UpdateContact constructor.
* @param Contact $repository
*/
public function __construct(Contact $repository)
{
$this->repository = $repository;
}
public function execute(Request $request, int $type, string $reference) {
$contact = $request->method() === 'PUT' ? Contact::findOrFail($request->input('id')) : new Contact;
$contact = $this->repository->findOrFail($id);
$contact->type = $type;
$contact->reference_id = $reference;
@@ -19,6 +33,11 @@ class UpdateContact
$contact->contact = $request->input('contact');
$contact->email = $request->input('email');
$contact = $request->method() === 'PUT' ? Contact::findOrFail($request->input('id')) : new Contact;
if($contact->save()){
return new ContactResource($contact);
}
@@ -0,0 +1,128 @@
<?php
namespace App\Classes\Modules\Contacts\DataTransferObjects;
class ContactObject
{
/** @var string */
private $name;
/** @var string */
private $designation;
/** @var string */
private $contact;
/** @var string */
private $email;
/** @var int|null */
private $type;
/** @var int|null */
private $referenceId;
/** @var int|null */
private $id;
/**
* ContactObject constructor.
* @param string $name
* @param string $designation
* @param string $contact
* @param string $email
*/
public function __construct(string $name, string $designation,string $contact, string $email)
{
$this->name = $name;
$this->designation = $designation;
$this->email = $email;
$this->contact = $contact;
}
/**
* @return string
*/
public function getName(): string
{
return $this->name;
}
/**
* @return string
*/
public function getDesignation(): string
{
return $this->designation;
}
/**
* @return string
*/
public function getEmail(): string
{
return $this->email;
}
/**
* @return string
*/
public function getContact(): string
{
return $this->contact;
}
/**
* @return int|null
*/
public function getType(): ?int
{
return $this->type;
}
/**
* @return int|null
*/
public function getReferenceId(): ?int
{
return $this->referenceId;
}
/**
* @return int|null
*/
public function getId()
{
return $this->id;
}
/**
* @param int|null $type
*/
public function setType($type)
{
$this->type = $type;
}
/**
* @param int|null $referenceId
*/
public function setReferenceId($referenceId)
{
$this->referenceId = $referenceId;
}
/**
* @param int|null $id
*/
public function setId($id)
{
$this->id = $id;
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Classes\Modules\Contacts\Exceptions;
/**
* Created by PhpStorm.
* User: user
* Date: 07/03/2019
* Time: 3:25 PM
*/
final class CannotCreateContactException
{
/** @param string $message */
/**
* CannotCreateContactException constructor.
*/
public function __construct(string $message)
{
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Contacts\Services;
use App\Models\Contact;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
class CreatesContact
{
/** @var Contact */
private $repository;
/**
* CreatesContact constructor.
* @param Contact $repository
*/
public function __construct(Contact $repository)
{
$this->repository = $repository;
}
/**
* @param ContactObject $contact
* @param int $type
* @param int $referenceId
* @return Contact
*/
public function execute(ContactObject $contact, int $type, int $referenceId)
{
$this->repository->type = $type;
$this->repository->reference_id = $referenceId;
$this->repository->name = $contact->getName();
$this->repository->designation = $contact->getDesignation();
$this->repository->email = $contact->getEmail();
$this->repository->contact = $contact->getContact();
$this->repository->save();
return $this->repository;
}
}
@@ -0,0 +1,40 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 06/03/2019
* Time: 4:57 PM
*/
namespace App\Classes\Modules\Contacts\Services;
use App\Models\Contact;
use App\Http\Resources\Contact as ContactResource;
class ListsContact
{
/** @var Contact */
private $repository;
/**
* ListsContact constructor.
* @param Contact $repository
*/
public function __construct(Contact $repository)
{
$this->repository = $repository;
}
public function execute(int $type, int $referenceId){
$contacts = $this->repository->where('type', $type)
->where('reference_id', $referenceId)->get();
// Return collection of contacts as a resource
return ContactResource::collection($contacts);
}
}
@@ -0,0 +1,44 @@
<?php
namespace App\Classes\Modules\Contacts\Services;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Models\Contact;
class UpdateContact
{
/** @var Contact */
private $repository;
/**
* UpdateContact constructor.
* @param Contact $repository
*/
public function __construct(Contact $repository)
{
$this->repository = $repository;
}
/**
* @param int $id
* @param ContactObject $object
* @return Contact
*/
public function execute(int $id, ContactObject $object)
{
/** @var Contact $contact */
$contact = $this->repository->findOrFail($id);
$contact ->name = $object->getName();
$contact ->designation = $object->getDesignation();
$contact ->contact = $object->getContact();
$contact ->email = $object->getEmail();
$contact->save();
return $contact;
}
}
@@ -0,0 +1,38 @@
<?php
namespace App\Modules\ControllerLogic\Contacts;
use App\Classes\Constants;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Services\CreatesContact;
use Illuminate\Http\Request;
class CreateContactLogic
{
/** @var CreatesContact */
private $createContact;
/**
* CreateContactLogic constructor.
* @param CreatesContact $createContact
*/
public function __construct(CreatesContact $createContact)
{
$this->createContact = $createContact;
}
public function execute(string $type, int $referenceId, Request $request)
{
try{
$object = new ContactObject($request->input('name'), $request->input('designation'), $request->input('contact'), $request->input('email'));
return $this->createContact->execute($object, $type, $referenceId);
}
catch (){
}
}
}
@@ -0,0 +1,42 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 06/03/2019
* Time: 4:56 PM
*/
namespace App\Modules\ControllerLogic\Contacts;
use App\Classes\Constants;
use App\Classes\Modules\Contacts\Services\ListsContact;
class ListContactLogic
{
/** @var ListsContact */
private $listsContacts;
/**
* ListContactLogic constructor.
* @param ListsContact $listsContacts
*/
public function __construct(ListsContact $listsContacts)
{
$this->listsContacts = $listsContacts;
}
/**
* @param $type
* @param $referenceId
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
*/
public function execute($type, $referenceId){
return $this->listsContacts->execute(Constants::MODULE_TYPES[$type], $referenceId);
}
}
@@ -0,0 +1,37 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 05/03/2019
* Time: 2:35 PM
*/
namespace App\Modules\ControllerLogic\Contacts;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Services\UpdateContact;
use Illuminate\Http\Request;
class UpdateContactLogic
{
/** @var UpdateContact */
private $updateContact;
/**
* UpdateContactLogic constructor.
* @param UpdateContact $updateContact
*/
public function __construct(UpdateContact $updateContact)
{
$this->updateContact = $updateContact;
}
public function execute(int $id, Request $request)
{
$object = new ContactObject($request->input('name'), $request->input('designation'), $request->input('contact'), $request->input('email'));
return $this->updateContact->execute($id, $object);
}
}
@@ -0,0 +1,15 @@
<?php
namespace App\Http\Controllers\Contacts;
use App\Classes\Constants;
use Illuminate\Http\Request;
use App\Modules\ControllerLogic\Contacts\CreateContactLogic;
class CreateContactController
{
public function create(string $type, int $referencesId, Request $request, CreateContactLogic $logic){
return $logic->execute(Constants::MODULE_TYPES[$type], $referencesId, $request);
}
}
@@ -0,0 +1,22 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 06/03/2019
* Time: 5:11 PM
*/
namespace App\Http\Controllers\Contacts;
use App\Modules\ControllerLogic\Contacts\ListContactLogic;
class ListContactController
{
public function list(string $type, int $referenceId,ListContactLogic $logic)
{
return $logic->execute($type,$referenceId);
}
}
@@ -0,0 +1,21 @@
<?php
/**
* Created by PhpStorm.
* User: user
* Date: 05/03/2019
* Time: 2:30 PM
*/
namespace App\Http\Controllers\Contacts;
use App\Modules\ControllerLogic\Contacts\UpdateContactLogic;
use Illuminate\Http\Request;
class UpdateContactController
{
public function update(int $id,Request $request, UpdateContactLogic $logic){
return $logic->execute($id, $request);
}
}
+4 -2
View File
@@ -14,14 +14,16 @@ class Contact extends JsonResource
*/
public function toArray($request)
{
$comapny = \App\Models\Company::findOrFail($this->reference_id);
return [
'id' => $this->id,
'type' => $this->type,
'reference_id' => $this->reference_id,
'name' => $this->name,
'name' => $this->first_name.' '. $this->last_name,
'designation' => $this->designation,
'contact' => $this->contact,
'email' => $this->email
'email' => $this->email,
'company' => Company::make($comapny)
];
}
}
@@ -0,0 +1,81 @@
@extends('layouts.base_portal')
@section('inner_content')
<div class="row p-t-20 p-b-20">
<div class="col">
<div class="row">
<div class="col">
<div class="row bg-white p-t-15 p-b-15 m-b-20">
<div class="col">
<div class="row m-b-5">
<div class="col bold fs-15">
Order #216718963296916
</div>
</div>
<div class="row">
<div class="col muted">
Placed on 05 Mar 2019 16:40:08
</div>
</div>
</div>
<div class="col-auto text-right">
<div class="row">
<div class="col">
<span class="muted">Status: </span>
<span class="text-success">Complete</span>
</div>
</div>
<div class="row">
<div class="col">
<span class="muted">Order has been delivered</span>
</div>
</div>
</div>
</div>
<div class="row bg-white">
<div class="col">
<div class="row m-t-5"><div class="col"><div class="row"><div class="col no-padding"><div class="order-history-border"></div></div></div> <div class="row fs-12 p-t-15 p-b-15 "><div class="col"><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order has successfully been delivered
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order is out for delivery
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order has been unpacked and being prepared for delivery
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order has arrived at Malaysia's sorting centre
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order has been shipped successfully
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order is packed and is ready to ship
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:05
</div> <div class="col p-l-0 semi-bold">
Your Order has arrived at China's sorting centre
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:04
</div> <div class="col p-l-0 semi-bold">
Order has been confirmed
</div></div></div></div><div class="row m-l-0 m-r-0 m-b-15 relative order-history"><div class="absolute bullet-connector"></div> <div class="col"><div class="row align-items-center justify-content-center"><div class="col-auto p-r-10"><div class="bg-master-light btn-rounded" style="width: 8px; height: 8px;"></div></div> <div class="col-auto hint-text p-l-0">
05-03-2019 17:02
</div> <div class="col p-l-0 semi-bold">
Order created
</div></div></div></div></div></div></div></div>
</div>
</div>
</div>
<div class="col-4"></div>
</div>
</div>
</div>
@endsection
+11 -2
View File
@@ -67,10 +67,10 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
Route::group(['prefix' => 'contact', 'as' => 'contact.', 'namespace' => 'Contacts'], function () {
// List contacts
Route::get('list/{type}/{reference}', 'ContactController@index')->name('list');
//Route::get('list/{type}/{reference}', 'ContactController@index')->name('list');
// Create new contact
Route::post('{type}/{reference}', 'ContactController@store')->name('create');
//Route::post('{type}/{reference}', 'ContactController@store')->name('create');
// Update contact
Route::put('{type}/{reference}/{id}', 'ContactController@store')->name('update');
@@ -78,6 +78,15 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function
// Delete contact
Route::delete('{id}', 'ContactController@destroy')->name('delete');
// Test Create Contact
Route::post('/create/{type}/{reference}','CreateContactController@create')->name('create.contact');
// Test Update Contact
Route::post('/update/{id}','UpdateContactController@update')->name('update.contact');
// Test List Contact
Route::get('/list/{type}/{reference}','ListContactController@list')->name('list.contact');
});
// Warehouses Routes
+4
View File
@@ -40,6 +40,10 @@ Route::group(['middleware' => ['secure', 'clearcache']], function (): void {
Route::get('/warehouse/{warehouseId}/profile', function($warehouseId){
return view('pages.warehouses.profile', ['warehouseId' => $warehouseId]);
})->name('warehouses.profile');
Route::get('/order/profile', function(){
return view('pages.orders.profile');
})->name('order.profile');
});