Skip to content

Latest commit

 

History

History
157 lines (116 loc) · 19.6 KB

File metadata and controls

157 lines (116 loc) · 19.6 KB

Changelog

Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.

O formato é baseado em Keep a Changelog, e este projeto adere ao Semantic Versioning.

[Não Lançado]


[3.0.1] - 2026-02-26

  • Chore: Ajuste de timeout

[3.0.0] - 2026-02-25

Adicionado

  • Feat: Sistema de papéis por tenant (Dono, Admin, Usuário) com hierarquia de permissões. Políticas de autorização TenantUser, TenantAdmin, TenantOwner aplicadas nos controllers. Arquivos: Authorization/TenantRoleRequirement.cs, Authorization/TenantRoleHandler.cs, Program.cs.
  • Feat: Sistema de convites para tenants — criar convite (GUID, validade de 7 dias), aceitar (valida expiração e e-mail), cancelar (Owner cancela qualquer um, Admin só os seus). Arquivos: Services/InviteService.cs, Services/IInviteService.cs, Controllers/InviteController.cs, Views/Admin/Invites.cshtml, Views/Admin/CreateInvite.cshtml.
  • Feat: Workspace switcher — sessão + cache para alternar entre tenants ou "Todos os Grupos". Dropdown no cabeçalho com todos os tenants do usuário. Arquivos: Services/TenantService.cs, Controllers/WorkspaceController.cs, Views/Shared/_Layout.cshtml.
  • Feat: Painel de administração (membros, convites, histórico de alterações). Owner pode alterar papéis, desativar e expulsar membros. Arquivos: Controllers/AdminController.cs, Views/Admin/Members.cshtml, Views/Admin/AuditLog.cshtml.
  • Feat: Página de perfil do usuário com upload de foto, informações pessoais e lista de grupos. Arquivos: Controllers/ProfileController.cs, Views/Profile/Index.cshtml.
  • Feat: Tags com escopo Local (só o criador vê) e Tenant (todos do grupo veem). CRUD de tags e API JSON para busca via AJAX. Arquivos: Services/TagService.cs, Services/ITagService.cs, Controllers/TagController.cs, Views/Tag/Manage.cshtml.
  • Feat: Upload de arquivos estáticos (fotos de perfil e logos de grupo) em wwwroot/uploads/. Validação de extensão e tamanho. Arquivos: Services/FileUploadService.cs, Services/IFileUploadService.cs.
  • Feat: Múltiplos telefones, e-mails e endereços por contato com campos dinâmicos JS. Primeiro telefone marcado como principal e exibido na listagem/dashboard. Arquivos: Views/Contato/Create.cshtml, Views/Contato/Edit.cshtml, ViewModels/ContactViewModel.cs.
  • Feat: Contatos favoritos com toggle rápido na listagem. Arquivos: Services/ContatoService.cs, Controllers/ContatoController.cs, Views/Contato/List.cshtml.
  • Feat: Histórico de alterações (audit log) automático — registra criações, edições (com diff de campos) e exclusões de contatos. Arquivos: Services/ContatoService.cs, Models/ContactAuditLog.cs, Views/Admin/AuditLog.cshtml.
  • Feat: Filtros avançados por nome, e-mail, telefone, tags, favoritos e ativos na listagem de contatos. Ordenação por nome, data de criação e aniversário. Arquivos: ViewModels/ContactFilterViewModel.cs, Services/ContatoService.cs, Views/Contato/List.cshtml.
  • Feat: Compressão de resposta (Brotli + GZip) e cache em memória para tenant e tags. Arquivos: Program.cs, Services/TenantService.cs, Services/TagService.cs.
  • Feat: Nova migration inicial InitialCreate com todas as tabelas do sistema (Tenant, TenantMembership, TenantInvite, Contact, ContactPhone, ContactEmail, ContactAddress, Tag, ContactTag, ContactAuditLog). Arquivos: Migrations/*.
  • Feat: Campo "Rótulo (opcional)" nos telefones, e-mails e endereços — exibido na listagem e detalhes do contato. Arquivos: ViewModels/ContactViewModel.cs, ViewModels/ContactListItemViewModel.cs, Services/ContatoService.cs.
  • Feat: Propriedade AvailableTags no ContactViewModel para seleção de tags nos formulários de criação/edição. Arquivo: ViewModels/ContactViewModel.cs.
  • Feat: Migração automática de imagens base64 para wwwroot/uploads/ na inicialização. Serviço ImageMigrationService idempotente. Arquivos: Services/ImageMigrationService.cs, Program.cs.
  • Feat: Sidebar compacta (64px, expande para 220px ao hover) com ícones autodescritivos à esquerda. Topbar superior com workspace switcher, busca e toggle de tema. Profile dropdown fixo no rodapé da sidebar. Layout público sem sidebar. Arquivos: Views/Shared/_Layout.cshtml, wwwroot/css/site.css, wwwroot/js/site.js.
  • Feat: Componente _Pager.cshtml reutilizável com paginação server-side — botões Anterior/Próxima, input "Ir para página" e seletor de pageSize (10/20/30/50). Aplicado na listagem de contatos. Arquivos: Views/Shared/_Pager.cshtml, Views/Contato/List.cshtml.
  • Feat: Dashboard completo com 4 cards KPI (Total, Ativos, Favoritos, Grupos), gráfico de barras (Chart.js) de contatos por grupo, nuvem de tags clicável (redireciona para listagem filtrada) e aniversariantes com link para detalhes. Arquivos: Controllers/HomeController.cs, ViewModels/HomeDashboardViewModel.cs, Views/Home/Dashboard.cshtml.
  • Feat: Seleção de tags nos formulários de criação e edição — checkboxes com badges coloridas, tags pré-selecionadas no Edit. Arquivos: Controllers/ContatoController.cs, Views/Contato/Create.cshtml, Views/Contato/Edit.cshtml.
  • Feat: Indicador visual de escopo nas tags — badge "Local" (só o criador vê) ou "Grupo" (todos do tenant veem) no painel de gerenciamento de tags. Arquivos: ViewModels/ContactDetailsViewModel.cs, Services/TagService.cs, Views/Tag/Manage.cshtml.
  • Feat: Filtro por tags na listagem de contatos — dropdown com checkboxes no formulário de filtros, TagIds preservados na paginação. Arquivos: Views/Contato/List.cshtml, Controllers/ContatoController.cs, Views/Shared/_Pager.cshtml.
  • Kanban / Mini-CRM: Pipelines, Stages e Cards com board drag-and-drop. Criação de pipeline com estágios editáveis (cor + nome, padrão: A Fazer / Em Progresso / Concluído). Formulário "Novo Card" com título, descrição, prioridade (Baixa/Média/Alta), datas de início e fim, contato vinculado, tags e subtarefas inline. Arquivos: Models/Pipeline.cs, Models/Stage.cs, Models/Deal.cs, Models/DealTask.cs, Controllers/DealsController.cs, Views/Deals/Index.cshtml, Views/Deals/CreatePipeline.cshtml, Views/Deals/CreateDeal.cshtml.
  • Tempo real (SignalR): Hub /realtime com grupos por tenant. Eventos CardMoved, DealCreated, DealDeleted, ContactChanged — outros usuários do mesmo workspace veem mudanças no Kanban sem recarregar a página. Sem Redis (single-server). Arquivos: Hubs/RealtimeHub.cs, Program.cs, Views/Deals/Index.cshtml.
  • CRUD de subtarefas (AJAX): Endpoints ToggleTask, AddTask e DeleteTask no DealsController — manipulação de subtarefas em tempo real sem reload. Arquivos: Controllers/DealsController.cs, ViewModels/KanbanViewModels.cs.
  • Badges nos cards Kanban: Exibição de prioridade (cor por nível), data de fim e contagem de subtarefas diretamente nos cards do board. Arquivo: Views/Deals/Index.cshtml.
  • Template HTML de e-mail: Novo serviço EmailTemplates com layout corporativo responsivo (CSS inline, cabeçalho azul, botão CTA, rodapé). Templates para: confirmação de conta, redefinição de senha, alteração de e-mail e teste SMTP. Arquivo: Services/EmailTemplates.cs.
  • Confirmação de e-mail no registro: Novo usuário recebe e-mail de confirmação com token; login bloqueado até confirmar. RequireConfirmedEmail = true no Identity. Arquivos: Controllers/AccountController.cs, Program.cs.
  • Fluxos de segurança: Esquecer senha (ForgotPassword + ResetPassword), alterar senha e alterar e-mail — todos com e-mail de confirmação usando o novo template HTML. Arquivos: Controllers/AccountController.cs, Views/Account/.
  • Alterar senha e e-mail na página de Perfil: Removidos do dropdown do header e centralizados em Views/Profile/Index.cshtml.
  • Importação e exportação de contatos: CSV, Excel (XLSX) e vCard 3.0 com preview e detecção de duplicados. Arquivos: Services/ExportService.cs, Services/ImportService.cs, Controllers/ImportExportController.cs, Views/ImportExport/.
  • Cache do dashboard: DashboardCacheService com TTL curto e invalidação por tenant. Arquivos: Services/DashboardCacheService.cs, Controllers/HomeController.cs.
  • Endpoint de diagnóstico SMTP: GET /Dev/SendTestEmail?to=email (somente Development) para validar configuração Brevo. Arquivo: Controllers/DevController.cs.
  • Migration AtualizarDealRemoverValueAdicionarCampos: Remove campo Value do Deal; adiciona StartDate, EndDate e Priority. Arquivo: Migrations/20260225033944_AtualizarDealRemoverValueAdicionarCampos.cs.

Corrigido

  • Fix: "Todos os Grupos" não mais redireciona para AccessDenied — ContatoService retorna lista vazia quando não há tenants, GetUpcomingBirthdaysAsync idem. Arquivos: Services/ContatoService.cs, Controllers/ContatoController.cs.
  • Fix: Gráfico Chart.js no dashboard renderizava infinitamente — canvas envolto em container com altura fixa (260px) e Chart.getChart() destrói instância anterior antes de recriar. Arquivo: Views/Home/Dashboard.cshtml.
  • Fix: Sidebar exibia email ao invés do nome completo — agora usa FullName do banco com query única (ProfilePictureUrl + FullName). Nomes longos truncados com ellipsis (max-width:140px). Arquivos: Views/Shared/_Layout.cshtml, wwwroot/css/site.css.
  • Fix: Pager (controles de paginação) agora sempre visível quando existem resultados, não apenas quando há mais de 1 página. Arquivos: Views/Shared/_Pager.cshtml, Views/Contato/List.cshtml.
  • Fix: Audit log registra alterações completas — detecta diffs em todos os campos (Nome, Anotações, Ativo, Favorito, Data de Nascimento, Telefones, E-mails, Endereços, Tags). Modal de detalhes com tabela Campo/Anterior/Novo. Arquivos: Services/ContatoService.cs, Views/Admin/AuditLog.cshtml.
  • Fix: TenantRoleHandler com logging para debug de falhas de autorização. Página AccessDenied melhorada com dica sobre workspace. Arquivos: Authorization/TenantRoleHandler.cs, Views/Account/AccessDenied.cshtml.

Alterado

  • Refactor: Sanitização de comentários em todo o código-fonte — removidos comentários redundantes, TODOs obsoletos e comentários em inglês; padronizado em português conciso. Arquivos: Services/*, Controllers/*, Models/*, ViewModels/*, Data/*, Program.cs.
  • Refactor: TenantService reescrito para usar sessão + IMemoryCache em vez de claims diretas. Arquivos: Services/TenantService.cs, Services/ITenantService.cs.
  • Refactor: ContatoService reescrito com suporte multi-tenant agregado ("Todos os Grupos") e projeções diretas. Arquivo: Services/ContatoService.cs.
  • Refactor: ApplicationDbContext reescrito com 10 DbSet<>, relacionamentos explícitos e índices compostos para performance. Arquivo: Data/ApplicationDbContext.cs.
  • Refactor: DbInitializer atualizado para criar roles Identity (Owner, Admin, User) na inicialização. Arquivo: Data/DbInitializer.cs.
  • Refactor: Views de Contato (Create, Edit, Details, Delete, List) reescritas para suportar múltiplos campos, tags e badges de tenant. Arquivos: Views/Contato/*.

[2.2.0] - 2026-02-24

Adicionado

  • Feat: Toasts de notificação para feedback de usuário (criação, edição e exclusão de contatos). A lógica usa TempData["Message"] nas actions do controller e Bootstrap Toasts na view de listagem. Arquivos: Views/Contato/List.cshtml, Controllers/ContatoController.cs, Views/Shared/_Layout.cshtml.
  • Feat: Confirmação de exclusão com página dedicada. Ao clicar em deletar na lista o usuário é redirecionado para uma página de confirmação (GET /Contato/Delete/{id}) que mostra detalhes do contato antes de confirmar. Arquivos: Views/Contato/Delete.cshtml, Views/Contato/List.cshtml, Controllers/ContatoController.cs.
  • Feat: Máscara de telefone centralizada e API reutilizável em site.js (window.PhoneMask). Agora inputs apenas precisam da classe phone-mask para receber o comportamento de máscara/format. Arquivos: wwwroot/js/site.js, Views/Contato/Create.cshtml, Views/Contato/Edit.cshtml, Views/Account/Register.cshtml.
  • Feat: ViewModel específico para exibição de detalhes (ContactDetailsViewModel) e mapeamento AutoMapper para evitar expor entidades de domínio diretamente nas views. Arquivos: ViewModels/ContactDetailsViewModel.cs, Mappings/ContactMappingProfile.cs, Controllers/ContatoController.cs, Views/Contato/Details.cshtml.

Alterado (UI / UX)

  • Polish: Redesign visual das páginas de Contato (Criar / Editar / Excluir / Detalhes) para um layout consistente com card, breadcrumb, ícones e botões alinhados. Arquivos: Views/Contato/Create.cshtml, Views/Contato/Edit.cshtml, Views/Contato/Delete.cshtml, Views/Contato/Details.cshtml.
  • Refactor: Removidos scripts de máscara inline das views e substituídos pela função central PhoneMask.attach no site.js. Isso reduz duplicação e centraliza comportamento. Arquivos: wwwroot/js/site.js, Views/Contato/Create.cshtml, Views/Contato/Edit.cshtml, Views/Account/Register.cshtml.
  • Fix: Script de inicialização dos Toasts movido para a section @section Scripts das views para garantir que o bootstrap.bundle.min.js já tenha sido carregado antes de executar a lógica JS. Arquivo: Views/Contato/List.cshtml.

[2.2.0] - 2026-02-24

Adicionado

  • Feat: Toasts de notificação para feedback de usuário (criação, edição e exclusão de contatos). A lógica usa TempData["Message"] nas actions do controller e Bootstrap Toasts na view de listagem. Arquivos: Views/Contato/List.cshtml, Controllers/ContatoController.cs, Views/Shared/_Layout.cshtml.
  • Feat: Confirmação de exclusão com página dedicada. Ao clicar em deletar na lista o usuário é redirecionado para uma página de confirmação (GET /Contato/Delete/{id}) que mostra detalhes do contato antes de confirmar. Arquivos: Views/Contato/Delete.cshtml, Views/Contato/List.cshtml, Controllers/ContatoController.cs.
  • Feat: Máscara de telefone centralizada e API reutilizável em site.js (window.PhoneMask). Agora inputs apenas precisam da classe phone-mask para receber o comportamento de máscara/format. Arquivos: wwwroot/js/site.js, Views/Contato/Create.cshtml, Views/Contato/Edit.cshtml, Views/Account/Register.cshtml.
  • Feat: ViewModel específico para exibição de detalhes (ContactDetailsViewModel) e mapeamento AutoMapper para evitar expor entidades de domínio diretamente nas views. Arquivos: ViewModels/ContactDetailsViewModel.cs, Mappings/ContactMappingProfile.cs, Controllers/ContatoController.cs, Views/Contato/Details.cshtml.

Alterado (UI / UX)

  • Polish: Redesign visual das páginas de Contato (Criar / Editar / Excluir / Detalhes) para um layout consistente com card, breadcrumb, ícones e botões alinhados. Arquivos: Views/Contato/Create.cshtml, Views/Contato/Edit.cshtml, Views/Contato/Delete.cshtml, Views/Contato/Details.cshtml.
  • Refactor: Removidos scripts de máscara inline das views e substituídos pela função central PhoneMask.attach no site.js. Isso reduz duplicação e centraliza comportamento. Arquivos: wwwroot/js/site.js, Views/Contato/Create.cshtml, Views/Contato/Edit.cshtml, Views/Account/Register.cshtml.
  • Fix: Script de inicialização dos Toasts movido para a section @section Scripts das views para garantir que o bootstrap.bundle.min.js já tenha sido carregado antes de executar a lógica JS. Arquivo: Views/Contato/List.cshtml.

[2.1.0] - 2026-02-22

  • Fix: Correção de uma falha critica na hora de acessar a páginina inicial quando o usuário não está autenticado
  • Fix: Adicionado tratamento para usuários não autenticados no HomeController para evitar falhas ao acessar a página inicial sem login. Arquivo: Controllers/HomeController.cs
  • Feat: Adição de uma página inicial para usuários não autenticados, com mensagem de boas-vindas e link para login/registro. Arquivo: Views/Home/Index.cshtml

[2.0.0] - 2026-02-21

Adicionado

  • Feat: Cadastro de Tenant durante registro de usuário, associando usuário ao tenant (claim TenantId). Arquivo: Controllers/AccountController.cs
  • Fix: Corrigido fluxo de registro para criar o Tenant durante o registro de um novo usuário e associar o usuário ao tenant (adiciona claim TenantId ao usuário). Arquivo: Controllers/AccountController.cs
  • Fix: Adicionado filtro global em Contato para garantir que apenas contatos do tenant atual sejam acessos, reforçando a segurança e isolamento entre tenants. Arquivo: Data/ApplicationDbContext.cs
  • Fix: Removida cache privado _currentTenantId e método SetCurrentTenantId do TenantService; GetCurrentTenantId() agora lê diretamente a claim do usuário. Arquivo: Services/TenantService.cs
  • API: Adicionado SaveChangesAsync() em ITenantService e implementado em TenantService para persistência explícita após criação de tenant. Arquivos: Services/ITenantService.cs, Services/TenantService.cs
  • Fix/Security: Ajustes em ContatoService para garantir filtragem por tenant nas operações críticas (GetAll, GetById, GetByName, GetByEmail, Add, Update, Delete) e evitar vazamento de dados entre tenants. Arquivo: Services/ContatoService.cs
  • Fix: Removida action vazia RegisterTenant do AccountController e simplificado fluxo de registro. Arquivo: Controllers/AccountController.cs
  • Polish: Mensagens de log no AccountController traduzidas para português para consistência com o projeto. Arquivo: Controllers/AccountController.cs
  • Note: Global query filters não protegem consultas raw SQL (FromSqlRaw) nem chamadas que explicitamente usem .IgnoreQueryFilters() - attention em scripts administrativos e jobs em background.
  • Feat: Painel (Dashboard) — adicionada seção de "Próximos Aniversariantes" no Home/Index com visual consistente em Bootstrap (cards + list-group) e badges para dias restantes; arquivo: Views/Home/Index.cshtml
  • Feat: Novo ViewModel BirthdayItemViewModel para representar aniversariantes (Id, Name, Phone, BirthDate, DaysUntil, AgeTurning) e atualização de HomeDashboardViewModel para expor ClosestBirthday tipado; arquivos: ViewModels/BirthdayItemViewModel.cs, ViewModels/HomeDashboardViewModel.cs
  • Feat: Serviço GetUpcomingBirthdaysAsync em ContatoService e assinatura em IContatoService — centraliza a lógica de cálculo do próximo aniversário (considerando mês/dia e tratamento de 29/fev) e retorna itens projetados prontos para a view; arquivo: Services/ContatoService.cs, Services/IContatoService.cs
  • Refactor: HomeController.Index simplificado para delegar ao serviço a obtenção dos aniversariantes próximos; arquivo: Controllers/HomeController.cs
  • Fix/UX: Substituição da tabela de aniversariantes por uma lista formatada (melhor compatibilidade com temas/Bootstrap e dark mode) e correta formatação de datas/porcentagens; arquivo: Views/Home/Index.cshtml
  • Build: Limpeza de artifacts e ajustes locais para evitar erros MSBuild relacionados a arquivos ausentes no bin/; comando usado: dotnet clean + dotnet build.

Configurado

  • Entity Framework Core com SQL Server
  • Microsoft.AspNetCore.Identity.EntityFrameworkCore
  • Connection string para LocalDB
  • HttpContextAccessor para serviços de tenant
  • Logging aprimorado para EF Core(Auth)

[1.0.0] - 2026-02-17

Adicionado

  • Configuração inicial do projeto ASP.NET Core MVC
  • Estrutura básica de Controllers, Models e Views
  • Configuração de Bootstrap e jQuery
  • Configuração de rotas padrão
  • Configuração de ambiente de desenvolvimento e produção
  • Autenticação básica com Identity
  • Configuração de banco de dados com Entity Framework Core
  • Criação de contatos e exibição de lista de contatos
  • Página inicial com boas-vindas e navegação básica