UserPublicDto.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace App\Module\User\Dto;
  3. use App\Module\User\Models\UserInfo;
  4. use App\Module\User\Unit\UserPublic;
  5. /**
  6. * 用户公开信息数据传输对象
  7. *
  8. * 用于在服务层返回用户公开信息,避免直接暴露模型对象
  9. */
  10. class UserPublicDto
  11. {
  12. /**
  13. * @var int 用户ID
  14. */
  15. public int $userId;
  16. /**
  17. * @var string|null 头像
  18. */
  19. public ?string $avatar;
  20. /**
  21. * @var int 状态
  22. */
  23. public int $status;
  24. /**
  25. * @var string|null 昵称
  26. */
  27. public ?string $nickName;
  28. /**
  29. * 从 UserPublic 对象创建 DTO
  30. *
  31. * @param UserPublic $userPublic 用户公开信息对象
  32. * @return self
  33. */
  34. public static function fromUserPublic(UserPublic $userPublic): self
  35. {
  36. $dto = new self();
  37. $dto->userId = $userPublic->user_id;
  38. $dto->avatar = $userPublic->avatar;
  39. $dto->status = $userPublic->status;
  40. $dto->nickName = $userPublic->nick_name;
  41. return $dto;
  42. }
  43. /**
  44. * 从 UserInfo 模型创建 DTO
  45. *
  46. * @param UserInfo $userInfo 用户详细信息模型
  47. * @return self
  48. */
  49. public static function fromUserInfo(UserInfo $userInfo): self
  50. {
  51. $dto = new self();
  52. $dto->userId = $userInfo->user_id;
  53. $dto->avatar = $userInfo->avatar;
  54. $dto->status = $userInfo->status->value;
  55. $dto->nickName = $userInfo->nickname;
  56. return $dto;
  57. }
  58. /**
  59. * 创建已注销用户的 DTO
  60. *
  61. * @param int $userId 用户ID
  62. * @return self
  63. */
  64. public static function createDeleted(int $userId): self
  65. {
  66. $dto = new self();
  67. $dto->userId = $userId;
  68. $dto->avatar = '';
  69. $dto->status = 0;
  70. $dto->nickName = '已注销';
  71. return $dto;
  72. }
  73. /**
  74. * 转换为数组
  75. *
  76. * @return array
  77. */
  78. public function toArray(): array
  79. {
  80. return [
  81. 'user_id' => $this->userId,
  82. 'avatar' => $this->avatar,
  83. 'status' => $this->status,
  84. 'nick_name' => $this->nickName,
  85. ];
  86. }
  87. }