FormDataController.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Http\Request;
  5. use App\Models\FormData;
  6. use App\Models\Category;
  7. use App\Models\Comment;
  8. use Illuminate\Support\Str;
  9. class FormDataController extends Controller
  10. {
  11. /**
  12. * Display a listing of the resource.
  13. */
  14. public function index(Request $request)
  15. {
  16. $query = FormData::with(['category', 'comments.user'])
  17. ->active();
  18. if ($request->has('gender')) {
  19. $gender = filter_var($request->gender, FILTER_VALIDATE_BOOLEAN);
  20. if ($gender) {
  21. $query->male();
  22. } else {
  23. $query->female();
  24. }
  25. }
  26. if ($request->has('email')) {
  27. $query->byEmail($request->email);
  28. }
  29. if ($request->has('today') && $request->boolean('today')) {
  30. $query->today();
  31. }
  32. if ($request->has('long_message') && $request->boolean('long_message')) {
  33. $query->withLongMessage(50);
  34. }
  35. $perPage = $request->get('per_page', 15);
  36. $formData = $query->paginate($perPage);
  37. return FormDataResource::collection($formData);
  38. }
  39. /**
  40. * Store a newly created resource in storage.
  41. */
  42. public function store(Request $request)
  43. {
  44. $validator = Validator::make($request->all(), [
  45. 'name' => 'required|min:2|max:100',
  46. 'email' => 'required|email',
  47. 'phone' => 'required|digits:11',
  48. 'gender' => 'boolean',
  49. 'message' => 'required|min:10|max:1000',
  50. 'category_id' => 'nullable|exists:categories,id',
  51. ]);
  52. if ($validator->fails()) {
  53. return response()->json([
  54. 'success' => false,
  55. 'errors' => $validator->errors()
  56. ], 422);
  57. }
  58. $formData = FormData::create($validator->validated());
  59. return response()->json([
  60. 'success' => true,
  61. 'message' => 'Form data created successfully',
  62. 'data' => new FormDataResource($formData)
  63. ], 201);
  64. }
  65. /**
  66. * Display the specified resource.
  67. */
  68. public function show(FormData $formData)
  69. {
  70. $formData->load(['category', 'comments.user']);
  71. return new FormDataResource($formData); }
  72. /**
  73. * Update the specified resource in storage.
  74. */
  75. public function update(Request $request, FormData $formData)
  76. {
  77. $validator = Validator::make($request->all(), [
  78. 'name' => 'sometimes|min:2|max:100',
  79. 'email' => 'sometimes|email',
  80. 'phone' => 'sometimes|digits:11',
  81. 'gender' => 'sometimes|boolean',
  82. 'message' => 'sometimes|min:10|max:1000',
  83. 'category_id' => 'nullable|exists:categories,id',
  84. ]);
  85. if ($validator->fails()) {
  86. return response()->json([
  87. 'success' => false,
  88. 'errors' => $validator->errors()
  89. ], 422);
  90. }
  91. $formData->update($validator->validated());
  92. return response()->json([
  93. 'success' => true,
  94. 'message' => 'Form data updated successfully',
  95. 'data' => new FormDataResource($formData->fresh())
  96. ]); }
  97. /**
  98. * Remove the specified resource from storage.
  99. */
  100. public function destroy(FormData $formData)
  101. {
  102. $formData->delete();
  103. return response()->json([
  104. 'success' => true,
  105. 'message' => 'Form data soft deleted successfully'
  106. ]);
  107. }
  108. public function addComment(Request $request, FormData $formData)
  109. {
  110. $validator = Validator::make($request->all(), [
  111. 'content' => 'required|min:5|max:500',
  112. 'user_id' => 'nullable|exists:users,id',
  113. ]);
  114. if ($validator->fails()) {
  115. return response()->json([
  116. 'success' => false,
  117. 'errors' => $validator->errors()
  118. ], 422);
  119. }
  120. $comment = $formData->comments()->create($validator->validated());
  121. return response()->json([
  122. 'success' => true,
  123. 'message' => 'Comment added successfully',
  124. 'data' => $comment
  125. ], 201);
  126. }
  127. public function statistics()
  128. {
  129. $total = FormData::count();
  130. $maleCount = FormData::male()->count();
  131. $femaleCount = FormData::female()->count();
  132. $todayCount = FormData::today()->count();
  133. $withLongMessage = FormData::withLongMessage(100)->count();
  134. return response()->json([
  135. 'success' => true,
  136. 'data' => [
  137. 'total' => $total,
  138. 'male' => $maleCount,
  139. 'female' => $femaleCount,
  140. 'today' => $todayCount,
  141. 'with_long_message' => $withLongMessage,
  142. 'average_message_length' => round(FormData::avg(\DB::raw('LENGTH(message)')), 2),
  143. ]
  144. ]);
  145. }
  146. }