Skip to content

Feat/income creation page#11

Merged
colombefioren merged 38 commits into
devfrom
feat/income-creation-page
Aug 24, 2025
Merged

Feat/income creation page#11
colombefioren merged 38 commits into
devfrom
feat/income-creation-page

Conversation

@colombefioren

Copy link
Copy Markdown
Collaborator

Features Implemented

1. Dedicated Page Routes for Income Management

  • New Route: /incomes/new - Dedicated page for creating new incomes
  • Edit Route: /incomes/:id/edit - Dedicated page for editing existing incomes

2. Enhanced User Experience

  • Default Category: Set "Salary" as default category for new income forms
  • Smart Sorting: Improved income sorting to show most recent items first when dates are equal
  • Reduced Required Fields: Made date and source fields optional with sensible default fallbacks
  • Real-time Updates: Automatic list refresh after all CRUD operations (create, update, delete)

3. UI/UX Improvements

  • Z-index Fixes: Resolved rendering issues with modal overlays and dropdowns

colombefioren and others added 30 commits August 23, 2025 19:25
…er to differenciate customized and system in built categories
@vercel

vercel Bot commented Aug 24, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
expense-tracker Ready Ready Preview Comment Aug 24, 2025 4:05pm

@colombefioren colombefioren removed the enhancement New feature or request label Aug 24, 2025
@colombefioren

Copy link
Copy Markdown
Collaborator Author

The UI has a little problem, maybe it's overflowing

@colombefioren

colombefioren commented Aug 24, 2025

Copy link
Copy Markdown
Collaborator Author

Just wanted to note that this is NOT the final UI, it’s just a temporary implementation for functionality. (Talking bout Income related components)

@colombefioren
colombefioren merged commit e91ae9d into dev Aug 24, 2025
4 checks passed
Mathieu-bot added a commit that referenced this pull request Aug 24, 2025
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
TsioryJonathan pushed a commit that referenced this pull request Aug 26, 2025
* 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.
TsioryJonathan pushed a commit that referenced this pull request Aug 27, 2025
* 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.
TsioryJonathan pushed a commit that referenced this pull request Aug 31, 2025
* 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
Mathieu-bot added a commit that referenced this pull request Aug 31, 2025
* 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: implement post-auth gate to activate categories modal when continuing with Google

* feat: add github workflows actions for deployment

---------

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>
Mathieu-bot added a commit that referenced this pull request Aug 31, 2025
* 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>
TsioryJonathan pushed a commit that referenced this pull request Aug 31, 2025
* 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: implement post-auth gate to activate categories modal when continuing with Google
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants