Skip to content

refactor: feature based folder structure#513

Open
mateusbrg wants to merge 13 commits into
developfrom
refactor/feature-based-folder-structure
Open

refactor: feature based folder structure#513
mateusbrg wants to merge 13 commits into
developfrom
refactor/feature-based-folder-structure

Conversation

@mateusbrg

@mateusbrg mateusbrg commented Jun 5, 2026

Copy link
Copy Markdown
Member

Descrição

Este PR reestrutura completamente a estrutura de pastas para o modelo feature-based. A mudança melhora a descoberta de código e estabelece fronteiras de domínio claras (Reviews, Calengrade, WhatsApp, Auth).

Nenhuma lógica de negócio foi alterada, apenas reorganização de pastas, correção de imports e alinhamento de nomes.

O que mudou

Nova estrutura de pastas

apps/container/src/
│
├── pages/                          # pages do app (ex-views/)
│   ├── Admin/
│   ├── Calengrade/
│   ├── Confirmation/
│   ├── Donate/
│   ├── Help/
│   ├── History/
│   ├── Login/
│   ├── Performance/
│   ├── Planning/
│   ├── Recovery/
│   ├── Reviews/
│   ├── Settings/
│   ├── SignUp/
│   ├── Stats/
│   └── WhatsappGroups/
│
├── features/                       # fatiamento por domínio
│   ├── auth/
│   │   ├── components/UserMenu/
│   │   └── utils/
│   │       ├── signUpValidationSchema.ts
│   │       └── recoveryValidationSchema.ts
│   ├── calengrade/
│   │   ├── components/
│   │   ├── types.ts
│   │   └── utils/
│   ├── help/
│   │   └── utils/
│   ├── reviews/
│   │   ├── components/ 
│   │   └── utils/
│   └── whatsapp/
│       ├── components/
│       └── utils/
│
├── components/
│   ├── ui/                           # primitivas compartilhadas
│   │   ├── PaperCard/
│   │   ├── FeedbackAlert/
│   │   ├── CenteredLoading/
│   │   ├── TableComponent/
│   │   ├── PerformanceCard/
│   │   └── ReviewDialog/
│   └── layout/
│       └── AppBar/
│
├── composables/                      # cross-cutting (ex-utils/composables/)
│   ├── aliasInitials.ts
│   └── cleanUsername.ts
│
├── config/                           # configuração de libs terceiras
│   ├── theme.ts
│   └── highcharts.ts
│
├── helpers/                            # apenas funções genéricas puras
├── stores/
└── router/

PRs mesclados neste branch

PR Título Escopo
#506 Dead code cleanup Remove componentes não utilizados (MFError, MFLoading, ReviewsWelcome, WppBanner)
#507 Fix layer violations & bootstrap config/ Separa theme.ts em config/, move utilitários de domínio para features, corrige import circular
#508 Shared UI restructure Cria components/ui/ e components/layout/, move primitivas compartilhadas
#509 Extract features/reviews/ Move 10 componentes de domínio de reviews para features/reviews/components/
#510 Extract features/whatsapp/ & features/calengrade/ Move componentes de WhatsApp e telas do Calengrade
#511 Extract features/auth/ & composables Move UserMenu, schemas de validação e extrai composables para src/composables/
#512 Rename views/pages/ Renomeia pasta e todos os componentes de XxxView para XxxPage
docs Update AGENTS.md Documenta nova estrutura e regras de arquitetura

Regras de arquitetura estabelecidas

  • features nunca importam de outras features. Se algo é usado por 2+ features, sobe para components/ui/, composables/, helpers/ ou utils/.
  • pages podem importar de qualquer feature e de camadas compartilhadas.

Tickets relacionados

Observações

Nenhuma lógica de negócio foi alterada. Se um recurso quebrar, o mais provável é um import quebrado. Verificar console do navegador por erros de módulo não encontrado.

@mateusbrg
mateusbrg requested a review from Copilot June 5, 2026 03:39
@mateusbrg mateusbrg added enhancement improvement or request ready for review PR is ready for review labels Jun 5, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors the apps/container frontend into a feature-based folder structure, renaming views/pages/, extracting domain-specific code into features/, and moving shared primitives into components/ui/ / components/layout/ while updating imports and tests accordingly.

Changes:

  • Renames and reorganizes page entrypoints (views/*View.vuepages/*Page.vue) and updates router lazy imports.
  • Extracts domain modules into features/{reviews,whatsapp,calengrade,auth,help} and centralizes shared UI primitives under components/ui/.
  • Moves third-party configuration into src/config/ (themes + Highcharts) and adjusts usage across the app.

Reviewed changes

Copilot reviewed 85 out of 148 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
apps/container/src/views/Admin/index.ts Removes legacy views/ barrel export
apps/container/src/views/Calengrade/index.ts Removes legacy views/ barrel export
apps/container/src/views/Confirmation/index.ts Removes legacy views/ barrel export
apps/container/src/views/Donate/index.ts Removes legacy views/ barrel export
apps/container/src/views/Help/index.ts Removes legacy views/ barrel export
apps/container/src/views/History/index.ts Removes legacy views/ barrel export
apps/container/src/views/Login/index.ts Removes legacy views/ barrel export
apps/container/src/views/Performance/index.ts Removes legacy views/ barrel export
apps/container/src/views/Planning/index.ts Removes legacy views/ barrel export
apps/container/src/views/Recovery/index.ts Removes legacy views/ barrel export
apps/container/src/views/Reviews/index.ts Removes legacy views/ barrel export
apps/container/src/views/Settings/index.ts Removes legacy views/ barrel export
apps/container/src/views/SignUp/index.ts Removes legacy views/ barrel export
apps/container/src/views/Stats/index.ts Removes legacy views/ barrel export
apps/container/src/utils/mockedWhatsappGroups.ts Removes old WhatsApp preview mock dataset
apps/container/src/utils/currentQuarter.ts Repoints quarter source to new calengrade location
apps/container/src/router/index.ts Updates route-level lazy imports to pages/*Page.vue
apps/container/src/pages/Admin/AdminPage.vue Adds Admin page entrypoint in pages/
apps/container/src/pages/Admin/AdminPage.test.ts Updates tests for renamed Admin page entrypoint
apps/container/src/pages/Admin/index.ts Adds AdminPage barrel export
apps/container/src/pages/Calengrade/CalengradePage.vue Updates Calengrade page to consume features/calengrade modules
apps/container/src/pages/Calengrade/index.ts Adds CalengradePage barrel export
apps/container/src/pages/Confirmation/ConfirmationPage.vue Updates Confirmation page imports for shared UI
apps/container/src/pages/Confirmation/ConfirmationPage.test.ts Updates tests/mocks to reference pages instead of views
apps/container/src/pages/Confirmation/index.ts Adds ConfirmationPage barrel export
apps/container/src/pages/Donate/DonatePage.vue Updates Donate page to use components/ui/PaperCard
apps/container/src/pages/Donate/DonatePage.test.ts Updates tests for renamed Donate page entrypoint
apps/container/src/pages/Donate/index.ts Adds DonatePage barrel export
apps/container/src/pages/Help/HelpPage.vue Moves Help validation schema into features/help and uses shared UI
apps/container/src/pages/Help/index.ts Adds HelpPage barrel export
apps/container/src/pages/History/HistoryPage.vue Updates History page to use shared UI primitives under components/ui/
apps/container/src/pages/History/HistoryPage.test.ts Updates tests for renamed History page entrypoint
apps/container/src/pages/History/index.ts Adds HistoryPage barrel export
apps/container/src/pages/Login/LoginPage.vue Adds Login page entrypoint in pages/
apps/container/src/pages/Login/LoginPage.test.ts Updates tests for renamed Login page entrypoint
apps/container/src/pages/Login/index.ts Adds LoginPage barrel export
apps/container/src/pages/Performance/PerformancePage.vue Updates Performance page to use shared UI primitives
apps/container/src/pages/Performance/PerformancePage.test.ts Updates tests for renamed Performance page entrypoint
apps/container/src/pages/Performance/index.ts Adds PerformancePage barrel export
apps/container/src/pages/Planning/PlanningPage.vue Adds Planning page entrypoint in pages/
apps/container/src/pages/Planning/PlanningPage.test.ts Updates tests for renamed Planning page entrypoint
apps/container/src/pages/Planning/index.ts Adds PlanningPage barrel export
apps/container/src/pages/Recovery/RecoveryPage.vue Moves Recovery validation schema into features/auth and uses shared UI
apps/container/src/pages/Recovery/RecoveryPage.test.ts Updates tests for renamed Recovery page entrypoint
apps/container/src/pages/Recovery/index.ts Adds RecoveryPage barrel export
apps/container/src/pages/Reviews/ReviewsPage.vue Rewires Reviews page to domain components under features/reviews
apps/container/src/pages/Reviews/ReviewsPage.test.ts Updates tests for renamed Reviews page entrypoint
apps/container/src/pages/Reviews/index.ts Adds ReviewsPage barrel export
apps/container/src/pages/Settings/SettingsPage.vue Uses shared UI + moves composable import to src/composables/
apps/container/src/pages/Settings/SettingsPage.test.ts Updates tests for renamed Settings page entrypoint
apps/container/src/pages/Settings/index.ts Adds SettingsPage barrel export
apps/container/src/pages/SignUp/SignUpPage.vue Uses shared UI + moves SignUp schema to features/auth
apps/container/src/pages/SignUp/SignUpPage.test.ts Updates tests for renamed SignUp page entrypoint
apps/container/src/pages/SignUp/index.ts Adds SignUpPage barrel export
apps/container/src/pages/Stats/StatsPage.vue Uses shared UI primitives (components/ui/*)
apps/container/src/pages/Stats/StatsPage.test.ts Updates tests for renamed Stats page entrypoint
apps/container/src/pages/Stats/index.ts Adds StatsPage barrel export
apps/container/src/pages/WhatsappGroups/WhatsappGroupsPage.vue Rewires WhatsApp page to features/whatsapp components/utils
apps/container/src/main.ts Switches theme/highcharts imports to src/config/
apps/container/src/features/auth/components/UserMenu/UserMenu.vue Moves UserMenu into features/auth and updates composable imports
apps/container/src/features/auth/components/UserMenu/UserMenu.test.ts Adds coverage for UserMenu in new location
apps/container/src/features/auth/components/UserMenu/index.ts Adds UserMenu barrel export
apps/container/src/features/auth/utils/recoveryValidationSchema.ts Adds Recovery validation schema under auth feature
apps/container/src/features/auth/utils/signUpValidationSchema.ts Adds SignUp validation schema under auth feature
apps/container/src/features/calengrade/components/ChangeQuarterScreen.vue Updates imports to new features/calengrade modules
apps/container/src/features/calengrade/components/PreviewScreen.vue Updates imports to new features/calengrade modules
apps/container/src/features/calengrade/components/SummaryScreen.vue Updates imports to new features/calengrade modules
apps/container/src/features/calengrade/components/WelcomeScreen.vue Updates imports to new features/calengrade modules
apps/container/src/features/calengrade/types.ts Introduces Calengrade domain types in feature layer
apps/container/src/features/calengrade/utils/calendar.ts Rehomes calendar util under calengrade feature
apps/container/src/features/calengrade/utils/quarters.ts Rehomes defined quarters under calengrade feature
apps/container/src/features/calengrade/utils/summary.ts Rehomes summary parsing util under calengrade feature
apps/container/src/features/help/utils/helpValidationSchema.ts Moves Help validation schema into help feature
apps/container/src/features/reviews/components/CommentsList/CommentList.test.ts Adds tests for extracted reviews component
apps/container/src/features/reviews/components/CommentsList/CommentsList.vue Rehomes CommentsList under reviews feature
apps/container/src/features/reviews/components/CommentsList/index.ts Adds barrel export
apps/container/src/features/reviews/components/ConceptsHorizontalChart/ConceptsHorizontalChart.test.ts Adds tests for extracted reviews component
apps/container/src/features/reviews/components/ConceptsHorizontalChart/ConceptsHorizontalChart.vue Rehomes chart under reviews feature
apps/container/src/features/reviews/components/ConceptsHorizontalChart/index.ts Adds barrel export
apps/container/src/features/reviews/components/ConceptsPieChart/ConceptsPieChart.test.ts Adds tests for extracted reviews component
apps/container/src/features/reviews/components/ConceptsPieChart/ConceptsPieChart.vue Rehomes chart under reviews feature
apps/container/src/features/reviews/components/ConceptsPieChart/index.ts Adds barrel export
apps/container/src/features/reviews/components/PendingReviewEnrollment/PendingReviewEnrollment.test.ts Adds tests for extracted reviews component
apps/container/src/features/reviews/components/PendingReviewEnrollment/PendingReviewEnrollment.vue Rehomes PendingReviewEnrollment under reviews feature
apps/container/src/features/reviews/components/PendingReviewEnrollment/index.ts Adds barrel export
apps/container/src/features/reviews/components/PendingReviewEnrollmentList/PendingReviewEnrollmentList.test.ts Adds tests for extracted reviews component
apps/container/src/features/reviews/components/PendingReviewEnrollmentList/PendingReviewEnrollmentList.vue Rehomes list component under reviews feature
apps/container/src/features/reviews/components/PendingReviewEnrollmentList/index.ts Adds barrel export
apps/container/src/features/reviews/components/SearchBar/SearchBar.test.ts Adds tests for extracted reviews component
apps/container/src/features/reviews/components/SearchBar/SearchBar.vue Rehomes SearchBar under reviews feature and uses shared UI
apps/container/src/features/reviews/components/SearchBar/index.ts Adds barrel export
apps/container/src/features/reviews/components/SingleComment/SingleComment.test.ts Adds tests for extracted reviews component
apps/container/src/features/reviews/components/SingleComment/SingleComment.vue Rehomes SingleComment under reviews feature
apps/container/src/features/reviews/components/SingleComment/index.ts Adds barrel export
apps/container/src/features/reviews/components/SubjectReview/SubjectReview.test.ts Adds tests for extracted reviews component
apps/container/src/features/reviews/components/SubjectReview/SubjectReview.vue Rehomes SubjectReview under reviews feature
apps/container/src/features/reviews/components/SubjectReview/index.ts Adds barrel export
apps/container/src/features/reviews/components/TeacherReview/TeacherReview.test.ts Adds tests for extracted reviews component
apps/container/src/features/reviews/components/TeacherReview/TeacherReview.vue Rehomes TeacherReview under reviews feature
apps/container/src/features/reviews/components/TeacherReview/index.ts Adds barrel export
apps/container/src/features/reviews/components/WelcomeMessage/WelcomeMessage.test.ts Adds tests for new extracted WelcomeMessage
apps/container/src/features/reviews/components/WelcomeMessage/WelcomeMessage.vue Rehomes WelcomeMessage under reviews feature
apps/container/src/features/reviews/components/WelcomeMessage/index.ts Adds barrel export
apps/container/src/features/reviews/utils/transformConceptDataToObject.ts Moves domain utility into reviews feature
apps/container/src/features/whatsapp/components/UserNotifications.vue Rehomes UserNotifications under whatsapp feature
apps/container/src/features/whatsapp/components/WhatsappGroupCard/WhatsappGroupCard.vue Rehomes WhatsappGroupCard under whatsapp feature
apps/container/src/features/whatsapp/components/WhatsappGroupCard/index.ts Adds barrel export
apps/container/src/features/whatsapp/utils/mockedWhatsappGroups.ts Adds whatsapp feature mock generator
apps/container/src/features/whatsapp/utils/normalizeTextSearch.ts Adds whatsapp feature normalize helper
apps/container/src/components/layout/AppBar/AppBar.test.ts Adds/updates tests for relocated AppBar
apps/container/src/components/layout/AppBar/AppBar.vue Updates imports to new config/ + features/auth UserMenu
apps/container/src/components/layout/AppBar/index.ts Adds barrel export
apps/container/src/components/layout/AppBar/navigation.ts Adds navigation model/data for AppBar
apps/container/src/components/ui/CenteredLoading/CenteredLoading.test.ts Adds tests for new shared UI primitive
apps/container/src/components/ui/CenteredLoading/CenteredLoading.vue Adds shared loading primitive
apps/container/src/components/ui/CenteredLoading/index.ts Adds barrel export
apps/container/src/components/ui/FeedbackAlert/FeedbackAlert.test.ts Adds tests for new shared feedback primitive
apps/container/src/components/ui/FeedbackAlert/FeedbackAlert.vue Adds shared feedback primitive
apps/container/src/components/ui/FeedbackAlert/index.ts Adds barrel export
apps/container/src/components/ui/PaperCard/PaperCard.test.ts Adds tests for new shared card primitive
apps/container/src/components/ui/PaperCard/PaperCard.vue Adds shared card primitive
apps/container/src/components/ui/PaperCard/index.ts Adds barrel export
apps/container/src/components/ui/PerformanceCard/PerformanceCard.test.ts Adds tests for new shared performance card
apps/container/src/components/ui/PerformanceCard/PerformanceCard.vue Adds shared performance card
apps/container/src/components/ui/PerformanceCard/index.ts Adds barrel export
apps/container/src/components/ui/ReviewDialog/ReviewDialog.test.ts Adds/updates tests for relocated ReviewDialog
apps/container/src/components/ui/ReviewDialog/ReviewDialog.vue Moves ReviewDialog to shared UI layer and rewires imports
apps/container/src/components/ui/ReviewDialog/index.ts Adds barrel export
apps/container/src/components/ui/TableComponent/TableComponent.test.ts Adds tests for new shared TableComponent
apps/container/src/components/ui/TableComponent/TableComponent.vue Adds shared table wrapper component
apps/container/src/components/ui/TableComponent/index.ts Adds barrel export
apps/container/src/config/highcharts.ts Splits Highcharts configuration into config/
apps/container/src/config/theme.ts Splits Vuetify theme definitions into config/
apps/container/src/composables/aliasInitials.ts Moves/creates cross-cutting composable under src/composables/
apps/container/src/composables/cleanUsername.ts Moves/creates cross-cutting composable under src/composables/
apps/container/src/App.vue Updates AppBar import to new layout location
AGENTS.md Documents new folder structure + architecture rules
Comments suppressed due to low confidence (5)

apps/container/src/features/calengrade/utils/summary.ts:51

  • The <br> normalization regex has an extra < (<<br), so HTML line breaks won't be converted to newlines and handleSummary may fail to split classes correctly.
    apps/container/src/features/calengrade/components/WelcomeScreen.vue:29
  • Per AGENTS.md import conventions, files inside the same feature should use relative imports (this file is inside features/calengrade/). Using @/features/... here makes internal boundaries harder to maintain.
    apps/container/src/features/calengrade/components/SummaryScreen.vue:55
  • Per AGENTS.md import conventions, components inside features/calengrade/ should import sibling types/utils via relative paths (not @/features/...).
    apps/container/src/features/calengrade/components/PreviewScreen.vue:44
  • Per AGENTS.md import conventions, components inside features/calengrade/ should use relative imports for feature-internal modules.
    apps/container/src/features/calengrade/components/ChangeQuarterScreen.vue:61
  • Per AGENTS.md import conventions, components inside features/calengrade/ should use relative imports for feature-internal modules.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@Joabesv

Joabesv commented Jun 7, 2026

Copy link
Copy Markdown
Member

nit: ´@/helpers/utils/runtimeConfig´
helpers com utils dentro é muito estranho,

Qual a diferenca um do outro?

@mateusbrg

Copy link
Copy Markdown
Member Author

nit: ´@/helpers/utils/runtimeConfig´ helpers com utils dentro é muito estranho,

Qual a diferenca um do outro?

chapei e ficou errado, vou corrigir

@brMonteiro-G brMonteiro-G left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Acredito que valha uma breve descrição das features no README.md e uma referência para essa contextualiação de negócios no AGENTS.md. Pensei em gerar um CONTEXT.md por cada pasta de feature mas parece um pouco overkill para o tamanho do projeto que não exige um contexto tão amplo.

De qualquer forma, vejo importância em descrever contexto de negócios para o fluxo de revisão de professores da UFABC, visualização de grupos de whatsapp das disciplinas e informações a respeito da graduação do aluno.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement improvement or request ready for review PR is ready for review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants