diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php new file mode 100644 index 000000000..6b36da7ba --- /dev/null +++ b/app/Http/Controllers/BaseController.php @@ -0,0 +1,44 @@ + true, + 'data' => $result, + 'message' => $message, + ]; + return response()->json($response, 200); + } + + + /** + * return error response. + * + * @return \Illuminate\Http\Response + */ + public function sendError($error, $errorMessages = [], $code = 404) + { + $response = [ + 'success' => false, + 'message' => $error, + ]; + + if(!empty($errorMessages)){ + $response['data'] = $errorMessages; + } + + return response()->json($response, $code); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 000000000..a0a2a8a34 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +pagination_limit = '5'; + } + + public function index() + { + $event = Event::orderBy('createdAt', 'desc')->get(); + return $this->sendResponse(new EventResource($event), 'all events retrieved successfully.'); + } + + public function active_events(Request $request) + { + $data_all = $request->all(); + if ($data_all['startAt'] && $data_all['endAt']) { + $startAt = Carbon::parse($data_all['startAt'])->toDateTimeString(); + $endAt = Carbon::parse($data_all['endAt'])->toDateTimeString(); + $data_result = Event::whereBetween('createdAt', [$startAt, $endAt])->get(); + } else { + $data_result = []; + } + return $this->sendResponse(new EventResource($data_result), 'intervel events retrieved successfully.'); + } + + public function get_event($id) + { + $event = Event::find($id); + return $this->sendResponse(new EventResource($event), 'one events retrieved successfully.'); + } + + public function create_event(Request $request) + { + $input = $request->all(); + $validator = Validator::make($input, [ + 'event_name' => 'required|unique:events,name', + ]); + + if($validator->fails()){ + return $this->sendError('Validation Error.', $validator->errors()); + } + + $input_data['name'] = $input['event_name']; + $input_data['slug'] = Str::slug($input['event_name']); + $event = Event::create($input_data); + return $this->sendResponse(new EventResource($event), 'event created successfully.'); + } + + public function update_event(Request $request, $id) + { + $input = $request->all(); + $event = Event::find($id); + if($event){ + $validator = Validator::make($input, [ + 'event_name' => "required|unique:events,name,{$id}", + ]); + + if($validator->fails()){ + return $this->sendError('Validation Error.', $validator->errors()); + } + + $input_data['name'] = $input['event_name']; + $input_data['slug'] = Str::slug($input['event_name']); + + $event->update($input_data); + $message = 'event updated successfully.'; + }else{ + $validator = Validator::make($input, [ + 'event_name' => 'required|unique:events,name', + ]); + + if($validator->fails()){ + return $this->sendError('Validation Error.', $validator->errors()); + } + + $input_data['name'] = $input['event_name']; + $input_data['slug'] = Str::slug($input['event_name']); + + $event = Event::create($input_data); + $message = 'event created successfully.'; + } + return $this->sendResponse(new EventResource($event), $message); + } + + public function delete_event($id) + { + $event = Event::find($id); + if($event){ + $delete = $event->delete(); + if($delete==true){ + $data_response['id'] = $event->id; + $message = 'event made soft deleted successfully.'; + }else{ + $data_response['id'] = $event->id; + $message = 'something went wrong.'; + } + }else{ + $data_response['id'] = $id; + $message = 'this id not exist.'; + } + return $this->sendResponse($data_response, $message); + } + + public function event_list_web() + { + $event = Event::orderBy('createdAt', 'desc')->paginate($this->pagination_limit); + return view('event.event_list', [ + 'events' => $event, + 'search' => '0', + ]); + } + + public function event_show_web($id) + { + $event = Event::find($id); + return view('event.event_show', compact('event')); + } + + public function event_edit_web($id) + { + if(Auth::check()) { + $event = Event::findOrFail($id); + return view('event.event_edit', compact('event')); + }else{ + return redirect()->route('login'); + } + } + + public function event_name_exist(Request $request) + { + $data_all = $request->all(); + if(isset($data_all['event_id'])){ + if(isset($data_all['event_name'])){ + $exist_value = DB::table('events')->where('events.name', $data_all['event_name'])->whereNotIn('events.id',[$data_all['event_id']])->get()->count(); + }elseif(isset($data_all['event_slug'])){ + $exist_value = DB::table('events')->where('events.slug', $data_all['event_slug'])->whereNotIn('events.id',[$data_all['event_id']])->get()->count(); + } + }else{ + if(isset($data_all['event_name'])){ + $exist_value = DB::table('events')->where('events.name', $data_all['event_name'])->get()->count(); + } + } + if($exist_value > '0'){ + $count_status = '0'; + }else{ + $count_status = 'true'; + } + echo $count_status; + } + + public function event_create_web() + { + if(Auth::check()) { + return view('event.event_create'); + }else{ + return redirect()->route('login'); + } + } + + public function delete_event_web(Request $request) + { + $data_all = $request->all(); + $event = Event::find($data_all['event_id']); + if($event){ + $delete = $event->delete(); + if($delete==true){ + $data_response['id'] = $event->id; + $message = 'event made soft deleted successfully.'; + }else{ + $data_response['id'] = $event->id; + $message = 'something went wrong.'; + } + }else{ + $data_response['id'] = $id; + $message = 'this id not exist.'; + } + return $this->sendResponse($data_response, $message); + } + + public function search_event_web(Request $request) + { + $data_all = $request->all(); + $event = Event::where('events.id', 'like', '%' . $data_all['event_search_val'] . '%')->orWhere('events.name', 'like', '%' . $data_all['event_search_val'] . '%')->orWhere('events.slug', 'like', '%' . $data_all['event_search_val'] . '%')->orderBy('createdAt', 'desc')->paginate($this->pagination_limit); + return view('event.event_list', [ + 'events' => $event, + 'search' => '1', + ]); + } + + public function event_list_cache() + { + $cachedBlog = Redis::get('event'); + if(isset($cachedBlog)) { + $event = json_decode($cachedBlog, FALSE); + return response()->json([ + 'status_code' => 201, + 'message' => 'Fetched from redis', + 'data' => $event, + ]); + }else { + $event = Event::orderBy('createdAt', 'desc')->paginate($this->pagination_limit); + Redis::set('event', $event); + + return response()->json([ + 'status_code' => 201, + 'message' => 'Fetched from database', + 'data' => $event, + ]); + } + } + + public function event_list_remote() + { + return view('event.remote_list'); + } +} + + +// echo "
";
+// print_r($data);
+// echo "
"; +// exit(); \ No newline at end of file diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php new file mode 100644 index 000000000..7cbc2c3f0 --- /dev/null +++ b/app/Http/Controllers/HomeController.php @@ -0,0 +1,28 @@ +middleware('auth'); + } + + /** + * Show the application dashboard. + * + * @return \Illuminate\Contracts\Support\Renderable + */ + public function index() + { + return view('home'); + } +} diff --git a/app/Http/Resources/Event.php b/app/Http/Resources/Event.php new file mode 100644 index 000000000..6565b382f --- /dev/null +++ b/app/Http/Resources/Event.php @@ -0,0 +1,19 @@ + +
+
+
Create Event
+
+
+
+ +
+ +
+
+ @csrf +
+
+ Cancel + +
+
+
+
+
+
+ +@endsection + + + + \ No newline at end of file diff --git a/resources/views/event/event_edit.blade.php b/resources/views/event/event_edit.blade.php new file mode 100644 index 000000000..9fd4781bd --- /dev/null +++ b/resources/views/event/event_edit.blade.php @@ -0,0 +1,131 @@ +@extends('layout') +@section('content') +
+
+
+
Edit Event
+
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ @csrf + @method('PUT') +
+
+ Cancel + + +
+
+
+
+
+
+
+@endsection + + + + \ No newline at end of file diff --git a/resources/views/event/event_list.blade.php b/resources/views/event/event_list.blade.php new file mode 100644 index 000000000..b651addae --- /dev/null +++ b/resources/views/event/event_list.blade.php @@ -0,0 +1,179 @@ +@extends('layout') +@section('content') +
+
+ +
+
+
+
+

Events

+
+
+
+
+
+
+ + + @csrf + + + + + + + + +
+
+
+
+ + + + + + +
+
+ + + + + + + + + + + + '0') { + foreach ($events as $event) { + ?> + + + + + + + + + + + + + +
IDNameSlugCreated AtAction
id ?>name ?>slug ?>createdAt ?> + Edit + Onclick="delete_event('id ?>');" Onclick="go_to_login();" >Delete +
There is no events.
+
+ links() ?> +
+@endsection + + + + + \ No newline at end of file diff --git a/resources/views/event/event_show.blade.php b/resources/views/event/event_show.blade.php new file mode 100644 index 000000000..4e57dc679 --- /dev/null +++ b/resources/views/event/event_show.blade.php @@ -0,0 +1,45 @@ +@extends('layout') +@section('content') + +
+
+
+
Show Event
+ +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+ Back +
+
+
+
+ +@endsection \ No newline at end of file diff --git a/resources/views/layout.blade.php b/resources/views/layout.blade.php new file mode 100644 index 000000000..b0d3b8b44 --- /dev/null +++ b/resources/views/layout.blade.php @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + +
+ @yield('content') +
+ + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 000000000..126967eea --- /dev/null +++ b/routes/web.php @@ -0,0 +1,37 @@ +name('event_list_web'); +Route::get('/events/create', [EventController::class, 'event_create_web'])->name('event_create_web'); +Route::get('/events/{id}', [EventController::class, 'event_show_web'])->name('event_show_web'); +Route::post('/event_name_exist', [EventController::class, 'event_name_exist'])->name('event_name_exist'); +Route::get('events/{id}/edit', [EventController::class, 'event_edit_web'])->name('event_edit_web'); +Route::put('events/{id}/edit', [EventController::class, 'update_event'])->name('update_event'); +Route::post('events/event_store', [EventController::class, 'create_event'])->name('event_store'); +Route::post('events/delete', [EventController::class, 'delete_event_web'])->name('delete_event_web'); +Route::post('events/search', [EventController::class, 'search_event_web'])->name('search_event_web'); + +Route::get('/cache', [EventController::class, 'event_list_cache'])->name('event_list_cache'); +Route::get('/remote', [EventController::class, 'event_list_remote'])->name('event_list_remote'); + + +Auth::routes(); + +Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');