You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
3.5KB

  1. <?php
  2. namespace App\Models;
  3. use App\Codes\UserRole;
  4. use App\Events\Model\CreatedEvent;
  5. use App\Events\Model\CreatingEvent;
  6. use App\Events\Model\DeletedEvent;
  7. use App\Events\Model\UpdatingEvent;
  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. /**
  18. * @mixin \Eloquent
  19. */
  20. class User extends Authenticatable implements IModelFeature
  21. {
  22. use HasApiTokens, HasFactory, Notifiable, HasUuids, SoftDeletes;
  23. const COL_NAME_ID = 'id';
  24. const COL_NAME_EMAIL = 'email';
  25. const COL_NAME_NAME = 'name';
  26. const COL_NAME_PASSWORD = 'password';
  27. const COL_NAME_ROLE = 'role';
  28. const COL_NAME_CUSTOMER_ID = 'customer_id';
  29. const COL_NAME_CUSTOMER_CODE = 'customer_code';
  30. const COL_NAME_SHOP_ID = 'shop_id';
  31. const COL_NAME_SHOP_NAME = 'shop_name';
  32. const COL_NAME_CREATED_BY = ColumnName::CREATED_BY;
  33. const COL_NAME_UPDATED_BY = ColumnName::UPDATED_BY;
  34. const COL_NAME_CREATED_AT = ColumnName::CREATED_AT;
  35. const COL_NAME_UPDATED_AT = ColumnName::UPDATED_AT;
  36. const COL_NAME_DELETED_AT = ColumnName::DELETED_AT;
  37. protected $connection = "htpms";
  38. protected $table = "tbl3_mst_users";
  39. protected $hidden = [
  40. ColumnName::CREATED_AT,
  41. ColumnName::CREATED_BY,
  42. ColumnName::UPDATED_AT,
  43. ColumnName::UPDATED_BY,
  44. ColumnName::DELETED_AT,
  45. self::COL_NAME_CUSTOMER_ID,
  46. self::COL_NAME_CUSTOMER_CODE,
  47. self::COL_NAME_PASSWORD,
  48. ];
  49. protected $guarded = [
  50. self::COL_NAME_ID,
  51. self::COL_NAME_CREATED_BY,
  52. self::COL_NAME_UPDATED_BY,
  53. self::COL_NAME_CREATED_AT,
  54. self::COL_NAME_UPDATED_AT,
  55. self::COL_NAME_DELETED_AT,
  56. ];
  57. protected $casts = [
  58. self::COL_NAME_PASSWORD => Cast::HASHED,
  59. self::COL_NAME_ROLE => UserRole::class,
  60. ];
  61. protected $dispatchesEvents = [
  62. 'creating' => CreatingEvent::class,
  63. 'created' => CreatedEvent::class,
  64. 'updating' => UpdatingEvent::class,
  65. 'deleted' => DeletedEvent::class,
  66. ];
  67. public static function getBuilder(string $name = 'main'): Builder
  68. {
  69. $instance = new static();
  70. return DB::connection($instance->getConnectionName())->table(static::getTableName(), $name)
  71. ->whereNull($name . "." . self::COL_NAME_DELETED_AT);
  72. }
  73. public static function getTableName(): string
  74. {
  75. return (new static)->getTable();
  76. }
  77. public function copy(IModelFeature $from): static
  78. {
  79. $data = $from->getAttributeKeys();
  80. foreach ($data as $key) {
  81. $this->$key = $from->$key;
  82. }
  83. return $this;
  84. }
  85. public function getAttributeKeys(): array
  86. {
  87. return array_values(array_unique(array_merge(array_keys($this->attributesToArray()), $this->hidden)));
  88. }
  89. public function isNotSavedModel(): bool
  90. {
  91. return data_get($this, ColumnName::ID) === null;
  92. }
  93. public function getHistory(): ?HistoryModel
  94. {
  95. return new UserHistory();
  96. }
  97. public function getModelName(): string
  98. {
  99. return "ユーザー情報";
  100. }
  101. public function getChangeLogMessage($before, $after): ?string
  102. {
  103. return null;
  104. }
  105. }