Fase 11: Edição, Gestão e Estatísticas Completas

Duração: 3.6 semanas (18 dias úteis) - Ajustado para TDD/BDD (+20%)
Prioridade: 🟡 IMPORTANTE (Completa funcionalidades essenciais)
Depende de: Fase 8 (Infraestrutura Mídia), Fase 10 (Mídias em Conteúdo)
Estimativa Total: 144 horas (120h + 24h TDD/BDD)
Status: ⏳ Pendente


🎯 Objetivo

Completar funcionalidades essenciais de edição e gestão que permitem:

  • Editar posts e eventos (correção de erros, atualização de informações)
  • Sistema de avaliações no marketplace (lojas e itens)
  • Busca no marketplace (full-text search)
  • Histórico de atividades do usuário
  • Lista de participantes de eventos

Princípios:

  • Correção e Atualização: Usuários podem corrigir erros
  • Transparência: Avaliações e histórico são públicos
  • Busca Eficiente: Busca rápida e relevante
  • Contexto Territorial: Tudo mantém contexto territorial

📋 Contexto e Requisitos

Estado Atual

  • ✅ Sistema de posts, eventos, marketplace implementado
  • ✅ Sistema de mídia (Fase 8)
  • ✅ Mídias em conteúdo (Fase 10)
  • ❌ Não é possível editar posts
  • ❌ Não é possível editar eventos
  • ❌ Não existe sistema de avaliações no marketplace
  • ❌ Não existe busca no marketplace
  • ❌ Não existe histórico de atividades

Requisitos Funcionais

1. Edição de Posts

  • ✅ Editar título e conteúdo
  • ✅ Adicionar/remover mídias
  • ✅ Editar localização (GeoAnchor)
  • ✅ Histórico de edições (opcional)
  • ✅ Indicação de post editado

2. Edição de Eventos

  • ✅ Editar todos os campos (título, descrição, data, localização)
  • ✅ Editar capa do evento
  • ✅ Cancelar evento
  • ✅ Lista de participantes confirmados
  • ✅ Histórico de edições (opcional)

3. Sistema de Avaliações no Marketplace

  • ✅ Avaliar loja (rating 1-5, comentário)
  • ✅ Avaliar item (rating 1-5, comentário)
  • ✅ Visualizar avaliações
  • ✅ Responder avaliações (vendedor)
  • ✅ Filtros por rating

4. Busca no Marketplace

  • ✅ Busca full-text em lojas
  • ✅ Busca full-text em itens
  • ✅ Filtros (categoria, preço, localização)
  • ✅ Ordenação (relevância, preço, data)
  • ✅ Paginação

5. Histórico de Atividades

  • ✅ Histórico de posts criados
  • ✅ Histórico de eventos criados
  • ✅ Histórico de compras/vendas
  • ✅ Histórico de participações
  • ✅ Filtros e paginação

📋 Tarefas Detalhadas

Semana 12: Edição de Posts e Eventos

11.1 Edição de Posts

Estimativa: 24 horas (3 dias)
Status: ✅ Implementado

Tarefas:

  • Estender Post domain model:
    • EditedAtUtc? (nullable) — ✅ Implementado em CommunityPost
    • EditCount (int, contador de edições) — ✅ Implementado em CommunityPost
  • Criar PostEditService:
    • EditPostAsync(Guid postId, Guid userId, ...) → editar post — ✅ Implementado
    • GetPostEditHistoryAsync(Guid postId) → histórico de edições (opcional) — ⏳ Opcional, não implementado
  • Validações:
    • Apenas autor pode editar — ✅ Implementado
    • Limite de tempo para edição? (opcional, configurável) — ⏳ Opcional, não implementado
  • Criar FeedController endpoint:
    • PATCH /api/v1/feed/{id} → editar post — ✅ Implementado
  • Feature flags: PostEditingEnabled — ⏳ Opcional, não implementado
  • Testes — ✅ PostEditServiceTests.cs existe

Arquivos Criados:

  • backend/Arah.Application/Services/PostEditService.cs
  • backend/Arah.Api/Contracts/Feed/EditPostRequest.cs
  • backend/Arah.Tests/Application/PostEditServiceTests.cs

Arquivos Modificados:

  • backend/Arah.Domain/Feed/CommunityPost.cs (campos EditedAtUtc, EditCount adicionados)
  • backend/Arah.Api/Controllers/FeedController.cs (endpoint PATCH /api/v1/feed/{id})

Critérios de Sucesso:

  • ✅ Edição de posts funcionando
  • ✅ Validações funcionando
  • ✅ Testes passando

11.2 Edição de Eventos

Estimativa: 24 horas (3 dias)
Status: ✅ Implementado

Tarefas:

  • Estender TerritoryEvent domain model:
    • Método Update(...) — ✅ Implementado
    • Método Cancel(...) — ✅ Implementado
  • Criar métodos em EventsService:
    • UpdateEventAsync(Guid eventId, Guid userId, ...) → editar evento — ✅ Implementado
    • CancelEventAsync(Guid eventId, Guid userId, string reason) → cancelar evento — ✅ Implementado
    • GetEventParticipantsAsync(Guid eventId, ...) → lista de participantes — ✅ Implementado
  • Validações:
    • Apenas organizador pode editar — ✅ Implementado
    • Não pode editar evento já realizado — ✅ Implementado
  • Criar EventsController endpoints:
    • PATCH /api/v1/events/{id} → editar evento — ✅ Implementado
    • GET /api/v1/events/{id}/participants → lista de participantes — ✅ Implementado
  • Feature flags: EventEditingEnabled — ⏳ Opcional, não implementado
  • Testes — ✅ Testes em ApplicationServiceTests.cs cobrem UpdateEventAsync, CancelEventAsync, GetEventParticipantsAsync

Arquivos Criados:

  • backend/Arah.Api/Contracts/Events/EditEventRequest.cs
  • backend/Arah.Api/Contracts/Events/EventParticipantResponse.cs

Arquivos Modificados:

  • backend/Arah.Domain/Events/TerritoryEvent.cs (métodos Update e Cancel implementados)
  • backend/Arah.Application/Services/EventsService.cs (UpdateEventAsync, CancelEventAsync, GetEventParticipantsAsync)
  • backend/Arah.Api/Controllers/EventsController.cs (endpoints implementados)

Critérios de Sucesso:

  • ✅ Edição de eventos funcionando
  • ✅ Cancelamento funcionando
  • ✅ Lista de participantes funcionando
  • ✅ Testes passando

Semana 13: Avaliações e Busca no Marketplace

11.3 Sistema de Avaliações no Marketplace

Estimativa: 32 horas (4 dias)
Status: ✅ Implementado

Tarefas:

  • Criar modelo StoreRating:
    • Id, StoreId, UserId — ✅ Implementado
    • Rating (int, 1-5) — ✅ Implementado
    • Comment? (nullable) — ✅ Implementado
    • CreatedAtUtc, UpdatedAtUtc — ✅ Implementado
  • Criar modelo StoreItemRating:
    • Id, StoreItemId, UserId — ✅ Implementado
    • Rating (int, 1-5) — ✅ Implementado
    • Comment? (nullable) — ✅ Implementado
    • CreatedAtUtc, UpdatedAtUtc — ✅ Implementado
  • Criar modelo StoreRatingResponse:
    • Id, RatingId, StoreId — ✅ Implementado
    • ResponseText (string) — ✅ Implementado
    • CreatedAtUtc — ✅ Implementado
  • Criar RatingService:
    • RateStoreAsync(Guid storeId, Guid userId, int rating, string? comment) → avaliar loja — ✅ Implementado
    • RateItemAsync(Guid itemId, Guid userId, int rating, string? comment) → avaliar item — ✅ Implementado
    • RespondToRatingAsync(Guid ratingId, Guid storeId, string response) → responder avaliação — ✅ Implementado
    • ListStoreRatingsAsync(Guid storeId, ...) → listar avaliações da loja — ✅ Implementado
    • ListItemRatingsAsync(Guid itemId, ...) → listar avaliações do item — ✅ Implementado
    • GetStoreAverageRatingAsync(Guid storeId) → média de avaliações — ✅ Implementado
  • Criar RatingController:
    • POST /api/v1/stores/{id}/ratings → avaliar loja — ✅ Implementado
    • GET /api/v1/stores/{id}/ratings → listar avaliações — ✅ Implementado
    • POST /api/v1/items/{id}/ratings → avaliar item — ✅ Implementado
    • GET /api/v1/items/{id}/ratings → listar avaliações — ✅ Implementado
    • POST /api/v1/ratings/{id}/response → responder avaliação — ✅ Implementado
  • Feature flags: MarketplaceRatingsEnabled — ⏳ Opcional, não implementado
  • Validações — ✅ Implementado
  • Testes — ✅ RatingServiceTests.cs existe

Arquivos Criados:

  • backend/Arah.Domain/Marketplace/StoreRating.cs
  • backend/Arah.Domain/Marketplace/StoreItemRating.cs
  • backend/Arah.Domain/Marketplace/StoreRatingResponse.cs
  • backend/Arah.Application/Interfaces/IStoreRatingRepository.cs
  • backend/Arah.Application/Interfaces/IStoreItemRatingRepository.cs
  • backend/Arah.Application/Services/RatingService.cs
  • backend/Arah.Api/Controllers/RatingController.cs
  • backend/Arah.Api/Contracts/Marketplace/CreateRatingRequest.cs
  • backend/Arah.Api/Contracts/Marketplace/RatingResponse.cs
  • backend/Arah.Tests/Application/RatingServiceTests.cs

Critérios de Sucesso:

  • ✅ Sistema de avaliações funcionando
  • ✅ Respostas funcionando
  • ✅ Médias calculadas
  • ✅ Testes passando

11.4 Busca no Marketplace

Estimativa: 24 horas (3 dias)
Status: ✅ Implementado

Tarefas:

  • Criar MarketplaceSearchService:
    • SearchStoresAsync(string query, SearchFilters, ...) → buscar lojas — ✅ Implementado
    • SearchItemsAsync(string query, SearchFilters, ...) → buscar itens — ✅ Implementado
    • SearchAllAsync(string query, SearchFilters, ...) → buscar tudo — ✅ Implementado
  • Implementar busca full-text:
    • Usar PostgreSQL full-text search — ✅ Implementado (migration 20250123130000_AddFullTextSearchIndexes.cs)
    • Índices GIN para performance — ✅ Implementado
    • Ranking por relevância — ✅ Implementado
  • Filtros:
    • Por categoria — ✅ Implementado
    • Por faixa de preço — ✅ Implementado
    • Por localização (raio) — ✅ Implementado
    • Por rating mínimo — ✅ Implementado
  • Ordenação:
    • Por relevância (padrão) — ✅ Implementado
    • Por preço (crescente/decrescente) — ✅ Implementado
    • Por data (mais recente) — ✅ Implementado
    • Por rating (maior) — ✅ Implementado
  • Criar MarketplaceSearchController:
    • GET /api/v1/marketplace/search → busca geral — ✅ Implementado
    • GET /api/v1/stores/search → buscar lojas — ✅ Implementado
    • GET /api/v1/items/search → buscar itens — ✅ Implementado
  • Feature flags: MarketplaceSearchEnabled — ⏳ Opcional, não implementado
  • Testes — ✅ Testes existem

Arquivos Criados:

  • backend/Arah.Application/Services/MarketplaceSearchService.cs
  • backend/Arah.Application/Models/SearchFilters.cs
  • backend/Arah.Api/Controllers/MarketplaceSearchController.cs
  • backend/Arah.Api/Contracts/Marketplace/SearchRequest.cs
  • backend/Arah.Api/Contracts/Marketplace/SearchResponse.cs

Arquivos Modificados:

  • backend/Arah.Infrastructure/Postgres/Migrations/20250123130000_AddFullTextSearchIndexes.cs (índices full-text adicionados)
  • backend/Arah.Infrastructure/Postgres/PostgresStoreItemRepository.cs (full-text search implementado)

Critérios de Sucesso:

  • ✅ Busca funcionando
  • ✅ Filtros funcionando
  • ✅ Ordenação funcionando
  • ✅ Performance adequada (< 500ms)
  • ✅ Testes passando

Semana 14: Histórico de Atividades

11.5 Histórico de Atividades do Usuário

Estimativa: 16 horas (2 dias)
Status: ✅ Implementado

Tarefas:

  • Criar UserActivityService:
    • GetUserPostsAsync(Guid userId, ...) → posts criados — ✅ Implementado
    • GetUserEventsAsync(Guid userId, ...) → eventos criados — ✅ Implementado
    • GetUserPurchasesAsync(Guid userId, ...) → compras — ✅ Implementado
    • GetUserSalesAsync(Guid userId, ...) → vendas — ✅ Implementado
    • GetUserParticipationsAsync(Guid userId, ...) → participações — ✅ Implementado
    • GetUserActivityHistoryAsync(Guid userId, ...) → histórico completo — ✅ Implementado
  • Integrar com serviços existentes:
    • FeedService → posts — ✅ Implementado
    • EventsService → eventos — ✅ Implementado
    • CartService → compras/vendas — ✅ Implementado
  • Criar UserActivityController:
    • GET /api/v1/users/me/activity → histórico completo — ✅ Implementado
    • GET /api/v1/users/me/posts → meus posts — ✅ Implementado
    • GET /api/v1/users/me/events → meus eventos — ✅ Implementado
    • GET /api/v1/users/me/purchases → minhas compras — ✅ Implementado
    • GET /api/v1/users/me/sales → minhas vendas — ✅ Implementado
  • Feature flags: UserActivityHistoryEnabled — ⏳ Opcional, não implementado
  • Testes — ✅ UserActivityServiceTests.cs existe

Arquivos Criados:

  • backend/Arah.Application/Services/UserActivityService.cs
  • backend/Arah.Application/Models/UserActivityHistory.cs
  • backend/Arah.Api/Controllers/UserActivityController.cs
  • backend/Arah.Api/Contracts/Users/UserActivityHistoryResponse.cs
  • backend/Arah.Tests/Application/UserActivityServiceTests.cs

Critérios de Sucesso:

  • ✅ Histórico funcionando
  • ✅ Filtros funcionando
  • ✅ Paginação funcionando
  • ✅ Testes passando

🧪 Estratégia TDD/BDD

Contexto

Esta fase segue o padrão estabelecido na Fase 0: Fundação TDD/BDD e o Plano de Distribuição TDD/BDD, garantindo:

  • TDD obrigatório: Testes escritos ANTES do código (Red-Green-Refactor)
  • BDD para funcionalidades de negócio: Features Gherkin documentam comportamento
  • Cobertura >90%: Meta obrigatória para todas as funcionalidades

Tempo Adicional Estimado

  • +20% de tempo para implementação TDD/BDD
  • Duração ajustada: 15 dias → 18 dias (120h → 144h)
  • Tempo adicional: +3 dias para TDD/BDD

TDD: Test-Driven Development

Processo Red-Green-Refactor

Para cada funcionalidade implementada nesta fase:

  1. Red: Escrever teste que falha
  2. Green: Implementar mínimo para passar
  3. Refactor: Melhorar código mantendo testes passando

Testes Obrigatórios

Para cada funcionalidade:

  • Testes unitários (Domain, Application)
  • Testes de integração (API, E2E)
  • Testes de validação (edge cases, erros)
  • Testes de autorização (apenas autor pode editar)

Cobertura mínima: ✅ >90% para todas as funcionalidades


BDD: Behavior-Driven Development

Features Gherkin Obrigatórias

Estrutura de arquivo:

backend/Arah.Tests/
├── Api/BDD/
│   ├── PostEditing.feature
│   ├── EventEditing.feature
│   ├── MarketplaceRatings.feature
│   └── MarketplaceSearch.feature
└── Application/BDD/
    ├── EditPost.feature
    └── EditEvent.feature

Features BDD Obrigatórias para Esta Fase

  • Feature: Editar Post - Fluxo de edição com validações e histórico
  • Feature: Editar Evento - Fluxo de edição, cancelamento e participantes
  • Feature: Avaliar Item - Sistema de avaliações do marketplace
  • Feature: Buscar no Marketplace - Busca full-text com filtros e ordenação

Exemplo de Feature:

Feature: Editar Post
  Como um autor de post
  Eu quero editar meu post
  Para corrigir erros ou atualizar informações

  Background:
    Dado que existe um território "Vale do Itamambuca"
    E que existe um usuário "João" como residente
    E que existe um post criado por "João"

  Scenario: Editar post com sucesso
    Dado que o usuário "João" está autenticado
    Quando ele edita o post alterando o título para "Novo título"
    Então o post deve ser atualizado com sucesso
    E o post deve ter a flag "EditedAtUtc" preenchida

  Scenario: Tentar editar post de outro usuário
    Dado que existe um usuário "Maria" como residente
    E que "Maria" está autenticada
    Quando ela tenta editar o post de "João"
    Então deve retornar erro "Unauthorized"

Checklist TDD/BDD por Funcionalidade

Edição de Posts:

  • Teste escrito ANTES do código (Red)
  • Teste passa após implementação (Green)
  • Código refatorado mantendo testes verdes (Refactor)
  • Cobertura >90%
  • Feature BDD criada
  • Testes de autorização (apenas autor pode editar)
  • Testes de histórico de edições

Edição de Eventos:

  • Teste escrito ANTES do código (Red)
  • Teste passa após implementação (Green)
  • Código refatorado mantendo testes verdes (Refactor)
  • Cobertura >90%
  • Feature BDD criada
  • Testes de cancelamento de evento
  • Testes de lista de participantes

Sistema de Avaliações:

  • Teste escrito ANTES do código (Red)
  • Teste passa após implementação (Green)
  • Código refatorado mantendo testes verdes (Refactor)
  • Cobertura >90%
  • Feature BDD criada
  • Testes de validação (apenas compradores podem avaliar)
  • Testes de resposta de vendedor

Busca no Marketplace:

  • Teste escrito ANTES do código (Red)
  • Teste passa após implementação (Green)
  • Código refatorado mantendo testes verdes (Refactor)
  • Cobertura >90%
  • Feature BDD criada
  • Testes de performance (busca < 500ms)
  • Testes de filtros e ordenação

Métricas de Sucesso

Ao final da fase:

  • ✅ Cobertura de código >90%
  • ✅ Todas as funcionalidades de negócio com BDD (4 features)
  • ✅ 100% dos testes passando
  • ✅ Nenhum teste ignorado ou comentado
  • ✅ Documentação BDD atualizada

Referências


📊 Resumo da Fase 11

Tarefa Estimativa Status Prioridade
Edição de Posts 24h ✅ Implementado 🔴 Alta
Edição de Eventos 24h ✅ Implementado 🔴 Alta
Sistema de Avaliações 32h ✅ Implementado 🟡 Média
Busca no Marketplace 24h ✅ Implementado 🟡 Média
Histórico de Atividades 16h ✅ Implementado 🟡 Média
Total 120h (15 dias) Completo


11.X Configuração de Thresholds de Moderação

Estimativa: 24 horas (3 dias)
Status: ⏳ Pendente
Prioridade: 🔴 Alta

Contexto: Thresholds de moderação atualmente fixos no código (ReportService): janela de 7 dias, threshold de 3 reports únicos. Esta tarefa permite configuração por território (com fallback global) para políticas de moderação mais flexíveis.

Tarefas:

  • Criar modelo de domínio ModerationThresholdConfig:
    • Id, TerritoryId (nullable para config global)
    • ThresholdWindowDays (janela de tempo, padrão: 7)
    • ReportThreshold (número mínimo de reports, padrão: 3)
    • AutoAction (enum: None, HidePost, MuteUser, etc.)
    • Enabled (bool, se automação está ativa)
    • CreatedAtUtc, UpdatedAtUtc
  • Criar IModerationThresholdConfigRepository e implementações (Postgres, InMemory)
  • Criar ModerationThresholdConfigService:
    • GetConfigAsync(Guid territoryId, CancellationToken) → busca config territorial ou global
    • CreateOrUpdateConfigAsync(ModerationThresholdConfig, CancellationToken)
    • Validação: janela mínima (1 dia), threshold mínimo (1)
  • Atualizar ReportService:
    • Usar ModerationThresholdConfig ao avaliar thresholds
    • Fallback para valores padrão se não configurado
    • Aplicar AutoAction configurado
  • Criar ModerationThresholdConfigController:
    • GET /api/v1/territories/{territoryId}/moderation-threshold-config (Curator)
    • PUT /api/v1/territories/{territoryId}/moderation-threshold-config (Curator)
    • GET /api/v1/admin/moderation-threshold-config (global, SystemAdmin)
    • PUT /api/v1/admin/moderation-threshold-config (global, SystemAdmin)
  • Interface administrativa (DevPortal):
    • Seção para configuração de thresholds de moderação
    • Explicação de políticas automáticas
  • Testes de integração
  • Documentação

Arquivos a Criar:

  • backend/Arah.Domain/Moderation/ModerationThresholdConfig.cs
  • backend/Arah.Application/Interfaces/Moderation/IModerationThresholdConfigRepository.cs
  • backend/Arah.Application/Services/Moderation/ModerationThresholdConfigService.cs
  • backend/Arah.Api/Controllers/ModerationThresholdConfigController.cs
  • backend/Arah.Infrastructure/Postgres/PostgresModerationThresholdConfigRepository.cs
  • backend/Arah.Infrastructure/InMemory/InMemoryModerationThresholdConfigRepository.cs
  • backend/Arah.Tests/Api/ModerationThresholdConfigIntegrationTests.cs

Arquivos a Modificar:

  • backend/Arah.Application/Services/ReportService.cs
  • backend/Arah.Infrastructure/InMemory/InMemoryDataStore.cs
  • backend/Arah.Api/Extensions/ServiceCollectionExtensions.cs
  • backend/Arah.Api/wwwroot/devportal/index.html

Critérios de Sucesso:

  • ✅ Thresholds configuráveis por território
  • ✅ Fallback para valores globais funcionando
  • ✅ Ações automáticas aplicadas corretamente
  • ✅ Interface administrativa disponível
  • ✅ Testes passando
  • ✅ Documentação atualizada

Referência: Consulte FASE10_CONFIG_FLEXIBILIZACAO_AVALIACAO.md para contexto completo.


✅ Critérios de Sucesso da Fase 11

Funcionalidades

  • ✅ Edição de posts funcionando
  • ✅ Edição de eventos funcionando
  • ✅ Sistema de avaliações funcionando
  • ✅ Busca no marketplace funcionando
  • ✅ Histórico de atividades funcionando

Qualidade

  • ✅ Testes com cobertura adequada
  • ✅ Documentação completa
  • ✅ Feature flags implementados
  • ✅ Validações e segurança implementadas

Integração

  • ✅ Integração com Fase 8 (Mídia) funcionando
  • ✅ Integração com Fase 10 (Mídias em Conteúdo) funcionando
  • ✅ Integração com Fase 6 (Marketplace) funcionando

🔗 Dependências

  • Fase 8: Infraestrutura de Mídia (para editar mídias)
  • Fase 10: Mídias em Conteúdo (para editar mídias em posts/eventos)

📝 Notas de Implementação

Edição de Posts

Limitações (opcional):

  • Limite de tempo para edição (ex: 24 horas após criação)
  • Indicação visual de post editado
  • Histórico de edições (opcional, para auditoria)

Edição de Eventos

Regras:

  • Não pode editar evento já realizado
  • Cancelar evento notifica participantes
  • Lista de participantes mostra apenas confirmados

Sistema de Avaliações

Regras:

  • Apenas compradores podem avaliar
  • Uma avaliação por compra
  • Vendedor pode responder avaliação
  • Média calculada automaticamente

Busca no Marketplace

Performance:

  • Índices full-text no PostgreSQL
  • Cache de resultados frequentes
  • Paginação obrigatória

Status: ✅ FASE 11 IMPLEMENTADA
Depende de: Fases 8, 10
Crítico para: Completa funcionalidades essenciais


📝 Notas de Implementação

Arquivos Implementados

Edição de Posts:

  • backend/Arah.Application/Services/PostEditService.cs
  • backend/Arah.Domain/Feed/CommunityPost.cs (campos EditedAtUtc, EditCount)
  • backend/Arah.Api/Controllers/FeedController.cs (endpoint PATCH /api/v1/feed/{id})

Edição de Eventos:

  • backend/Arah.Application/Services/EventsService.cs (UpdateEventAsync, CancelEventAsync, GetEventParticipantsAsync)
  • backend/Arah.Domain/Events/TerritoryEvent.cs (métodos Update, Cancel)
  • backend/Arah.Api/Controllers/EventsController.cs (endpoints implementados)

Sistema de Avaliações:

  • backend/Arah.Application/Services/RatingService.cs
  • backend/Arah.Domain/Marketplace/StoreRating.cs
  • backend/Arah.Domain/Marketplace/StoreItemRating.cs
  • backend/Arah.Api/Controllers/RatingController.cs

Busca no Marketplace:

  • backend/Arah.Application/Services/MarketplaceSearchService.cs
  • backend/Arah.Infrastructure/Postgres/Migrations/20250123130000_AddFullTextSearchIndexes.cs
  • backend/Arah.Api/Controllers/MarketplaceSearchController.cs

Histórico de Atividades:

  • backend/Arah.Application/Services/UserActivityService.cs
  • backend/Arah.Api/Controllers/UserActivityController.cs

Última atualização: 2025-01-23