WaterPresenter.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. declare(strict_types=1);
  3. namespace app\miniapi\service;
  4. use plugin\saiadmin\app\model\water\WaterEnterprise;
  5. use plugin\saiadmin\app\model\water\WaterDelivery;
  6. use app\miniapi\support\PhoneNumber;
  7. /** Shared response mapping; services load model relations before presenting lists. */
  8. final class WaterPresenter
  9. {
  10. public static function phone(string $phone): string
  11. {
  12. return PhoneNumber::mask($phone);
  13. }
  14. public static function enterprise(WaterEnterprise $enterprise): array
  15. {
  16. return [
  17. 'id' => (int) $enterprise->id,
  18. 'name' => $enterprise->name,
  19. 'contact' => $enterprise->contact,
  20. 'phone' => self::phone($enterprise->phone),
  21. 'address' => $enterprise->address,
  22. 'region' => $enterprise->region,
  23. 'longitude' => $enterprise->longitude === null ? null : (float) $enterprise->longitude,
  24. 'latitude' => $enterprise->latitude === null ? null : (float) $enterprise->latitude,
  25. 'employee_count' => $enterprise->employee_count === null ? null : (int) $enterprise->employee_count,
  26. 'revision' => self::revision($enterprise),
  27. ];
  28. }
  29. public static function revision(WaterEnterprise $enterprise): string
  30. {
  31. return hash('sha256', json_encode($enterprise->only([
  32. 'id',
  33. 'name',
  34. 'contact',
  35. 'phone',
  36. 'address',
  37. 'region',
  38. 'longitude',
  39. 'latitude',
  40. 'employee_count',
  41. 'updated_at',
  42. ]), JSON_THROW_ON_ERROR));
  43. }
  44. public static function delivery(WaterDelivery $delivery): array
  45. {
  46. return [
  47. 'id' => (int) $delivery->id,
  48. 'code' => 'DS' . $delivery->id,
  49. 'sku_id' => (int) $delivery->sku_id,
  50. 'sku_name' => $delivery->sku?->name,
  51. 'quantity' => (int) $delivery->quantity,
  52. 'status' => $delivery->status,
  53. 'delivered_qty' => (int) $delivery->delivered_qty,
  54. 'empty_returned' => (int) $delivery->empty_returned,
  55. 'address' => $delivery->address,
  56. 'scheduled_date' => $delivery->scheduled_date,
  57. 'deadline_at' => $delivery->deadline_at,
  58. 'driver_name' => $delivery->driver,
  59. 'driver_phone' => self::phone($delivery->driver_phone),
  60. 'created_at' => $delivery->created_at,
  61. 'received_at' => $delivery->received_at,
  62. 'completed_at' => $delivery->completed_at,
  63. ];
  64. }
  65. }