Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
172 changes: 4 additions & 168 deletions app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,7 @@

namespace App\Models;

use Database\Factories\UserFactory;
use Filament\Models\Contracts\FilamentUser;
use Filament\Models\Contracts\HasAvatar;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Jeffgreco13\FilamentBreezy\Traits\TwoFactorAuthenticatable;
use Laravel\Scout\Searchable;
use Packages\React\Traits\CanFollow;
use Packages\React\Traits\HasFollowers;
use Spatie\Activitylog\LogOptions;
use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\File;
use Spatie\Permission\Traits\HasRoles;
use Packages\User\Models\User as BaseUser;

/**
* @property int $id
Expand Down Expand Up @@ -48,13 +31,13 @@
* @property-read int|null $notifications_count
* @property-read \Illuminate\Database\Eloquent\Collection<int, \Spatie\Permission\Models\Permission> $permissions
* @property-read int|null $permissions_count
* @property-read UserProfile|null $profile
* @property-read \Packages\User\Models\UserProfile|null $profile
* @property-read \Illuminate\Database\Eloquent\Collection<int, \Spatie\Permission\Models\Role> $roles
* @property-read int|null $roles_count
* @property-read mixed $two_factor_recovery_codes
* @property-read mixed $two_factor_secret
*
* @method static \Database\Factories\UserFactory factory($count = null, $state = [])
* @method static \Packages\User\Database\Factories\UserFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder<static>|User newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|User newQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|User onlyTrashed()
Expand All @@ -78,153 +61,6 @@
*
* @mixin \Eloquent
*/
class User extends Authenticatable implements FilamentUser, HasMedia, HasAvatar
class User extends BaseUser
{
use CanFollow;

/** @use HasFactory<\Database\Factories\UserFactory> */
use HasFactory;

use HasFollowers;
use HasRoles;
use InteractsWithMedia;
use LogsActivity;
use Notifiable;
use SoftDeletes;
use TwoFactorAuthenticatable;
use Searchable;

/**
* The attributes that are mass assignable.
*
* @var list<string>
*/
protected $fillable = [
'name',
'email',
'username',
'password',
];

/**
* The attributes that should be hidden for serialization.
*
* @var list<string>
*/
protected $hidden = [
'password',
'remember_token',
];

/**
* @return HasOne<UserProfile, $this>
*/
public function profile(): HasOne
{
return $this->hasOne(UserProfile::class);
}

public function getFilamentAvatarUrl(): ?string
{
return $this->getAvatarImage();
}

/**
* Get the avatar image of the user.
*/
public function getAvatarImage(): string
{
$media = $this->getFirstMedia('avatar');

if (! $media) {
return '';
}

return $media->getUrl();
}

/**
* Register media collections and conversions.
*/
public function registerMediaCollections(): void
{
$validateImage = function (File $file, ?array $allowedMimes = null) {
$allowedMimes ??= ['image/jpeg', 'image/png', 'image/webp', 'image/avif'];

if (! in_array($file->mimeType, $allowedMimes)) {
throw new \Exception("Unsupported file type: {$file->mimeType}");
}

if ($file->size > 2 * 1024 * 1024) {
throw new \Exception('File too large. Max allowed size is 2MB.');
}

return true;
};

$this->addMediaCollection('avatar')
->singleFile()
->acceptsFile(fn ($file) => $validateImage($file));

$this->addMediaCollection('content')
->singleFile()
->acceptsFile(fn ($file) => $validateImage($file));
}

/**
* Get the activity log options for User model.
* Logs changes to the "name", "email", "username" and "password" attributes.
*/
public function getActivitylogOptions(): LogOptions
{
return LogOptions::defaults()
->useLogName('user')
->logOnly(['name', 'email', 'username', 'password'])
->logOnlyDirty()
->dontSubmitEmptyLogs();
}

/**
* Get the search fields for User model
* Searchs between "id", "name" and "username" attributes.
*
* @return array{id: int, name: string, username: string}
*/
public function toSearchableArray(): array
{
return [
'id' => (int) $this->id,
'name' => $this->name,
'username' => $this->username,
];
}

/**
* Guard for access admin panel.
*/
public function canAccessPanel(\Filament\Panel $panel): bool
{
return $this->can('view-panel');
}

/**
* Create a new factory instance for the model.
*/
protected static function newFactory(): UserFactory
{
return UserFactory::new();
}

/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
}
}
47 changes: 0 additions & 47 deletions app/Providers/AppServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,13 @@

namespace App\Providers;

use App\Models\User;
use App\Models\UserProfile;
use App\Observers\UserObserver;
use App\Observers\UserProfileObserver;
use App\Services\SettingsService;
use App\Settings\SeoSettings;
use App\Settings\SiteSettings;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Vite;
use Illuminate\Support\ServiceProvider;
use Packages\React\Services\ReactService;
use Packages\Recommend\Services\FeedService;
use Packages\Search\Services\SearchService;

class AppServiceProvider extends ServiceProvider
{
Expand Down Expand Up @@ -46,12 +39,7 @@ public function boot(): void
});
}

$this->loadObservers();
$this->loadMacros();
$this->configureSearch();
$this->configureReact();
$this->configureSearch();
$this->configureFeed();

try {
$siteSettings = SettingsService::getSiteSettings();
Expand Down Expand Up @@ -121,12 +109,6 @@ protected function loadSiteConfig(SiteSettings $siteSettings): void
}
}

protected function loadObservers(): void
{
User::observe(UserObserver::class);
UserProfile::observe(UserProfileObserver::class);
}

protected function loadMacros(): void
{
Builder::macro('existsOrFail', function ($message = '') {
Expand All @@ -137,33 +119,4 @@ protected function loadMacros(): void
return $this;
});
}

protected function configureSearch(): void
{
SearchService::registerHandler(
index: 'users',
callback: fn ($hit) => app(\App\Services\UserService::class)->getData($hit['id']),
searchableAttributes: ['name', 'username'],
filterableAttributes: ['id'],
sortableAttributes: ['created_at']
);
}

protected function configureReact(): void
{
ReactService::registerHandler(
name: 'user',
class: User::class,
callback: fn ($slug) => app(\App\Services\UserService::class)->getId($slug)
);
}

protected function configureFeed(): void
{
FeedService::registerHandler(
name: 'user',
isFilter: true,
callback: fn ($slug) => app(\App\Services\UserService::class)->getId($slug)
);
}
}
4 changes: 2 additions & 2 deletions app/Services/SeoService.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

namespace App\Services;

use App\Data\UserData;
use App\Data\UserProfileData;
use App\Settings\SeoSettings;
use App\Settings\SiteSettings;
use Carbon\Carbon;
Expand All @@ -20,6 +18,8 @@
use Packages\Page\Data\PageData;
use Packages\Tag\Data\TagData;
use Packages\Tag\Data\TagProfileData;
use Packages\User\Data\UserData;
use Packages\User\Data\UserProfileData;
use Spatie\SchemaOrg\Schema;

class SeoService
Expand Down
1 change: 1 addition & 0 deletions bootstrap/providers.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
return [
App\Providers\AppServiceProvider::class,
App\Providers\Filament\AdminPanelProvider::class,
Packages\User\UserProvider::class,
Packages\Article\ArticleProvider::class,
Packages\Category\CategoryProvider::class,
Packages\News\NewsProvider::class,
Expand Down
3 changes: 3 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/",
"Packages\\User\\": "packages/User/src/",
"Packages\\User\\Database\\Factories\\": "packages/User/database/factories/",
"Packages\\User\\Database\\Seeders\\": "packages/User/database/seeders/",
"Packages\\Article\\": "packages/Article/src/",
"Packages\\Article\\Database\\Factories\\": "packages/Article/database/factories/",
"Packages\\Article\\Database\\Seeders\\": "packages/Article/database/seeders/",
Expand Down
1 change: 1 addition & 0 deletions database/seeders/DatabaseSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Packages\User\Database\Seeders\UserSeeder;

class DatabaseSeeder extends Seeder
{
Expand Down
2 changes: 1 addition & 1 deletion packages/Article/src/Data/ArticleData.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

namespace Packages\Article\Data;

use App\Data\UserData;
use DateTime;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Gate;
use Packages\Article\Models\Article;
use Packages\Category\Data\CategoryData;
use Packages\Tag\Data\TagData;
use Packages\User\Data\UserData;
use Spatie\LaravelData\Data;

class ArticleData extends Data
Expand Down
1 change: 1 addition & 0 deletions packages/Article/src/Models/Article.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
* @property-read int|null $tags_count
* @property-read User $user
*
* @method static \Packages\Article\Database\Factories\ArticleFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder<static>|Article newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|Article newQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|Article query()
Expand Down
2 changes: 1 addition & 1 deletion packages/Article/src/Services/ArticleService.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

namespace Packages\Article\Services;

use App\Services\UserService;
use Illuminate\Support\Facades\Cache;
use Packages\Article\Data\ArticleData;
use Packages\Article\Models\Article;
use Packages\User\Services\UserService;

class ArticleService
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Packages\Article\Tests\Feature\Http\Controllers;

use App\Data\UserData;
use App\Services\SeoService;
use Honeystone\Seo\Contracts\BuildsMetadata;
use Inertia\Testing\AssertableInertia as Assert;
Expand All @@ -12,6 +11,7 @@
use Packages\Article\Tests\TestCase;
use Packages\Category\Data\CategoryData;
use Packages\Tag\Data\TagData;
use Packages\User\Data\UserData;
use Symfony\Component\HttpFoundation\Response;

class ArticleControllerTest extends TestCase
Expand Down
2 changes: 1 addition & 1 deletion packages/Article/tests/Unit/Data/ArticleDataTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace Packages\Article\Tests\Unit\Data;

use App\Data\UserData;
use App\Models\User;
use Carbon\Carbon;
use Mockery;
Expand All @@ -12,6 +11,7 @@
use Packages\Article\Tests\TestCase;
use Packages\Category\Data\CategoryData;
use Packages\Tag\Data\TagData;
use Packages\User\Data\UserData;

class ArticleDataTest extends TestCase
{
Expand Down
1 change: 1 addition & 0 deletions packages/Category/src/Models/Category.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
* @property-read int|null $followers_count
* @property-read CategoryProfile|null $profile
*
* @method static \Packages\Category\Database\Factories\CategoryFactory factory($count = null, $state = [])
* @method static \Illuminate\Database\Eloquent\Builder<static>|Category newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|Category newQuery()
* @method static \Illuminate\Database\Eloquent\Builder<static>|Category query()
Expand Down
Loading
Loading