118 lines
3.4 KiB
PHP
118 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Models\Tourism;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Requests\TourismRequest;
|
|
use Illuminate\Http\Response;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Resources\TourismResource;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
use App\Imports\TourismImport;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class TourismController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
info($request);
|
|
$perPage = $request->input('per_page', 15);
|
|
$search = $request->input('search', '');
|
|
|
|
$query = Tourism::query();
|
|
$tourisms = $query->paginate($perPage);
|
|
|
|
$tourisms->getCollection()->transform(function ($tourisms) {
|
|
$village = DB::table('villages')->where('village_code', $tourisms->village_code)->first();
|
|
$tourisms->village_name = $village ? $village->village_name : null;
|
|
|
|
$district = DB::table('districts')->where('district_code', $tourisms->district_code)->first();
|
|
$tourisms->district_name = $district ? $district->district_name : null;
|
|
|
|
$business_type = DB::table('business_type')->where('id', $tourisms->business_type_id)->first();
|
|
$tourisms->business_type = $business_type ? $business_type->business_type : null;
|
|
return $tourisms;
|
|
});
|
|
|
|
return response()->json([
|
|
'data' => TourismResource::collection($tourisms),
|
|
'meta' => [
|
|
'total' => $tourisms->total(),
|
|
'per_page' => $tourisms->perPage(),
|
|
'current_page' => $tourisms->currentPage(),
|
|
'last_page' => $tourisms->lastPage(),
|
|
]
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*/
|
|
public function store(TourismRequest $request): Tourism
|
|
{
|
|
return Tourism::create($request->validated());
|
|
}
|
|
|
|
/**
|
|
* Import advertisements from Excel or CSV
|
|
*/
|
|
public function importFromFile(Request $request)
|
|
{
|
|
//Validasi file
|
|
$validator = Validator::make($request->all(), [
|
|
'file' => 'required|mimes:xlsx, xls|max:10240'
|
|
]);
|
|
|
|
if ($validator->fails()) {
|
|
return response()->json([
|
|
'message' => 'File validation failed.',
|
|
'errors' => $validator->errors()
|
|
], 400);
|
|
}
|
|
|
|
try {
|
|
$file = $request->file('file');
|
|
Excel::import(new TourismImport, $file);
|
|
return response()->json([
|
|
'message' => 'File uploaded and imported successfully!'
|
|
], 200);
|
|
} catch (\Exception $e) {
|
|
return response()->json([
|
|
'message' => 'Error during file import.',
|
|
'error' => $e->getMessage()
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*/
|
|
public function show(Tourism $tourism): Tourism
|
|
{
|
|
return $tourism;
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*/
|
|
public function update(TourismRequest $request, Tourism $tourism): Tourism
|
|
{
|
|
$tourism->update($request->validated());
|
|
|
|
return $tourism;
|
|
}
|
|
|
|
public function destroy(Tourism $tourism): Response
|
|
{
|
|
$tourism->delete();
|
|
|
|
return response()->noContent();
|
|
}
|
|
}
|