diff --git a/app/Http/Controllers/ApplicationController.php b/app/Http/Controllers/ApplicationController.php new file mode 100644 index 0000000..2e54a51 --- /dev/null +++ b/app/Http/Controllers/ApplicationController.php @@ -0,0 +1,15 @@ + $request->route('application'), + ]); + } +} diff --git a/app/Http/Controllers/OrganisationController.php b/app/Http/Controllers/OrganisationController.php new file mode 100644 index 0000000..ea5705c --- /dev/null +++ b/app/Http/Controllers/OrganisationController.php @@ -0,0 +1,10 @@ +random())->explode('-'); - return [ ...parent::share($request), 'name' => config('app.name'), - 'quote' => ['message' => trim($message), 'author' => trim($author)], + 'organisation' => $request->route('organisation') ? Organisation::with('applications')->findOrFail($request->route('organisation')) : null, + 'application' => $request->route('application') ? Application::findOrFail($request->route('application')) : null, 'auth' => [ - 'user' => $request->user(), + 'user' => $request->user()->load('organisations'), ], 'ziggy' => [ ...(new Ziggy)->toArray(), diff --git a/database/migrations/2025_03_27_114736_create_applications_table.php b/database/migrations/2025_03_27_114736_create_applications_table.php index 1fcf992..ea59836 100644 --- a/database/migrations/2025_03_27_114736_create_applications_table.php +++ b/database/migrations/2025_03_27_114736_create_applications_table.php @@ -9,7 +9,7 @@ return new class extends Migration { public function up(): void { - Schema::create('application', function (Blueprint $table) { + Schema::create('applications', function (Blueprint $table) { $table->id(); $table->foreignIdFor(Organisation::class); $table->string('name'); @@ -21,6 +21,6 @@ return new class extends Migration public function down(): void { - Schema::dropIfExists('application'); + Schema::dropIfExists('applications'); } }; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index c96042f..283438a 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -2,6 +2,9 @@ namespace Database\Seeders; +use App\Enums\OrganisationRole; +use App\Enums\RepositoryType; +use App\Models\Organisation; use App\Models\User; // use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; @@ -15,9 +18,30 @@ class DatabaseSeeder extends Seeder { // User::factory(10)->create(); - User::factory()->create([ + $user = User::factory()->create([ 'name' => 'Harry', 'email' => 'harry@hjb.dev', ]); + + $organisation = Organisation::create([ + 'name' => 'Stratbucket', + 'slug' => 'stratbucket', + 'owner_id' => 1, + ]); + + $organisation->members()->attach($user, ['role' => OrganisationRole::Admin]); + + $application = $organisation->applications()->create([ + 'name' => 'ClipBin', + 'repository_url' => 'git@github.com:hjbdev/clipbin.git', + 'repository_type' => RepositoryType::Git, + ]); + + $application->environments()->create([ + 'name' => 'Dev', + 'branch' => 'main', + 'url' => 'https://dev.clipbin.hjb.dev', + 'status' => 'active' + ]); } } diff --git a/resources/js/components/AppSidebarHeader.vue b/resources/js/components/AppSidebarHeader.vue index ade7c94..2e9891d 100644 --- a/resources/js/components/AppSidebarHeader.vue +++ b/resources/js/components/AppSidebarHeader.vue @@ -2,18 +2,66 @@ import Breadcrumbs from '@/components/Breadcrumbs.vue'; import { SidebarTrigger } from '@/components/ui/sidebar'; import type { BreadcrumbItemType } from '@/types'; +import { Link, usePage } from '@inertiajs/vue3'; +import { ChevronsUpDown } from 'lucide-vue-next'; +import { Button } from './ui/button'; +import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from './ui/dropdown-menu'; defineProps<{ breadcrumbs?: BreadcrumbItemType[]; }>(); + +const organisation = usePage().props.organisation ?? { name: 'Select Organisation' }; +const application = usePage().props.application ?? { name: 'Select Application' };