mirror of
https://github.com/AnimeThemes/animethemes-server.git
synced 2026-07-11 01:24:46 +02:00
feat: WIP add watch history (#1098)
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Database\Factories\User;
|
||||
|
||||
use App\Models\Auth\User;
|
||||
use App\Models\List\Playlist;
|
||||
use App\Models\User\Like;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
/**
|
||||
* @method Like createOne($attributes = [])
|
||||
* @method Like makeOne($attributes = [])
|
||||
*
|
||||
* @extends Factory<Like>
|
||||
*/
|
||||
class LikeFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The name of the factory's corresponding model.
|
||||
*
|
||||
* @var class-string<Like>
|
||||
*/
|
||||
protected $model = Like::class;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function definition(): array
|
||||
{
|
||||
return [
|
||||
Like::ATTRIBUTE_USER => User::factory(),
|
||||
];
|
||||
}
|
||||
|
||||
public function forPlaylist(): static
|
||||
{
|
||||
return $this->for(Playlist::factory(), Like::RELATION_LIKEABLE);
|
||||
}
|
||||
|
||||
public function forEntry(): static
|
||||
{
|
||||
return $this->for(AnimeThemeEntry::factory(), Like::RELATION_LIKEABLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Database\Factories\User;
|
||||
|
||||
use App\Models\Auth\User;
|
||||
use App\Models\User\WatchHistory;
|
||||
use App\Models\Wiki\Anime\Theme\AnimeThemeEntry;
|
||||
use App\Models\Wiki\Video;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
/**
|
||||
* @method WatchHistory createOne($attributes = [])
|
||||
* @method WatchHistory makeOne($attributes = [])
|
||||
*
|
||||
* @extends Factory<WatchHistory>
|
||||
*/
|
||||
class WatchHistoryFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The name of the factory's corresponding model.
|
||||
*
|
||||
* @var class-string<WatchHistory>
|
||||
*/
|
||||
protected $model = WatchHistory::class;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function definition(): array
|
||||
{
|
||||
return [
|
||||
WatchHistory::ATTRIBUTE_ENTRY => AnimeThemeEntry::factory(),
|
||||
WatchHistory::ATTRIBUTE_USER => User::factory(),
|
||||
WatchHistory::ATTRIBUTE_VIDEO => Video::factory(),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
if (! Schema::hasTable('watch_history')) {
|
||||
Schema::create('watch_history', function (Blueprint $table) {
|
||||
$table->id('id');
|
||||
|
||||
$table->unsignedBigInteger('entry_id');
|
||||
$table->foreign('entry_id')->references('entry_id')->on('anime_theme_entries')->cascadeOnDelete();
|
||||
|
||||
$table->unsignedBigInteger('user_id');
|
||||
$table->foreign('user_id')->references('id')->on('users')->cascadeOnDelete();
|
||||
|
||||
$table->unsignedBigInteger('video_id');
|
||||
$table->foreign('video_id')->references('video_id')->on('videos')->cascadeOnDelete();
|
||||
|
||||
$table->timestamps(6);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -25,6 +25,7 @@ use App\Models\List\Playlist\PlaylistTrack;
|
||||
use App\Models\User\Like;
|
||||
use App\Models\User\Notification;
|
||||
use App\Models\User\Submission;
|
||||
use App\Models\User\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
@@ -78,9 +79,10 @@ class PermissionSeeder extends Seeder
|
||||
$this->registerResource(PlaylistTrack::class, CrudPermission::cases());
|
||||
|
||||
// User Resources
|
||||
$this->registerResource(Like::class, [CrudPermission::VIEW, CrudPermission::CREATE, CrudPermission::DELETE]);
|
||||
$this->registerResource(Notification::class, [CrudPermission::VIEW, CrudPermission::UPDATE]);
|
||||
$this->registerResource(Like::class, CrudPermission::cases());
|
||||
$this->registerResource(Notification::class, CrudPermission::cases());
|
||||
$this->registerResource(Submission::class, CrudPermission::cases());
|
||||
$this->registerResource(WatchHistory::class, CrudPermission::cases());
|
||||
|
||||
// Wiki Resources
|
||||
$this->registerResource(Anime::class, $extendedCrudPermissions);
|
||||
|
||||
@@ -26,6 +26,7 @@ use App\Models\List\Playlist\PlaylistTrack;
|
||||
use App\Models\User\Like;
|
||||
use App\Models\User\Notification;
|
||||
use App\Models\User\Submission;
|
||||
use App\Models\User\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
@@ -86,9 +87,10 @@ class AdminSeeder extends RoleSeeder
|
||||
$this->configureResource($role, PlaylistTrack::class, CrudPermission::cases());
|
||||
|
||||
// User Resources
|
||||
$this->configureResource($role, Like::class, [CrudPermission::VIEW, CrudPermission::CREATE, CrudPermission::DELETE]);
|
||||
$this->configureResource($role, Notification::class, [CrudPermission::VIEW, CrudPermission::UPDATE]);
|
||||
$this->configureResource($role, Like::class, CrudPermission::cases());
|
||||
$this->configureResource($role, Notification::class, CrudPermission::cases());
|
||||
$this->configureResource($role, Submission::class, CrudPermission::cases());
|
||||
$this->configureResource($role, WatchHistory::class, CrudPermission::cases());
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, $extendedCrudPermissions);
|
||||
|
||||
@@ -17,6 +17,7 @@ use App\Models\List\Playlist;
|
||||
use App\Models\List\Playlist\PlaylistTrack;
|
||||
use App\Models\User\Like;
|
||||
use App\Models\User\Notification;
|
||||
use App\Models\User\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
@@ -63,8 +64,9 @@ class ContentModeratorRoleSeeder extends RoleSeeder
|
||||
$this->configureResource($role, PlaylistTrack::class, CrudPermission::cases());
|
||||
|
||||
// User Resources
|
||||
$this->configureResource($role, Like::class, [CrudPermission::VIEW, CrudPermission::CREATE, CrudPermission::DELETE]);
|
||||
$this->configureResource($role, Notification::class, [CrudPermission::VIEW, CrudPermission::UPDATE]);
|
||||
$this->configureResource($role, Like::class, CrudPermission::cases());
|
||||
$this->configureResource($role, Notification::class, CrudPermission::cases());
|
||||
$this->configureResource($role, WatchHistory::class, CrudPermission::cases());
|
||||
|
||||
$extendedCrudPermissions = array_merge(
|
||||
CrudPermission::cases(),
|
||||
|
||||
@@ -16,6 +16,7 @@ use App\Models\List\Playlist;
|
||||
use App\Models\List\Playlist\PlaylistTrack;
|
||||
use App\Models\User\Like;
|
||||
use App\Models\User\Notification;
|
||||
use App\Models\User\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
@@ -57,8 +58,9 @@ class ContributorRoleSeeder extends RoleSeeder
|
||||
$this->configureResource($role, PlaylistTrack::class, CrudPermission::cases());
|
||||
|
||||
// User Resources
|
||||
$this->configureResource($role, Like::class, [CrudPermission::VIEW, CrudPermission::CREATE, CrudPermission::DELETE]);
|
||||
$this->configureResource($role, Notification::class, [CrudPermission::VIEW, CrudPermission::UPDATE]);
|
||||
$this->configureResource($role, Like::class, CrudPermission::cases());
|
||||
$this->configureResource($role, Notification::class, CrudPermission::cases());
|
||||
$this->configureResource($role, WatchHistory::class, CrudPermission::cases());
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
|
||||
|
||||
@@ -16,6 +16,7 @@ use App\Models\List\Playlist;
|
||||
use App\Models\List\Playlist\PlaylistTrack;
|
||||
use App\Models\User\Like;
|
||||
use App\Models\User\Notification;
|
||||
use App\Models\User\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
@@ -57,8 +58,9 @@ class DeveloperRoleSeeder extends RoleSeeder
|
||||
$this->configureResource($role, PlaylistTrack::class, CrudPermission::cases());
|
||||
|
||||
// User Resources
|
||||
$this->configureResource($role, Like::class, [CrudPermission::VIEW, CrudPermission::CREATE, CrudPermission::DELETE]);
|
||||
$this->configureResource($role, Notification::class, [CrudPermission::VIEW, CrudPermission::UPDATE]);
|
||||
$this->configureResource($role, Like::class, CrudPermission::cases());
|
||||
$this->configureResource($role, Notification::class, CrudPermission::cases());
|
||||
$this->configureResource($role, WatchHistory::class, CrudPermission::cases());
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
|
||||
|
||||
@@ -15,7 +15,9 @@ use App\Models\List\External\ExternalEntry;
|
||||
use App\Models\List\ExternalProfile;
|
||||
use App\Models\List\Playlist;
|
||||
use App\Models\List\Playlist\PlaylistTrack;
|
||||
use App\Models\User\Like;
|
||||
use App\Models\User\Notification;
|
||||
use App\Models\User\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
@@ -69,7 +71,9 @@ class EncoderRoleSeeder extends RoleSeeder
|
||||
);
|
||||
|
||||
// User Resources
|
||||
$this->configureResource($role, Notification::class, [CrudPermission::VIEW, CrudPermission::UPDATE]);
|
||||
$this->configureResource($role, Like::class, CrudPermission::cases());
|
||||
$this->configureResource($role, Notification::class, CrudPermission::cases());
|
||||
$this->configureResource($role, WatchHistory::class, CrudPermission::cases());
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, $extendedCrudPermissions);
|
||||
|
||||
@@ -16,6 +16,7 @@ use App\Models\List\Playlist;
|
||||
use App\Models\List\Playlist\PlaylistTrack;
|
||||
use App\Models\User\Like;
|
||||
use App\Models\User\Notification;
|
||||
use App\Models\User\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
@@ -57,8 +58,9 @@ class PanelViewerRoleSeeder extends RoleSeeder
|
||||
$this->configureResource($role, PlaylistTrack::class, CrudPermission::cases());
|
||||
|
||||
// User Resources
|
||||
$this->configureResource($role, Like::class, [CrudPermission::VIEW, CrudPermission::CREATE, CrudPermission::DELETE]);
|
||||
$this->configureResource($role, Notification::class, [CrudPermission::VIEW, CrudPermission::UPDATE]);
|
||||
$this->configureResource($role, Like::class, CrudPermission::cases());
|
||||
$this->configureResource($role, Notification::class, CrudPermission::cases());
|
||||
$this->configureResource($role, WatchHistory::class, CrudPermission::cases());
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
|
||||
|
||||
@@ -16,6 +16,7 @@ use App\Models\List\Playlist;
|
||||
use App\Models\List\Playlist\PlaylistTrack;
|
||||
use App\Models\User\Like;
|
||||
use App\Models\User\Notification;
|
||||
use App\Models\User\WatchHistory;
|
||||
use App\Models\Wiki\Anime;
|
||||
use App\Models\Wiki\Anime\AnimeSynonym;
|
||||
use App\Models\Wiki\Anime\AnimeTheme;
|
||||
@@ -57,8 +58,9 @@ class PatronRoleSeeder extends RoleSeeder
|
||||
$this->configureResource($role, PlaylistTrack::class, CrudPermission::cases());
|
||||
|
||||
// User Resources
|
||||
$this->configureResource($role, Like::class, [CrudPermission::VIEW, CrudPermission::CREATE, CrudPermission::DELETE]);
|
||||
$this->configureResource($role, Notification::class, [CrudPermission::VIEW, CrudPermission::UPDATE]);
|
||||
$this->configureResource($role, Like::class, CrudPermission::cases());
|
||||
$this->configureResource($role, Notification::class, CrudPermission::cases());
|
||||
$this->configureResource($role, WatchHistory::class, CrudPermission::cases());
|
||||
|
||||
// Wiki Resources
|
||||
$this->configureResource($role, Anime::class, [CrudPermission::VIEW]);
|
||||
|
||||
@@ -12,6 +12,8 @@ use App\Models\List\ExternalProfile;
|
||||
use App\Models\List\Playlist;
|
||||
use App\Models\List\Playlist\PlaylistTrack;
|
||||
use App\Models\User\Like;
|
||||
use App\Models\User\Notification;
|
||||
use App\Models\User\WatchHistory;
|
||||
|
||||
class VerifiedRoleSeeder extends RoleSeeder
|
||||
{
|
||||
@@ -28,7 +30,9 @@ class VerifiedRoleSeeder extends RoleSeeder
|
||||
$role = Role::findOrCreate($roleEnum->value);
|
||||
|
||||
// User Resources
|
||||
$this->configureResource($role, Like::class, [CrudPermission::VIEW, CrudPermission::CREATE, CrudPermission::DELETE]);
|
||||
$this->configureResource($role, Like::class, CrudPermission::cases());
|
||||
$this->configureResource($role, Notification::class, CrudPermission::cases());
|
||||
$this->configureResource($role, WatchHistory::class, CrudPermission::cases());
|
||||
|
||||
// List Resources
|
||||
$this->configureResource($role, ExternalEntry::class, [CrudPermission::VIEW]);
|
||||
|
||||
Reference in New Issue
Block a user