feat(events): module structure#249
Conversation
…ce requirements, and statuses
…rollmentPolicy, EnrollmentTransition, and Event models
…ollmentPolicy, EnrollmentTransition, Event, and QrToken models
…Edit, List, and Enrollments relation
…List, and Enrollments relation
…legacy events module
…ms, enhance event factory tests, and improve EventResource and EventForm configurations
AdryanneKelly
left a comment
There was a problem hiding this comment.
- alguns campos sofreram mudanças para nomes diferentes do que está descrito na doc, porém apesar disso, aparentemente mantém o tipo adequado para a finalidade do campo. Seria interessante seguir os mesmos nomes da documentação.
- #239
- Marquei alguns, mas existem mais em quase todas as migrations.
| $table->unsignedInteger('capacity')->nullable(); | ||
| $table->boolean('waitlist_enabled')->default(false); | ||
| $table->string('attendance_requirement', 20)->default('all_days'); | ||
| $table->unsignedSmallInteger('minimum_days')->nullable(); |
There was a problem hiding this comment.
número mínimo de dias que o participante deve comparecer para receber XP/certificado (usado quando attendance_requirement = 'minimum_days')
Me parece meio redundante, acha bom remover?
| $table->string('to_status', 20); | ||
| $table->foreignUuid('actor_id')->nullable()->constrained('users')->nullOnDelete(); | ||
| $table->string('reason', 500)->nullable(); | ||
| $table->jsonb('metadata')->nullable(); |
There was a problem hiding this comment.
contexto adicional para audit trail: notas do admin, job ID, código de razão, etc.
Basicamente pra ajudar a auditoria, mai foi coisa do claudinho q adiciono
Review — Foundation Events (#239)Bom trabalho na estrutura base, Gabriel! Vários pontos onde você melhorou em relação ao doc de referência (UUIDs, Filament v5 patterns, i18n, sub-namespaces DDD, Concordo com todos os comentários da Adryanne — vou expandir aqui com o contexto completo. Bloqueantes1. Models sem Nenhum dos 7 models define 2. State Machine — No // Atual
self::Pending => in_array($target, [self::Confirmed, self::Rejected, self::Cancelled], strict: true),
// Correto — adicionar Waitlisted
self::Pending => in_array($target, [self::Confirmed, self::Rejected, self::Cancelled, self::Waitlisted], strict: true),Impacto: Slice 03 (Waitlist/Capacity) quebra completamente. 3. State Machine —
// Atual
self::CheckedIn => $target === self::Attended,
// Correto
self::CheckedIn => in_array($target, [self::Attended, self::NoShow], strict: true),Impacto: Slice 09 (Event Closure Job) quebra. 4. Campo Esse campo ( 5. Campo Conforme a Adryanne já sinalizou — controla visibilidade da inscrição na lista pública de participantes. 6. O campo Além disso, o type hint deveria ser Select::make('enrollment_method')
->options(EnrollmentMethod::class)
->required()
->live(), // ← essencial
KeyValue::make('application_schema')
->visible(fn (Get $get): bool => $get('enrollment_method') === EnrollmentMethod::Application->value),Melhorias Importantes7. O doc define 8. O tenant já é acessível via 9. Na tabela 10. Models sem scopes e helpers O doc define scopes que facilitam as slices futuras. Sem eles, cada slice vai ter que reimplementar queries inline:
11. Models sem Best practice: espelhar os defaults do banco no model pra que // Event
protected $attributes = ['is_published' => false];
// EnrollmentPolicy
protected $attributes = [
'waitlist_enabled' => false,
'attendance_requirement' => 'all_days',
'xp_on_confirmed' => 0,
'xp_on_checked_in' => 0,
'xp_on_attended' => 0,
];O que ficou melhor que o docQuero destacar decisões do PR que superaram o doc de referência — bom julgamento aqui:
Naming divergente (precisamos alinhar)
Checklist
|
…-in date to event date, and add triggered_by enum
…le attributes, and update event form fields
…ted migrations, update CheckInFactory and tests accordingly
…as_waitlist in models, factories, and forms
…view comments - Add EventStatus enum (Draft → Published → Completed → Cancelled) with Filament HasLabel/HasIcon/HasColor, state machine transitions, and i18n - Update Event model, migration, and factory to use status instead of active - Add scopePublished() and redefine scopeActive() as published + upcoming - Rename check_in to event_date in check-ins migration, model, and factory - Replace single timestampTz(created_at) with timestampsTz() on check-ins
Resumo
Event+EventTypecom regras de enrollment e enums de status/attendanceEnrollment,EnrollmentPolicy,EnrollmentTransitioncom factories e testesCheckIn,CheckInCode,QrToken+CheckInMethodEventResourcecom pages de create/edit/list, relation manager de enrollments, melhorias em form/infolist/tableArchitecture
Events module
|-- Event domain (EventType + Event)
|-- Enrollment domain (EnrollmentMethod/Status/AttendanceRequirement + Enrollment/Policy/Transition)
`-- Check-in domain (CheckInMethod + CheckIn/CheckInCode/QrToken)
Admin panel
`-- Event management (EventResource + pages + relation manager + form/infolist/table)
Files (8 migrations, 7 models, 5 enums, 7 factories, 3 tests)
Test plan