CustomerController.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. namespace App\Http\Controllers\Admin\Customers;
  3. use App\Shop\Customers\Customer;
  4. use App\Shop\Customers\Repositories\CustomerRepository;
  5. use App\Shop\Customers\Repositories\Interfaces\CustomerRepositoryInterface;
  6. use App\Shop\Customers\Requests\CreateCustomerRequest;
  7. use App\Shop\Customers\Requests\UpdateCustomerRequest;
  8. use App\Shop\Customers\Transformations\CustomerTransformable;
  9. use App\Http\Controllers\Controller;
  10. class CustomerController extends Controller
  11. {
  12. use CustomerTransformable;
  13. /**
  14. * @var CustomerRepositoryInterface
  15. */
  16. private $customerRepo;
  17. /**
  18. * CustomerController constructor.
  19. * @param CustomerRepositoryInterface $customerRepository
  20. */
  21. public function __construct(CustomerRepositoryInterface $customerRepository)
  22. {
  23. $this->customerRepo = $customerRepository;
  24. }
  25. /**
  26. * Display a listing of the resource.
  27. *
  28. * @return \Illuminate\Http\Response
  29. */
  30. public function index()
  31. {
  32. $list = $this->customerRepo->listCustomers('created_at', 'desc');
  33. if (request()->has('q')) {
  34. $list = $this->customerRepo->searchCustomer(request()->input('q'));
  35. }
  36. $customers = $list->map(function (Customer $customer) {
  37. return $this->transformCustomer($customer);
  38. })->all();
  39. return view('admin.customers.list', [
  40. 'customers' => $this->customerRepo->paginateArrayResults($customers)
  41. ]);
  42. }
  43. /**
  44. * Show the form for creating a new resource.
  45. *
  46. * @return \Illuminate\Http\Response
  47. */
  48. public function create()
  49. {
  50. return view('admin.customers.create');
  51. }
  52. /**
  53. * Store a newly created resource in storage.
  54. *
  55. * @param CreateCustomerRequest $request
  56. * @return \Illuminate\Http\Response
  57. */
  58. public function store(CreateCustomerRequest $request)
  59. {
  60. $this->customerRepo->createCustomer($request->except('_token', '_method'));
  61. return redirect()->route('admin.customers.index');
  62. }
  63. /**
  64. * Display the specified resource.
  65. *
  66. * @param int $id
  67. * @return \Illuminate\Http\Response
  68. */
  69. public function show(int $id)
  70. {
  71. $customer = $this->customerRepo->findCustomerById($id);
  72. return view('admin.customers.show', [
  73. 'customer' => $customer,
  74. 'addresses' => $customer->addresses
  75. ]);
  76. }
  77. /**
  78. * Show the form for editing the specified resource.
  79. *
  80. * @param int $id
  81. * @return \Illuminate\Http\Response
  82. */
  83. public function edit($id)
  84. {
  85. return view('admin.customers.edit', ['customer' => $this->customerRepo->findCustomerById($id)]);
  86. }
  87. /**
  88. * Update the specified resource in storage.
  89. *
  90. * @param UpdateCustomerRequest $request
  91. * @param int $id
  92. * @return \Illuminate\Http\Response
  93. */
  94. public function update(UpdateCustomerRequest $request, $id)
  95. {
  96. $customer = $this->customerRepo->findCustomerById($id);
  97. $update = new CustomerRepository($customer);
  98. $data = $request->except('_method', '_token', 'password');
  99. if ($request->has('password')) {
  100. $data['password'] = bcrypt($request->input('password'));
  101. }
  102. $update->updateCustomer($data);
  103. $request->session()->flash('message', 'Update successful');
  104. return redirect()->route('admin.customers.edit', $id);
  105. }
  106. /**
  107. * Remove the specified resource from storage.
  108. *
  109. * @param int $id
  110. *
  111. * @return \Illuminate\Http\Response
  112. * @throws \Exception
  113. */
  114. public function destroy($id)
  115. {
  116. $customer = $this->customerRepo->findCustomerById($id);
  117. $customerRepo = new CustomerRepository($customer);
  118. $customerRepo->deleteCustomer();
  119. return redirect()->route('admin.customers.index')->with('message', 'Delete successful');
  120. }
  121. }