Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
fc15e7f
wip
RichardGL11 Nov 10, 2025
9192961
style: pint
RichardGL11 Nov 10, 2025
2a994d0
fix: fixing bug on Dashboard
RichardGL11 Nov 11, 2025
4410f55
wip: list events page
RichardGL11 Nov 12, 2025
646d0df
feat(seeder): add user information and address factories to DatabaseS…
Clintonrocha98 Nov 12, 2025
24bf2f0
feat(dashboard): enhance user profile display and character stats cal…
Clintonrocha98 Nov 12, 2025
f6aa06c
style: pint and rector
Clintonrocha98 Nov 12, 2025
fbd5fa3
feat: list events page
RichardGL11 Nov 12, 2025
28db8ce
feat(app-panel): talk resource
RichardGL11 Nov 12, 2025
f1a30ea
test(app-panel): making sure that user can see only in the tenant
RichardGL11 Nov 12, 2025
ff9e22f
wip: view event page
RichardGL11 Nov 12, 2025
879625d
Merge branch '3.x' into feat/base-app-dashboard
RichardGL11 Nov 13, 2025
d54441d
refact: enhance event status verification
RichardGL11 Nov 13, 2025
b4a114f
wip
RichardGL11 Nov 13, 2025
32c1649
wip: event card
danielhe4rt Nov 13, 2025
5b108fb
fix(list-events): fixing queries
RichardGL11 Nov 13, 2025
8e778a4
style: pint
RichardGL11 Nov 14, 2025
2f2ea17
wip
danielhe4rt Nov 14, 2025
c1599d5
wip
danielhe4rt Nov 14, 2025
1b4267f
chore: adding icons for resources and fixing tenant table
RichardGL11 Nov 14, 2025
1153abc
wip: update rector
danielhe4rt Nov 14, 2025
f09ddf8
wip
danielhe4rt Nov 14, 2025
73c4074
revert: remove unused cache and re-add --debug to pipeline
gvieira18 Nov 14, 2025
5384bbf
fix: update final class and method settings in configuration
gvieira18 Nov 14, 2025
9a6364d
fix: rector for Dashboard and UserProfile classes
gvieira18 Nov 14, 2025
bf02e3a
ci: use rector on parallel mode
gvieira18 Nov 14, 2025
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
2 changes: 1 addition & 1 deletion .github/workflows/_rector.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,4 @@ jobs:

- name: Run Rector
run: |
vendor/bin/rector --debug --dry-run --output-format=github
vendor/bin/rector --dry-run --output-format=github
5 changes: 5 additions & 0 deletions app-modules/character/src/Entities/LevelEntity.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@ public function getPercentageExperience(): float
return floor($difference / (100 * 89) * 100);
}

public function experiencePercentageRemaining(): float
{
return ($this->experience * ($this->getPercentageExperience())) / 100;
}

private function addExperience(int $experience): void
{
$this->experience += $experience;
Expand Down
15 changes: 15 additions & 0 deletions app-modules/character/src/Models/Character.php
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,19 @@ protected function getLevelAttribute(): int
{
return (new LevelEntity($this->experience))->getLevel();
}

protected function getExperienceProgressAttribute(): int
{
return (new LevelEntity($this->experience))->getLevelUpStatus();
}

protected function getPercentageExperienceAttribute(): float
{
return (new LevelEntity($this->experience))->getPercentageExperience();
}

protected function getExperiencePercentageRemainingAttribute(): float
{
return (new LevelEntity($this->experience))->experiencePercentageRemaining();
}
}
30 changes: 27 additions & 3 deletions app-modules/events/database/factories/EventFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@

namespace He4rt\Events\Database\Factories;

use Exception;
use He4rt\Events\Enums\AttendingStatusEnum;
use He4rt\Events\Enums\EventTypeEnum;
use He4rt\Events\Models\EventModel;
use He4rt\Tenant\Models\Tenant;
use He4rt\User\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Date;

Expand All @@ -24,17 +27,38 @@ public function definition(): array
'event_type' => fake()->randomElement(EventTypeEnum::cases()),
'slug' => fake()->slug(),
'active' => true,
'title' => fake()->word(),
'title' => fake()->sentence(4),
'description' => fake()->text(),
'event_at' => Date::now(),
'start_at' => Date::now(),
'end_at' => Date::now(),
'location' => fake()->word(),
'max_attendees' => fake()->randomNumber(),
'location' => fake()->sentence(3),
'max_attendees' => fake()->numberBetween(10, 100),
'attendees_count' => 0,
'waitlist_count' => 0,
'created_at' => Date::now(),
'updated_at' => Date::now(),
];
}

public function withStatus(AttendingStatusEnum $status = AttendingStatusEnum::Attending): self
{
return $this->afterCreating(function (EventModel $model) use ($status): void {
$attendees = User::factory()->count(fake()->numberBetween(3, 10))->create();
$column = match ($status) {
AttendingStatusEnum::Attending => 'attendees_count',
AttendingStatusEnum::Waitlist => 'waitlist_count',
AttendingStatusEnum::NotAttending => throw new Exception('Event is not attending anymore'),
};
$model->update([
$column => $attendees->count(),
]);

foreach ($attendees as $user) {
$model->attendees()->attach($user->getKey(), [
'status' => $status,
]);
}
});
}
}
3 changes: 2 additions & 1 deletion app-modules/events/database/factories/TalkFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace He4rt\Events\Database\Factories;

use He4rt\Events\Enums\Talks\TalkStatusEnum;
use He4rt\Events\Models\EventModel;
use He4rt\Events\Models\Talk;
use He4rt\Tenant\Models\Tenant;
Expand All @@ -24,7 +25,7 @@ public function definition(): array
'tenant_id' => Tenant::factory(),
'event_id' => EventModel::factory(),
'user_id' => User::factory(),
'status' => fake()->word(),
'status' => fake()->randomElement(TalkStatusEnum::cases()),
'field_type' => fake()->word(),
'title' => fake()->word(),
'description' => fake()->text(),
Expand Down
96 changes: 96 additions & 0 deletions app-modules/events/resources/views/app/list-events.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
<x-filament-panels::page>
@php
$events = $this->getTableRecords();
@endphp

<div class="grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3">
@foreach ($events as $event)
<x-filament::section
:wire:key="$event->getKey()"
:has-content-el="false"
:icon="$event->event_type->getIcon()"
>
<x-slot name="heading">
<div class="flex justify-between">
<span>{{ $event->event_type->getLabel() }}</span>
<div class="flex space-x-2">
<x-filament::badge>
{{ $event->end_at < now() ? 'Past' : 'Upcoming' }}
</x-filament::badge>

<x-filament::icon-button
icon="heroicon-m-eye"
href="{{\He4rt\Events\Filament\App\EventModels\EventModelResource::getUrl('show', ['record' => $event->getKey()])}}"
tag="a"
label="Filament"
/>
</div>
</div>
</x-slot>
<div class="fi-section-content flex h-full flex-col justify-between">
<div>
<h3 class="mb-2 text-base leading-tight font-semibold tracking-tight">
{{ $event->title }}
</h3>
<p class="text-muted-foreground text-xs leading-relaxed">{{ $event->description }}</p>
</div>

<div>
<div class="text-muted-foreground mt-2 space-y-2 text-xs">
{{-- Date --}}
<div class="m flex items-center gap-2">
<x-filament::icon icon="heroicon-o-calendar" />
<span>
{{ \Carbon\Carbon::parse($event->event_at)->format('d/m/Y') }}
</span>
</div>

<div class="m-t flex items-center gap-2">
<x-filament::icon icon="heroicon-o-clock" />
<span>
{{ \Carbon\Carbon::parse($event->start_at)->format('H:i:s') }} -
{{ \Carbon\Carbon::parse($event->end_at)->format('H:i:s') }}
</span>
</div>

<div class="flex items-center gap-2">
<x-filament::icon icon="heroicon-o-map-pin" />
<span>{{ $event->location }}</span>
</div>

<div class="flex items-center gap-2">
<x-filament::icon icon="heroicon-o-users" />
<span>{{ $event->attendees_count }} / {{ $event->max_attendees }} participants</span>
</div>
</div>
<div class="actions">
@if ($event->isAttending() &&! $event->isPast() &&! $event->isParticipating(auth()->user()->getKey()))
<x-filament::button
wire:click="attend({{$event->getKey()}})"
class="focus-visible:ring-ring bg-primary text-shadow-black-500 hover:bg-primary/90 mt-2 inline-flex h-9 w-full items-center justify-center rounded-md px-3 py-2 text-sm font-medium transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50"
>
Join
</x-filament::button>
@elseif ($event->onWaitlist() &&! $event->isPast() &&! $event->isParticipating(auth()->user()->getKey()))
<x-filament::button
wire:click="attend({{$event->getKey()}})"
class="focus-visible:ring-ring bg-primary hover:bg-primary/90 mt-2 inline-flex h-9 w-full items-center justify-center rounded-md px-3 py-2 text-sm font-medium transition-colors text-shadow-black focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50"
>
Join Waitlist
</x-filament::button>
@elseif ($event->isParticipating(auth()->user()->getKey()) === true && ! $event->isPast())
<x-filament::button
wire:click="leave({{$event->getKey()}})"
class="focus-visible:ring-ring bg-primary hover:bg-primary/90 mt-2 inline-flex h-9 w-full items-center justify-center rounded-md px-3 py-2 text-sm font-medium transition-colors text-shadow-black focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50"
>
Leave
</x-filament::button>
@endif
</div>
</div>
</div>
</x-filament::section>
@endforeach
</div>
<x-filament::pagination :paginator="$events" />
</x-filament-panels::page>
3 changes: 3 additions & 0 deletions app-modules/events/resources/views/app/view-event.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<x-filament-panels::page>
{{ $this->eventInfoList }}
</x-filament-panels::page>
19 changes: 19 additions & 0 deletions app-modules/events/src/Actions/AttendEventAction.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

declare(strict_types=1);

namespace He4rt\Events\Actions;

use He4rt\Events\Models\EventModel;

final class AttendEventAction
{
/**
* @throws Exception
*/
public function execute(EventModel $eventModel): void
{
$attendingStatus = $eventModel->attendees()->first()->pivot->status;
$eventModel->attend(auth()->user()->id, $attendingStatus);
}
}
15 changes: 15 additions & 0 deletions app-modules/events/src/Actions/LeaveEventAction.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

declare(strict_types=1);

namespace He4rt\Events\Actions;

use He4rt\Events\Models\EventModel;

final class LeaveEventAction
{
public function execute(EventModel $eventModel): void
{
$eventModel->leave(auth()->user()->getKey());
}
}
4 changes: 2 additions & 2 deletions app-modules/events/src/AdminEventPanelPlugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
use App\Enums\FilamentPanel;
use Filament\Contracts\Plugin;
use Filament\Panel;
use He4rt\Events\Filament\Resources\Events\EventResource;
use He4rt\Events\Filament\Resources\Talks\TalkResource;
use He4rt\Events\Filament\Admin\Resources\Events\EventResource;
use He4rt\Events\Filament\Admin\Resources\Talks\TalkResource;

class AdminEventPanelPlugin implements Plugin
{
Expand Down
29 changes: 29 additions & 0 deletions app-modules/events/src/AppEventPanelPlugin.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace He4rt\Events;

use App\Enums\FilamentPanel;
use Filament\Contracts\Plugin;
use Filament\Panel;
use He4rt\Events\Filament\App\EventModels\EventModelResource;
use He4rt\Events\Filament\App\Talks\TalkResource;

class AppEventPanelPlugin implements Plugin
{
public function getId(): string
{
return FilamentPanel::User->moduleName('event');
}

public function register(Panel $panel): void
{
$panel->resources([
EventModelResource::class,
TalkResource::class,
]);
}

public function boot(Panel $panel): void {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@

declare(strict_types=1);

namespace He4rt\Events\Filament\Resources\Events;
namespace He4rt\Events\Filament\Admin\Resources\Events;

use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Table;
use He4rt\Events\Filament\Resources\Events\Pages\CreateEvent;
use He4rt\Events\Filament\Resources\Events\Pages\EditEvent;
use He4rt\Events\Filament\Resources\Events\Pages\ListEvents;
use He4rt\Events\Filament\Resources\Events\Schemas\EventForm;
use He4rt\Events\Filament\Resources\Events\Tables\EventsTable;
use He4rt\Events\Filament\Admin\Resources\Events\Pages\CreateEvent;
use He4rt\Events\Filament\Admin\Resources\Events\Pages\EditEvent;
use He4rt\Events\Filament\Admin\Resources\Events\Pages\ListEvents;
use He4rt\Events\Filament\Admin\Resources\Events\Schemas\EventForm;
use He4rt\Events\Filament\Admin\Resources\Events\Tables\EventsTable;
use He4rt\Events\Models\EventModel;
use UnitEnum;

Expand All @@ -25,6 +25,8 @@ class EventResource extends Resource

protected static string|BackedEnum|null $navigationIcon = Heroicon::Calendar;

protected static ?string $label = 'Events';

public static function form(Schema $schema): Schema
{
return EventForm::configure($schema);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

declare(strict_types=1);

namespace He4rt\Events\Filament\Resources\Events\Pages;
namespace He4rt\Events\Filament\Admin\Resources\Events\Pages;

use Filament\Resources\Pages\CreateRecord;
use He4rt\Events\Filament\Resources\Events\EventResource;
use He4rt\Events\Filament\Admin\Resources\Events\EventResource;

class CreateEvent extends CreateRecord
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

declare(strict_types=1);

namespace He4rt\Events\Filament\Resources\Events\Pages;
namespace He4rt\Events\Filament\Admin\Resources\Events\Pages;

use Filament\Actions\DeleteAction;
use Filament\Resources\Pages\EditRecord;
use He4rt\Events\Filament\Resources\Events\EventResource;
use He4rt\Events\Filament\Admin\Resources\Events\EventResource;

class EditEvent extends EditRecord
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

declare(strict_types=1);

namespace He4rt\Events\Filament\Resources\Events\Pages;
namespace He4rt\Events\Filament\Admin\Resources\Events\Pages;

use Filament\Actions\CreateAction;
use Filament\Resources\Pages\ListRecords;
use He4rt\Events\Filament\Resources\Events\EventResource;
use He4rt\Events\Filament\Admin\Resources\Events\EventResource;

class ListEvents extends ListRecords
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace He4rt\Events\Filament\Resources\Events\Schemas;
namespace He4rt\Events\Filament\Admin\Resources\Events\Schemas;

use Filament\Forms\Components\DateTimePicker;
use Filament\Forms\Components\RichEditor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace He4rt\Events\Filament\Resources\Events\Tables;
namespace He4rt\Events\Filament\Admin\Resources\Events\Tables;

use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

declare(strict_types=1);

namespace He4rt\Events\Filament\Admin\Resources\Talks\Pages;

use Filament\Resources\Pages\CreateRecord;
use He4rt\Events\Filament\Admin\Resources\Talks\TalkResource;

class CreateTalk extends CreateRecord
{
protected static string $resource = TalkResource::class;
}
Loading