refactor: feature based folder structure#513
Conversation
* refactor: create ui folder and move shared primitives * refactor: move appbar to layout folder
…actor/feature-based-folder-structure
…ature-based-folder-structure
There was a problem hiding this comment.
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.vue→pages/*Page.vue) and updates router lazy imports. - Extracts domain modules into
features/{reviews,whatsapp,calengrade,auth,help}and centralizes shared UI primitives undercomponents/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 andhandleSummarymay 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 siblingtypes/utilsvia 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.
|
nit: ´@/helpers/utils/runtimeConfig´ Qual a diferenca um do outro? |
chapei e ficou errado, vou corrigir |
brMonteiro-G
left a comment
There was a problem hiding this comment.
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.
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
PRs mesclados neste branch
MFError,MFLoading,ReviewsWelcome,WppBanner)config/theme.tsemconfig/, move utilitários de domínio para features, corrige import circularcomponents/ui/ecomponents/layout/, move primitivas compartilhadasfeatures/reviews/features/reviews/components/features/whatsapp/&features/calengrade/features/auth/& composablesUserMenu, schemas de validação e extrai composables parasrc/composables/views/→pages/XxxViewparaXxxPageRegras de arquitetura estabelecidas
components/ui/,composables/,helpers/ouutils/.Tickets relacionados
config/features/reviews/features/whatsapp/&features/calengrade/features/auth/& Composablesviews/→pages/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.