active(); if ($request->has('gender')) { $gender = filter_var($request->gender, FILTER_VALIDATE_BOOLEAN); if ($gender) { $query->male(); } else { $query->female(); } } if ($request->has('email')) { $query->byEmail($request->email); } if ($request->has('today') && $request->boolean('today')) { $query->today(); } if ($request->has('long_message') && $request->boolean('long_message')) { $query->withLongMessage(50); } $perPage = $request->get('per_page', 15); $formData = $query->paginate($perPage); return FormDataResource::collection($formData); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|min:2|max:100', 'email' => 'required|email', 'phone' => 'required|digits:11', 'gender' => 'boolean', 'message' => 'required|min:10|max:1000', 'category_id' => 'nullable|exists:categories,id', ]); if ($validator->fails()) { return response()->json([ 'success' => false, 'errors' => $validator->errors() ], 422); } $formData = FormData::create($validator->validated()); return response()->json([ 'success' => true, 'message' => 'Form data created successfully', 'data' => new FormDataResource($formData) ], 201); } /** * Display the specified resource. */ public function show(FormData $formData) { $formData->load(['category', 'comments.user']); return new FormDataResource($formData); } /** * Update the specified resource in storage. */ public function update(Request $request, FormData $formData) { $validator = Validator::make($request->all(), [ 'name' => 'sometimes|min:2|max:100', 'email' => 'sometimes|email', 'phone' => 'sometimes|digits:11', 'gender' => 'sometimes|boolean', 'message' => 'sometimes|min:10|max:1000', 'category_id' => 'nullable|exists:categories,id', ]); if ($validator->fails()) { return response()->json([ 'success' => false, 'errors' => $validator->errors() ], 422); } $formData->update($validator->validated()); return response()->json([ 'success' => true, 'message' => 'Form data updated successfully', 'data' => new FormDataResource($formData->fresh()) ]); } /** * Remove the specified resource from storage. */ public function destroy(FormData $formData) { $formData->delete(); return response()->json([ 'success' => true, 'message' => 'Form data soft deleted successfully' ]); } public function addComment(Request $request, FormData $formData) { $validator = Validator::make($request->all(), [ 'content' => 'required|min:5|max:500', 'user_id' => 'nullable|exists:users,id', ]); if ($validator->fails()) { return response()->json([ 'success' => false, 'errors' => $validator->errors() ], 422); } $comment = $formData->comments()->create($validator->validated()); return response()->json([ 'success' => true, 'message' => 'Comment added successfully', 'data' => $comment ], 201); } public function statistics() { $total = FormData::count(); $maleCount = FormData::male()->count(); $femaleCount = FormData::female()->count(); $todayCount = FormData::today()->count(); $withLongMessage = FormData::withLongMessage(100)->count(); return response()->json([ 'success' => true, 'data' => [ 'total' => $total, 'male' => $maleCount, 'female' => $femaleCount, 'today' => $todayCount, 'with_long_message' => $withLongMessage, 'average_message_length' => round(FormData::avg(\DB::raw('LENGTH(message)')), 2), ] ]); } }