Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

declare(strict_types=1);

namespace He4rt\IntegrationDiscord\Database\Factories;

use He4rt\IntegrationDiscord\Enums\DiscordChannelType;
use He4rt\IntegrationDiscord\Models\DiscordChannel;
use He4rt\IntegrationDiscord\Models\DiscordGuild;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
* @extends Factory<DiscordChannel>
*/
final class DiscordChannelFactory extends Factory
{
protected $model = DiscordChannel::class;

public function definition(): array
{
return [
'discord_guild_id' => DiscordGuild::factory(),
'discord_channel_id' => (string) fake()->unique()->numberBetween(100000000000000000, 999999999999999999),
'name' => fake()->slug(2),
'type' => DiscordChannelType::GuildText,
'position' => fake()->numberBetween(0, 50),
'nsfw' => false,
];
}

public function voice(): static
{
return $this->state([
'type' => DiscordChannelType::GuildVoice,
'bitrate' => 64000,
'user_limit' => 0,
]);
}

public function category(): static
{
return $this->state([
'type' => DiscordChannelType::GuildCategory,
]);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace He4rt\IntegrationDiscord\Database\Factories;

use He4rt\IntegrationDiscord\Models\DiscordGuild;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
* @extends Factory<DiscordGuild>
*/
final class DiscordGuildFactory extends Factory
{
protected $model = DiscordGuild::class;

public function definition(): array
{
return [
'discord_guild_id' => (string) fake()->unique()->numberBetween(100000000000000000, 999999999999999999),
'name' => fake()->company(),
'icon' => fake()->optional()->md5(),
'description' => fake()->optional()->sentence(),
'member_count' => fake()->numberBetween(10, 50000),
'premium_tier' => fake()->numberBetween(0, 3),
'features' => [],
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?php

declare(strict_types=1);

namespace He4rt\IntegrationDiscord\Database\Factories;

use He4rt\IntegrationDiscord\Models\DiscordGuild;
use He4rt\IntegrationDiscord\Models\DiscordMember;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
* @extends Factory<DiscordMember>
*/
final class DiscordMemberFactory extends Factory
{
protected $model = DiscordMember::class;

public function definition(): array
{
return [
'discord_guild_id' => DiscordGuild::factory(),
'discord_user_id' => (string) fake()->unique()->numberBetween(100000000000000000, 999999999999999999),
'username' => fake()->userName(),
'global_name' => fake()->optional()->name(),
'avatar' => fake()->optional()->md5(),
'is_bot' => false,
'is_pending' => false,
'joined_at' => fake()->dateTimeBetween('-2 years'),
];
}

public function bot(): static
{
return $this->state([
'is_bot' => true,
]);
}

public function pending(): static
{
return $this->state([
'is_pending' => true,
]);
}

public function left(): static
{
return $this->state([
'left_at' => now(),
]);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

declare(strict_types=1);

namespace He4rt\IntegrationDiscord\Database\Factories;

use He4rt\IntegrationDiscord\Models\DiscordGuild;
use He4rt\IntegrationDiscord\Models\DiscordRole;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
* @extends Factory<DiscordRole>
*/
final class DiscordRoleFactory extends Factory
{
protected $model = DiscordRole::class;

public function definition(): array
{
return [
'discord_guild_id' => DiscordGuild::factory(),
'discord_role_id' => (string) fake()->unique()->numberBetween(100000000000000000, 999999999999999999),
'name' => fake()->word(),
'color' => fake()->numberBetween(0, 16777215),
'position' => fake()->numberBetween(0, 50),
'permissions' => 0,
'is_hoisted' => false,
'is_mentionable' => false,
'is_managed' => false,
];
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?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
{
Schema::create('discord_guilds', function (Blueprint $table): void {
$table->id();
$table->foreignId('tenant_id')->nullable()->constrained('tenants')->nullOnDelete();
$table->string('discord_guild_id')->unique();
$table->string('name');
$table->string('icon')->nullable();
$table->text('description')->nullable();
$table->integer('member_count')->nullable();
$table->smallInteger('premium_tier')->default(0);
$table->jsonb('features')->default('[]');
$table->timestamp('synced_at')->nullable();
$table->timestamps();
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('discord_guilds');
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?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
{
Schema::create('discord_channels', function (Blueprint $table): void {
$table->id();
$table->foreignId('discord_guild_id')->constrained('discord_guilds')->cascadeOnDelete();
$table->string('discord_channel_id')->unique();
$table->foreignId('parent_id')->nullable()->constrained('discord_channels')->nullOnDelete();
$table->string('name');
$table->smallInteger('type');
$table->text('topic')->nullable();
$table->smallInteger('position')->default(0);
$table->boolean('nsfw')->default(false);
$table->integer('bitrate')->nullable();
$table->integer('user_limit')->nullable();
$table->timestamps();

$table->index('discord_guild_id');
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('discord_channels');
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?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
{
Schema::create('discord_roles', function (Blueprint $table): void {
$table->id();
$table->foreignId('discord_guild_id')->constrained('discord_guilds')->cascadeOnDelete();
$table->string('discord_role_id')->unique();
$table->string('name');
$table->integer('color')->default(0);
$table->smallInteger('position')->default(0);
$table->bigInteger('permissions')->default(0);
$table->boolean('is_hoisted')->default(false);
$table->boolean('is_mentionable')->default(false);
$table->boolean('is_managed')->default(false);
$table->string('icon')->nullable();
$table->timestamps();

$table->index('discord_guild_id');
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('discord_roles');
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?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
{
Schema::create('discord_members', function (Blueprint $table): void {
$table->id();
$table->foreignId('discord_guild_id')->constrained('discord_guilds')->cascadeOnDelete();
$table->string('discord_user_id');
$table->foreignUuid('external_identity_id')->nullable()->constrained('external_identities')->nullOnDelete();
$table->string('username');
$table->string('global_name')->nullable();
$table->string('avatar')->nullable();
$table->string('nickname')->nullable();
$table->boolean('is_bot')->default(false);
$table->boolean('is_pending')->default(false);
$table->timestamp('joined_at')->nullable();
$table->timestamp('premium_since')->nullable();
$table->timestamp('communication_disabled_until')->nullable();
$table->timestamp('left_at')->nullable();
$table->timestamps();

$table->unique(['discord_guild_id', 'discord_user_id']);
$table->index('discord_user_id');
$table->index('external_identity_id');
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('discord_members');
}
};
Original file line number Diff line number Diff line change
@@ -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
{
Schema::create('discord_member_roles', function (Blueprint $table): void {
$table->foreignId('discord_member_id')->constrained('discord_members')->cascadeOnDelete();
$table->foreignId('discord_role_id')->constrained('discord_roles')->cascadeOnDelete();
$table->timestamp('assigned_at')->nullable();
$table->timestamps();

$table->primary(['discord_member_id', 'discord_role_id']);
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('discord_member_roles');
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?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
{
public function up(): void
{
Schema::create('discord_member_role_history', function (Blueprint $table): void {
$table->id();
$table->foreignId('discord_member_id')->constrained('discord_members')->cascadeOnDelete();
$table->foreignId('discord_role_id')->constrained('discord_roles')->cascadeOnDelete();
$table->string('action');
$table->timestamp('occurred_at');
$table->foreignId('source_event_log_id')->nullable()->constrained('discord_event_logs')->nullOnDelete();
$table->timestamps();

$table->index('discord_member_id');
$table->index('discord_role_id');
$table->index('occurred_at');
});
}

public function down(): void
{
Schema::dropIfExists('discord_member_role_history');
}
};
Loading