InfluxOW/laravel_ddd_ecommerce

View on GitHub
app/Components/LoginHistoryable/Models/LoginHistory.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace App\Components\LoginHistoryable\Models;

use App\Components\LoginHistoryable\Database\Builders\LoginHistoryBuilder;
use App\Domains\Common\Traits\Models\HasExtendedFunctionality;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Support\Carbon;
use MStaack\LaravelPostgis\Eloquent\PostgisTrait;
use MStaack\LaravelPostgis\Geometries\Point;

/**
 * App\Components\LoginHistoryable\Models\LoginHistory
 *
 * @property int         $id
 * @property string      $login_historyable_type
 * @property int         $login_historyable_id
 * @property string|null $ip
 * @property string|null $user_agent
 * @property string|null $device
 * @property string|null $platform
 * @property string|null $platform_version
 * @property string|null $browser
 * @property string|null $browser_version
 * @property string|null $region_code
 * @property string|null $region_name
 * @property string|null $country_code
 * @property string|null $country_name
 * @property string|null $city
 * @property Point|null  $location
 * @property string|null $zip
 * @property Carbon|null $created_at
 *
 * @property-read Model|\Eloquent $loginHistoryable
 *
 * @method static LoginHistoryBuilder|LoginHistory newModelQuery()
 * @method static LoginHistoryBuilder|LoginHistory newQuery()
 * @method static LoginHistoryBuilder|LoginHistory query()
 * @method static LoginHistoryBuilder|LoginHistory whereBrowser($value)
 * @method static LoginHistoryBuilder|LoginHistory whereBrowserVersion($value)
 * @method static LoginHistoryBuilder|LoginHistory whereCity($value)
 * @method static LoginHistoryBuilder|LoginHistory whereCountryCode($value)
 * @method static LoginHistoryBuilder|LoginHistory whereCountryName($value)
 * @method static LoginHistoryBuilder|LoginHistory whereCreatedAt($value)
 * @method static LoginHistoryBuilder|LoginHistory whereDevice($value)
 * @method static LoginHistoryBuilder|LoginHistory whereId($value)
 * @method static LoginHistoryBuilder|LoginHistory whereIp($value)
 * @method static LoginHistoryBuilder|LoginHistory whereLocation($value)
 * @method static LoginHistoryBuilder|LoginHistory whereLoginHistoryableId($value)
 * @method static LoginHistoryBuilder|LoginHistory whereLoginHistoryableType($value)
 * @method static LoginHistoryBuilder|LoginHistory wherePlatform($value)
 * @method static LoginHistoryBuilder|LoginHistory wherePlatformVersion($value)
 * @method static LoginHistoryBuilder|LoginHistory whereRegionCode($value)
 * @method static LoginHistoryBuilder|LoginHistory whereRegionName($value)
 * @method static LoginHistoryBuilder|LoginHistory whereUserAgent($value)
 * @method static LoginHistoryBuilder|LoginHistory whereZip($value)
 *
 * @mixin \Eloquent
 */
final class LoginHistory extends Model
{
    use HasExtendedFunctionality;
    use PostgisTrait;

    protected $table = 'login_history';

    protected $fillable = [
        'ip',
        'user_agent',
        'device',
        'platform',
        'platform_version',
        'browser',
        'browser_version',
        'region_code',
        'region_name',
        'country_code',
        'country_name',
        'city',
        'location',
        'zip',
    ];

    protected array $postgisFields = [
        'location',
    ];

    public const UPDATED_AT = null;

    /*
     * Internal
     * */

    public function newEloquentBuilder($query): LoginHistoryBuilder
    {
        /** @var LoginHistoryBuilder<self> $builder */
        $builder = new LoginHistoryBuilder($query);

        return $builder;
    }

    /*
     * Relations
     * */

    public function loginHistoryable(): MorphTo
    {
        return $this->morphTo();
    }

    /*
     * Helpers
     * */

    /**
     * Workaround for IDE helper PHPDocs generation.
     */
    public function getLocationAttribute(): ?Point
    {
        return $this->attributes['location'] ?? null;
    }
}