VoucherController.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Voucher;
  5. use Illuminate\Contracts\Pagination\LengthAwarePaginator;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Http\Response;
  8. use Illuminate\Validation\Rule;
  9. class VoucherController extends Controller
  10. {
  11. /**
  12. * Display a listing of the resource.
  13. *
  14. * @return Response
  15. */
  16. public function index(Request $request)
  17. {
  18. return Voucher::paginate($request->query('per_page') ?? 50);
  19. }
  20. /**
  21. * Show the form for creating a new resource.
  22. *
  23. * @return Response
  24. */
  25. public function create()
  26. {
  27. //
  28. }
  29. /**
  30. * Store a newly created resource in storage.
  31. *
  32. * @param Request $request
  33. * @return Response
  34. */
  35. public function store(Request $request)
  36. {
  37. $request->validate([
  38. 'memo' => 'nullable|string|max:191',
  39. 'code' => 'required|string|alpha_dash|max:36|min:4|unique:vouchers',
  40. 'uses' => 'required|numeric|max:2147483647|min:1',
  41. 'credits' => 'required|numeric|between:0,99999999',
  42. 'expires_at' => 'nullable|multiple_date_format:d-m-Y H:i:s,d-m-Y|after:now|before:10 years'
  43. ]);
  44. return Voucher::create($request->all());
  45. }
  46. /**
  47. * Display the specified resource.
  48. *
  49. * @param int $id
  50. * @return Response
  51. */
  52. public function show(int $id)
  53. {
  54. return Voucher::findOrFail($id);
  55. }
  56. /**
  57. * Show the form for editing the specified resource.
  58. *
  59. * @param int $id
  60. * @return Response
  61. */
  62. public function edit($id)
  63. {
  64. //
  65. }
  66. /**
  67. * Update the specified resource in storage.
  68. *
  69. * @param Request $request
  70. * @param int $id
  71. * @return Response
  72. */
  73. public function update(Request $request, int $id)
  74. {
  75. $voucher = Voucher::findOrFail($id);
  76. $request->validate([
  77. 'memo' => 'nullable|string|max:191',
  78. 'code' => "required|string|alpha_dash|max:36|min:4|unique:vouchers,code,{$voucher->id}",
  79. 'uses' => 'required|numeric|max:2147483647|min:1',
  80. 'credits' => 'required|numeric|between:0,99999999',
  81. 'expires_at' => 'nullable|multiple_date_format:d-m-Y H:i:s,d-m-Y|after:now|before:10 years'
  82. ]);
  83. $voucher->update($request->all());
  84. return $voucher;
  85. }
  86. /**
  87. * Remove the specified resource from storage.
  88. *
  89. * @param int $id
  90. * @return Response
  91. */
  92. public function destroy(int $id)
  93. {
  94. $voucher = Voucher::findOrFail($id);
  95. $voucher->delete();
  96. return $voucher;
  97. }
  98. /**
  99. * get linked users
  100. * @param Request $request
  101. * @param Voucher $voucher
  102. * @return LengthAwarePaginator
  103. */
  104. public function users(Request $request, Voucher $voucher)
  105. {
  106. $request->validate([
  107. 'include' => [
  108. 'nullable',
  109. 'string',
  110. Rule::in(['discorduser']),
  111. ]
  112. ]);
  113. if ($request->input('include') == 'discorduser') {
  114. return $voucher->users()->with('discordUser')->paginate($request->query('per_page') ?? 50);
  115. }
  116. return $voucher->users()->paginate($request->query('per_page') ?? 50);
  117. }
  118. }