| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- <?php
- namespace App\Http\Controllers\Api;
- use App\Http\Controllers\Controller;
- use Illuminate\Http\Request;
- use App\Models\FormData;
- use App\Models\Category;
- use App\Models\Comment;
- use Illuminate\Support\Str;
- class FormDataController extends Controller
- {
- /**
- * Display a listing of the resource.
- */
- public function index(Request $request)
- {
- $query = FormData::with(['category', 'comments.user'])
- ->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),
- ]
- ]);
- }
- }
|