Skip to content

Tab de Profile no Admin UserResource (Filament) #256

@danielhe4rt

Description

@danielhe4rt

Parent

Parte da PRD #250 — Módulo Profile Fase 1.

Contexto

O admin precisa visualizar e editar o perfil de qualquer membro pra fins de moderação (bio ofensiva, dados incorretos, etc.). Em vez de criar um ProfileResource separado no Admin panel, a decisão é adicionar uma tab "Profile" dentro do UserResource existente.

Isso faz sentido porque o admin pensa em termos de "estou olhando o User X" e quer ver tudo sobre ele num lugar só — dados de conta, perfil profissional, character/gamificação, etc.

Onde vive o código

Na camada do Admin panel (não dentro de app-modules/profile/). Seguir o padrão de onde o UserResource já está registrado.

Tenant context

O admin opera dentro de um tenant (Filament multi-tenancy). A tab mostra o Profile daquele User no tenant atual. Se o User tem profiles em múltiplos tenants, o admin vê o do contexto em que está.

O que construir

1. Tab "Profile" no UserResource

Adicionar uma tab (ou RelationManager) na página de edição do UserResource que exibe os campos do Profile.

2. Form schema da tab

Mesmos campos do form do User panel (#255), mas no contexto admin:

  • nickname, birthdate, headline, seniority_level, years_experience, about, social_links
  • available_for_proposals (toggle) + start_availability (condicional)

Considerar reutilizar o schema de form se possível (extrair pra um schema compartilhado que ambos os painéis usam). Se não for possível, duplicar é aceitável — são dois contextos diferentes.

3. Save handler

Ao salvar, chama as mesmas actions de domínio (UpsertProfile, ToggleAvailability). Exibe notificação de sucesso.

4. Caso do Profile inexistente

Se o User não tem Profile no tenant atual (edge case — ex: membro foi adicionado antes do Profile module existir), a tab deve mostrar estado vazio ou criar o Profile on-the-fly.

Cenários BDD

Funcionalidade: Admin edita perfil de membro

  Cenário: Admin vê tab Profile no UserResource
    Dado que estou logado como admin no painel Admin
    E estou no tenant "He4rt Developers"
    Quando acesso o UserResource do membro "danielhe4rt"
    Então vejo uma tab "Profile"

  Cenário: Tab Profile carrega dados do membro
    Dado que "danielhe4rt" tem Profile com headline "Backend Dev" no tenant atual
    Quando acesso a tab Profile do UserResource
    Então o campo headline exibe "Backend Dev"

  Cenário: Admin edita bio de um membro
    Dado que estou logado como admin
    Quando altero a bio de "danielhe4rt" para "Bio moderada pelo admin"
    E salvo
    Então a bio é atualizada no banco
    E uma notificação de sucesso aparece

  Cenário: Admin vê toggle de disponibilidade
    Dado que "danielhe4rt" tem available_for_proposals true
    Quando acesso a tab Profile
    Então o toggle está ativo
    E o campo start_availability está visível

  Cenário: Validação funciona no contexto admin
    Dado que estou logado como admin
    Quando preencho bio com 501 caracteres
    E salvo
    Então o form exibe erro de validação

Acceptance Criteria

  • Tab "Profile" existe no UserResource do Admin panel
  • Tab carrega dados do Profile do membro no tenant atual
  • Admin pode editar todos os campos do profile
  • Toggle de disponibilidade com comportamento condicional funciona
  • Validação idêntica ao User panel (max lengths, enums, etc.)
  • Save chama actions de domínio e exibe notificação
  • Testes Livewire cobrem: tab existe, carregar dados, salvar, validação
  • Código vive na camada do Admin panel (não em app-modules/profile/)
  • vendor/bin/pint --dirty --format agent passa sem erros

Blocked by

Metadata

Metadata

Assignees

No one assigned

    Labels

    presentationFilament/UI layerprofileProfile moduleready-for-agentFully specified, ready for an AFK agent

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions