領収証発行サービス
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

111 lines
2.9KB

  1. <?php
  2. namespace App\Models;
  3. use App\Codes\UserRole;
  4. use App\Events\Model\CreatedEvent;
  5. use App\Events\Model\DeletedEvent;
  6. use App\Events\Model\UpdatingEvent;
  7. use App\Models\Feature\ContractFeature;
  8. use App\Models\Feature\IModelFeature;
  9. use Illuminate\Database\Eloquent\Concerns\HasUuids;
  10. use Illuminate\Database\Eloquent\Factories\HasFactory;
  11. use Illuminate\Database\Eloquent\SoftDeletes;
  12. use Illuminate\Database\Query\Builder;
  13. use Illuminate\Foundation\Auth\User as Authenticatable;
  14. use Illuminate\Notifications\Notifiable;
  15. use Illuminate\Support\Facades\DB;
  16. use Laravel\Sanctum\HasApiTokens;
  17. class User extends Authenticatable implements IModelFeature
  18. {
  19. use HasApiTokens, HasFactory, Notifiable, HasUuids, SoftDeletes, ContractFeature;
  20. const COL_NAME_ID = 'id';
  21. const COL_NAME_ROLE = 'role';
  22. const COL_NAME_EMAIL = 'email';
  23. const COL_NAME_NAME = 'name';
  24. const COL_NAME_PASSWORD = 'password';
  25. const COL_NAME_CONTRACT_ID = ColumnName::CONTRACT_ID;
  26. const COL_NAME_CREATED_BY = ColumnName::CREATED_BY;
  27. const COL_NAME_UPDATED_BY = ColumnName::UPDATED_BY;
  28. const COL_NAME_CREATED_AT = ColumnName::CREATED_AT;
  29. const COL_NAME_UPDATED_AT = ColumnName::UPDATED_AT;
  30. const COL_NAME_DELETED_AT = ColumnName::DELETED_AT;
  31. /**
  32. * The attributes that should be hidden for serialization.
  33. *
  34. * @var array<int, string>
  35. */
  36. protected $hidden = [
  37. self::COL_NAME_PASSWORD,
  38. ];
  39. protected $guarded = [
  40. self::COL_NAME_ID,
  41. self::COL_NAME_CREATED_BY,
  42. self::COL_NAME_UPDATED_BY,
  43. self::COL_NAME_CREATED_AT,
  44. self::COL_NAME_UPDATED_AT,
  45. self::COL_NAME_DELETED_AT,
  46. ];
  47. protected $casts = [
  48. self::COL_NAME_ROLE => UserRole::class,
  49. ];
  50. protected $dispatchesEvents = [
  51. 'created' => CreatedEvent::class,
  52. 'updating' => UpdatingEvent::class,
  53. 'deleted' => DeletedEvent::class,
  54. ];
  55. public static function getBuilder(string $name = 'main'): Builder
  56. {
  57. return DB::table(static::getTableName(), $name);
  58. }
  59. public static function getTableName(): string
  60. {
  61. return (new static)->getTable();
  62. }
  63. public function copy(IModelFeature $from): static
  64. {
  65. $data = $from->getAttributeKeys();
  66. foreach ($data as $key) {
  67. $this->$key = $from->$key;
  68. }
  69. return $this;
  70. }
  71. public function getAttributeKeys(): array
  72. {
  73. return array_values(array_unique(array_merge(array_keys($this->attributesToArray()), $this->hidden)));
  74. }
  75. public function isNotSavedModel(): bool
  76. {
  77. return data_get($this, ColumnName::ID) === null;
  78. }
  79. public function getHistory(): ?HistoryModel
  80. {
  81. return new UserHistory();
  82. }
  83. public function getModelName(): string
  84. {
  85. return "ユーザー情報";
  86. }
  87. public function getChangeLogMessage($before, $after): ?string
  88. {
  89. return null;
  90. }
  91. }