partial update crud customer data
This commit is contained in:
130
app/Http/Controllers/Api/CustomersController.php
Normal file
130
app/Http/Controllers/Api/CustomersController.php
Normal file
@@ -0,0 +1,130 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\CustomersRequest;
|
||||
use App\Http\Requests\ExcelUploadRequest;
|
||||
use App\Http\Resources\CustomersResource;
|
||||
use App\Imports\CustomersImport;
|
||||
use App\Models\Customer;
|
||||
use Illuminate\Http\Request;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
|
||||
class CustomersController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = Customer::query()->orderBy('id', 'desc');
|
||||
if ($request->has('search') &&!empty($request->get('search'))) {
|
||||
$query = $query->where('nomor_pelanggan', 'LIKE', '%'.$request->get('search').'%')
|
||||
->orWhere('nama', 'LIKE', '%'.$request->get('search').'%')
|
||||
->orWhere('kota_palayanan', 'LIKE', '%'.$request->get('search').'%');
|
||||
}
|
||||
return CustomersResource::collection($query->paginate());
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(CustomersRequest $request)
|
||||
{
|
||||
try{
|
||||
$customer = Customer::create($request->validated());
|
||||
return response()->json(['message' => 'Successfully created', new CustomersResource($customer)]);
|
||||
}catch(\Exception $e){
|
||||
return response()->json([
|
||||
'message' => 'Failed to create customer',
|
||||
'error' => $e->getMessage()
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
try{
|
||||
$customer = Customer::find($id);
|
||||
if($customer){
|
||||
return new CustomersResource($customer);
|
||||
} else {
|
||||
return response()->json(['message' => 'Customer not found'], 404);
|
||||
}
|
||||
}catch(\Exception $e){
|
||||
return response()->json([
|
||||
'message' => 'Failed to retrieve customer',
|
||||
'error' => $e->getMessage()
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(CustomersRequest $request, string $id)
|
||||
{
|
||||
try{
|
||||
$customer = Customer::find($id);
|
||||
if($customer){
|
||||
$customer->update($request->validated());
|
||||
return response()->json(['message' => 'Successfully updated', new CustomersResource($customer)]);
|
||||
} else {
|
||||
return response()->json(['message' => 'Customer not found'], 404);
|
||||
}
|
||||
}catch(\Exception $e) {
|
||||
return response()->json([
|
||||
'message' => 'Failed to update customer',
|
||||
'error' => $e->getMessage()
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
try{
|
||||
$customer = Customer::find($id);
|
||||
if($customer){
|
||||
$customer->delete();
|
||||
return response()->json(['message' => 'Successfully deleted']);
|
||||
}else {
|
||||
return response()->json(['message' => 'Customer not found'], 404);
|
||||
}
|
||||
}catch(\Exception $e) {
|
||||
return response()->json([
|
||||
'message' => 'Failed to delete customer',
|
||||
'error' => $e->getMessage()
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function upload(ExcelUploadRequest $request){
|
||||
try{
|
||||
if(!$request->hasFile('file')){
|
||||
return response()->json([
|
||||
'error' => 'No file provided'
|
||||
], 400);
|
||||
}
|
||||
|
||||
$file = $request->file('file');
|
||||
Excel::import(new CustomersImport, $file);
|
||||
|
||||
return response()->json([
|
||||
'message' => 'File uploaded successfully',
|
||||
]);
|
||||
}catch(\Exception $e){
|
||||
\Log::info($e->getMessage());
|
||||
return response()->json([
|
||||
'error' => 'Failed to upload file',
|
||||
'message' => $e->getMessage()
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
26
app/Http/Controllers/CustomersController.php
Normal file
26
app/Http/Controllers/CustomersController.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Customer;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CustomersController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('customers.index');
|
||||
}
|
||||
public function create()
|
||||
{
|
||||
return view('customers.create');
|
||||
}
|
||||
public function edit(string $id)
|
||||
{
|
||||
$data = Customer::findOrFail($id);
|
||||
return view('customers.edit', compact('data'));
|
||||
}
|
||||
public function upload(){
|
||||
return view('customers.upload');
|
||||
}
|
||||
}
|
||||
33
app/Http/Requests/CustomersRequest.php
Normal file
33
app/Http/Requests/CustomersRequest.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class CustomersRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'nomor_pelanggan' => ['required', 'string'],
|
||||
'kota_pelayanan' => ['required', 'string'],
|
||||
'nama' => ['required', 'string'],
|
||||
'alamat' => ['required', 'string'],
|
||||
'latitude' => ['required', 'numeric', 'between:-90,90'],
|
||||
'longitude' => ['required', 'numeric', 'between:-180,180'],
|
||||
];
|
||||
}
|
||||
}
|
||||
19
app/Http/Resources/CustomersResource.php
Normal file
19
app/Http/Resources/CustomersResource.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class CustomersResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function toArray(Request $request): array
|
||||
{
|
||||
return parent::toArray($request);
|
||||
}
|
||||
}
|
||||
52
app/Imports/CustomersImport.php
Normal file
52
app/Imports/CustomersImport.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace App\Imports;
|
||||
|
||||
use App\Models\Customer;
|
||||
use Illuminate\Support\Collection;
|
||||
use Maatwebsite\Excel\Concerns\ToCollection;
|
||||
use Maatwebsite\Excel\Concerns\WithLimit;
|
||||
use Maatwebsite\Excel\Concerns\WithChunkReading;
|
||||
use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
||||
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Maatwebsite\Excel\Concerns\WithBatchInserts;
|
||||
|
||||
class CustomersImport implements ToCollection, WithMultipleSheets
|
||||
{
|
||||
/**
|
||||
* @param Collection $collection
|
||||
*/
|
||||
public function collection(Collection $collection)
|
||||
{
|
||||
$batchData = [];
|
||||
|
||||
foreach ($collection->skip(1) as $row) {
|
||||
if (!isset($row[0]) || empty($row[0])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$latitude = filter_var($row[4], FILTER_VALIDATE_FLOAT) ? bcadd($row[4], '0', 18) : null;
|
||||
$longitude = filter_var($row[5], FILTER_VALIDATE_FLOAT) ? bcadd($row[5], '0', 18) : null;
|
||||
|
||||
$batchData[] = [
|
||||
'nomor_pelanggan' => $row[0],
|
||||
'kota_pelayanan' => $row[1],
|
||||
'nama' => $row[2],
|
||||
'alamat' => $row[3],
|
||||
'latitude' => $latitude,
|
||||
'longitude' => $longitude,
|
||||
];
|
||||
}
|
||||
|
||||
if (!empty($batchData)) {
|
||||
Customer::upsert($batchData, ['nomor_pelanggan'], ['kota_pelayanan', 'nama', 'alamat', 'latitude', 'longitude']);
|
||||
}
|
||||
}
|
||||
|
||||
public function sheets(): array {
|
||||
return [
|
||||
0 => $this
|
||||
];
|
||||
}
|
||||
}
|
||||
20
app/Models/Customer.php
Normal file
20
app/Models/Customer.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Customer extends Model
|
||||
{
|
||||
protected $table = 'customers';
|
||||
protected $fillable = [
|
||||
'nomor_pelanggan',
|
||||
'kota_pelayanan',
|
||||
'nama',
|
||||
'alamat',
|
||||
'latitude',
|
||||
'longitude',
|
||||
];
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user