EquityController.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. namespace App\Http\Controllers\agent;
  3. use App\Http\Controllers\AgentApiController;
  4. use App\Models\Agent\AgentEquityOrder;
  5. use App\Rules\DecimalNumber;
  6. use App\Services\Agent\AgentEquityService;
  7. use Illuminate\Http\Request;
  8. class EquityController extends AgentApiController
  9. {
  10. public function index(Request $request, AgentEquityService $service)
  11. {
  12. return $this->execute(function () use ($request, $service) {
  13. $data = $request->validate([
  14. 'page' => ['nullable', 'integer', 'min:1'], 'limit' => ['nullable', 'integer', 'min:1', 'max:100'],
  15. ]);
  16. $agent = $this->currentAgent()->fresh();
  17. $page = max(1, (int) ($data['page'] ?? 1));
  18. $limit = min(100, max(1, (int) ($data['limit'] ?? 20)));
  19. $query = AgentEquityOrder::query()->where('agent_id', $agent->id);
  20. $total = (clone $query)->count();
  21. $orders = $query->orderByDesc('id')->forPage($page, $limit)->get();
  22. return $service->overview($agent) + ['orders' => compact('total', 'page', 'limit') + ['list' => $orders]];
  23. });
  24. }
  25. public function order(Request $request, AgentEquityService $service)
  26. {
  27. return $this->execute(function () use ($request, $service) {
  28. $data = $request->validate(['percent' => ['required', 'numeric', 'gt:0', new DecimalNumber(3, 4)]]);
  29. return $service->order($this->currentAgent(), (string) $data['percent']);
  30. });
  31. }
  32. public function cancel(Request $request, AgentEquityService $service)
  33. {
  34. return $this->execute(function () use ($request, $service) {
  35. $data = $request->validate(['id' => ['required', 'integer']]);
  36. return $service->cancel($this->currentAgent(), (int) $data['id']);
  37. });
  38. }
  39. }