* remove: prisma output custom path
* Feat/basic dashboard layout (#9)
* remove: prisma output custom path
* chore: move lib folder in server root
* chore(prisma): remove custom generator output and drop icon_emoji attribute from IncomeCategory model
* feat(client): add income models
* feat(server): implement income controller with full CRUD operations
* feat(server): implement income category controller
* feat(server): asyncHandler utility
* refactor: separate controller and service logic for cleaner architecture
* refactor: unify income and income-category controllers
* feat: income routes
* feat: GET /custom-categories endpoint to fetch categories created by the user
* fix: correct income controller exports
* chore: add temporary middleware to mock user (id: 4) for testing
* fix(server): handle missing date field in income creation
* fix(server): resolve invalid date type error
* chore(api): make income.date optional and require category_id in OpenAPI spec
* feat(client): implement income service
* feat(client): custom react hooks for income data
* feat: react-router-dom and setup initial routes for home and incomes
* feat(client): income component and incomes page with full functionality
* refactor: rename endpoints to /custom-categories in API spec and server to differenciate customized and system in built categories
* feat: implement theme colors and fonts
* feat: expandable sidebar
* feat: setup theme colors and font
---------
Co-authored-by: colombefioren <colomberakotonjanahary@gmail.com>
* Feat/income creation page (#11)
* remove: prisma output custom path
* chore: move lib folder in server root
* chore(prisma): remove custom generator output and drop icon_emoji attribute from IncomeCategory model
* feat(client): add income models
* feat(server): implement income controller with full CRUD operations
* feat(server): implement income category controller
* feat(server): asyncHandler utility
* refactor: separate controller and service logic for cleaner architecture
* refactor: unify income and income-category controllers
* feat: income routes
* feat: GET /custom-categories endpoint to fetch categories created by the user
* fix: correct income controller exports
* chore: add temporary middleware to mock user (id: 4) for testing
* fix(server): handle missing date field in income creation
* fix(server): resolve invalid date type error
* chore(api): make income.date optional and require category_id in OpenAPI spec
* feat(client): implement income service
* feat(client): custom react hooks for income data
* feat: react-router-dom and setup initial routes for home and incomes
* feat(client): income component and incomes page with full functionality
* refactor: rename endpoints to /custom-categories in API spec and server to differenciate customized and system in built categories
* feat: implement theme colors and fonts
* feat: expandable sidebar
* feat: setup theme colors and font
* remove: icon_emoji column from income_category
* fix: comprehensive error handling and validation for income categories
* chore: regenerate openapi service after spec update
* style: enhance loading component
* fix: make date and source unrequired cause they have default fallbacks
* fix: automatically refresh income list after CRUD operations
* fix: improve income sorting to show most recent items first when dates are equal
* feat: set Salary as default category for new income forms
* feat: implement dedicated page routes for income creation and editing
---------
Co-authored-by: Jonathan <rakotoarisoajonathan0@gmail.com>
* chore: add .vercel to .gitignore
* Squashed commit of the following:
commit e91ae9d
Author: COCO <colomberakotonjanahary@gmail.com>
Date: Sun Aug 24 19:18:50 2025 +0300
Feat/income creation page (#11)
* remove: prisma output custom path
* chore: move lib folder in server root
* chore(prisma): remove custom generator output and drop icon_emoji attribute from IncomeCategory model
* feat(client): add income models
* feat(server): implement income controller with full CRUD operations
* feat(server): implement income category controller
* feat(server): asyncHandler utility
* refactor: separate controller and service logic for cleaner architecture
* refactor: unify income and income-category controllers
* feat: income routes
* feat: GET /custom-categories endpoint to fetch categories created by the user
* fix: correct income controller exports
* chore: add temporary middleware to mock user (id: 4) for testing
* fix(server): handle missing date field in income creation
* fix(server): resolve invalid date type error
* chore(api): make income.date optional and require category_id in OpenAPI spec
* feat(client): implement income service
* feat(client): custom react hooks for income data
* feat: react-router-dom and setup initial routes for home and incomes
* feat(client): income component and incomes page with full functionality
* refactor: rename endpoints to /custom-categories in API spec and server to differenciate customized and system in built categories
* feat: implement theme colors and fonts
* feat: expandable sidebar
* feat: setup theme colors and font
* remove: icon_emoji column from income_category
* fix: comprehensive error handling and validation for income categories
* chore: regenerate openapi service after spec update
* style: enhance loading component
* fix: make date and source unrequired cause they have default fallbacks
* fix: automatically refresh income list after CRUD operations
* fix: improve income sorting to show most recent items first when dates are equal
* feat: set Salary as default category for new income forms
* feat: implement dedicated page routes for income creation and editing
---------
Co-authored-by: Jonathan <rakotoarisoajonathan0@gmail.com>
commit 0672521
Author: Tsiory Jonathan <167012196+TsioryJonathan@users.noreply.github.com>
Date: Sun Aug 24 15:21:56 2025 +0300
Feat/basic dashboard layout (#9)
* remove: prisma output custom path
* chore: move lib folder in server root
* chore(prisma): remove custom generator output and drop icon_emoji attribute from IncomeCategory model
* feat(client): add income models
* feat(server): implement income controller with full CRUD operations
* feat(server): implement income category controller
* feat(server): asyncHandler utility
* refactor: separate controller and service logic for cleaner architecture
* refactor: unify income and income-category controllers
* feat: income routes
* feat: GET /custom-categories endpoint to fetch categories created by the user
* fix: correct income controller exports
* chore: add temporary middleware to mock user (id: 4) for testing
* fix(server): handle missing date field in income creation
* fix(server): resolve invalid date type error
* chore(api): make income.date optional and require category_id in OpenAPI spec
* feat(client): implement income service
* feat(client): custom react hooks for income data
* feat: react-router-dom and setup initial routes for home and incomes
* feat(client): income component and incomes page with full functionality
* refactor: rename endpoints to /custom-categories in API spec and server to differenciate customized and system in built categories
* feat: implement theme colors and fonts
* feat: expandable sidebar
* feat: setup theme colors and font
---------
Co-authored-by: colombefioren <colomberakotonjanahary@gmail.com>
commit 536036e
Merge: fc8af84 3160a60
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 23 10:32:46 2025 -0400
Merge pull request #3 from colombefioren/feat/prisma-integration
Feat/prisma integration
commit 3160a60
Merge: 387ba2a fc8af84
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 23 10:30:12 2025 -0400
Merge branch 'dev' into feat/prisma-integration
commit 387ba2a
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:21:17 2025 +0300
refactor: change prisma.ts to prisma.js
commit 9498a64
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:16:03 2025 +0300
feat: prisma service singleton
commit feca228
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:02:21 2025 +0300
feat: income categories to schema
commit c06ba95
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:57:45 2025 +0300
feat: define prisma schema models
commit bc0002e
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:48:53 2025 +0300
feat: initialize prisma with postgresql setup
commit e282f34
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:45:26 2025 +0300
chore: add prisma dependencies
commit ea8a0ee
Merge: b1366b7 cc6925d
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 16 07:39:40 2025 -0400
Merge pull request #2 from Mathieu-bot/ui/components
UI/components
* feat(server): add auth route and auth service
* feat(server): add category CRUD operations
* chore(server): update .gitignore
* chore(server): update server dependencies
* feat(server): configure server bootstrap
* docs(server): update OpenAPI spec by removing duplication
* Update .gitignore
* refactor(server): move auth DB logic to service layer; keep controllers thin
* feat(auth): add email and password strength validation
- Add `validator` package to dependencies.
- Replace regex-based email validation with `validator.js` `isEmail`.
- Add password strength validation in the signup controller using
`isStrongPassword` to enforce at least 6 characters, one uppercase
letter, and one number.
* refactor(auth): extract validation logic into middleware
- Create a new [validate.js] middleware to centralize validation logic.
- Implement [requireFields], [validateEmail], [sanitizeBody], and
[validateTextMaxLengths] as reusable middleware functions.
- Create combined middlewares `validateSignup` and `validateLogin` to
simplify route definitions.
- Update auth routes to use the new validation middlewares.
- Simplify the `auth.controller` by removing validation logic now
handled by the middleware, keeping only the password strength check.
- Introduce custom error classes in utils/errors.js for better
HTTP error handling.
* refactor(category): case-insensitive uniqueness + middlewares create/update
Enforce case-insensitive name uniqueness in service (create/update). Use HttpError subclasses (Conflict/NotFound). Add validateCategoryCreate and validateCategoryUpdate with URL checks (protocol, max 255). Wire in routes and simplify controller.
* fix(api): clean up OpenAPI specification duplicates and errors
* Feat/layout polish (#15)
* remove: prisma output custom path
* chore: move lib folder in server root
* chore(prisma): remove custom generator output and drop icon_emoji attribute from IncomeCategory model
* feat(client): add income models
* feat(server): implement income controller with full CRUD operations
* feat(server): implement income category controller
* feat(server): asyncHandler utility
* refactor: separate controller and service logic for cleaner architecture
* refactor: unify income and income-category controllers
* feat: income routes
* feat: GET /custom-categories endpoint to fetch categories created by the user
* fix: correct income controller exports
* chore: add temporary middleware to mock user (id: 4) for testing
* fix(server): handle missing date field in income creation
* fix(server): resolve invalid date type error
* chore(api): make income.date optional and require category_id in OpenAPI spec
* feat(client): implement income service
* feat(client): custom react hooks for income data
* feat: react-router-dom and setup initial routes for home and incomes
* feat(client): income component and incomes page with full functionality
* refactor: rename endpoints to /custom-categories in API spec and server to differenciate customized and system in built categories
* feat: implement theme colors and fonts
* feat: expandable sidebar
* feat: setup theme colors and font
* remove: icon_emoji column from income_category
* fix: comprehensive error handling and validation for income categories
* chore: regenerate openapi service after spec update
* style: enhance loading component
* fix: make date and source unrequired cause they have default fallbacks
* fix: automatically refresh income list after CRUD operations
* fix: improve income sorting to show most recent items first when dates are equal
* feat: set Salary as default category for new income forms
* feat: implement dedicated page routes for income creation and editing
* feat: zustand
* feat: mascot gifs
* feat: add Mascot type and store
* feat: mascot component with transitions
* feat: mascot hooks for expression control
* refactor: update toast ui to trigger mascot expressions
* feat: mascot triggers to income service
* fix: prevent duplicate error toast
* fix: mascot frame swift transitions
* style: beautify client icon portion
* feat(ui): redesign Header with new subcomponents
* chore: rename Header to dashboardHeader to maintain import consistency
* style: use pennypal accent color
* fix: notification number position
* style: remove profile pic square border
* style(sidebar): implement vertical curved sidebar
* style: increase sidebar vertical padding
* remove: delete bad resolution mascot gifs
* feat: enhance header with adaptive glassmorphism effect on scroll
---------
Co-authored-by: Jonathan <rakotoarisoajonathan0@gmail.com>
* Feat/auth (#14)
* chore: add .vercel to .gitignore
* Squashed commit of the following:
commit e91ae9d
Author: COCO <colomberakotonjanahary@gmail.com>
Date: Sun Aug 24 19:18:50 2025 +0300
Feat/income creation page (#11)
* remove: prisma output custom path
* chore: move lib folder in server root
* chore(prisma): remove custom generator output and drop icon_emoji attribute from IncomeCategory model
* feat(client): add income models
* feat(server): implement income controller with full CRUD operations
* feat(server): implement income category controller
* feat(server): asyncHandler utility
* refactor: separate controller and service logic for cleaner architecture
* refactor: unify income and income-category controllers
* feat: income routes
* feat: GET /custom-categories endpoint to fetch categories created by the user
* fix: correct income controller exports
* chore: add temporary middleware to mock user (id: 4) for testing
* fix(server): handle missing date field in income creation
* fix(server): resolve invalid date type error
* chore(api): make income.date optional and require category_id in OpenAPI spec
* feat(client): implement income service
* feat(client): custom react hooks for income data
* feat: react-router-dom and setup initial routes for home and incomes
* feat(client): income component and incomes page with full functionality
* refactor: rename endpoints to /custom-categories in API spec and server to differenciate customized and system in built categories
* feat: implement theme colors and fonts
* feat: expandable sidebar
* feat: setup theme colors and font
* remove: icon_emoji column from income_category
* fix: comprehensive error handling and validation for income categories
* chore: regenerate openapi service after spec update
* style: enhance loading component
* fix: make date and source unrequired cause they have default fallbacks
* fix: automatically refresh income list after CRUD operations
* fix: improve income sorting to show most recent items first when dates are equal
* feat: set Salary as default category for new income forms
* feat: implement dedicated page routes for income creation and editing
---------
Co-authored-by: Jonathan <rakotoarisoajonathan0@gmail.com>
commit 0672521
Author: Tsiory Jonathan <167012196+TsioryJonathan@users.noreply.github.com>
Date: Sun Aug 24 15:21:56 2025 +0300
Feat/basic dashboard layout (#9)
* remove: prisma output custom path
* chore: move lib folder in server root
* chore(prisma): remove custom generator output and drop icon_emoji attribute from IncomeCategory model
* feat(client): add income models
* feat(server): implement income controller with full CRUD operations
* feat(server): implement income category controller
* feat(server): asyncHandler utility
* refactor: separate controller and service logic for cleaner architecture
* refactor: unify income and income-category controllers
* feat: income routes
* feat: GET /custom-categories endpoint to fetch categories created by the user
* fix: correct income controller exports
* chore: add temporary middleware to mock user (id: 4) for testing
* fix(server): handle missing date field in income creation
* fix(server): resolve invalid date type error
* chore(api): make income.date optional and require category_id in OpenAPI spec
* feat(client): implement income service
* feat(client): custom react hooks for income data
* feat: react-router-dom and setup initial routes for home and incomes
* feat(client): income component and incomes page with full functionality
* refactor: rename endpoints to /custom-categories in API spec and server to differenciate customized and system in built categories
* feat: implement theme colors and fonts
* feat: expandable sidebar
* feat: setup theme colors and font
---------
Co-authored-by: colombefioren <colomberakotonjanahary@gmail.com>
commit 536036e
Merge: fc8af84 3160a60
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 23 10:32:46 2025 -0400
Merge pull request #3 from colombefioren/feat/prisma-integration
Feat/prisma integration
commit 3160a60
Merge: 387ba2a fc8af84
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 23 10:30:12 2025 -0400
Merge branch 'dev' into feat/prisma-integration
commit 387ba2a
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:21:17 2025 +0300
refactor: change prisma.ts to prisma.js
commit 9498a64
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:16:03 2025 +0300
feat: prisma service singleton
commit feca228
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:02:21 2025 +0300
feat: income categories to schema
commit c06ba95
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:57:45 2025 +0300
feat: define prisma schema models
commit bc0002e
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:48:53 2025 +0300
feat: initialize prisma with postgresql setup
commit e282f34
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:45:26 2025 +0300
chore: add prisma dependencies
commit ea8a0ee
Merge: b1366b7 cc6925d
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 16 07:39:40 2025 -0400
Merge pull request #2 from Mathieu-bot/ui/components
UI/components
* feat(server): add auth route and auth service
* Update .gitignore
* refactor(server): move auth DB logic to service layer; keep controllers thin
* feat(auth): add email and password strength validation
- Add `validator` package to dependencies.
- Replace regex-based email validation with `validator.js` `isEmail`.
- Add password strength validation in the signup controller using
`isStrongPassword` to enforce at least 6 characters, one uppercase
letter, and one number.
* refactor(auth): extract validation logic into middleware
- Create a new [validate.js] middleware to centralize validation logic.
- Implement [requireFields], [validateEmail], [sanitizeBody], and
[validateTextMaxLengths] as reusable middleware functions.
- Create combined middlewares `validateSignup` and `validateLogin` to
simplify route definitions.
- Update auth routes to use the new validation middlewares.
- Simplify the `auth.controller` by removing validation logic now
handled by the middleware, keeping only the password strength check.
- Introduce custom error classes in utils/errors.js for better
HTTP error handling.
* Feat/category (#16)
* chore: add .vercel to .gitignore
* Squashed commit of the following:
commit e91ae9d
Author: COCO <colomberakotonjanahary@gmail.com>
Date: Sun Aug 24 19:18:50 2025 +0300
Feat/income creation page (#11)
* remove: prisma output custom path
* chore: move lib folder in server root
* chore(prisma): remove custom generator output and drop icon_emoji attribute from IncomeCategory model
* feat(client): add income models
* feat(server): implement income controller with full CRUD operations
* feat(server): implement income category controller
* feat(server): asyncHandler utility
* refactor: separate controller and service logic for cleaner architecture
* refactor: unify income and income-category controllers
* feat: income routes
* feat: GET /custom-categories endpoint to fetch categories created by the user
* fix: correct income controller exports
* chore: add temporary middleware to mock user (id: 4) for testing
* fix(server): handle missing date field in income creation
* fix(server): resolve invalid date type error
* chore(api): make income.date optional and require category_id in OpenAPI spec
* feat(client): implement income service
* feat(client): custom react hooks for income data
* feat: react-router-dom and setup initial routes for home and incomes
* feat(client): income component and incomes page with full functionality
* refactor: rename endpoints to /custom-categories in API spec and server to differenciate customized and system in built categories
* feat: implement theme colors and fonts
* feat: expandable sidebar
* feat: setup theme colors and font
* remove: icon_emoji column from income_category
* fix: comprehensive error handling and validation for income categories
* chore: regenerate openapi service after spec update
* style: enhance loading component
* fix: make date and source unrequired cause they have default fallbacks
* fix: automatically refresh income list after CRUD operations
* fix: improve income sorting to show most recent items first when dates are equal
* feat: set Salary as default category for new income forms
* feat: implement dedicated page routes for income creation and editing
---------
Co-authored-by: Jonathan <rakotoarisoajonathan0@gmail.com>
commit 0672521
Author: Tsiory Jonathan <167012196+TsioryJonathan@users.noreply.github.com>
Date: Sun Aug 24 15:21:56 2025 +0300
Feat/basic dashboard layout (#9)
* remove: prisma output custom path
* chore: move lib folder in server root
* chore(prisma): remove custom generator output and drop icon_emoji attribute from IncomeCategory model
* feat(client): add income models
* feat(server): implement income controller with full CRUD operations
* feat(server): implement income category controller
* feat(server): asyncHandler utility
* refactor: separate controller and service logic for cleaner architecture
* refactor: unify income and income-category controllers
* feat: income routes
* feat: GET /custom-categories endpoint to fetch categories created by the user
* fix: correct income controller exports
* chore: add temporary middleware to mock user (id: 4) for testing
* fix(server): handle missing date field in income creation
* fix(server): resolve invalid date type error
* chore(api): make income.date optional and require category_id in OpenAPI spec
* feat(client): implement income service
* feat(client): custom react hooks for income data
* feat: react-router-dom and setup initial routes for home and incomes
* feat(client): income component and incomes page with full functionality
* refactor: rename endpoints to /custom-categories in API spec and server to differenciate customized and system in built categories
* feat: implement theme colors and fonts
* feat: expandable sidebar
* feat: setup theme colors and font
---------
Co-authored-by: colombefioren <colomberakotonjanahary@gmail.com>
commit 536036e
Merge: fc8af84 3160a60
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 23 10:32:46 2025 -0400
Merge pull request #3 from colombefioren/feat/prisma-integration
Feat/prisma integration
commit 3160a60
Merge: 387ba2a fc8af84
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 23 10:30:12 2025 -0400
Merge branch 'dev' into feat/prisma-integration
commit 387ba2a
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:21:17 2025 +0300
refactor: change prisma.ts to prisma.js
commit 9498a64
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:16:03 2025 +0300
feat: prisma service singleton
commit feca228
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:02:21 2025 +0300
feat: income categories to schema
commit c06ba95
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:57:45 2025 +0300
feat: define prisma schema models
commit bc0002e
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:48:53 2025 +0300
feat: initialize prisma with postgresql setup
commit e282f34
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:45:26 2025 +0300
chore: add prisma dependencies
commit ea8a0ee
Merge: b1366b7 cc6925d
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 16 07:39:40 2025 -0400
Merge pull request #2 from Mathieu-bot/ui/components
UI/components
* feat(server): add auth route and auth service
* feat(server): add category CRUD operations
* chore(server): update .gitignore
* chore(server): update server dependencies
* feat(server): configure server bootstrap
* docs(server): update OpenAPI spec by removing duplication
* refactor(category): case-insensitive uniqueness + middlewares create/update
Enforce case-insensitive name uniqueness in service (create/update). Use HttpError subclasses (Conflict/NotFound). Add validateCategoryCreate and validateCategoryUpdate with URL checks (protocol, max 255). Wire in routes and simplify controller.
* Feat/income auth (#23)
* style: use datepicker instead of date textfield
* refactor: fix prisma models to match openapi spec
* refactor: remove unnecessary endpoints (income categories)
* refactor: remove income category from service layer
* refactor: update to use new field names (id)
* refactor: remove category references
* refactor: simplify income routes by removing category endpoints
* refactor: remove income category from types
* refactor: remove income category methods from services
* refactor: remove category field and set default date (because of the date required in backend)
* refactor: remove category display from incomelist
* feat: make 1 to be the least amount when creating an income
* refactor: add a dash for when source is empty
* feat: required true to textfield source
* refactor: make the default amount to be 1 instead of 0
* Refactor/income logic (#20)
* refactor: fix prisma models to match openapi spec
* refactor: remove unnecessary endpoints (income categories)
* refactor: remove income category from service layer
* refactor: update to use new field names (id)
* refactor: remove category references
* refactor: simplify income routes by removing category endpoints
* refactor: remove income category from types
* refactor: remove income category methods from services
* refactor: remove category field and set default date (because of the date required in backend)
* refactor: remove category display from incomelist
* feat: make 1 to be the least amount when creating an income
* refactor: add a dash for when source is empty
* feat: required true to textfield source
* refactor: make the default amount to be 1 instead of 0
* feat: auth middleware before granting the autorisation to fetch incomes
* fix: updated password field to be hashed_password
* refactor: prisma models attributes to follow the precendent ones
* fix: enable CORS with credentials for frontend and feat cookieparser for testing
* feat: axios options with withCredentials true to allow cookie storage in front
* fix: name mismatch by turning createdAt to creation_date
* fix: made source field unrequired when users are creating an income
* fix(client): prevent duplicate query parameters in generated request
* feat: enhance input validation in server
* feat: implement frontend value validation and improve error display
* refactor: remove useless import
* chore: remove fake middleware and activate helmet
* feat: simple expense crud (#26)
* feat(api): add expense service
* feat(api): add expense controller, expense route and expense validator
* fix: add expense route to the main server file
* fix(api): add express-validator dependency and fix minor bug
* Feat/profile (#25)
* style: use datepicker instead of date textfield
* refactor: fix prisma models to match openapi spec
* refactor: remove unnecessary endpoints (income categories)
* refactor: remove income category from service layer
* refactor: update to use new field names (id)
* refactor: remove category references
* refactor: simplify income routes by removing category endpoints
* refactor: remove income category from types
* refactor: remove income category methods from services
* refactor: remove category field and set default date (because of the date required in backend)
* refactor: remove category display from incomelist
* feat: make 1 to be the least amount when creating an income
* refactor: add a dash for when source is empty
* feat: required true to textfield source
* refactor: make the default amount to be 1 instead of 0
* Refactor/income logic (#20)
* refactor: fix prisma models to match openapi spec
* refactor: remove unnecessary endpoints (income categories)
* refactor: remove income category from service layer
* refactor: update to use new field names (id)
* refactor: remove category references
* refactor: simplify income routes by removing category endpoints
* refactor: remove income category from types
* refactor: remove income category methods from services
* refactor: remove category field and set default date (because of the date required in backend)
* refactor: remove category display from incomelist
* feat: make 1 to be the least amount when creating an income
* refactor: add a dash for when source is empty
* feat: required true to textfield source
* refactor: make the default amount to be 1 instead of 0
* feat: auth middleware before granting the autorisation to fetch incomes
* fix: updated password field to be hashed_password
* refactor: prisma models attributes to follow the precendent ones
* fix: enable CORS with credentials for frontend and feat cookieparser for testing
* feat: axios options with withCredentials true to allow cookie storage in front
* fix: name mismatch by turning createdAt to creation_date
* fix: made source field unrequired when users are creating an income
* fix(client): prevent duplicate query parameters in generated request
* feat: enhance input validation in server
* feat: implement frontend value validation and improve error display
* feat: add user profile update and password change service functions
* feat: create user profile controller with get, update, and password change endpoints
* feat: add user profile routes with consistent validation pattern
* feat: user profile route in main app
* feat: user service and add user profile methods to defaultservice via addition of new needed paths in the spec
* feat: confirmPassword attribute in the change password request type
* feat: user profile hook
* feat(frontend): implement user profile management
* remove: unnecessary ui component spinner
* feat: user sotre in zustand
* refactor: update dashboard header to use user store
* refactor: update profile page to use zustand user store
* style: fix profile page padding
* refactor: better error display when users arent logged in
* refactor: allow users to provide empty first and last name
---------
Co-authored-by: Tafita Mathieu <hei.tafita.2@gmail.com>
* chore: import api/config
* chore: use location hooks for the location
* style: Update index.css with slide animation
* chore(server): Update docs
* chore(client): regenerate SDK
* feat: add LogoutButton and use it in the sidebar
* feat(auth): add RequireAuth component for protected routes
* feat(auth): add useAuth hooks
* feat(auth): add auth pages (LoginPage, SignupPage)
* feat(client): add auth components like LoginForm, SignupForm ...
* Squashed commit of the following:
commit 1b8d6b30501407a1c6574465ae9932d53f3ae08c
Author: Matieu <hei.tafita.2@gmail.com>
Date: Thu Aug 28 00:24:35 2025 +0300
chore: downgrade App.tsx and Header.tsx to fix deployment issue
commit d4a3a00
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:19:58 2025 +0300
chore: add some dependences
commit 9a63d38
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:17:00 2025 +0300
feat(server/auth): add google oauth service
- use google given_name as default username
commit 2f01f66
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:14:39 2025 +0300
docs(server): Update with all google oauth variables
commit 23055b2
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:14:08 2025 +0300
chore(server/routes): wire Google OAuth routes
commit 783785c
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:13:56 2025 +0300
chore(server): configure global fetch via utils/network and prefer IPv4
commit 80ff59d
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:13:44 2025 +0300
refactor(server/auth): add google auth controller
commit c8cf940
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:12:59 2025 +0300
feat(server/auth): introduce Google OAuth service (build URL, exchange code, fetch profile)
commit b909074
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:12:53 2025 +0300
feat(server/utils): add http timeout helper and network (IPv4/proxy) config
* refactor: type the location to avoid TS errors and ignore src/api in eslint config
* feat(server): seed catégories globales + script prisma:seed + spec categories icon_url
* refactor: use PATCH instead of PUT for /profile
* feat: Update prisma/migration
* feat: implemente updateProfile
* refactor: add panel classe
* feat: implement post-signup flow with category selection
* Feat/post signup (#29)
* refactor: type the location to avoid TS errors and ignore src/api in eslint config
* feat(server): seed catégories globales + script prisma:seed + spec categories icon_url
* refactor: use PATCH instead of PUT for /profile
* feat: Update prisma/migration
* feat: implemente updateProfile
* refactor: add panel classe
* feat: implement post-signup flow with category selection
* fix: fix @typescript-eslint/no-unused-vars
* Feat/UI/auth (#28)
* chore: add .vercel to .gitignore
* Squashed commit of the following:
commit e91ae9d
Author: COCO <colomberakotonjanahary@gmail.com>
Date: Sun Aug 24 19:18:50 2025 +0300
Feat/income creation page (#11)
* remove: prisma output custom path
* chore: move lib folder in server root
* chore(prisma): remove custom generator output and drop icon_emoji attribute from IncomeCategory model
* feat(client): add income models
* feat(server): implement income controller with full CRUD operations
* feat(server): implement income category controller
* feat(server): asyncHandler utility
* refactor: separate controller and service logic for cleaner architecture
* refactor: unify income and income-category controllers
* feat: income routes
* feat: GET /custom-categories endpoint to fetch categories created by the user
* fix: correct income controller exports
* chore: add temporary middleware to mock user (id: 4) for testing
* fix(server): handle missing date field in income creation
* fix(server): resolve invalid date type error
* chore(api): make income.date optional and require category_id in OpenAPI spec
* feat(client): implement income service
* feat(client): custom react hooks for income data
* feat: react-router-dom and setup initial routes for home and incomes
* feat(client): income component and incomes page with full functionality
* refactor: rename endpoints to /custom-categories in API spec and server to differenciate customized and system in built categories
* feat: implement theme colors and fonts
* feat: expandable sidebar
* feat: setup theme colors and font
* remove: icon_emoji column from income_category
* fix: comprehensive error handling and validation for income categories
* chore: regenerate openapi service after spec update
* style: enhance loading component
* fix: make date and source unrequired cause they have default fallbacks
* fix: automatically refresh income list after CRUD operations
* fix: improve income sorting to show most recent items first when dates are equal
* feat: set Salary as default category for new income forms
* feat: implement dedicated page routes for income creation and editing
---------
Co-authored-by: Jonathan <rakotoarisoajonathan0@gmail.com>
commit 0672521
Author: Tsiory Jonathan <167012196+TsioryJonathan@users.noreply.github.com>
Date: Sun Aug 24 15:21:56 2025 +0300
Feat/basic dashboard layout (#9)
* remove: prisma output custom path
* chore: move lib folder in server root
* chore(prisma): remove custom generator output and drop icon_emoji attribute from IncomeCategory model
* feat(client): add income models
* feat(server): implement income controller with full CRUD operations
* feat(server): implement income category controller
* feat(server): asyncHandler utility
* refactor: separate controller and service logic for cleaner architecture
* refactor: unify income and income-category controllers
* feat: income routes
* feat: GET /custom-categories endpoint to fetch categories created by the user
* fix: correct income controller exports
* chore: add temporary middleware to mock user (id: 4) for testing
* fix(server): handle missing date field in income creation
* fix(server): resolve invalid date type error
* chore(api): make income.date optional and require category_id in OpenAPI spec
* feat(client): implement income service
* feat(client): custom react hooks for income data
* feat: react-router-dom and setup initial routes for home and incomes
* feat(client): income component and incomes page with full functionality
* refactor: rename endpoints to /custom-categories in API spec and server to differenciate customized and system in built categories
* feat: implement theme colors and fonts
* feat: expandable sidebar
* feat: setup theme colors and font
---------
Co-authored-by: colombefioren <colomberakotonjanahary@gmail.com>
commit 536036e
Merge: fc8af84 3160a60
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 23 10:32:46 2025 -0400
Merge pull request #3 from colombefioren/feat/prisma-integration
Feat/prisma integration
commit 3160a60
Merge: 387ba2a fc8af84
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 23 10:30:12 2025 -0400
Merge branch 'dev' into feat/prisma-integration
commit 387ba2a
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:21:17 2025 +0300
refactor: change prisma.ts to prisma.js
commit 9498a64
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:16:03 2025 +0300
feat: prisma service singleton
commit feca228
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 13:02:21 2025 +0300
feat: income categories to schema
commit c06ba95
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:57:45 2025 +0300
feat: define prisma schema models
commit bc0002e
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:48:53 2025 +0300
feat: initialize prisma with postgresql setup
commit e282f34
Author: colombefioren <colomberakotonjanahary@gmail.com>
Date: Sat Aug 23 12:45:26 2025 +0300
chore: add prisma dependencies
commit ea8a0ee
Merge: b1366b7 cc6925d
Author: Tafita Mathieu <hei.tafita.2@gmail.com>
Date: Sat Aug 16 07:39:40 2025 -0400
Merge pull request #2 from Mathieu-bot/ui/components
UI/components
* feat(server): add auth route and auth service
* feat(server): add category CRUD operations
* chore(server): update .gitignore
* chore(server): update server dependencies
* feat(server): configure server bootstrap
* docs(server): update OpenAPI spec by removing duplication
* Update .gitignore
* refactor(server): move auth DB logic to service layer; keep controllers thin
* feat(auth): add email and password strength validation
- Add `validator` package to dependencies.
- Replace regex-based email validation with `validator.js` `isEmail`.
- Add password strength validation in the signup controller using
`isStrongPassword` to enforce at least 6 characters, one uppercase
letter, and one number.
* refactor(auth): extract validation logic into middleware
- Create a new [validate.js] middleware to centralize validation logic.
- Implement [requireFields], [validateEmail], [sanitizeBody], and
[validateTextMaxLengths] as reusable middleware functions.
- Create combined middlewares `validateSignup` and `validateLogin` to
simplify route definitions.
- Update auth routes to use the new validation middlewares.
- Simplify the `auth.controller` by removing validation logic now
handled by the middleware, keeping only the password strength check.
- Introduce custom error classes in utils/errors.js for better
HTTP error handling.
* refactor(category): case-insensitive uniqueness + middlewares create/update
Enforce case-insensitive name uniqueness in service (create/update). Use HttpError subclasses (Conflict/NotFound). Add validateCategoryCreate and validateCategoryUpdate with URL checks (protocol, max 255). Wire in routes and simplify controller.
* refactor: remove useless import
* chore: remove fake middleware and activate helmet
* chore: import api/config
* chore: use location hooks for the location
* style: Update index.css with slide animation
* chore(server): Update docs
* chore(client): regenerate SDK
* feat: add LogoutButton and use it in the sidebar
* feat(auth): add RequireAuth component for protected routes
* feat(auth): add useAuth hooks
* feat(auth): add auth pages (LoginPage, SignupPage)
* feat(client): add auth components like LoginForm, SignupForm ...
* Squashed commit of the following:
commit 1b8d6b30501407a1c6574465ae9932d53f3ae08c
Author: Matieu <hei.tafita.2@gmail.com>
Date: Thu Aug 28 00:24:35 2025 +0300
chore: downgrade App.tsx and Header.tsx to fix deployment issue
commit d4a3a00
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:19:58 2025 +0300
chore: add some dependences
commit 9a63d38
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:17:00 2025 +0300
feat(server/auth): add google oauth service
- use google given_name as default username
commit 2f01f66
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:14:39 2025 +0300
docs(server): Update with all google oauth variables
commit 23055b2
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:14:08 2025 +0300
chore(server/routes): wire Google OAuth routes
commit 783785c
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:13:56 2025 +0300
chore(server): configure global fetch via utils/network and prefer IPv4
commit 80ff59d
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:13:44 2025 +0300
refactor(server/auth): add google auth controller
commit c8cf940
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:12:59 2025 +0300
feat(server/auth): introduce Google OAuth service (build URL, exchange code, fetch profile)
commit b909074
Author: Matieu <hei.tafita.2@gmail.com>
Date: Wed Aug 27 22:12:53 2025 +0300
feat(server/utils): add http timeout helper and network (IPv4/proxy) config
* refactor: type the location to avoid TS errors and ignore src/api in eslint config
* feat(server): seed catégories globales + script prisma:seed + spec categories icon_url
* refactor: use PATCH instead of PUT for /profile
* feat: Update prisma/migration
* feat: implemente updateProfile
* refactor: add panel classe
* feat: implement post-signup flow with category selection
* Feat/post signup (#29)
* refactor: type the location to avoid TS errors and ignore src/api in eslint config
* feat(server): seed catégories globales + script prisma:seed + spec categories icon_url
* refactor: use PATCH instead of PUT for /profile
* feat: Update prisma/migration
* feat: implemente updateProfile
* refactor: add panel classe
* feat: implement post-signup flow with category selection
* fix: fix @typescript-eslint/no-unused-vars
* Feat/static dashboard design (#18)
* feat: static sold fluctuation chart
* refactor: single layout component for every type of graph (with title and children)
* feat: static spending pie with filter option
* feat: simple calendar UI with react-calendar
* feat: redesign the dashboard from scratch
* feat: dashboard with mock data
* fix: bug on the tooltip displayer
* feat: seed file for test
* chore: remove invalid attribute in tsconfig.app.json
* feat: implement post-auth gate to activate categories modal when continuing with Google
* feat: add github workflows actions for deployment
* fix: fix github acrions by creating .env for prisma
* fix: remove unused playload parameter
* remove unnecessary eslint-disable comment
* feat(vercel): route /api/* to Express app
---------
Co-authored-by: colombefioren <colomberakotonjanahary@gmail.com>
Co-authored-by: Tsiory Jonathan <167012196+TsioryJonathan@users.noreply.github.com>
Co-authored-by: Jonathan <rakotoarisoajonathan0@gmail.com>
Co-authored-by: Whipander <133404164+Whipander@users.noreply.github.com>
New funcs
Future enhancements
WARNINGGG!! -> Contains all of my previous commits, but worry not, I'm 100% positive there aint any issues anymore