Compare commits

...
Author SHA1 Message Date
github-actions[bot] 2c43861d49 chore: bump api version to 17 [skip ci] 2026-04-08 22:05:26 +00:00
rmcamposandGitHub ba0a204d75 fix: wrong base url for staging env (#28)
* fix: wrong base url for staging env

* fix: wrong var changed domain
2026-04-08 19:05:00 -03:00
rmcamposandGitHub 405ebfec34 Update devcontainer for Java 2026-04-08 18:02:46 -03:00
rmcamposandGitHub 9102d88a13 Configure devcontainer with Java, Node.js, and Terraform
Added Java, Node.js, and Terraform features to the devcontainer.
2026-04-08 17:23:39 -03:00
rmcamposandGitHub 573bdf39ba chore: drop devcontainer created by ai 2026-04-08 17:17:25 -03:00
rmcamposandGitHub b08bed7977 fix: replace timestamp by git runner on staging deploy 2026-04-08 11:21:32 -03:00
rmcamposandGitHub 48b9eec4be fix: deploy to stg reading from wrong dir 2026-04-08 11:14:34 -03:00
rmcamposandGitHub 68dcb033a4 feat: fix stg deploy file 2026-04-08 11:12:43 -03:00
github-actions[bot] ca75291b39 chore: bump api version to 16 [skip ci] 2026-04-08 13:47:09 +00:00
rmcamposandGitHub 1c3e6a927d chore: bump spring version to 4.0.5 (#27)
* chore: bump spring version to 4.0.5

* feat: add docker build to CI workflow

* feat: add staging deploy - wip

* fix: change triggers to include PR changes

* feat: add server ci and deploy to stg

* chore: add app build candidate

* remove from branch, get from main

* fix: build app candidate

* fix: build app candidate

* fix: fe changes in the app

* fix: app ci workflow dispatch

* chore: improve PR ci and cd

* feat: make deployments always happen for PRs

* feat: improve workflow names
2026-04-08 10:46:41 -03:00
rmcamposandGitHub 3bb21e5315 Create build-app-candidate.yml 2026-04-07 17:59:50 -03:00
rmcamposandGitHub 19d17350fd Add GitHub Actions workflow for server candidate build
This workflow builds and pushes a Docker image for the server candidate using Maven and caches buildpack layers.
2026-04-07 17:35:15 -03:00
rmcamposandGitHub 75b2b87379 fix: drop reduntant workflow trigger and fix changes detect 2026-04-06 12:41:49 -03:00
rmcampos 6f76c9a17a chore: update client dependencies 2026-04-06 12:29:16 -03:00
rmcamposandGitHub c211b5eb21 feat: add dev container 2026-04-06 10:13:19 -03:00
rmcamposandGitHub 9ac3152edb add conditional check 2026-04-05 17:25:26 -03:00
rmcamposandGitHub 3c3d8222ff feat: stop workflow if no changes 2026-04-05 17:18:05 -03:00
rmcamposandGitHub 5898b16089 fix: numeric tag in the backend 2026-04-05 17:13:51 -03:00
rmcamposandGitHub 778937254b chore: make repository name lowercase 2026-04-05 17:01:39 -03:00
rmcamposandGitHub f1b6419411 chore: address tag and number different in the backend image 2026-04-05 17:00:21 -03:00
rmcamposandGitHub fefe3439f4 fix: list backend tags. oh boy 2026-04-05 16:57:01 -03:00
rmcamposandGitHub 97d538ded8 fix: get proper image tags 2026-04-05 16:56:07 -03:00
rmcamposandGitHub 6c2874de56 fix: backend and fronend tags 2026-04-05 16:51:51 -03:00
rmcamposandGitHub 7b1c0ad385 fix: mailgun api key name was wrong 2026-04-05 16:47:18 -03:00
rmcamposandGitHub 80b915ad79 chore: improve deployments 2026-04-05 16:44:59 -03:00
rmcamposandGitHub 136f2cd4ff chore: downgrade actions versions 2026-04-05 16:33:38 -03:00
rmcamposandGitHub ad46c150df fix: wrong ns 2026-04-05 16:29:37 -03:00
rmcamposandGitHub e2a4cba2b5 chore(deploy): fix sort order when listing image to deploy 2026-04-05 16:23:38 -03:00
rmcamposandGitHub 70dfa7b23d chore: finally formatted tf file nicely 2026-04-05 16:20:59 -03:00
rmcamposandGitHub f68e097d0f chore: fix tf file formatting 2026-04-05 16:11:08 -03:00
rmcamposandGitHub 17ca89f47d chore: format tf file 2026-04-05 16:04:44 -03:00
rmcamposandGitHub a67c0f1227 feat: add kubernetes CD 2026-04-05 15:58:28 -03:00
github-actions[bot] 18f21d310d chore: bump api version to 15 [skip ci] 2026-03-17 18:41:21 +00:00
rmcampos f0fa5d4231 chore: fix and improve workflow files 2026-03-17 15:40:39 -03:00
github-actions[bot] 96c31fdbe7 chore: bump api version to 14 [skip ci] 2026-03-17 18:31:34 +00:00
rmcampos 78ac204585 feat: bump dependencies in back and front 2026-03-17 15:30:54 -03:00
github-actions[bot] cfb6c5863b chore: bump api version to 13 [skip ci] 2026-03-16 16:45:38 +00:00
rmcampos 521d16c9ce Merge branch 'main' of github.com:RMCampos/tasknote 2026-03-16 13:45:05 -03:00
rmcampos d58b0f5564 fix: add missing templates and config for new domain 2026-03-16 13:44:46 -03:00
github-actions[bot] 91e2f1ecc8 chore: bump api version to 12 [skip ci] 2026-03-16 15:50:14 +00:00
rmcampos 8f831c35d5 Merge branch 'main' of github.com:RMCampos/tasknote 2026-03-16 12:49:30 -03:00
rmcampos 2c3cc3449b feat: update new error message and translations 2026-03-16 12:48:30 -03:00
rmcampos 820fd56fbc feat: fix message not going back to client in spring v4 2026-03-16 11:53:46 -03:00
github-actions[bot] 41f7dabbf0 chore: bump api version to 11 [skip ci] 2026-03-02 20:45:13 +00:00
rmcamposandGitHub 5041ebeeff feat: fix backend issues with state and memory leak (#23)
* feat: fix backend issues with state and memory leak

* chore: address copilot review issues

* chore: address copilot review round 2

* test: fix test cases
2026-03-02 17:44:29 -03:00
github-actions[bot] fa8c84bb38 chore: bump api version to 10 [skip ci] 2026-02-28 16:08:55 +00:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>RMCamposrmcampos
c3115bc002 Add public note sharing feature (#22)
* Initial plan

* Add note sharing feature: share/unshare endpoints, public note view, share token

Co-authored-by: RMCampos <2219519+RMCampos@users.noreply.github.com>

* Remove redundant nullable=true annotation from NoteEntity shareToken column

Co-authored-by: RMCampos <2219519+RMCampos@users.noreply.github.com>

* Fix checkstyle line-length violations in test files

Co-authored-by: RMCampos <2219519+RMCampos@users.noreply.github.com>

* Fix frontend build and test failures: add shared/shareToken fields to NoteAdd payloads and test

Co-authored-by: RMCampos <2219519+RMCampos@users.noreply.github.com>

* chore: reorganize scripts and migration name

* docs: update readme with new feature

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: RMCampos <2219519+RMCampos@users.noreply.github.com>
Co-authored-by: Ricardo Campos <ricardompcampos@gmail.com>
2026-02-28 13:08:23 -03:00
rmcampos 91e48f2cbb chore: drop dokploy deploy for app 2026-02-27 19:27:09 -03:00
github-actions[bot] 4217ea11c8 chore: bump api version to 9 [skip ci] 2026-02-27 22:14:21 +00:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>RMCamposrmcampos
f41e34486a Add Source and Copy buttons to note markdown modal (#21)
* Initial plan

* Add Source and Copy buttons to ModalMarkdown for note source code view

Co-authored-by: RMCampos <2219519+RMCampos@users.noreply.github.com>

* feat: add healthcheck do native image

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: RMCampos <2219519+RMCampos@users.noreply.github.com>
Co-authored-by: Ricardo Campos <ricardompcampos@gmail.com>
2026-02-27 19:13:53 -03:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>RMCamposrmcampos
29812e8175 fix(readme): replace stale Sonar badges with GitHub Actions CI badges (#15)
* Initial plan

* fix: update README badges - remove Sonar badges and add GitHub Actions CI badges

Co-authored-by: RMCampos <2219519+RMCampos@users.noreply.github.com>

* chore: drop dokploy from backend build

* docs: udpate README

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: RMCampos <2219519+RMCampos@users.noreply.github.com>
Co-authored-by: Ricardo Campos <ricardompcampos@gmail.com>
2026-02-27 15:32:31 -03:00
github-actions[bot] 0444ad5a5d chore: bump api version to 8 [skip ci] 2026-02-27 18:10:34 +00:00
CopilotGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>RMCamposrmcampos
89eb15d714 Upgrade backend to Spring Boot 4.0.3 and Java 25 (#20)
* Initial plan

* feat: upgrade to Spring Boot 4.0.3 and Java 25

Co-authored-by: RMCampos <2219519+RMCampos@users.noreply.github.com>

* chore: fix google check style issues and drop unused annotations

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: RMCampos <2219519+RMCampos@users.noreply.github.com>
Co-authored-by: Ricardo Campos <ricardompcampos@gmail.com>
2026-02-27 15:10:05 -03:00
rmcampos 08ed7c485e chore: drop claude from repo 2026-02-27 13:58:51 -03:00
rmcampos cf598c0971 chore: bump frontend dependencies version 2026-02-27 13:52:52 -03:00
rmcampos e8833320d4 chore: commit package lock client file 2026-02-12 18:25:24 -03:00
rmcampos eb759a232d chore: bump client dependencies 2026-02-12 18:12:28 -03:00
rmcampos 4e167f9a85 chore: add missing files and improve Dockerfile 2026-02-11 11:03:02 -03:00
rmcampos ee2fb62036 feat: improve markdown rendering and add home filter context 2026-02-11 10:57:43 -03:00
github-actions[bot] 5eb9ee5ced chore: bump api version to 7 [skip ci] 2026-02-10 20:53:37 +00:00
rmcampos 2679cf61ac fix: backend null pointer exception 2026-02-10 17:52:45 -03:00
github-actions[bot] 49baf4db77 chore: bump api version to 6 [skip ci] 2026-02-10 20:38:14 +00:00
rmcamposandGitHub c1db12be40 feat: include notes tags (#13) 2026-02-10 17:37:31 -03:00
rmcamposGitHubclaude[bot] <41898282+claude[bot]@users.noreply.github.com>Ricardo Campos
1eab863fca feat: Add tag suggestion dropdown for Notes and Tasks (#12)
* feat: add tag suggestion dropdown for NoteAdd and TaskAdd views

Implement a tag suggestion dropdown in both NoteAdd and TaskAdd components.
When the tag input is focused, available tags are fetched from the API
(GET /rest/home/tasks/tags) and displayed in a filterable dropdown list.
Users can select an existing tag or type a custom one.

Co-authored-by: Ricardo Campos <RMCampos@users.noreply.github.com>

* chore: fix lint issue

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Ricardo Campos <RMCampos@users.noreply.github.com>
2026-02-10 17:35:26 -03:00
rmcampos ed6738381a fix: test CI command 2026-02-10 17:01:03 -03:00
rmcamposGitHubclaude[bot] <41898282+claude[bot]@users.noreply.github.com>Ricardo Campos
b423082b1f fix: Keep filter between actions in Home view (#9)
* fix: keep filter selection between actions in Home view

When a user selects a filter (Tasks, Notes, or a tag) and performs an
action like marking a task as done or deleting a note, the filter is now
preserved after the data reload.

- Extract applyFilter() helper that accepts explicit task/note arrays to
  avoid stale state closure issues
- loadAllTasks() now re-applies the current selectedOption and filterText
  after fetching fresh data instead of resetting to 'everything'
- loadAllNotes() now re-applies the current filter after fetching fresh data
- Add 3 new tests verifying filter persistence after actions

Fixes #8

Co-authored-by: Ricardo Campos <RMCampos@users.noreply.github.com>

* feat: fix race condition as per Claude review

* ci: add CI to client

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Ricardo Campos <RMCampos@users.noreply.github.com>
2026-02-10 16:57:44 -03:00
github-actions[bot] ab34a310c4 chore: bump api version to 5 [skip ci] 2026-02-10 16:00:45 +00:00
rmcamposGitHubclaude[bot] <41898282+claude[bot]@users.noreply.github.com>Ricardo CamposClaude Sonnet 4.5
ee916d02b9 feat: remove 5-tag limit and return all tags alphabetically (#7)
* feat: remove 5-tag limit and return all tags alphabetically

The /rest/home/tasks/tags endpoint previously returned only the top 5
most-used tags. This change removes that restriction so all existing
tags are returned, sorted alphabetically.

Fixes #6

Co-authored-by: Ricardo Campos <RMCampos@users.noreply.github.com>
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* chore: fix test issue and add log version to the right place

* ci: add server ci

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Ricardo Campos <RMCampos@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 13:00:10 -03:00
rmcamposGitHubclaude[bot] <41898282+claude[bot]@users.noreply.github.com>Ricardo Campos
ee38fa256d docs: update CLAUDE.md with current project context (#5)
* docs: update CLAUDE.md with current project context

- Remove non-existent angular/ directory reference
- Update Java version from 17 to 21
- Update Spring Boot version to 3.5.9
- Remove outdated OpenAPI/Swagger documentation reference
- Update docker-compose file references (dev vs prod)
- Add React 19 and React Router v7 information
- Add Taskfile.yml to development workflow section
- Reorganize development workflow with manual and Taskfile options

Fixes #4

Co-authored-by: Ricardo Campos <RMCampos@users.noreply.github.com>

* fix: update Taskfile commands in CLAUDE.md

- Change task dev to task dev-run
- Change task prod to task prod-up
- Split task docker-build into task docker-build-api and task docker-build-web
- Add task -l command to list all available tasks

Co-authored-by: Ricardo Campos <RMCampos@users.noreply.github.com>

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Ricardo Campos <RMCampos@users.noreply.github.com>
2026-02-05 16:01:34 -03:00
rmcamposandGitHub 1d7b10ec4d Merge pull request #2 from RMCampos/add-claude-github-actions-1770309711613
Add claude GitHub actions 1770309711613
2026-02-05 13:47:45 -03:00
rmcampos e4454f913f "Update Claude Code Review workflow" 2026-02-05 13:41:54 -03:00
rmcampos 7ea127c4a9 "Update Claude PR Assistant workflow" 2026-02-05 13:41:53 -03:00
rmcamposandGitHub 7fffb163d1 Merge pull request #1 from RMCampos/add-claude-github-actions-1770309101716
Add claude GitHub actions 1770309101716
2026-02-05 13:35:04 -03:00
rmcampos bd3a6c6f18 "Claude Code Review workflow" 2026-02-05 13:31:44 -03:00
rmcampos 111eb4686b "Claude PR Assistant workflow" 2026-02-05 13:31:43 -03:00
rmcampos da0432a734 chore: bump client dependencies 2026-02-05 13:05:03 -03:00
github-actions[bot] d016d20850 chore: bump api version to 4 [skip ci] 2026-01-18 21:23:25 +00:00
rmcampos 332da7de94 Merge branch 'main' of github.com:RMCampos/tasknote 2026-01-18 18:22:46 -03:00
rmcampos 6c92a5ca91 chore: add job to deploy and fix tests 2026-01-18 18:22:22 -03:00
github-actions[bot] ed464bf719 chore: bump api version to 3 [skip ci] 2026-01-18 20:22:10 +00:00
rmcampos b423e4141f fix: docker image name lowercase 2026-01-18 17:21:19 -03:00
github-actions[bot] a1fc1c1dfc chore: bump api version to 2 [skip ci] 2026-01-18 20:16:08 +00:00
rmcampos cd26ea52b0 feat: improve CI to use GHCR and single versions in the backend 2026-01-18 17:15:35 -03:00
rmcampos a305a95970 feat: upgrade to spring boot 3.5.9 2026-01-17 15:48:46 -03:00
rmcampos 2e24cf06ed feat: bump dependencies to latest version 2026-01-14 16:12:15 -03:00
rmcampos 75e082d64b feat: drop lombok and bump to spring 3.5.9 2026-01-14 16:10:38 -03:00
rmcampos af2b37fae9 ci: add vite build number to ci 2025-12-15 17:56:33 -03:00
rmcampos 77eb28c1c3 ci: fix wrong ci file for server 2025-12-15 17:07:33 -03:00
rmcampos f450b88a7b ci: fix server workflow 2025-12-15 17:06:37 -03:00
rmcampos eb050bfa80 ci: fix app workflow 2025-12-15 17:01:51 -03:00
rmcampos 92cdb86f59 chore: repo clean up 2025-12-15 16:58:28 -03:00
rmcampos ab8757dba4 feat: add Bruno Collections 2025-12-15 16:50:58 -03:00
rmcampos f016eeb2f2 chore: bump webapp dependencies 2025-12-15 16:50:13 -03:00
rmcamposandGitHub 3f95dba104 fix: reload issue and packages updates (#715) 2025-11-05 18:26:00 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
83ae707a6d feat: versions (#709)
* build(deps): bump org.jacoco:jacoco-maven-plugin in /server

Bumps [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.13 to 0.8.14.
- [Release notes](https://github.com/jacoco/jacoco/releases)
- [Commits](https://github.com/jacoco/jacoco/compare/v0.8.13...v0.8.14)

---
updated-dependencies:
- dependency-name: org.jacoco:jacoco-maven-plugin
  dependency-version: 0.8.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: client/Dockerfile to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-ALPINE320-OPENSSL-13174134
- https://snyk.io/vuln/SNYK-ALPINE320-OPENSSL-13174135
- https://snyk.io/vuln/SNYK-ALPINE320-OPENSSL-13174135
- https://snyk.io/vuln/SNYK-ALPINE320-OPENSSL-13174136
- https://snyk.io/vuln/SNYK-ALPINE320-OPENSSL-13174136

* build(deps): bump actions/setup-node from 5 to 6

Bumps [actions/setup-node](https://github.com/actions/setup-node) from 5 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: server/Dockerfile to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-DEBIAN12-PERL-5489190
- https://snyk.io/vuln/SNYK-DEBIAN12-ZLIB-6008963
- https://snyk.io/vuln/SNYK-DEBIAN12-PAM-10378969
- https://snyk.io/vuln/SNYK-DEBIAN12-PAM-10378969
- https://snyk.io/vuln/SNYK-DEBIAN12-PAM-10378969

* build(deps): bump org.springframework.boot:spring-boot-starter-parent

Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.6 to 3.5.7.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.6...v3.5.7)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-version: 3.5.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 11.1.0 to 12.1.1.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-11.1.0...checkstyle-12.1.1)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 12.1.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.31.Final to 6.6.34.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.34/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.31...6.6.34)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.34.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump dependencies and fix tests

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-10-31 18:51:32 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
c9380598cf feat: dependencies bump (#686)
* build(deps): bump org.springframework.boot:spring-boot-starter-parent

Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.5 to 3.5.6.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.5...v3.5.6)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-version: 3.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.apache.maven.plugins:maven-javadoc-plugin

Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.11.3 to 3.12.0.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.11.3...maven-javadoc-plugin-3.12.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-version: 3.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 11.0.1 to 11.1.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-11.0.1...checkstyle-11.1.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 11.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump actions/cache from 4.2.4 to 4.3.0

Bumps [actions/cache](https://github.com/actions/cache) from 4.2.4 to 4.3.0.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4.2.4...v4.3.0)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: 4.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.29.Final to 6.6.31.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.31/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.29...6.6.31)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.31.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.apache.maven.plugins:maven-enforcer-plugin

Bumps [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.6.1 to 3.6.2.
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.6.1...enforcer-3.6.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-version: 3.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: dependencies bump

* feat: improve prod and logs

* fix: AuthService  max length of 100

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-13 17:13:33 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
7f95a9e274 chore: versions bump (#667)
* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 11.0.0 to 11.0.1.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-11.0.0...checkstyle-11.0.1)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 11.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump actions/setup-node from 4 to 5

Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 5.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui

Bumps [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi) from 2.8.11 to 2.8.13.
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases)
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/main/CHANGELOG.md)
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v2.8.11...v2.8.13)

---
updated-dependencies:
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
  dependency-version: 2.8.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.apache.maven.plugins:maven-failsafe-plugin

Bumps [org.apache.maven.plugins:maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.5.3 to 3.5.4.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.3...surefire-3.5.4)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.26.Final to 6.6.29.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.29/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.26...6.6.29)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.29.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.apache.maven.plugins:maven-surefire-plugin

Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.3 to 3.5.4.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.3...surefire-3.5.4)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump SonarSource/sonarqube-scan-action from 5.3.0 to 6.0.0

Bumps [SonarSource/sonarqube-scan-action](https://github.com/sonarsource/sonarqube-scan-action) from 5.3.0 to 6.0.0.
- [Release notes](https://github.com/sonarsource/sonarqube-scan-action/releases)
- [Commits](https://github.com/sonarsource/sonarqube-scan-action/compare/v5.3.0...v6.0.0)

---
updated-dependencies:
- dependency-name: SonarSource/sonarqube-scan-action
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: bump client deps versions

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-20 15:55:48 -03:00
rmcamposandGitHub bf2a83ad44 chore: drop angular - not using at all (#660) 2025-09-20 14:50:16 -03:00
rmcamposandGitHub 0c77393000 fix client and main tags (#633) 2025-08-31 17:23:08 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
5f6cc58e36 feat: upgrade client and angular dependencies (#632)
* build(deps): bump actions/setup-java from 4 to 5

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4 to 5.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui

Bumps [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi) from 2.8.9 to 2.8.11.
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases)
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/main/CHANGELOG.md)
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v2.8.9...v2.8.11)

---
updated-dependencies:
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
  dependency-version: 2.8.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: client versions bump

* feat: angular versions bump

* docs: add commands to upgrade dependencies

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-31 17:03:47 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2da0a9f113 feat: updates (#631)
* build(deps): bump org.springframework.boot:spring-boot-starter-parent

Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.4 to 3.5.5.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.4...v3.5.5)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-version: 3.5.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump io.jsonwebtoken:jjwt-jackson in /server

Bumps io.jsonwebtoken:jjwt-jackson from 0.12.7 to 0.13.0.

---
updated-dependencies:
- dependency-name: io.jsonwebtoken:jjwt-jackson
  dependency-version: 0.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump io.jsonwebtoken:jjwt-impl in /server

Bumps [io.jsonwebtoken:jjwt-impl](https://github.com/jwtk/jjwt) from 0.12.7 to 0.13.0.
- [Release notes](https://github.com/jwtk/jjwt/releases)
- [Changelog](https://github.com/jwtk/jjwt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jwtk/jjwt/compare/0.12.7...0.13.0)

---
updated-dependencies:
- dependency-name: io.jsonwebtoken:jjwt-impl
  dependency-version: 0.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump io.jsonwebtoken:jjwt-api in /server

Bumps [io.jsonwebtoken:jjwt-api](https://github.com/jwtk/jjwt) from 0.12.7 to 0.13.0.
- [Release notes](https://github.com/jwtk/jjwt/releases)
- [Changelog](https://github.com/jwtk/jjwt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jwtk/jjwt/compare/0.12.7...0.13.0)

---
updated-dependencies:
- dependency-name: io.jsonwebtoken:jjwt-api
  dependency-version: 0.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: add Taskfile

* feat: add files, tasks and more automations

* feat: disable email sending if not configured

* chore: rename client to tasknote-web

* feat: add devtools for faster development

* feat: Re-tag Docker image with 'latest' tag

* feat: update wording and improve taskfile

* Implement ApplicationRunner for startup logging

* fix: add reachability json file

* feat: drop old config for JJWT

* Revert "feat: drop old config for JJWT"

This reverts commit ed29cf4684454b0d5e3f1a284b479e2bb6872ad7.

* chore: JJWT finally working now

* test: fix test cases

* ci: fix permissions

* test: add more test cases

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-31 13:43:26 -03:00
rmcamposandGitHub caa0b8b9ea fix: json error and docs (#630)
* feat: add docs and reflection solution - wip

* fix: login and jjwt cloud native issue
2025-08-27 11:13:56 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
a653b3cb41 Feat/upgrades (#613)
* build(deps): bump tmp and @inquirer/editor in /angular

Bumps [tmp](https://github.com/raszi/node-tmp) and [@inquirer/editor](https://github.com/SBoudrias/Inquirer.js). These dependencies needed to be updated together.

Updates `tmp` from 0.2.3 to 0.2.5
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.3...v0.2.5)

Updates `@inquirer/editor` from 4.2.15 to 4.2.16
- [Release notes](https://github.com/SBoudrias/Inquirer.js/releases)
- [Commits](https://github.com/SBoudrias/Inquirer.js/compare/@inquirer/editor@4.2.15...@inquirer/editor@4.2.16)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.5
  dependency-type: indirect
- dependency-name: "@inquirer/editor"
  dependency-version: 4.2.16
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: update dependencies

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-20 13:59:28 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
8d7f37c8a9 chore: update angular version (#606)
* build(deps-dev): bump typescript from 5.8.3 to 5.9.2 in /angular

Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.8.3 to 5.9.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.8.3...v5.9.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 5.9.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: upgrade angular versions

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 18:22:11 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
e52d1d9c23 Chore/new versions (#605)
* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.26.1 to 11.0.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.26.1...checkstyle-11.0.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 11.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump typescript from 5.8.3 to 5.9.2 in /client

Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.8.3 to 5.9.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.8.3...v5.9.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 5.9.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/js from 9.32.0 to 9.33.0 in /client

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.32.0 to 9.33.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.33.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.33.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/compat from 1.3.1 to 1.3.2 in /client

Bumps [@eslint/compat](https://github.com/eslint/rewrite/tree/HEAD/packages/compat) from 1.3.1 to 1.3.2.
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/packages/compat/CHANGELOG.md)
- [Commits](https://github.com/eslint/rewrite/commits/compat-v1.3.2/packages/compat)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-version: 1.3.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump actions/checkout from 4 to 5

Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump actions/cache from 4.2.3 to 4.2.4

Bumps [actions/cache](https://github.com/actions/cache) from 4.2.3 to 4.2.4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4.2.3...v4.2.4)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: 4.2.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.24.Final to 6.6.25.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.25/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.24...6.6.25)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.25.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-router from 7.6.3 to 7.8.0 in /client

Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.6.3 to 7.8.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.8.0/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump sass from 1.89.2 to 1.90.0 in /client

Bumps [sass](https://github.com/sass/dart-sass) from 1.89.2 to 1.90.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.89.2...1.90.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.90.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: eslint error

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 17:56:39 -03:00
rmcamposandGitHub d1a08a0d5c fix: mobile version and radio selection. Issue #590 (#604) 2025-08-12 17:16:05 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
14b76a0a37 chore: app updates (#589)
* build(deps-dev): bump @types/react from 19.1.8 to 19.1.9 in /client

Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.8 to 19.1.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump typescript-eslint from 8.36.0 to 8.39.0 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.36.0 to 8.39.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.39.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.39.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 7.0.4 to 7.0.6 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.0.4 to 7.0.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.0.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.0.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @testing-library/jest-dom in /client

Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.6.3 to 6.6.4.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.6.3...v6.6.4)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-version: 6.6.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.23.Final to 6.6.24.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.24/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.23...6.6.24)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.24.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* updates @stylistic/eslint-plugin to 5.2.2

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-05 15:26:41 -03:00
rmcamposandGitHub 91de896ea7 feat: angular versions bump (#581) 2025-08-01 14:36:57 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
4ecdb940e3 feat: new versions (#580)
* build(deps): bump SonarSource/sonarqube-scan-action from 5.2.0 to 5.3.0

Bumps [SonarSource/sonarqube-scan-action](https://github.com/sonarsource/sonarqube-scan-action) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/sonarsource/sonarqube-scan-action/releases)
- [Commits](https://github.com/sonarsource/sonarqube-scan-action/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: SonarSource/sonarqube-scan-action
  dependency-version: 5.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint from 9.31.0 to 9.32.0 in /client

Bumps [eslint](https://github.com/eslint/eslint) from 9.31.0 to 9.32.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.31.0...v9.32.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.32.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint-config-prettier in /client

Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 10.1.5 to 10.1.8.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.1.5...v10.1.8)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react from 19.1.0 to 19.1.1 in /client

Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) from 19.1.0 to 19.1.1.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.1/packages/react)

---
updated-dependencies:
- dependency-name: react
  dependency-version: 19.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.apache.maven.plugins:maven-enforcer-plugin

Bumps [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.6.0 to 3.6.1.
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.6.0...enforcer-3.6.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-version: 3.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.21.Final to 6.6.23.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.23/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.21...6.6.23)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.23.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint-plugin-jsdoc in /client

Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 51.3.4 to 52.0.0.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v51.3.4...v52.0.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 52.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.springframework.boot:spring-boot-starter-parent

Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.5.3 to 3.5.4.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.5.3...v3.5.4)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-version: 3.5.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-i18next from 15.6.0 to 15.6.1 in /client

Bumps [react-i18next](https://github.com/i18next/react-i18next) from 15.6.0 to 15.6.1.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v15.6.0...v15.6.1)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-version: 15.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: make react-dom the same version as react

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-01 10:42:59 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
8144b9b2fe chore: updates (#565)
* build(deps): bump @angular/forms from 20.0.6 to 20.1.0 in /angular

---
updated-dependencies:
- dependency-name: "@angular/forms"
  dependency-version: 20.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @types/node from 24.0.10 to 24.0.13 in /client

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.0.10 to 24.0.13.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.0.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint from 9.30.1 to 9.31.0 in /client

Bumps [eslint](https://github.com/eslint/eslint) from 9.30.1 to 9.31.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.30.1...v9.31.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.31.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @angular-devkit/build-angular in /angular

---
updated-dependencies:
- dependency-name: "@angular-devkit/build-angular"
  dependency-version: 20.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/common from 20.0.6 to 20.1.0 in /angular

---
updated-dependencies:
- dependency-name: "@angular/common"
  dependency-version: 20.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/platform-browser-dynamic in /angular

---
updated-dependencies:
- dependency-name: "@angular/platform-browser-dynamic"
  dependency-version: 20.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.21.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/js from 9.30.1 to 9.31.0 in /client

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.30.1 to 9.31.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.31.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.31.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump i18next from 25.3.1 to 25.3.2 in /client

Bumps [i18next](https://github.com/i18next/i18next) from 25.3.1 to 25.3.2.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v25.3.1...v25.3.2)

---
updated-dependencies:
- dependency-name: i18next
  dependency-version: 25.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 7.0.2 to 7.0.4 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.0.2 to 7.0.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.0.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @angular/cli from 20.0.5 to 20.1.0 in /angular

---
updated-dependencies:
- dependency-name: "@angular/cli"
  dependency-version: 20.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump on-headers and compression in /angular

---
updated-dependencies:
- dependency-name: on-headers
  dependency-version: 1.1.0
  dependency-type: indirect
- dependency-name: compression
  dependency-version: 1.8.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: fix angular versions

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-22 13:18:47 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
8d886ee3dc chore: versions (#552)
* build(deps): bump org.apache.maven.plugins:maven-enforcer-plugin

Bumps [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.5.0 to 3.6.0.
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.5.0...enforcer-3.6.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-version: 3.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.19.Final to 6.6.20.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.20/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.19...6.6.20)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.20.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint-plugin-jsdoc in /client

Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 50.8.0 to 51.3.4.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v50.8.0...v51.3.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 51.3.4
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @types/node from 22.16.0 to 24.0.10 in /client

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.16.0 to 24.0.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.0.10
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump typescript-eslint from 8.35.1 to 8.36.0 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.35.1 to 8.36.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.36.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.36.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 6.3.5 to 7.0.2 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.3.5 to 7.0.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.0.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-08 16:07:56 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
91f1e21c9e chore: updates (#545)
* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.25.1 to 10.26.1.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.25.1...checkstyle-10.26.1)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 10.26.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.18.Final to 6.6.19.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/main/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/commits)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.19.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @stylistic/eslint-plugin in /client

Bumps [@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/eslint-stylistic/eslint-stylistic/releases)
- [Changelog](https://github.com/eslint-stylistic/eslint-stylistic/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint-stylistic/eslint-stylistic/commits/v5.1.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@stylistic/eslint-plugin"
  dependency-version: 5.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump bootstrap from 5.3.6 to 5.3.7 in /client

Bumps [bootstrap](https://github.com/twbs/bootstrap) from 5.3.6 to 5.3.7.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v5.3.6...v5.3.7)

---
updated-dependencies:
- dependency-name: bootstrap
  dependency-version: 5.3.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-router from 7.6.2 to 7.6.3 in /client

Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.6.2 to 7.6.3.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.6.3/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.6.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/js from 9.29.0 to 9.30.0 in /client

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.29.0 to 9.30.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.30.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.30.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @angular-devkit/build-angular in /angular

Bumps [@angular-devkit/build-angular](https://github.com/angular/angular-cli) from 20.0.3 to 20.0.4.
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/20.0.3...20.0.4)

---
updated-dependencies:
- dependency-name: "@angular-devkit/build-angular"
  dependency-version: 20.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-i18next from 15.5.2 to 15.5.3 in /client

Bumps [react-i18next](https://github.com/i18next/react-i18next) from 15.5.2 to 15.5.3.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v15.5.2...v15.5.3)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-version: 15.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/router from 20.0.4 to 20.0.5 in /angular

Bumps [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router) from 20.0.4 to 20.0.5.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/20.0.5/packages/router)

---
updated-dependencies:
- dependency-name: "@angular/router"
  dependency-version: 20.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/forms from 20.0.4 to 20.0.5 in /angular

Bumps [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms) from 20.0.4 to 20.0.5.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/20.0.5/packages/forms)

---
updated-dependencies:
- dependency-name: "@angular/forms"
  dependency-version: 20.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/platform-browser-dynamic in /angular

Bumps [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) from 20.0.4 to 20.0.5.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/20.0.5/packages/platform-browser-dynamic)

---
updated-dependencies:
- dependency-name: "@angular/platform-browser-dynamic"
  dependency-version: 20.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/core from 20.0.4 to 20.0.5 in /angular

Bumps [@angular/core](https://github.com/angular/angular/tree/HEAD/packages/core) from 20.0.4 to 20.0.5.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/20.0.5/packages/core)

---
updated-dependencies:
- dependency-name: "@angular/core"
  dependency-version: 20.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: bump angular dependencies

* chore: update packages

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-06 18:15:30 -03:00
a0ed8a9c4c fix: delete request (#532)
* fix: corrects delete endpoint to follow HTTP DELETE standard (#509)

* fix: corrects delete endpoint to follow HTTP DELETE standard

* fix: refactor for consistent formatting

* feat: improve account deletion to use delete method

* test: fix account tests

---------

Co-authored-by: Patrick Bpds <patrickbpds@gmail.com>
2025-06-25 11:28:01 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
0ae08f4158 chore: version bump (#529)
* build(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui

Bumps [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi) from 2.8.8 to 2.8.9.
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases)
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/main/CHANGELOG.md)
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v2.8.8...v2.8.9)

---
updated-dependencies:
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
  dependency-version: 2.8.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.17.Final to 6.6.18.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.18/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.17...6.6.18)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.18.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-router from 7.6.1 to 7.6.2 in /client

Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.6.1 to 7.6.2.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/7.6.2/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @types/react from 19.1.5 to 19.1.8 in /client

Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.5 to 19.1.8.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/js from 9.27.0 to 9.29.0 in /client

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.27.0 to 9.29.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.29.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @types/jest from 29.5.14 to 30.0.0 in /client

Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 29.5.14 to 30.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: "@types/jest"
  dependency-version: 30.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump jasmine-core from 5.7.1 to 5.8.0 in /angular

Bumps [jasmine-core](https://github.com/jasmine/jasmine) from 5.7.1 to 5.8.0.
- [Release notes](https://github.com/jasmine/jasmine/releases)
- [Changelog](https://github.com/jasmine/jasmine/blob/main/RELEASE.md)
- [Commits](https://github.com/jasmine/jasmine/compare/v5.7.1...v5.8.0)

---
updated-dependencies:
- dependency-name: jasmine-core
  dependency-version: 5.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.springframework.boot:spring-boot-starter-parent

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-version: 3.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/compiler from 20.0.2 to 20.0.4 in /angular

Bumps [@angular/compiler](https://github.com/angular/angular/tree/HEAD/packages/compiler) from 20.0.2 to 20.0.4.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/20.0.4/packages/compiler)

---
updated-dependencies:
- dependency-name: "@angular/compiler"
  dependency-version: 20.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/forms from 20.0.2 to 20.0.4 in /angular

Bumps [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms) from 20.0.2 to 20.0.4.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/20.0.4/packages/forms)

---
updated-dependencies:
- dependency-name: "@angular/forms"
  dependency-version: 20.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 10.25.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @angular/cli from 20.0.1 to 20.0.3 in /angular

Bumps [@angular/cli](https://github.com/angular/angular-cli) from 20.0.1 to 20.0.3.
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/20.0.1...20.0.3)

---
updated-dependencies:
- dependency-name: "@angular/cli"
  dependency-version: 20.0.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @stylistic/eslint-plugin in /client

---
updated-dependencies:
- dependency-name: "@stylistic/eslint-plugin"
  dependency-version: 5.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/common from 20.0.2 to 20.0.4 in /angular

Bumps [@angular/common](https://github.com/angular/angular/tree/HEAD/packages/common) from 20.0.2 to 20.0.4.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/20.0.4/packages/common)

---
updated-dependencies:
- dependency-name: "@angular/common"
  dependency-version: 20.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: fix angular version and packages

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-25 10:02:23 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
793e6fe85b chore: new versions and new features (#508)
* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.16.Final to 6.6.17.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.17/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.16...6.6.17)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.17.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.24.0 to 10.25.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.24.0...checkstyle-10.25.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 10.25.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump webpack-dev-server and @angular-devkit/build-angular

Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) to 5.2.1 and updates ancestor dependency [@angular-devkit/build-angular](https://github.com/angular/angular-cli). These dependencies need to be updated together.


Updates `webpack-dev-server` from 5.2.0 to 5.2.1
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v5.2.0...v5.2.1)

Updates `@angular-devkit/build-angular` from 19.2.12 to 20.0.1
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/19.2.12...20.0.1)

---
updated-dependencies:
- dependency-name: webpack-dev-server
  dependency-version: 5.2.1
  dependency-type: indirect
- dependency-name: "@angular-devkit/build-angular"
  dependency-version: 20.0.1
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump typescript-eslint from 8.32.1 to 8.34.0 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.32.1 to 8.34.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.34.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.34.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump sass from 1.89.0 to 1.89.2 in /client

Bumps [sass](https://github.com/sass/dart-sass) from 1.89.0 to 1.89.2.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.89.0...1.89.2)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.89.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump vitest from 3.1.4 to 3.2.3 in /client

Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 3.1.4 to 3.2.3.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.2.3/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-version: 3.2.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @types/node from 22.15.21 to 22.15.30 in /client

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.21 to 22.15.30.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.15.30
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @vitest/coverage-v8 from 3.1.4 to 3.2.3 in /client

Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 3.1.4 to 3.2.3.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.2.3/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 3.2.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/core from 19.2.10 to 20.0.2 in /angular

Bumps [@angular/core](https://github.com/angular/angular/tree/HEAD/packages/core) from 19.2.10 to 20.0.2.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/20.0.2/packages/core)

---
updated-dependencies:
- dependency-name: "@angular/core"
  dependency-version: 20.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @angular/cli from 19.2.13 to 20.0.1 in /angular

Bumps [@angular/cli](https://github.com/angular/angular-cli) from 19.2.13 to 20.0.1.
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/19.2.13...20.0.1)

---
updated-dependencies:
- dependency-name: "@angular/cli"
  dependency-version: 20.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @angular/compiler-cli in /angular

Bumps [@angular/compiler-cli](https://github.com/angular/angular/tree/HEAD/packages/compiler-cli) from 19.2.10 to 20.0.2.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/20.0.2/packages/compiler-cli)

---
updated-dependencies:
- dependency-name: "@angular/compiler-cli"
  dependency-version: 20.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: add cloning note feature

* feat: sort notes by id, the last one shows up first

* test: fix test cases

* test: fix test cases

* test: add test case

* test: add more test cases

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-10 16:04:26 -03:00
rmcamposandGitHub dc5fac2f0d Fix/410 fix languages (#483)
* feat: handle languages and save it in the backend. Issue #418. Issue #410

* test: fix test cases

* test: add test cases in the backend
2025-05-29 17:42:32 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
64048dd5d3 Feat/improve security (#482)
* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.15.Final to 6.6.16.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.16/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.15...6.6.16)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.16.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.23.1 to 10.24.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.23.1...checkstyle-10.24.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 10.24.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.springframework.boot:spring-boot-starter-parent

Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.1 to 3.5.0.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.5.0)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-version: 3.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @vitejs/plugin-react from 4.4.1 to 4.5.0 in /client

Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.4.1 to 4.5.0.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@4.5.0/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 4.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-router from 7.6.0 to 7.6.1 in /client

Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.6.0 to 7.6.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.6.1/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-datepicker from 8.3.0 to 8.4.0 in /client

Bumps [react-datepicker](https://github.com/Hacker0x01/react-datepicker) from 8.3.0 to 8.4.0.
- [Release notes](https://github.com/Hacker0x01/react-datepicker/releases)
- [Commits](https://github.com/Hacker0x01/react-datepicker/compare/v8.3.0...v8.4.0)

---
updated-dependencies:
- dependency-name: react-datepicker
  dependency-version: 8.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @stylistic/eslint-plugin in /client

Bumps [@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin) from 4.2.0 to 4.4.0.
- [Release notes](https://github.com/eslint-stylistic/eslint-stylistic/releases)
- [Changelog](https://github.com/eslint-stylistic/eslint-stylistic/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint-stylistic/eslint-stylistic/commits/v4.4.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@stylistic/eslint-plugin"
  dependency-version: 4.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump globals from 16.1.0 to 16.2.0 in /client

Bumps [globals](https://github.com/sindresorhus/globals) from 16.1.0 to 16.2.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.1.0...v16.2.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump jasmine-core from 5.6.0 to 5.7.1 in /angular

Bumps [jasmine-core](https://github.com/jasmine/jasmine) from 5.6.0 to 5.7.1.
- [Release notes](https://github.com/jasmine/jasmine/releases)
- [Changelog](https://github.com/jasmine/jasmine/blob/main/RELEASE.md)
- [Commits](https://github.com/jasmine/jasmine/compare/v5.6.0...v5.7.1)

---
updated-dependencies:
- dependency-name: jasmine-core
  dependency-version: 5.7.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @angular/cli from 19.2.12 to 19.2.13 in /angular

Bumps [@angular/cli](https://github.com/angular/angular-cli) from 19.2.12 to 19.2.13.
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/19.2.12...19.2.13)

---
updated-dependencies:
- dependency-name: "@angular/cli"
  dependency-version: 19.2.13
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/platform-browser-dynamic in /angular

Bumps [@angular/platform-browser-dynamic](https://github.com/angular/angular/tree/HEAD/packages/platform-browser-dynamic) from 19.2.10 to 19.2.13.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/19.2.13/packages/platform-browser-dynamic)

---
updated-dependencies:
- dependency-name: "@angular/platform-browser-dynamic"
  dependency-version: 19.2.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/router from 19.2.10 to 19.2.13 in /angular

Bumps [@angular/router](https://github.com/angular/angular/tree/HEAD/packages/router) from 19.2.10 to 19.2.13.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/19.2.13/packages/router)

---
updated-dependencies:
- dependency-name: "@angular/router"
  dependency-version: 19.2.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/platform-browser in /angular

Bumps [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser) from 19.2.10 to 19.2.13.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/19.2.13/packages/platform-browser)

---
updated-dependencies:
- dependency-name: "@angular/platform-browser"
  dependency-version: 19.2.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: server/Dockerfile to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-DEBIAN12-GCC12-5901316
- https://snyk.io/vuln/SNYK-DEBIAN12-GCC12-5901316
- https://snyk.io/vuln/SNYK-DEBIAN12-GCC12-5901316
- https://snyk.io/vuln/SNYK-DEBIAN12-SHADOW-5879156
- https://snyk.io/vuln/SNYK-DEBIAN12-SHADOW-5879156

* fix: css styles and translations

* chore: fix authentication provider

* chore: fix line too long

* test: update test cases

* chore: prefer coalescing operator

* chore: prefer nullish coalescing operator

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-05-28 18:15:37 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2c22b8e463 chore: versions and note fix (#466)
* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.14.Final to 6.6.15.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.15/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.14...6.6.15)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.15.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @types/react from 19.1.2 to 19.1.4 in /client

Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.2 to 19.1.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-bootstrap from 2.10.9 to 2.10.10 in /client

Bumps [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) from 2.10.9 to 2.10.10.
- [Release notes](https://github.com/react-bootstrap/react-bootstrap/releases)
- [Changelog](https://github.com/react-bootstrap/react-bootstrap/blob/v2.10.10/CHANGELOG.md)
- [Commits](https://github.com/react-bootstrap/react-bootstrap/compare/v2.10.9...v2.10.10)

---
updated-dependencies:
- dependency-name: react-bootstrap
  dependency-version: 2.10.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump typescript-eslint from 8.31.1 to 8.32.1 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.31.1 to 8.32.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.32.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.32.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump i18next from 25.1.2 to 25.2.0 in /client

Bumps [i18next](https://github.com/i18next/i18next) from 25.1.2 to 25.2.0.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v25.1.2...v25.2.0)

---
updated-dependencies:
- dependency-name: i18next
  dependency-version: 25.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint-plugin-jsdoc in /client

Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 50.6.11 to 50.6.17.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v50.6.11...v50.6.17)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-version: 50.6.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: remove complexity

* feat: general improvements, sorry for the long commit

* test: fix test cases and build

* chore: fix backend style issues

* test: remove duplicated test

* chore: remove unused components and files

* test: add home test cases

* test: add missing test file

* chore: fix shorting function

* fix: get back missing css rules

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-24 15:07:26 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
09e84aaf24 chore: versions bump (#459)
* build(deps-dev): bump @eslint/compat from 1.2.8 to 1.2.9 in /client

Bumps [@eslint/compat](https://github.com/eslint/rewrite) from 1.2.8 to 1.2.9.
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/release-please-config.json)
- [Commits](https://github.com/eslint/rewrite/compare/compat-v1.2.8...compat-v1.2.9)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-version: 1.2.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui

Bumps [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi) from 2.8.6 to 2.8.8.
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases)
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/main/CHANGELOG.md)
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v2.8.6...v2.8.8)

---
updated-dependencies:
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
  dependency-version: 2.8.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 6.3.4 to 6.3.5 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.3.4 to 6.3.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump SonarSource/sonarqube-scan-action from 5.1.0 to 5.2.0

Bumps [SonarSource/sonarqube-scan-action](https://github.com/sonarsource/sonarqube-scan-action) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/sonarsource/sonarqube-scan-action/releases)
- [Commits](https://github.com/sonarsource/sonarqube-scan-action/compare/v5.1.0...v5.2.0)

---
updated-dependencies:
- dependency-name: SonarSource/sonarqube-scan-action
  dependency-version: 5.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.13.Final to 6.6.14.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.14/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.13...6.6.14)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.14.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump i18next from 25.0.1 to 25.1.2 in /client

Bumps [i18next](https://github.com/i18next/i18next) from 25.0.1 to 25.1.2.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v25.0.1...v25.1.2)

---
updated-dependencies:
- dependency-name: i18next
  dependency-version: 25.1.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-router from 7.5.2 to 7.6.0 in /client

Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.5.2 to 7.6.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.6.0/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/compiler from 19.2.8 to 19.2.10 in /angular

Bumps [@angular/compiler](https://github.com/angular/angular/tree/HEAD/packages/compiler) from 19.2.8 to 19.2.10.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/19.2.10/packages/compiler)

---
updated-dependencies:
- dependency-name: "@angular/compiler"
  dependency-version: 19.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @angular/compiler-cli in /angular

Bumps [@angular/compiler-cli](https://github.com/angular/angular/tree/HEAD/packages/compiler-cli) from 19.2.8 to 19.2.10.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/19.2.10/packages/compiler-cli)

---
updated-dependencies:
- dependency-name: "@angular/compiler-cli"
  dependency-version: 19.2.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @angular/cli from 19.2.9 to 19.2.11 in /angular

Bumps [@angular/cli](https://github.com/angular/angular-cli) from 19.2.9 to 19.2.11.
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/19.2.9...19.2.11)

---
updated-dependencies:
- dependency-name: "@angular/cli"
  dependency-version: 19.2.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/forms from 19.2.8 to 19.2.10 in /angular

Bumps [@angular/forms](https://github.com/angular/angular/tree/HEAD/packages/forms) from 19.2.8 to 19.2.10.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/19.2.10/packages/forms)

---
updated-dependencies:
- dependency-name: "@angular/forms"
  dependency-version: 19.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @angular/platform-browser in /angular

Bumps [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser) from 19.2.8 to 19.2.10.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/19.2.10/packages/platform-browser)

---
updated-dependencies:
- dependency-name: "@angular/platform-browser"
  dependency-version: 19.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @types/react-dom from 19.0.4 to 19.1.5 in /client

Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 19.0.4 to 19.1.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: "@types/react-dom"
  dependency-version: 19.1.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: package lock json for angular

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-14 12:33:34 -03:00
rmcamposandGitHub 06390c4724 feat: add angular (#447)
* feat: add angular base files

* feat: add angular login components

* feat: add login and register components logic

* feat: add pages components

* feat: enable dependabot for angular

* feat: add components
2025-05-13 09:48:46 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
bbf0d5db3e chore: versions bump (#440)
* build(deps-dev): bump typescript-eslint from 8.31.0 to 8.31.1 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.31.0 to 8.31.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.31.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.31.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.23.0 to 10.23.1.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.23.0...checkstyle-10.23.1)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 10.23.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump bootstrap from 5.3.3 to 5.3.5 in /client

Bumps [bootstrap](https://github.com/twbs/bootstrap) from 5.3.3 to 5.3.5.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v5.3.3...v5.3.5)

---
updated-dependencies:
- dependency-name: bootstrap
  dependency-version: 5.3.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump sass from 1.86.3 to 1.87.0 in /client

Bumps [sass](https://github.com/sass/dart-sass) from 1.86.3 to 1.87.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.86.3...1.87.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.87.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @types/react from 19.0.11 to 19.1.2 in /client

Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.0.11 to 19.1.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-i18next from 15.4.1 to 15.5.1 in /client

Bumps [react-i18next](https://github.com/i18next/react-i18next) from 15.4.1 to 15.5.1.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v15.4.1...v15.5.1)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-version: 15.5.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 6.3.2 to 6.3.4 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.3.2 to 6.3.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 10:44:38 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
2008533e91 chore: versions bump (#432)
* build(deps): bump i18next from 24.2.3 to 25.0.1 in /client

Bumps [i18next](https://github.com/i18next/i18next) from 24.2.3 to 25.0.1.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v24.2.3...v25.0.1)

---
updated-dependencies:
- dependency-name: i18next
  dependency-version: 25.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 6.2.6 to 6.3.2 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.6 to 6.3.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-datepicker from 8.2.1 to 8.3.0 in /client

Bumps [react-datepicker](https://github.com/Hacker0x01/react-datepicker) from 8.2.1 to 8.3.0.
- [Release notes](https://github.com/Hacker0x01/react-datepicker/releases)
- [Commits](https://github.com/Hacker0x01/react-datepicker/compare/v8.2.1...v8.3.0)

---
updated-dependencies:
- dependency-name: react-datepicker
  dependency-version: 8.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @vitejs/plugin-react from 4.3.4 to 4.4.1 in /client

Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.3.4 to 4.4.1.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@4.4.1/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 4.4.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @vitest/coverage-v8 from 3.1.1 to 3.1.2 in /client

Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 3.1.1 to 3.1.2.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.1.2/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 3.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: upgrade react from 19.0.0 to 19.1.0

Snyk has created this PR to upgrade react from 19.0.0 to 19.1.0.

See this package in npm:
react

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade react-dom from 19.0.0 to 19.1.0

Snyk has created this PR to upgrade react-dom from 19.0.0 to 19.1.0.

See this package in npm:
react-dom

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade @types/node from 22.13.14 to 22.13.17

Snyk has created this PR to upgrade @types/node from 22.13.14 to 22.13.17.

See this package in npm:
@types/node

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade react-router from 7.4.0 to 7.4.1

Snyk has created this PR to upgrade react-router from 7.4.0 to 7.4.1.

See this package in npm:
react-router

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* build(deps): bump react-router and react-router-dom in /client

Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) to 7.5.2 and updates ancestor dependency [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom). These dependencies need to be updated together.


Updates `react-router` from 7.4.0 to 7.5.2
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.5.2/packages/react-router)

Updates `react-router-dom` from 7.1.1 to 7.5.2
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.5.2/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.5.2
  dependency-type: direct:production
- dependency-name: react-router-dom
  dependency-version: 7.5.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: fix package-lock.json file

* feat: add sql test commands and restore. Issue #420

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-04-27 17:26:40 -03:00
rmcamposandGitHub dbb8e37d88 feat: add email validation and password reset (#430)
* feat: add user confirmation email - wip

issue #414

* feat: improve register flow and add confirmation email done. Issue 414

* feat: add resend email feature. Issue #414

* feat: add password reset feature. Issue #415

* test: fix and add test cases

* fix: email_uuid column actually can be null

* test: add mailgun service class unit tests

* test: add tests for the authservice and mailgun service classes

* chore: fix sonar cloud issues

* test: add client test

* test: add more test cases

* test: fix test acse

* test: add more test cases

* chore: fix sonar code smells

* chore: remove role element from dic
2025-04-27 16:22:11 -03:00
rmcamposandGitHub c6dd3dd9d5 Feat/321 improve search and results (#419)
* bugfix: when reloading the page logged it doesn't go to home

* feat: make the alert error dismissible

* feat: improve dashboard page. Issue #321

* feat: improve home search tasks. Issue #321

* feat: improve home search. issue #412

* test: fix test cases

* chore: improve url - copilot review

* test: add unit tests. Issue #321

* chore: fix checkstyle issue

* test: add more tests to backend. Issue #321

* chore: fix sonarcloud issues. Issue #321

* test: add frontend tests. Issue #321

* test: add more tests to frontend. Issue #321

* test: add more tests to frontend. Issue #321

* test: add more tests to frontend. Issue #321
2025-04-21 18:59:55 -03:00
rmcamposandGitHub 570f5ebb14 fix: unable to delete user account. Issue #402 (#413)
* fix: unable to delete user account. Issue #402

* chore: fix checkstyle and import orders

* ci: fix sonar project key

* chore: improve test condition and test cases
2025-04-17 10:51:49 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
bf1916e23a Chore/upgrade versions (#411)
* build(deps-dev): bump eslint from 9.22.0 to 9.24.0 in /client

Bumps [eslint](https://github.com/eslint/eslint) from 9.22.0 to 9.24.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.22.0...v9.24.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.24.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump sass from 1.85.1 to 1.86.3 in /client

Bumps [sass](https://github.com/sass/dart-sass) from 1.85.1 to 1.86.3.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.85.1...1.86.3)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.86.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @stylistic/eslint-plugin in /client

Bumps [@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin) from 3.0.1 to 4.2.0.
- [Release notes](https://github.com/eslint-stylistic/eslint-stylistic/releases)
- [Changelog](https://github.com/eslint-stylistic/eslint-stylistic/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint-stylistic/eslint-stylistic/commits/v4.2.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@stylistic/eslint-plugin"
  dependency-version: 4.2.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump jsdom from 26.0.0 to 26.1.0 in /client

Bumps [jsdom](https://github.com/jsdom/jsdom) from 26.0.0 to 26.1.0.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Changelog](https://github.com/jsdom/jsdom/blob/main/Changelog.md)
- [Commits](https://github.com/jsdom/jsdom/compare/26.0.0...26.1.0)

---
updated-dependencies:
- dependency-name: jsdom
  dependency-version: 26.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @testing-library/react in /client

Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 16.2.0 to 16.3.0.
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v16.2.0...v16.3.0)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-version: 16.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: upgrade react-router from 7.3.0 to 7.4.0

Snyk has created this PR to upgrade react-router from 7.3.0 to 7.4.0.

See this package in npm:
react-router

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-04-16 13:46:47 -03:00
rmcamposandGitHub 1e906a0f01 feat: add dark mode (#409)
* feat: add dark mode. Issue #348

* feat: add darkmode and fix btn for the landing page and login. Issue #348

* test: update test cases. Issue #348

* chore: fix sonarcloud code smell. Issue #348
2025-04-16 13:17:36 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
8fd9c05933 chore: new versions (#401)
* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.12.Final to 6.6.13.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.13/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.12...6.6.13)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.13.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.jacoco:jacoco-maven-plugin in /server

Bumps [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.12 to 0.8.13.
- [Release notes](https://github.com/jacoco/jacoco/releases)
- [Commits](https://github.com/jacoco/jacoco/compare/v0.8.12...v0.8.13)

---
updated-dependencies:
- dependency-name: org.jacoco:jacoco-maven-plugin
  dependency-version: 0.8.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump typescript from 5.8.2 to 5.8.3 in /client

Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.8.2 to 5.8.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.8.2...v5.8.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 5.8.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/compat from 1.2.7 to 1.2.8 in /client

Bumps [@eslint/compat](https://github.com/eslint/rewrite) from 1.2.7 to 1.2.8.
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/release-please-config.json)
- [Commits](https://github.com/eslint/rewrite/compare/compat-v1.2.7...compat-v1.2.8)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-version: 1.2.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump dompurify from 3.2.4 to 3.2.5 in /client

Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.2.4 to 3.2.5.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.2.4...3.2.5)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-version: 3.2.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.22.0 to 10.23.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.22.0...checkstyle-10.23.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 10.23.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint-plugin-n from 17.16.2 to 17.17.0 in /client

Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 17.16.2 to 17.17.0.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Changelog](https://github.com/eslint-community/eslint-plugin-n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/v17.16.2...v17.17.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-n
  dependency-version: 17.17.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: server/Dockerfile to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-DEBIAN12-ZLIB-6008963
- https://snyk.io/vuln/SNYK-DEBIAN12-GNUPG2-9486681
- https://snyk.io/vuln/SNYK-DEBIAN12-GLIBC-1547135
- https://snyk.io/vuln/SNYK-DEBIAN12-PAM-8303301
- https://snyk.io/vuln/SNYK-DEBIAN12-TAR-1560620

* fix: client/package.json & client/package-lock.json to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-VITE-9653016

* build(deps): bump vite from 6.2.4 to 6.2.6 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.4 to 6.2.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.2.6
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-04-11 15:21:50 -03:00
rmcamposandGitHub 362a38539d hotfix: server prod deploy (#389) 2025-04-01 18:35:33 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
9b9c7820ae chore: new versions (#388)
* build(deps): bump SonarSource/sonarqube-scan-action from 5.0.0 to 5.1.0

Bumps [SonarSource/sonarqube-scan-action](https://github.com/sonarsource/sonarqube-scan-action) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/sonarsource/sonarqube-scan-action/releases)
- [Commits](https://github.com/sonarsource/sonarqube-scan-action/compare/v5.0.0...v5.1.0)

---
updated-dependencies:
- dependency-name: SonarSource/sonarqube-scan-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump actions/cache from 4.2.2 to 4.2.3

Bumps [actions/cache](https://github.com/actions/cache) from 4.2.2 to 4.2.3.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4.2.2...v4.2.3)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui

Bumps [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi) from 2.8.5 to 2.8.6.
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases)
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/main/CHANGELOG.md)
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v2.8.5...v2.8.6)

---
updated-dependencies:
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/eslintrc from 3.3.0 to 3.3.1 in /client

Bumps [@eslint/eslintrc](https://github.com/eslint/eslintrc) from 3.3.0 to 3.3.1.
- [Release notes](https://github.com/eslint/eslintrc/releases)
- [Changelog](https://github.com/eslint/eslintrc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslintrc/compare/v3.3.0...v3.3.1)

---
updated-dependencies:
- dependency-name: "@eslint/eslintrc"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump i18next from 24.2.2 to 24.2.3 in /client

Bumps [i18next](https://github.com/i18next/i18next) from 24.2.2 to 24.2.3.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v24.2.2...v24.2.3)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 6.2.1 to 6.2.3 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.1 to 6.2.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 6.2.1 to 6.2.4 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.1 to 6.2.4.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.4/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.21.4 to 10.22.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.21.4...checkstyle-10.22.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 10.22.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.apache.maven.plugins:maven-surefire-plugin

Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.2 to 3.5.3.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.2...surefire-3.5.3)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-version: 3.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.11.Final to 6.6.12.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.12/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.11...6.6.12)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-version: 6.6.12.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.apache.maven.plugins:maven-failsafe-plugin

Bumps [org.apache.maven.plugins:maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.5.2 to 3.5.3.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.2...surefire-3.5.3)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-version: 3.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @types/node from 22.13.9 to 22.13.14 in /client

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.9 to 22.13.14.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.13.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @vitest/coverage-v8 from 3.0.8 to 3.1.1 in /client

Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 3.0.8 to 3.1.1.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.1.1/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 3.1.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 16:14:05 -03:00
rmcamposandGitHub 3f10727fe8 feat: add schemaspy (#380) 2025-04-01 14:10:26 -03:00
rmcamposandGitHub 6a20420835 fix: change how server handle secrets (#371)
* fix: change how server handle secrets. Issue #370

* test: add jwt test cases. Issue #370

* chore: fix sonar issues. Issue 370

* fix: cloud native support for external key
2025-03-24 19:57:29 -03:00
rmcamposandGitHub 80317e5453 hotfix: main server workflow (#369)
* ci: fix main server variable

* chore: fix X contact handler
2025-03-19 18:59:12 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
afd9c4aaef hotfix: prod ci and versions (#368)
* build(deps-dev): bump typescript-eslint from 8.26.0 to 8.26.1 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.26.0 to 8.26.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.26.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump prettier from 3.5.2 to 3.5.3 in /client

Bumps [prettier](https://github.com/prettier/prettier) from 3.5.2 to 3.5.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.2...3.5.3)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-router from 7.2.0 to 7.3.0 in /client

Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.2.0 to 7.3.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.3.0/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump globals from 15.14.0 to 16.0.0 in /client

Bumps [globals](https://github.com/sindresorhus/globals) from 15.14.0 to 16.0.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v15.14.0...v16.0.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @types/react from 19.0.3 to 19.0.11 in /client

Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.0.3 to 19.0.11.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.10.Final to 6.6.11.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.11/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.10...6.6.11)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* hotfix: remove hard coded code

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 18:42:24 -03:00
rmcamposandGitHub 45e92eb44c feat: improve UI (#367)
* feat: improve UI hugely. Issue #257

* feat: improve ui. Issue #357

* test: fix test cases

* chore: fix sonar issues
2025-03-19 18:17:29 -03:00
rmcamposandGitHub 56c584b68b hotfix: fix prod deploy (#366) 2025-03-18 11:47:27 -03:00
rmcamposandGitHub 4c0328ac4d Feat/358 make the sidebar responsive (#359)
* ci: attempt to detect prod deployment issue

* feat: make the sidebar responsible. Issue #358

* ci: fix server workflow

* feat: add responsible design

* ci: improve deployments workflow

* ci: fix curl version check

* fix: class name missing

* chore: fix sonar issues
2025-03-18 10:40:18 -03:00
rmcamposandGitHub eda07943a2 ci: fix cd workflow (#356) 2025-03-15 15:52:25 -03:00
rmcamposandGitHub d9c3dfe3c2 feat: automate prod and add filter options, and date picker (#355)
* feat: automate prod deployments

issue #338

* fix: string parse

* feat: add date picker and filter options

issue #127

* feat: add tooltip and date picker

* ci: split stage deploy into separate tasks to allow separate releases

* test: add more test cases

* ci: split workflows into client and server

* ci: fix pr server workflow
2025-03-14 19:27:21 -03:00
rmcamposandGitHub 037cfaca08 Feat/automate prod (#354)
* feat: automate prod deployments

issue #338

* fix: string parse
2025-03-13 15:03:56 -03:00
rmcamposandGitHub 279180d7b6 feat: automate prod deployments (#353)
issue #338
2025-03-13 14:39:09 -03:00
rmcamposandGitHub 4ba705d6c4 chore: improve CI and fix navigation (#352)
* chore: simple change to trigger new ci

* feat: make PR CD work

issue #338

* ci: fix target deploy url

* ci: improve deployments into just one matrix job

* ci: put secret on env

* fix: fix nagivation when creating notes and tasks from the home page

* test: add sidebar test cases

* chore: test files cleanup
2025-03-13 13:56:57 -03:00
rmcampos 9db1a189bd Merge remote-tracking branch 'origin/dependabot/maven/server/org.hibernate.orm.tooling-hibernate-enhance-maven-plugin-6.6.10.Final' 2025-03-12 20:42:11 -03:00
rmcampos 3a1c89d1dd Merge remote-tracking branch 'origin/dependabot/maven/server/com.puppycrawl.tools-checkstyle-10.21.4' 2025-03-12 20:41:58 -03:00
rmcampos 4f96f32daf Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/client/babel/runtime-7.26.10' 2025-03-12 20:41:43 -03:00
rmcampos b992c879d7 Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/client/babel/helpers-7.26.10' 2025-03-12 20:41:26 -03:00
rmcampos e007baf298 fix: favicon missing 2025-03-12 20:40:52 -03:00
rmcampos b65445a042 feat: automate deployments to stage 2025-03-12 20:33:53 -03:00
dependabot[bot]andGitHub 5a15843295 build(deps): bump @babel/runtime from 7.26.0 to 7.26.10 in /client
Bumps [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime) from 7.26.0 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-12 17:17:15 +00:00
dependabot[bot]andGitHub 97d87d3ff3 build(deps): bump @babel/helpers from 7.26.0 to 7.26.10 in /client
Bumps [@babel/helpers](https://github.com/babel/babel/tree/HEAD/packages/babel-helpers) from 7.26.0 to 7.26.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-helpers)

---
updated-dependencies:
- dependency-name: "@babel/helpers"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-12 17:17:14 +00:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
261df08b1e Hotfix/images (#349)
* build(deps-dev): bump @eslint/js from 9.21.0 to 9.22.0 in /client

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.21.0 to 9.22.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.22.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint from 9.17.0 to 9.22.0 in /client

Bumps [eslint](https://github.com/eslint/eslint) from 9.17.0 to 9.22.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.17.0...v9.22.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 6.2.0 to 6.2.1 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.0 to 6.2.1.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@6.2.1/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint-plugin-n from 17.15.1 to 17.16.2 in /client

Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 17.15.1 to 17.16.2.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Changelog](https://github.com/eslint-community/eslint-plugin-n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/v17.15.1...v17.16.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-n
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @vitest/coverage-v8 from 3.0.7 to 3.0.8 in /client

Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 3.0.7 to 3.0.8.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.0.8/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* hotfix: allow images

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-12 14:16:04 -03:00
rmcamposandGitHub e5f3e339f6 feat: add gravatar support (#347)
* feat: add gravatar support

issue #323

chore: fix sidbar issues

* test: fix test case

* chore: fix sonar issues

* chore: fix sonar cloud issues

* test: fix test cases

* test: add more test cases

* ci: fix caddyfile and docker compose
2025-03-11 21:01:00 -03:00
dependabot[bot]andGitHub c4972c2fbe build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.9.Final to 6.6.10.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.10/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.9...6.6.10)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 23:56:56 +00:00
dependabot[bot]andGitHub 70c38933f9 build(deps): bump com.puppycrawl.tools:checkstyle in /server
Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.21.3 to 10.21.4.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.21.3...checkstyle-10.21.4)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 23:56:49 +00:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
a65e55caae feat: improve notes UI (#339)
* build(deps-dev): bump @eslint/eslintrc from 3.2.0 to 3.3.0 in /client

Bumps [@eslint/eslintrc](https://github.com/eslint/eslintrc) from 3.2.0 to 3.3.0.
- [Release notes](https://github.com/eslint/eslintrc/releases)
- [Changelog](https://github.com/eslint/eslintrc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslintrc/compare/v3.2.0...v3.3.0)

---
updated-dependencies:
- dependency-name: "@eslint/eslintrc"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump sass from 1.83.4 to 1.85.1 in /client

Bumps [sass](https://github.com/sass/dart-sass) from 1.83.4 to 1.85.1.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.83.4...1.85.1)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-i18next from 15.4.0 to 15.4.1 in /client

Bumps [react-i18next](https://github.com/i18next/react-i18next) from 15.4.0 to 15.4.1.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v15.4.0...v15.4.1)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @types/node from 22.13.8 to 22.13.9 in /client

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.8 to 22.13.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump typescript from 5.7.3 to 5.8.2 in /client

Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.7.3 to 5.8.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.7.3...v5.8.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump actions/cache from 4.2.1 to 4.2.2

Bumps [actions/cache](https://github.com/actions/cache) from 4.2.1 to 4.2.2.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4.2.1...v4.2.2)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: improve notes UI

issue #322

issue #337

issue #301

* feat: enable notes tracking for the users

* chore: reduce duplications creating components

* chore: fix wordy and add JS Docs

* test: add AlertError test cases

* feat: add contentHeader tests

* test: fix taskAdd test component

* test: add modalMarkdown test cases

* chore: refactor to reduce duplication

* test: add noteTitle component test case

* test: add more tests to About view

* test: add more tests to Account view

* test: add home view test cases

* test: add noteAdd view tests

* test: add note view test cases

* test: add note service unit tests

* chore: fix Sonar issues

* test: add more tests to note service

* chore: small fixes to backend

* test: fix noteAdd view test case

* chore: fix sonar issue

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-09 18:39:31 -03:00
rmcamposandGitHub 05beb6cabf feat: improve svg components and about view styling (#336)
issue #334

issue #335
2025-03-07 09:20:15 -03:00
rmcamposandGitHub 0234c77538 feat: load dashboard data (#333)
* fix: task progress data from back-end

* chore: make backend candidate image default

* feat: load data for the dashboard home from the back-end

issue #320

* test: add tets for completedTasks and TaskProgress components

* test: fix test case in the backend

* feat: fix unauthorized requests

test: add home controller test cases

* test: add home service test cases
2025-03-06 18:51:26 -03:00
rmcamposandGitHub 4ba3d1962d feat: enable user to update his name and data (#332)
* feat: enable user to update his name and data

issue #307

* docs: add JSDocs

* test: fix sidebar tests

* test: fix test cases

* test: add account test cases

* test: add user controller and auth service tests
2025-03-05 12:05:14 -03:00
rmcamposandGitHub 494c77e0af feat: add pr number to images and tag them as prod (#325)
* feat: add pr number to images and tag them as prod

* feat: add labels to docker images
2025-03-03 17:14:52 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
410366adad chore: Server API versions bump (#324)
* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.8.Final to 6.6.9.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.9/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.8...6.6.9)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.21.2 to 10.21.3.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.21.2...checkstyle-10.21.3)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-03 13:37:07 -03:00
rmcamposandGitHub 32969dc861 fix: loggin issues (#319)
* fix: loggin issues

closes #302

feat: improve build number in docker image

* test: fix integration test for the taskController

* test: add unit test to taskService

* test: add more unit tests to taskService

* test: add delete unit tests for taskService

* test: add patch unit tests for taskService
2025-03-02 18:45:36 -03:00
rmcamposandGitHub 255ce7c193 fix: improve application properties and enable more logs (#316)
* fix: improve application properties and enable more logs

* chore: fix application properties

* test: fix test cases

* ci: fix sonarloud project key for the backend

* chore: add variable to manage root logging level

* chore: debug log mode

* feat: fix healthcheck for tasknote api

* feat: fix dockerfile for client - finally

Issue #308

* chore: bump some versions

closes #311

closes #312

closes #313

closes #314

closes #315

closes #317

closes #318

* test: add backend test case

chore: fix note type error on frontend

* test: add test case
2025-03-02 14:35:24 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
d1ebc96fde New versions (#306)
* build(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui

Bumps [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi) from 2.8.4 to 2.8.5.
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases)
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/main/CHANGELOG.md)
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v2.8.4...v2.8.5)

---
updated-dependencies:
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.6.Final to 6.6.8.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.8/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.6...6.6.8)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/js from 9.20.0 to 9.21.0 in /client

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.20.0 to 9.21.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.21.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 6.1.0 to 6.1.1 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.1.0 to 6.1.1.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@6.1.1/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Closes all open PRs

Closes #299

Closes #300

Closes #304

Closes #305

* ci: update github actions

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-22 17:30:31 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
4538151871 feat: add new UI (#291)
* feat: implement new ui for tasks

issue #199

* feat: enable tasks to manage urls

* feat: add sidebar and remove header - wip

issue #199

time spent: 01h07m

* feat: sidebar improvements - wip

issue #199

* feat: side menu - partial

* feat: sidebar finished

* feat: sidebar finished

* feat: dashboard initial

* feat: new about page design

issue #199

* build(deps-dev): bump vitest and @vitest/coverage-v8 in /client

Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) and [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8). These dependencies needed to be updated together.

Updates `vitest` from 3.0.4 to 3.0.5
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.0.5/packages/vitest)

Updates `@vitest/coverage-v8` from 3.0.4 to 3.0.5
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.0.5/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
- dependency-name: "@vitest/coverage-v8"
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: deprecated element and response for 201

* feat: home page almost finished

issue #199

* build(deps-dev): bump eslint-plugin-jsdoc in /client

Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 50.6.1 to 50.6.3.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v50.6.1...v50.6.3)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint-config-prettier in /client

Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 9.1.0 to 10.0.1.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v9.1.0...v10.0.1)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 6.0.11 to 6.1.0 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.0.11 to 6.1.0.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@6.1.0/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/js from 9.17.0 to 9.20.0 in /client

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.17.0 to 9.20.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.20.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: upgrade react-router from 7.1.1 to 7.1.3

Snyk has created this PR to upgrade react-router from 7.1.1 to 7.1.3.

See this package in npm:
react-router

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade react-bootstrap from 2.10.7 to 2.10.8

Snyk has created this PR to upgrade react-bootstrap from 2.10.7 to 2.10.8.

See this package in npm:
react-bootstrap

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* test: add test cases

issue #199

* test: add TaskUrlRepository data tests

issue #199

* test: add TaskService unit tests and fix intentionality Sonar issue

issue #199

* ci: attempt to fix sonar analysis and add badges

* ci: change pr and main workflows server tests

* chore: fix lint issues in the front-end

issue #199

* test: fix test cases for views and components

* chore: fix lint issues

* ci: update node version when running tests

* test: add taskTimeLeft test case

* chore: fix css rule according to css specifications

* chore: address sonar issues

* chore: address sonar issues again

* test: add Sidebar unit tests

* fix: client/Dockerfile to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-ALPINE320-OPENSSL-8690013
- https://snyk.io/vuln/SNYK-ALPINE320-OPENSSL-8690013
- https://snyk.io/vuln/SNYK-ALPINE320-OPENSSL-8235201
- https://snyk.io/vuln/SNYK-ALPINE320-OPENSSL-8235201

* chore: refactor and improve taskTag component and tests

* chore: improve the taskTitle component and add tests

* chore: improve taskUrl component and add test cases

* test: add count view tests

* test: add count view tests files

* test: add taskAdd tests

* test: fix task add

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-02-22 16:29:54 -03:00
dependabot[bot]andGitHub 4763c89f1a build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin from 6.6.4.Final to 6.6.6.Final in /server (#282) 2025-02-07 13:25:03 +00:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
97b3110bb1 chore: versions bump (#289)
* build(deps): bump vite from 6.0.9 to 6.0.11 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.0.9 to 6.0.11.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.0.11/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @types/node from 22.10.10 to 22.13.1 in /client

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.10 to 22.13.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump sass from 1.83.0 to 1.83.4 in /client

Bumps [sass](https://github.com/sass/dart-sass) from 1.83.0 to 1.83.4.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.83.0...1.83.4)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @stylistic/eslint-plugin in /client

Bumps [@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/eslint-stylistic/eslint-stylistic/releases)
- [Changelog](https://github.com/eslint-stylistic/eslint-stylistic/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint-stylistic/eslint-stylistic/commits/v3.0.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@stylistic/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/compat from 1.2.5 to 1.2.6 in /client

Bumps [@eslint/compat](https://github.com/eslint/rewrite) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/release-please-config.json)
- [Commits](https://github.com/eslint/rewrite/compare/compat-v1.2.5...compat-v1.2.6)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: upgrade typescript from 5.7.2 to 5.7.3

Snyk has created this PR to upgrade typescript from 5.7.2 to 5.7.3.

See this package in npm:
typescript

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-02-06 19:57:40 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
1027ee2a57 feat: versions bump (#281)
* build(deps): bump i18next from 24.2.1 to 24.2.2 in /client

Bumps [i18next](https://github.com/i18next/i18next) from 24.2.1 to 24.2.2.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v24.2.1...v24.2.2)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @types/node from 22.10.7 to 22.10.10 in /client

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.7 to 22.10.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @stylistic/eslint-plugin in /client

Bumps [@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin) from 2.12.1 to 3.0.0.
- [Release notes](https://github.com/eslint-stylistic/eslint-stylistic/releases)
- [Changelog](https://github.com/eslint-stylistic/eslint-stylistic/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint-stylistic/eslint-stylistic/commits/v3.0.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@stylistic/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump vitest from 3.0.3 to 3.0.4 in /client

Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 3.0.3 to 3.0.4.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.0.4/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/compat from 1.2.4 to 1.2.5 in /client

Bumps [@eslint/compat](https://github.com/eslint/rewrite) from 1.2.4 to 1.2.5.
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/release-please-config.json)
- [Commits](https://github.com/eslint/rewrite/compare/compat-v1.2.4...compat-v1.2.5)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.21.1 to 10.21.2.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.21.1...checkstyle-10.21.2)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui

Bumps [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi) from 2.8.3 to 2.8.4.
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases)
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/main/CHANGELOG.md)
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v2.8.3...v2.8.4)

---
updated-dependencies:
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: upgrade react-i18next from 15.2.0 to 15.4.0

Snyk has created this PR to upgrade react-i18next from 15.2.0 to 15.4.0.

See this package in npm:
react-i18next

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: coverage v8 version

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-02-01 16:59:20 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
f8d07e87a7 New versions (#272)
* build(deps-dev): bump vitest from 3.0.2 to 3.0.3 in /client

Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 3.0.2 to 3.0.3.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.0.3/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: fix dev packages and versions

* fix: react dom import

* fix: dependency into right place

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-21 18:02:44 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
dce2b04ecc feat/new versions (#268)
* build(deps-dev): bump vitest from 2.1.8 to 3.0.2 in /client

Bumps [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) from 2.1.8 to 3.0.2.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.0.2/packages/vitest)

---
updated-dependencies:
- dependency-name: vitest
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint-plugin-react in /client

Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.37.3 to 7.37.4.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.37.3...v7.37.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @vitest/coverage-v8 from 2.1.8 to 3.0.2 in /client

Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 2.1.8 to 3.0.2.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.0.2/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump jsdom from 25.0.1 to 26.0.0 in /client

Bumps [jsdom](https://github.com/jsdom/jsdom) from 25.0.1 to 26.0.0.
- [Release notes](https://github.com/jsdom/jsdom/releases)
- [Changelog](https://github.com/jsdom/jsdom/blob/main/Changelog.md)
- [Commits](https://github.com/jsdom/jsdom/compare/25.0.1...26.0.0)

---
updated-dependencies:
- dependency-name: jsdom
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @testing-library/user-event in /client

Bumps [@testing-library/user-event](https://github.com/testing-library/user-event) from 14.5.2 to 14.6.0.
- [Release notes](https://github.com/testing-library/user-event/releases)
- [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/user-event/compare/v14.5.2...v14.6)

---
updated-dependencies:
- dependency-name: "@testing-library/user-event"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: client/package.json & client/package-lock.json to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-VITE-8648411

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-01-21 17:08:36 -03:00
rmcamposandGitHub d8b1319240 feat: add backup shell script file (#258)
issue #257
2025-01-14 17:21:28 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
6bb6deeb08 chore: dependabot dependencies version bump (#256)
* build(deps-dev): bump eslint-plugin-jsdoc in /client

Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 50.5.0 to 50.6.1.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v50.5.0...v50.6.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump typescript-eslint from 8.19.0 to 8.19.1 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.19.0 to 8.19.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.19.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react, react-dom and @types/react in /client

Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react), [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) and [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react). These dependencies needed to be updated together.

Updates `react` from 18.3.1 to 19.0.0
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.0.0/packages/react)

Updates `react-dom` from 18.3.1 to 19.0.0
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.0.0/packages/react-dom)

Updates `@types/react` from 18.3.12 to 19.0.3
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: react
  dependency-type: direct:production
  update-type: version-update:semver-major
- dependency-name: react-dom
  dependency-type: direct:production
  update-type: version-update:semver-major
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @types/node from 22.10.2 to 22.10.5 in /client

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.2 to 22.10.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump i18next from 23.16.8 to 24.2.1 in /client

Bumps [i18next](https://github.com/i18next/i18next) from 23.16.8 to 24.2.1.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.16.8...v24.2.1)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: upgrade @types/react-dom from 18.3.3 to 18.3.5

Snyk has created this PR to upgrade @types/react-dom from 18.3.3 to 18.3.5.

See this package in npm:
@types/react-dom

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade react-i18next from 15.1.4 to 15.2.0

Snyk has created this PR to upgrade react-i18next from 15.1.4 to 15.2.0.

See this package in npm:
react-i18next

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* build(deps): bump org.springdoc:springdoc-openapi-starter-webmvc-ui

Bumps [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi) from 2.7.0 to 2.8.3.
- [Release notes](https://github.com/springdoc/springdoc-openapi/releases)
- [Changelog](https://github.com/springdoc/springdoc-openapi/blob/main/CHANGELOG.md)
- [Commits](https://github.com/springdoc/springdoc-openapi/compare/v2.7.0...v2.8.3)

---
updated-dependencies:
- dependency-name: org.springdoc:springdoc-openapi-starter-webmvc-ui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: fix build and react-dom type version

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-01-14 16:33:31 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
d1307c2128 chore: dependencies bump (#245)
* build(deps-dev): bump eslint-plugin-react in /client

Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.37.2 to 7.37.3.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.37.2...v7.37.3)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump sass from 1.80.4 to 1.83.0 in /client

Bumps [sass](https://github.com/sass/dart-sass) from 1.80.4 to 1.83.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.80.4...1.83.0)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump typescript-eslint from 8.18.0 to 8.19.0 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.18.0 to 8.19.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.19.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 6.0.3 to 6.0.6 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.0.3 to 6.0.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.0.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-i18next from 15.1.3 to 15.4.0 in /client

Bumps [react-i18next](https://github.com/i18next/react-i18next) from 15.1.3 to 15.4.0.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v15.1.3...v15.4.0)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.21.0 to 10.21.1.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.21.0...checkstyle-10.21.1)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: upgrade @types/react-dom from 18.3.1 to 18.3.3

Snyk has created this PR to upgrade @types/react-dom from 18.3.1 to 18.3.3.

See this package in npm:
@types/react-dom

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade @testing-library/react from 16.0.1 to 16.1.0

Snyk has created this PR to upgrade @testing-library/react from 16.0.1 to 16.1.0.

See this package in npm:
@testing-library/react

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade react-i18next from 15.1.3 to 15.1.4

Snyk has created this PR to upgrade react-i18next from 15.1.3 to 15.1.4.

See this package in npm:
react-i18next

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-01-02 17:24:19 -03:00
rmcamposandGitHub 02cc7a7d74 doc: improve jsdocs (#235)
* doc: improve jsdocs

* ci: fix sonar project key on main workflow

* chore: improvements and refactoring

* test: fix test case

* chore: upadte sonar

* ci: add sonar propertiles file for client

* chore: fix delete request
2025-01-02 17:03:21 -03:00
77ca171214 fix: server/pom.xml to reduce vulnerabilities (#234)
The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-7687447
- https://snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-7945490
- https://snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-8230364
- https://snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-8230365
- https://snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-8230366
- https://snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-8230368
- https://snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-8230373

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2024-12-30 15:53:42 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
67dee07835 feat: dependabot server (#233)
* build(deps): bump org.springframework.boot:spring-boot-starter-parent

Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.6 to 3.3.7.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.6...v3.3.7)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.6.2.Final to 6.6.4.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.4/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.2...6.6.4)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: try to bump spring to 3.4.1

* feat: decrease code coverage

* fix: add flyway to cloud native config

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-30 14:57:57 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>snyk-bot
9871b83e6f feat: dependabot changes (#232)
* build(deps-dev): bump @stylistic/eslint-plugin in /client

Bumps [@stylistic/eslint-plugin](https://github.com/eslint-stylistic/eslint-stylistic/tree/HEAD/packages/eslint-plugin) from 2.10.1 to 2.12.1.
- [Release notes](https://github.com/eslint-stylistic/eslint-stylistic/releases)
- [Changelog](https://github.com/eslint-stylistic/eslint-stylistic/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint-stylistic/eslint-stylistic/commits/v2.12.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@stylistic/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-router-dom from 6.28.0 to 7.1.1 in /client

Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.28.0 to 7.1.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.1.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump globals from 15.13.0 to 15.14.0 in /client

Bumps [globals](https://github.com/sindresorhus/globals) from 15.13.0 to 15.14.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v15.13.0...v15.14.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint-plugin-n from 17.11.1 to 17.15.1 in /client

Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 17.11.1 to 17.15.1.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Changelog](https://github.com/eslint-community/eslint-plugin-n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/v17.11.1...v17.15.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-n
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-bootstrap from 2.10.6 to 2.10.7 in /client

Bumps [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) from 2.10.6 to 2.10.7.
- [Release notes](https://github.com/react-bootstrap/react-bootstrap/releases)
- [Changelog](https://github.com/react-bootstrap/react-bootstrap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-bootstrap/react-bootstrap/compare/v2.10.6...v2.10.7)

---
updated-dependencies:
- dependency-name: react-bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: upgrade react-i18next from 15.1.2 to 15.1.3

Snyk has created this PR to upgrade react-i18next from 15.1.2 to 15.1.3.

See this package in npm:
react-i18next

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* feat: update to react router v7

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2024-12-30 13:35:05 -03:00
rmcamposandGitHub 0b48a7d816 test: add more unit and integration tests for the backend (#202)
* test: add server unit tests for controllers - partial

issue #71

* test: add task controller unit tests

issue #71

* docs: add cloud scripts to start services

* docs: add sonar to backend

issue #198

* docs: add sonar params

* fix: russian text

* test: add note controller test

issue #71

* test: add auth service unit tests - wip

issue #71

* test: add auth and home service unit tests

issue #71
2024-12-27 16:19:31 -03:00
8fedf9a1ea feat: snyk changes (#223)
* fix: upgrade typescript from 5.6.3 to 5.7.2

Snyk has created this PR to upgrade typescript from 5.6.3 to 5.7.2.

See this package in npm:
typescript

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade i18next from 23.16.5 to 23.16.8

Snyk has created this PR to upgrade i18next from 23.16.5 to 23.16.8.

See this package in npm:
i18next

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade react-bootstrap from 2.10.5 to 2.10.6

Snyk has created this PR to upgrade react-bootstrap from 2.10.5 to 2.10.6.

See this package in npm:
react-bootstrap

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade react-i18next from 15.1.1 to 15.1.2

Snyk has created this PR to upgrade react-i18next from 15.1.1 to 15.1.2.

See this package in npm:
react-i18next

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

---------

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2024-12-19 20:54:58 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
b6d0ebef0a feat: dependabot versions upgrade (#222)
* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.20.2 to 10.21.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.20.2...checkstyle-10.21.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @types/node from 22.10.1 to 22.10.2 in /client

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.1 to 22.10.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/js from 9.16.0 to 9.17.0 in /client

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.16.0 to 9.17.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.17.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint from 9.16.0 to 9.17.0 in /client

Bumps [eslint](https://github.com/eslint/eslint) from 9.16.0 to 9.17.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.16.0...v9.17.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump prettier from 3.3.3 to 3.4.2 in /client

Bumps [prettier](https://github.com/prettier/prettier) from 3.3.3 to 3.4.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.3.3...3.4.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/compat from 1.2.2 to 1.2.4 in /client

Bumps [@eslint/compat](https://github.com/eslint/rewrite) from 1.2.2 to 1.2.4.
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/release-please-config.json)
- [Commits](https://github.com/eslint/rewrite/compare/compat-v1.2.2...compat-v1.2.4)

---
updated-dependencies:
- dependency-name: "@eslint/compat"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-19 20:45:00 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
3da6e4900b chore: dependencies bump (#211)
* build(deps): bump SonarSource/sonarcloud-github-action

Bumps [SonarSource/sonarcloud-github-action](https://github.com/sonarsource/sonarcloud-github-action) from 3.1.0 to 4.0.0.
- [Release notes](https://github.com/sonarsource/sonarcloud-github-action/releases)
- [Commits](https://github.com/sonarsource/sonarcloud-github-action/compare/v3.1.0...v4.0.0)

---
updated-dependencies:
- dependency-name: SonarSource/sonarcloud-github-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.apache.maven.plugins:maven-javadoc-plugin

Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.11.1 to 3.11.2.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.11.1...maven-javadoc-plugin-3.11.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump globals from 15.12.0 to 15.13.0 in /client

Bumps [globals](https://github.com/sindresorhus/globals) from 15.12.0 to 15.13.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v15.12.0...v15.13.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump typescript-eslint from 8.17.0 to 8.18.0 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.17.0 to 8.18.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.18.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 5.4.11 to 6.0.3 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.11 to 6.0.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.0.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @types/node from 22.9.1 to 22.10.1 in /client

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.9.1 to 22.10.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-bootstrap-icons from 1.11.4 to 1.11.5 in /client

Bumps [react-bootstrap-icons](https://github.com/ismamz/react-bootstrap-icons) from 1.11.4 to 1.11.5.
- [Commits](https://github.com/ismamz/react-bootstrap-icons/compare/v1.11.4...v1.11.5)

---
updated-dependencies:
- dependency-name: react-bootstrap-icons
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump nanoid from 3.3.7 to 3.3.8 in /client

Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.7 to 3.3.8.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.7...3.3.8)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* ci: fix sonar project key for client

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-16 16:21:52 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
0961c67e80 chore: combine front PRs (#201)
* build(deps-dev): bump @vitest/coverage-v8 from 2.1.4 to 2.1.8 in /client

Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 2.1.4 to 2.1.8.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v2.1.8/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint-plugin-promise in /client

Bumps [eslint-plugin-promise](https://github.com/eslint-community/eslint-plugin-promise) from 7.2.0 to 7.2.1.
- [Release notes](https://github.com/eslint-community/eslint-plugin-promise/releases)
- [Changelog](https://github.com/eslint-community/eslint-plugin-promise/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint-community/eslint-plugin-promise/compare/v7.2.0...v7.2.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-promise
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint from 9.14.0 to 9.16.0 in /client

Bumps [eslint](https://github.com/eslint/eslint) from 9.14.0 to 9.16.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.14.0...v9.16.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump typescript-eslint from 8.15.0 to 8.17.0 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.15.0 to 8.17.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.17.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @vitejs/plugin-react from 4.3.3 to 4.3.4 in /client

Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.3.3 to 4.3.4.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/v4.3.4/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-05 21:17:35 -03:00
rmcamposandGitHub d843df9e26 feat: add Russian language support (#189)
* feat: add Russian language support

* chore: improve readability - wip

* test: add portuguese util unit tests

* test: add portuguese utils unit tests

* test: add russian utils unit tests

* test: add translator utils unit tests

* chore: refactor to reduce complexity

* test: improve tests

* test: improving tests and reducing duplicataions

* test: fix russian and spanish test cases

* chore: fix sonar issues

* test: fix russian translations and add more test cases
2024-12-05 21:02:26 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
8b3e8a5829 Chore/server prs (#197)
* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.20.1 to 10.20.2.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.20.1...checkstyle-10.20.2)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.springframework.boot:spring-boot-starter-parent

Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.5 to 3.3.6.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.5...v3.3.6)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* docs: add cloud native compile command to tools

* docs: improve tools for backend and scripts

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-04 08:31:44 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
0af136088a chore: Upgrade javascript packages (#187)
* build(deps-dev): bump eslint-plugin-promise in /client

Bumps [eslint-plugin-promise](https://github.com/eslint-community/eslint-plugin-promise) from 7.1.0 to 7.2.0.
- [Release notes](https://github.com/eslint-community/eslint-plugin-promise/releases)
- [Changelog](https://github.com/eslint-community/eslint-plugin-promise/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint-community/eslint-plugin-promise/compare/v7.1.0...v7.2.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-promise
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @testing-library/jest-dom in /client

Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.6.2 to 6.6.3.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.6.2...v6.6.3)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint-plugin-jsdoc in /client

Bumps [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc) from 50.4.3 to 50.5.0.
- [Release notes](https://github.com/gajus/eslint-plugin-jsdoc/releases)
- [Changelog](https://github.com/gajus/eslint-plugin-jsdoc/blob/main/.releaserc)
- [Commits](https://github.com/gajus/eslint-plugin-jsdoc/compare/v50.4.3...v50.5.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsdoc
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-router-dom from 6.28.0 to 7.0.1 in /client

Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.28.0 to 7.0.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.0.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @types/react from 18.3.11 to 18.3.12 in /client

Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.3.11 to 18.3.12.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Revert "build(deps): bump react-router-dom from 6.28.0 to 7.0.1 in /client"

This reverts commit 013d57083824dcb06724ac44937c1240f45e383e.

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-30 12:32:43 -03:00
rmcamposandGitHub df9a05c1d4 feat: improve accessibility a bit (#178) 2024-11-22 16:57:32 -03:00
rmcamposandGitHub e198907546 Feat/102 notes with more than 300 characters (#175)
* feat: update tasks UI and add high priority and and due-date option

issue #57

* improve ui

* improve ui for task

* feat: handles due date and high priority tasks

issue #57

* feat: update task with new features

issue #52

* feat: allow users to set high priority tasks and due date done

issue #52

issue #57

* test: add unit tests

* doc: improve readme

* doc: fix table of contents on readme

* feat: enable users to type up to 2000 chars on notes

issue #102
2024-11-22 11:42:00 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
bc5c9865da chore: combine front bumps (#176)
* build(deps-dev): bump typescript-eslint from 8.14.0 to 8.15.0 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.14.0 to 8.15.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.15.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/js from 9.14.0 to 9.15.0 in /client

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.14.0 to 9.15.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.15.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump globals from 15.11.0 to 15.12.0 in /client

Bumps [globals](https://github.com/sindresorhus/globals) from 15.11.0 to 15.12.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v15.11.0...v15.12.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-i18next from 15.0.3 to 15.1.1 in /client

Bumps [react-i18next](https://github.com/i18next/react-i18next) from 15.0.3 to 15.1.1.
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v15.0.3...v15.1.1)

---
updated-dependencies:
- dependency-name: react-i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @types/node from 22.7.9 to 22.9.1 in /client

Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.7.9 to 22.9.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-22 09:46:54 -03:00
a958ef723d feat: combine frontend prs (#168)
* fix: upgrade @types/node from 22.7.6 to 22.7.9

Snyk has created this PR to upgrade @types/node from 22.7.6 to 22.7.9.

See this package in npm:
@types/node

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade vite from 5.4.8 to 5.4.10

Snyk has created this PR to upgrade vite from 5.4.8 to 5.4.10.

See this package in npm:
vite

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade @types/jest from 29.5.13 to 29.5.14

Snyk has created this PR to upgrade @types/jest from 29.5.13 to 29.5.14.

See this package in npm:
@types/jest

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade @vitejs/plugin-react from 4.3.2 to 4.3.3

Snyk has created this PR to upgrade @vitejs/plugin-react from 4.3.2 to 4.3.3.

See this package in npm:
@vitejs/plugin-react

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade react-i18next from 15.0.3 to 15.1.0

Snyk has created this PR to upgrade react-i18next from 15.0.3 to 15.1.0.

See this package in npm:
react-i18next

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

---------

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2024-11-20 17:12:30 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
bcd5597fd1 chore: combine client upgrades (#167)
* build(deps): bump i18next from 23.16.4 to 23.16.5 in /client

Bumps [i18next](https://github.com/i18next/i18next) from 23.16.4 to 23.16.5.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.16.4...v23.16.5)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump react-router-dom from 6.27.0 to 6.28.0 in /client

Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.27.0 to 6.28.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.28.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump typescript-eslint from 8.12.2 to 8.14.0 in /client

Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.12.2 to 8.14.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.14.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump vite from 5.4.8 to 5.4.11 in /client

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.8 to 5.4.11.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.11/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.11/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump @types/jest from 29.5.13 to 29.5.14 in /client

Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 29.5.13 to 29.5.14.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: "@types/jest"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-15 16:44:14 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
502d1787d7 chore: combine server PRs (#166)
* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.20.0 to 10.20.1.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.20.0...checkstyle-10.20.1)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.hibernate.orm.tooling:hibernate-enhance-maven-plugin

Bumps [org.hibernate.orm.tooling:hibernate-enhance-maven-plugin](https://github.com/hibernate/hibernate-orm) from 6.5.3.Final to 6.6.2.Final.
- [Release notes](https://github.com/hibernate/hibernate-orm/releases)
- [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.2/changelog.txt)
- [Commits](https://github.com/hibernate/hibernate-orm/compare/6.5.3...6.6.2)

---
updated-dependencies:
- dependency-name: org.hibernate.orm.tooling:hibernate-enhance-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* ci: add script to run with native pr

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-15 16:23:23 -03:00
rmcamposandGitHub 63e696b2b1 feat: Create user area and allow users to delete their account (#153)
* feat: create migration to update task table schema

issue #52

issue #57

* chore: fix docker compose and client package-lock file

* fix: wrong placeholder for email at the login page

issue #134

* fix: wrong placeholder for email at the register page

issue #134

* feat: update all forms to start as valid

* feat: create user area where he can manage data and language

issue #135

issue #130

issue #104

* chore: simplify back-end services

* feat: delete user data from server

issue #104

* test: add simple test case for login and register and fix footer
2024-11-10 17:10:14 -03:00
354c4c6851 chore: updagre snyk packages (#152)
* fix: upgrade react-router-dom from 6.26.2 to 6.27.0

Snyk has created this PR to upgrade react-router-dom from 6.26.2 to 6.27.0.

See this package in npm:
react-router-dom

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade @types/node from 22.7.5 to 22.7.6

Snyk has created this PR to upgrade @types/node from 22.7.5 to 22.7.6.

See this package in npm:
@types/node

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade @types/jest from 29.5.12 to 29.5.13

Snyk has created this PR to upgrade @types/jest from 29.5.12 to 29.5.13.

See this package in npm:
@types/jest

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade i18next from 23.15.2 to 23.16.0

Snyk has created this PR to upgrade i18next from 23.15.2 to 23.16.0.

See this package in npm:
i18next

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

* fix: upgrade react-i18next from 15.0.2 to 15.0.3

Snyk has created this PR to upgrade react-i18next from 15.0.2 to 15.0.3.

See this package in npm:
react-i18next

See this project in Snyk:
https://app.snyk.io/org/ricardocampos-dcn/project/4d31651d-a849-4b8a-83a3-f8aaba677c53?utm_source=github&utm_medium=referral&page=upgrade-pr

---------

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2024-11-09 13:40:57 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
eda5565e49 feat: client versions bump (#151)
* build(deps): bump i18next from 23.15.2 to 23.16.4 in /client

Bumps [i18next](https://github.com/i18next/i18next) from 23.15.2 to 23.16.4.
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v23.15.2...v23.16.4)

---
updated-dependencies:
- dependency-name: i18next
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump typescript from 5.6.2 to 5.6.3 in /client

Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.6.2 to 5.6.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.6.2...v5.6.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @eslint/js from 9.13.0 to 9.14.0 in /client

Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.13.0 to 9.14.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.14.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump eslint from 9.13.0 to 9.14.0 in /client

Bumps [eslint](https://github.com/eslint/eslint) from 9.13.0 to 9.14.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.13.0...v9.14.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps-dev): bump @vitest/coverage-v8 from 2.1.1 to 2.1.4 in /client

Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 2.1.1 to 2.1.4.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v2.1.4/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: update to use npm ci instead of just install

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-07 13:13:09 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
b4d01e1e1b feat server versions bump (#150)
* build(deps): bump org.apache.maven.plugins:maven-surefire-plugin

Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.1 to 3.5.2.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.1...surefire-3.5.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.apache.maven.plugins:maven-javadoc-plugin

Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.10.1 to 3.11.1.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.10.1...maven-javadoc-plugin-3.11.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.apache.maven.plugins:maven-failsafe-plugin

Bumps [org.apache.maven.plugins:maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.5.1 to 3.5.2.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.1...surefire-3.5.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.19.0 to 10.20.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.19.0...checkstyle-10.20.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-07 12:01:58 -03:00
rmcamposandGitHub 642a09e855 chore: improve readme and automations (#133) 2024-11-01 20:57:43 -03:00
rmcamposandGitHub 44d3fb23aa feat: Add Brazilian Portuguese and Spanish languages (#132)
* feat: add languages - wip

issue #90

based on article https://dev.to/franklin030601/building-a-multi-language-app-with-react-js-2och

* feat: translate landing, login and register pages

issue #90

* feat: translate all the external texts and messages

issue #90

* feat: add new automations scripts and remove old ones

* feat: add server build info on actuator health page

* feat: language handling for all external pages

issue #90

* feat: start translation at the home page - wip

issue #90

* feat: improve automation to run services on docker

* feat: more automations for the client this time

* feat: translate finished for the home page

issue #90

* feat: translate about page, header and footer

issue #90

* feat: translate task page

issue #90

* feat: translate notes

issue #90

* feat: increase token expiration to one week

* test: fix test cases

* ci: remove client docker image from workflow

* feat: improve reliability

* chore: reduce duplications

* feat: fix lint issues

thansk to https://dev.to/aolyang/eslint-9-flat-config-tutorial-2bm5

* fix: path when login or register
2024-11-01 15:25:57 -03:00
rmcamposGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
787bcd1773 feat: server versions bump (#129)
* build(deps): bump com.puppycrawl.tools:checkstyle in /server

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.18.2 to 10.19.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.18.2...checkstyle-10.19.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.apache.maven.plugins:maven-checkstyle-plugin

Bumps [org.apache.maven.plugins:maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin) from 3.5.0 to 3.6.0.
- [Commits](https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.5.0...maven-checkstyle-plugin-3.6.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-checkstyle-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump org.springframework.boot:spring-boot-starter-parent

Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.4 to 3.3.5.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.4...v3.3.5)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* feat: add backend version to all responses in a header

issue #105

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-29 18:55:24 -03:00
rmcamposandGitHub 17897f2090 feat: fixes #120 #121 #122 #123 (#128) 2024-10-29 13:07:08 -03:00
dependabot[bot]andGitHub 8faa8af456 build(deps-dev): bump eslint from 8.57.0 to 9.13.0 in /client (#117) 2024-10-29 15:55:54 +00:00
rmcamposandGitHub fdc7f84907 Merge pull request #119 from ricardo-campos-org/feat/bump-client-versions
feat: bump client versions
2024-10-23 13:42:13 -03:00
Ricardo Campos 8e7119e91f Merge branch 'dependabot/npm_and_yarn/client/typescript-eslint/eslint-plugin-8.11.0' into feat/bump-client-versions 2024-10-23 13:07:42 -03:00
Ricardo Campos 9e8eee3723 Merge branch 'dependabot/npm_and_yarn/client/sass-1.80.3' into feat/bump-client-versions 2024-10-23 13:05:19 -03:00
Ricardo Campos 5affb6197f Merge branch 'dependabot/npm_and_yarn/client/types/react-18.3.11' into feat/bump-client-versions 2024-10-23 13:03:28 -03:00
dependabot[bot]andGitHub fcd40346ee build(deps-dev): bump @typescript-eslint/eslint-plugin in /client
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.4.0 to 8.11.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.11.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 23:46:20 +00:00
dependabot[bot]andGitHub ffc2247985 build(deps-dev): bump sass from 1.79.4 to 1.80.3 in /client
Bumps [sass](https://github.com/sass/dart-sass) from 1.79.4 to 1.80.3.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.79.4...1.80.3)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 23:45:23 +00:00
dependabot[bot]andGitHub fc5f27a915 build(deps-dev): bump @types/react from 18.3.10 to 18.3.11 in /client
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.3.10 to 18.3.11.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 23:31:15 +00:00
dependabot[bot]andGitHub 09a5064364 build(deps): bump @types/react-dom from 18.3.0 to 18.3.1 in /client
Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 18.3.0 to 18.3.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: "@types/react-dom"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 23:31:00 +00:00
rmcamposandGitHub e87973788c Merge pull request #110 from ricardo-campos-org/feat/56-login-and-registering-improvements
feat: login and registering improvements
2024-10-12 14:01:40 -03:00
rmcamposandGitHub 3721d60b40 Merge pull request #106 from ricardo-campos-org/fix/website-content-category
fix: website content category
2024-10-10 21:36:07 -03:00
Ricardo Campos 2c47eb7416 feat: fix backend validation for passwords and max attemps
issue #56
2024-10-10 21:35:29 -03:00
Ricardo Campos 340ed324e5 feat: improve login with max attempt limit and better passwords
issue #56
2024-10-09 19:19:24 -03:00
Ricardo Campos b3bdf17597 add nginx file template and fix reloading outside of the app
issue #89
2024-10-09 18:05:31 -03:00
Ricardo Campos f470bfae50 Merge branch 'main' into fix/website-content-category 2024-10-09 17:47:22 -03:00
rmcamposandGitHub 72407ba2e1 Merge pull request #108 from ricardo-campos-org/feat/54-sort-tasks-by-undone-first-then-done
feat: sort tasks by undone first then done
2024-10-09 14:22:27 -03:00
Ricardo Campos dfcd6b2171 fix: npe when formatting 2024-10-09 12:27:18 -03:00
Ricardo Campos 1dd3311c8c feat: remove lib and format manually
docs: add javadoc
2024-10-09 12:06:33 -03:00
Ricardo Campos e87e1aa557 feat: add all prettytime resources to config cloudnative 2024-10-09 10:55:26 -03:00
Ricardo Campos b5d050eab8 fix: attempt to fix locale issue again again again 2024-10-08 19:37:57 -03:00
Ricardo Campos d6a11a5e07 fix: attempt to fix locale issue again again 2024-10-08 19:21:31 -03:00
Ricardo Campos fd2db315cc fix: attempt to fix locale issue again 2024-10-08 19:06:50 -03:00
Ricardo Campos a571501992 fix: attempt to fix locale issue 2024-10-08 18:46:45 -03:00
Ricardo Campos 55a570a969 fix: locale settings for server 2024-10-08 18:11:34 -03:00
Ricardo Campos 6fce3dd8db chore: fix lint issues 2024-10-08 16:37:02 -03:00
Ricardo Campos ad6d4fe07c Merge branch 'main' into feat/54-sort-tasks-by-undone-first-then-done 2024-10-08 15:50:41 -03:00
rmcamposandGitHub d5632c1c4c Merge pull request #107 from ricardo-campos-org/feat/server-versions-bump
feat: server versions bump
2024-10-08 15:49:56 -03:00
Ricardo Campos 0e73d48a30 feat: sort by undone first
feat: add time ago format for the last updated task time

issue #54
2024-10-08 15:48:51 -03:00
Ricardo Campos 27f49a9a89 Merge branch 'dependabot/maven/server/org.apache.maven.plugins-maven-failsafe-plugin-3.5.1' into feat/server-versions-bump 2024-10-08 13:55:32 -03:00
Ricardo Campos 647497af1a Merge branch 'dependabot/maven/server/org.apache.maven.plugins-maven-surefire-plugin-3.5.1' into feat/server-versions-bump 2024-10-08 13:55:18 -03:00
Ricardo Campos 2899fd60c8 Merge branch 'dependabot/maven/server/org.apache.maven.plugins-maven-javadoc-plugin-3.10.1' into feat/server-versions-bump 2024-10-08 13:55:01 -03:00
Ricardo Campos 283d244c55 Merge branch 'main' into fix/website-content-category 2024-10-08 13:04:01 -03:00
dependabot[bot]andGitHub 6959431bf9 build(deps): bump @testing-library/react from 16.0.0 to 16.0.1 in /client (#98) 2024-10-08 12:55:13 +00:00
dependabot[bot]andGitHub 8fc2df747f build(deps): bump @types/node from 22.7.0 to 22.7.5 in /client (#96) 2024-10-08 12:47:53 +00:00
dependabot[bot]andGitHub bd77b91a3c build(deps): bump @vitejs/plugin-react from 4.3.1 to 4.3.2 in /client (#95) 2024-10-08 12:41:49 +00:00
dependabot[bot]andGitHub 11f96bf047 build(deps): bump SonarSource/sonarcloud-github-action from 3.0.0 to 3.1.0 (#93) 2024-10-08 12:36:25 +00:00
rmcamposandGitHub 1480cef8e2 Merge pull request #94 from ricardo-campos-org/dependabot/npm_and_yarn/client/eslint-plugin-import-2.31.0
build(deps-dev): bump eslint-plugin-import from 2.29.1 to 2.31.0 in /client
2024-10-08 09:32:48 -03:00
rmcampos a8a87d8d03 ci: tests ok, empty commit to trigger ci 2024-10-08 09:29:29 -03:00
rmcamposandGitHub 333cb423d0 Merge pull request #92 from ricardo-campos-org/feat/91-display-error-from-backend-registering
fix: display actual message from backend
2024-10-08 08:27:30 -03:00
dependabot[bot]andGitHub fa9a710417 build(deps): bump org.apache.maven.plugins:maven-failsafe-plugin
Bumps [org.apache.maven.plugins:maven-failsafe-plugin](https://github.com/apache/maven-surefire) from 3.5.0 to 3.5.1.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.0...surefire-3.5.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-failsafe-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 23:38:47 +00:00
dependabot[bot]andGitHub b1fe277063 build(deps): bump org.apache.maven.plugins:maven-surefire-plugin
Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.0 to 3.5.1.
- [Release notes](https://github.com/apache/maven-surefire/releases)
- [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.0...surefire-3.5.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-surefire-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 23:38:44 +00:00
dependabot[bot]andGitHub 30d1ceaf73 build(deps): bump org.apache.maven.plugins:maven-javadoc-plugin
Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.10.0 to 3.10.1.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.10.0...maven-javadoc-plugin-3.10.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 23:38:40 +00:00
dependabot[bot]andGitHub af9c3280f6 build(deps-dev): bump eslint-plugin-import in /client
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.29.1 to 2.31.0.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.29.1...v2.31.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 23:35:57 +00:00
Ricardo Campos 82748e4ac4 ci: add upload action to save the zip 2024-10-07 18:52:43 -03:00
Ricardo Campos 69c40419ea ci: fix dist client location for zipping 2024-10-07 18:38:21 -03:00
Ricardo Campos 2aaa4e7543 ci: add zip action to build and zip client 2024-10-07 18:32:39 -03:00
Ricardo Campos b63be64788 fix: display actual message from backend
issue #91
2024-10-07 18:04:15 -03:00
Ricardo Campos 0a18749dce feat: improve meta tags 2024-10-07 11:34:33 -03:00
rmcamposandGitHub dbc5f68d5e Merge pull request #88 from ricardo-campos-org/fix/87-list-of-bugs-in-the-frontend
fix: list of bugs in the frontend
2024-10-06 19:12:57 -03:00
rmcampos b1891277e9 test: fix test case for the home controller test 2024-10-06 18:57:01 -03:00
rmcampos 73f8741013 feat: improve about page, fix home summary adding notes count
issue #87
2024-10-06 18:52:15 -03:00
rmcampos 6bcd1515c4 test: fix test cases and lint issues 2024-10-06 17:58:44 -03:00
rmcampos 1f17af2a0d Merge branch 'fix/87-list-of-bugs-in-the-frontend' of github.com:ricardo-campos-org/react-typescript-todolist into fix/87-list-of-bugs-in-the-frontend 2024-10-06 15:39:28 -03:00
rmcampos 7089c653ff feat: improve styling, add background, fix primary color and notifications
issue #87
2024-10-06 15:39:08 -03:00
rmcampos 9d430b9e5a feat: improve styling, add background, fix primary color and notifications
issue #66
2024-10-06 15:38:34 -03:00
rmcamposandGitHub d03c9639e9 Merge pull request #86 from ricardo-campos-org/fix/backend-digitalocean
feat: enable security on backend for digitalocean
2024-10-06 14:09:22 -03:00
rmcampos e8c82f411e ci: fix pr workflow file 2024-10-06 14:06:46 -03:00
rmcampos 98012bac24 feat: improve workflows and remove console log 2024-10-06 14:05:46 -03:00
rmcampos 9e603f8bb6 fix: disable csrf for testing 2024-10-05 19:57:41 -03:00
rmcampos fc93ca4d0b fix: csrf token filter handler - attemp #2 2024-10-05 19:45:55 -03:00
rmcampos d303d4050d fix: csrf token filter handler 2024-10-05 19:23:47 -03:00
rmcampos e501e2b4a4 feat: another attempt to fix backend cors 2024-10-05 14:58:48 -03:00
Ricardo Campos 6e820c9104 chore: get back changes 2024-10-04 12:41:06 -03:00
rmcamposandGitHub 9acd7afa1d Update application.properties 2024-10-04 12:02:23 -03:00
rmcampos c4da2a7b7f feat: enable security on backend for digitalocean 2024-10-03 21:55:22 -03:00
rmcamposandGitHub 4925860410 Merge pull request #83 from ricardo-campos-org/dependabot/maven/server/com.puppycrawl.tools-checkstyle-10.18.2
build(deps): bump com.puppycrawl.tools:checkstyle from 10.18.1 to 10.18.2 in /server
2024-10-03 10:51:05 -03:00
Ricardo Campos 43c7a539c7 Merge branch 'main' into dependabot/maven/server/com.puppycrawl.tools-checkstyle-10.18.2 2024-10-03 10:28:22 -03:00
rmcamposandGitHub 5d53637e85 Merge pull request #84 from ricardo-campos-org/chore/client-new-versions
chore: client new versions
2024-10-03 10:27:00 -03:00
Ricardo Campos c96f864747 Revert "Merge branch 'dependabot/npm_and_yarn/client/eslint-9.11.1' into chore/client-new-versions"
This reverts commit 036c8f3474, reversing
changes made to 181fe28f55.
2024-10-03 10:12:31 -03:00
Ricardo Campos eda1b9f875 Merge branch 'dependabot/npm_and_yarn/client/vite-5.4.8' into chore/client-new-versions 2024-10-03 09:56:28 -03:00
Ricardo Campos e98ce9c191 Merge branch 'dependabot/npm_and_yarn/client/types/react-18.3.10' into chore/client-new-versions 2024-10-03 09:56:10 -03:00
Ricardo Campos dae34004ff Merge branch 'dependabot/npm_and_yarn/client/sass-1.79.4' into chore/client-new-versions 2024-10-03 09:54:33 -03:00
Ricardo Campos 0ce71f7f1a Merge branch 'dependabot/npm_and_yarn/client/react-bootstrap-2.10.5' into chore/client-new-versions 2024-10-03 09:54:13 -03:00
Ricardo Campos 036c8f3474 Merge branch 'dependabot/npm_and_yarn/client/eslint-9.11.1' into chore/client-new-versions 2024-10-03 09:53:37 -03:00
dependabot[bot]andGitHub 2218bf561a build(deps): bump com.puppycrawl.tools:checkstyle in /server
Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.18.1 to 10.18.2.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.18.1...checkstyle-10.18.2)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-01 00:08:43 +00:00
rmcamposandGitHub 181fe28f55 Merge pull request #58 from ricardo-campos-org/dependabot/maven/java-api/org.springframework.boot-spring-boot-starter-parent-3.3.4
build(deps): bump org.springframework.boot:spring-boot-starter-parent from 3.3.3 to 3.3.4 in /java-api
2024-09-29 12:38:04 -03:00
rmcampos 6fe493a5a3 feat: adjust hibernate to spring boot version 2024-09-29 12:28:58 -03:00
rmcampos 24530d30c1 Merge branch 'main' into dependabot/maven/java-api/org.springframework.boot-spring-boot-starter-parent-3.3.4 2024-09-29 12:02:13 -03:00
dependabot[bot]andGitHub 2228181fff build(deps): bump vite from 5.4.6 to 5.4.8 in /client
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.6 to 5.4.8.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.8/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.8/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-29 00:17:37 +00:00
dependabot[bot]andGitHub 0301676c76 build(deps-dev): bump @types/react from 18.3.5 to 18.3.10 in /client
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.3.5 to 18.3.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-29 00:17:27 +00:00
dependabot[bot]andGitHub cb614bd092 build(deps-dev): bump sass from 1.77.8 to 1.79.4 in /client
Bumps [sass](https://github.com/sass/dart-sass) from 1.77.8 to 1.79.4.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.77.8...1.79.4)

---
updated-dependencies:
- dependency-name: sass
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-29 00:17:21 +00:00
dependabot[bot]andGitHub c846a162be build(deps): bump react-bootstrap from 2.10.4 to 2.10.5 in /client
Bumps [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) from 2.10.4 to 2.10.5.
- [Release notes](https://github.com/react-bootstrap/react-bootstrap/releases)
- [Changelog](https://github.com/react-bootstrap/react-bootstrap/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-bootstrap/react-bootstrap/compare/v2.10.4...v2.10.5)

---
updated-dependencies:
- dependency-name: react-bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-29 00:17:14 +00:00
dependabot[bot]andGitHub 3eec5d2249 build(deps-dev): bump eslint from 8.57.0 to 9.11.1 in /client
Bumps [eslint](https://github.com/eslint/eslint) from 8.57.0 to 9.11.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.57.0...v9.11.1)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-29 00:17:08 +00:00
rmcamposandGitHub 7a6b41245a Merge pull request #70 from ricardo-campos-org/fix/69-handle-csrf
fix: handle CSRF gracefully
2024-09-28 21:15:53 -03:00
rmcampos 8fa20a00f6 feat: fix cloud native image running graalvm 2024-09-28 21:07:22 -03:00
rmcampos 38a4c3961b chore: fix lint issues 2024-09-28 16:06:46 -03:00
Ricardo Campos 161764a233 fix: CSRF finally
issue #69
2024-09-27 18:58:08 -03:00
rmcampos ce2d168fb7 feat: rename packages 2024-09-27 11:02:48 -03:00
rmcampos 8bca2025db feat: rename java-api to server 2024-09-27 09:03:48 -03:00
rmcamposandGitHub cfc5e4e2f4 Merge pull request #68 from ricardo-campos-org/feat/65-fix-env-file-with-server-address
fix env file with server address and error handling in the backend
2024-09-26 21:44:45 -03:00
rmcampos 8489aabbbf chore: fix lint issues 2024-09-26 21:31:11 -03:00
rmcampos 6276131d9d fix: env file not being loaded into caddy and client. Issue 65
fix: handle refresh token on backend. Issue #53
2024-09-26 21:27:04 -03:00
Ricardo Campos 6a06f0ace2 feat: add server address into env vars on caddy
issue #65
2024-09-26 19:06:14 -03:00
rmcamposandGitHub 9df330b43f Merge pull request #67 from ricardo-campos-org/feat/dependabot-versions-bump
feat: dependabot versions bump
2024-09-26 18:23:51 -03:00
Ricardo Campos 5cbcfc59ec Merge branch 'dependabot/npm_and_yarn/client/typescript-5.6.2' into feat/dependabot-versions-bump 2024-09-26 18:11:59 -03:00
Ricardo Campos 7150a5b8f4 Merge branch 'dependabot/npm_and_yarn/client/react-router-dom-6.26.2' into feat/dependabot-versions-bump 2024-09-26 18:10:47 -03:00
Ricardo Campos 722c06597f Merge branch 'dependabot/npm_and_yarn/client/eslint-plugin-react-7.36.1' into feat/dependabot-versions-bump 2024-09-26 18:10:32 -03:00
Ricardo Campos 29ae0bfa48 Merge branch 'dependabot/npm_and_yarn/client/vitest/coverage-v8-2.1.1' into feat/dependabot-versions-bump 2024-09-26 18:10:15 -03:00
Ricardo Campos 89963cb2b9 Merge branch 'dependabot/npm_and_yarn/client/types/node-22.7.0' into feat/dependabot-versions-bump 2024-09-26 18:09:55 -03:00
rmcamposandGitHub 5c0c95b60d Merge pull request #55 from ricardo-campos-org/dependabot/npm_and_yarn/client/rollup-4.22.4
build(deps): bump rollup from 4.21.0 to 4.22.4 in /client
2024-09-25 15:03:23 -03:00
Ricardo Campos 486e91610a ci: empty commit to trigger ci 2024-09-25 14:38:49 -03:00
dependabot[bot]andGitHub 1abfbe7586 build(deps): bump typescript from 5.5.4 to 5.6.2 in /client
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.5.4 to 5.6.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.5.4...v5.6.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-25 17:02:30 +00:00
dependabot[bot]andGitHub 498dfd8502 build(deps): bump react-router-dom from 6.26.1 to 6.26.2 in /client
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.26.1 to 6.26.2.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.26.2/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-25 17:02:22 +00:00
dependabot[bot]andGitHub 6334ab1812 build(deps-dev): bump eslint-plugin-react in /client
Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.35.0 to 7.36.1.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.35.0...v7.36.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-react
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-25 17:02:15 +00:00
dependabot[bot]andGitHub b15bb3b631 build(deps-dev): bump @vitest/coverage-v8 from 2.0.5 to 2.1.1 in /client
Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 2.0.5 to 2.1.1.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v2.1.1/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-25 17:02:09 +00:00
dependabot[bot]andGitHub e069a990d0 build(deps): bump @types/node from 22.5.2 to 22.7.0 in /client
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.5.2 to 22.7.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-25 17:01:59 +00:00
dependabot[bot]andGitHub 1f758e162f build(deps): bump org.springframework.boot:spring-boot-starter-parent
Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.3.3 to 3.3.4.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.3.3...v3.3.4)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-parent
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-25 17:01:49 +00:00
rmcamposandGitHub c8a511ac89 Merge pull request #50 from ricardo-campos-org/feat/46-task-management-api
feat: task management api
2024-09-25 14:01:05 -03:00
Ricardo Campos 028392e338 fix: docker build name 2024-09-25 11:23:30 -03:00
Ricardo Campos c68c3a7c2e ci: fix wrong syntax yml pr workflow file 2024-09-25 11:11:55 -03:00
Ricardo Campos f076cdb784 ci: fix wrong syntax yml workflow files 2024-09-25 11:10:21 -03:00
Ricardo Campos 501dfa2cd9 ci: enable dependabot updated for server api 2024-09-25 11:09:08 -03:00
Ricardo Campos c195079b45 ci: enable tests passing for now - sorry 2024-09-25 11:07:30 -03:00
Ricardo Campos 0d187ec587 test: add home controller test case
issue #46
2024-09-25 11:05:34 -03:00
Ricardo Campos 24444a3ac3 test: fix exclusions and add auth sign-up test cases
issue #46
2024-09-25 10:29:22 -03:00
Ricardo Campos 327387db37 test: add sign-up controller test
issue #46
2024-09-25 10:16:06 -03:00
rmcampos 3344313557 test: add auth controller unit test 2024-09-25 09:12:50 -03:00
Ricardo Campos cb15eee684 test: add frontend tests
issue #46
2024-09-24 12:08:13 -03:00
Ricardo Campos e79a56eb15 chore: delete used files 2024-09-24 12:07:55 -03:00
Ricardo Campos 218478f208 feat: improve docker compose file 2024-09-24 12:07:37 -03:00
dependabot[bot]andGitHub b59cf5e0bb build(deps): bump rollup from 4.21.0 to 4.22.4 in /client
Bumps [rollup](https://github.com/rollup/rollup) from 4.21.0 to 4.22.4.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.21.0...v4.22.4)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-24 04:19:24 +00:00
rmcampos a89585f9f3 chore: fix jwt token issue 2024-09-23 09:16:35 -03:00
rmcampos 048d3c75c0 chore: remove duplications on delete request 2024-09-23 09:02:38 -03:00
rmcampos e657a4068d feat: add backend dockerfile and cloud native config 2024-09-22 17:42:02 -03:00
rmcampos f67e0e97de chore: refactor to remove duplication - post requests
issue #46

From now on, only a single postJSON function will be used to call the backend api. No more duplications
2024-09-21 18:20:30 -03:00
rmcampos f079792da3 chore: refactor to remove duplication - patch requests
issue #46

From now on, only a single patchJSON function will be used to call the backend api. No more duplications
2024-09-21 18:10:52 -03:00
rmcampos c595df4d98 chore: refactor to remove duplication
issue #46

From now on, only a single getJSON function will be used to call the backend api. No more duplications
2024-09-21 17:42:55 -03:00
Ricardo Campos 33ade8a9c7 feat: search ok
issue #46
2024-09-20 19:32:05 -03:00
Ricardo Campos a65fa76481 chore: fix client and java-rest api 2024-09-20 18:54:51 -03:00
Ricardo Campos 01f6cdb128 chore: fix lint issues, build issue, and a bit of refactoring
issue #46
2024-09-20 18:50:00 -03:00
Ricardo Campos aa121260c0 chore: fix build issue 2024-09-20 18:01:53 -03:00
Ricardo Campos cce0633a9f feat: add save edit and delete notes
issue #46
2024-09-20 17:30:23 -03:00
Ricardo Campos 755166f099 feat: add notes client frontend
issue #46
2024-09-20 13:41:04 -03:00
Ricardo Campos 3f3ca0c59b feat: add notes api
issue #46
2024-09-20 13:24:11 -03:00
Ricardo Campos 197818d927 Merge branch 'main' into feat/46-task-management-api 2024-09-20 11:52:33 -03:00
rmcamposandGitHub 594e168863 Merge pull request #49 from ricardo-campos-org/ci/sonar-cloud-integration
add sonar to main workflow
2024-09-20 11:49:03 -03:00
Ricardo Campos d94becd721 ci: add sonar to the same test coverage workflow 2024-09-20 11:45:11 -03:00
Ricardo Campos e065e3deb5 ci: fix test and workflows 2024-09-20 11:42:15 -03:00
Ricardo Campos 1295257d1a ci: fix sonar exclusion 2024-09-20 11:23:31 -03:00
Ricardo Campos df287c4de0 ci: delete ci, not needed and another attempt to fix sonar analysis 2024-09-20 10:44:57 -03:00
Ricardo Campos 004cbc29b7 ci: exclude mocks files from sonar 2024-09-20 10:39:23 -03:00
Ricardo Campos 8f5ca9bce4 ci: exclude setup tests ts file from sonar 2024-09-20 10:36:15 -03:00
Ricardo Campos 0e6c3ffb70 ci: fix test directory 2024-09-20 10:29:12 -03:00
Ricardo Campos 7ec980e98f test: add basic test case and setup coverage 2024-09-20 10:27:16 -03:00
Ricardo Campos 6f81382a8a ci: fix action version 2024-09-20 10:11:00 -03:00
rmcamposandGitHub bb4e13c3ca Update pr.yml 2024-09-20 08:58:12 -03:00
rmcamposandGitHub 745f7c88b0 add sonar-project.properties file 2024-09-20 08:52:13 -03:00
rmcamposandGitHub a7d1bb57d1 add sonar to PR workflow 2024-09-20 08:50:40 -03:00
Ricardo CamposandGitHub a1ef1103d9 add sonar to main workflow 2024-09-20 08:46:16 -03:00
Ricardo Campos 4ffc27b9e6 feat: home summary and search wip
issue #46
2024-09-19 21:16:06 -03:00
Ricardo Campos 8e52b07dc3 task crud finished
issue #46
2024-09-19 20:16:50 -03:00
Ricardo Campos 02d1f3878e feat: error handling when login in
issue #46
2024-09-19 15:33:52 -03:00
Ricardo Campos e0b9e49b81 feat: login and register ok
issue #46
2024-09-19 15:13:10 -03:00
Ricardo Campos d267635c73 feat: login and routes finally ok
issue #46
2024-09-19 12:10:55 -03:00
Ricardo Campos ea5c563b20 feat: add real login - wip
issue #46
2024-09-19 10:49:16 -03:00
Ricardo Campos 24f858e6a0 feat: add cors config and refresh token api
issue #46
2024-09-19 10:48:49 -03:00
Ricardo Campos 6020f8f6d5 feat: delete task done, list users for admins done
issue #46
2024-09-18 15:31:44 -03:00
Ricardo Campos ed2dfeaa0b feat: delete task ok
issue #46
2024-09-18 13:50:38 -03:00
Ricardo Campos af245fe975 Merge branch 'main' into feat/46-task-management-api 2024-09-18 13:28:35 -03:00
dependabot[bot]andGitHub 8c7a66ea28 build(deps): bump vite from 5.4.2 to 5.4.6 in /client (#48) 2024-09-18 16:24:12 +00:00
Ricardo Campos 318a7f9f61 test: add application properties file for test
issue #46
2024-09-18 13:11:16 -03:00
Ricardo Campos 213a2f4673 ci: add java rest api build and test to workflows
issue #44
2024-09-18 11:50:27 -03:00
Ricardo Campos 0d1998a388 docs: add open api docs and javadoc
issue #46
2024-09-18 11:45:20 -03:00
Ricardo Campos ccd282dc74 feat: patch tasks done
issue #46
2024-09-18 10:57:51 -03:00
Ricardo Campos f4fa8f4208 feat: create task done
issue #46
2024-09-18 10:07:27 -03:00
Ricardo Campos b1efed7899 feat: task crud - wip
issue #46
2024-09-14 17:59:57 -03:00
Ricardo CamposandGitHub b5679ecc82 Merge pull request #47 from ricardo-campos-org/feat/33-from-docker-to-github-registry
feat: change to ghcr
2024-09-12 21:50:14 -03:00
Ricardo Campos da860a440a ci: fix build tag
issue #33
2024-09-12 21:48:00 -03:00
Ricardo Campos 36f41ebf17 ci: fix context client build
issue #33
2024-09-12 21:38:43 -03:00
Ricardo Campos bad1e4027d chore: fix lint issues
issue #33
2024-09-12 21:36:10 -03:00
Ricardo Campos c09113fee9 feat: change to ghcr -m issue 2024-09-12 21:31:41 -03:00
Ricardo CamposandGitHub 27e415895f Merge pull request #45 from ricardo-campos-org/feat/43-setup-and-authentication
feat: setup and authentication
2024-09-05 17:40:24 -03:00
Ricardo Campos 91f4740cbd ci: fix ci and cd workflows 2024-09-05 17:38:35 -03:00
Ricardo Campos ab7165adc8 feat: add authentication and authorization
issue #43
2024-09-05 17:27:34 -03:00
Ricardo Campos d83fbfd70f chore: delete unused file 2024-09-04 16:48:28 -03:00
Ricardo Campos a46a49c6cd feat: add backend, move client to a separate folder
issue #43
2024-09-04 16:47:27 -03:00
dependabot[bot]andGitHub 0bba05a888 build(deps): bump @testing-library/jest-dom from 5.16.5 to 6.5.0 (#42) 2024-09-04 12:56:20 +00:00
dependabot[bot]andGitHub 2c14b47358 build(deps-dev): bump @typescript-eslint/eslint-plugin from 8.3.0 to 8.4.0 (#41) 2024-09-04 12:52:49 +00:00
dependabot[bot]andGitHub 1f855c78a8 build(deps): bump @types/node from 22.5.0 to 22.5.2 (#40) 2024-09-04 12:48:33 +00:00
dependabot[bot]andGitHub b4ab20432c build(deps-dev): bump @types/react from 18.3.4 to 18.3.5 (#39) 2024-09-04 12:41:37 +00:00
dependabot[bot]andGitHub cf40438a14 build(deps-dev): bump jsdom from 24.1.1 to 25.0.0 (#38) 2024-08-28 20:02:20 +00:00
dependabot[bot]andGitHub 63e563e551 build(deps): bump typescript from 4.8.4 to 5.5.4 (#37) 2024-08-28 19:58:25 +00:00
dependabot[bot]andGitHub 0dbaaff644 build(deps-dev): bump @typescript-eslint/eslint-plugin (#36) 2024-08-28 19:55:42 +00:00
dependabot[bot]andGitHub 93954728df build(deps): bump @testing-library/user-event from 13.5.0 to 14.5.2 (#35) 2024-08-28 19:51:56 +00:00
Ricardo CamposandGitHub e70b257286 Merge pull request #32 from ricardo-campos-org/feat/31-define-functions-and-screens
feat: define functions and screens
2024-08-26 10:29:15 -03:00
Ricardo Campos 90ea07fade fix: build issue with bootstrp type dependency 2024-08-26 10:21:26 -03:00
Ricardo Campos 992e35d6c4 chore: fix lint issues 2024-08-26 10:03:11 -03:00
Ricardo Campos 372d270380 feat: fix login issue and add env file
issue #31
2024-08-25 20:12:03 -03:00
Ricardo Campos 430ef17946 feat: add a lof of things, see issue #31 2024-08-25 19:30:13 -03:00
Ricardo CamposandGitHub c56999858c Merge pull request #30 from ricardo-campos-org/feat/25-fix-main-workflow
ci: fix main workflow
2024-08-25 14:59:42 -03:00
Ricardo Campos 37430639c6 chore: improve package json with description 2024-08-25 14:56:15 -03:00
Ricardo Campos 0e22862ec1 feat: add dockerfile and docker compose
issue #29
2024-08-25 14:47:10 -03:00
Ricardo Campos 33c8883607 ci: fix main workflow
issue #25
2024-08-25 14:00:05 -03:00
Ricardo CamposandGitHub c8b47db3d2 Merge pull request #28 from ricardo-campos-org/dependabot/npm_and_yarn/micromatch-4.0.8
build(deps): bump micromatch from 4.0.5 to 4.0.8
2024-08-24 17:40:24 -03:00
dependabot[bot]andGitHub 99c5735b65 build(deps): bump micromatch from 4.0.5 to 4.0.8
Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.5 to 4.0.8.
- [Release notes](https://github.com/micromatch/micromatch/releases)
- [Changelog](https://github.com/micromatch/micromatch/blob/4.0.8/CHANGELOG.md)
- [Commits](https://github.com/micromatch/micromatch/compare/4.0.5...4.0.8)

---
updated-dependencies:
- dependency-name: micromatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-24 20:39:41 +00:00
Ricardo CamposandGitHub 4631d414a5 Merge pull request #27 from ricardo-campos-org/feat/26-improve-repository
feat: improve repository fixing lots of issues
2024-08-24 17:38:44 -03:00
Ricardo Campos f07d73a8c7 chore: fix build issue 2024-08-24 17:36:36 -03:00
Ricardo Campos 35ce507ce8 ci: add lint to CI workflow
issue #11
2024-08-24 17:20:10 -03:00
Ricardo Campos f55418b9fa chore: fix lint ussues 2024-08-24 17:19:40 -03:00
Ricardo Campos e943775fb7 feat: add eslint and scripts
issue #11
2024-08-24 16:57:30 -03:00
Ricardo Campos 3f509e9779 feat: replace CRA by vite and add vitest
issue #9
2024-08-24 16:56:40 -03:00
Ricardo Campos 672b0c2d84 feat: improve readme, add issue template and add PR template
issue #26
2024-08-24 16:53:40 -03:00
Ricardo CamposandGitHub 3f5016eadd Merge pull request #24 from ricardo-campos-org/ci/fix-ci-and-main-workflows
ci: fix ci and main workflows
2024-08-22 15:58:20 -03:00
Ricardo Campos fc3d3620b6 ci: fix ci and main workflows 2024-08-22 15:55:57 -03:00
Ricardo CamposandGitHub f7adb0e382 Merge pull request #23 from ricardo-campos-org/dependabot/npm_and_yarn/multi-7f0e0a7f19
build(deps): bump minimatch and recursive-readdir
2024-08-22 15:54:42 -03:00
Ricardo CamposandGitHub b1da996326 Merge pull request #15 from ricardo-campos-org/dependabot/npm_and_yarn/types/node-22.5.0
build(deps): bump @types/node from 16.11.62 to 22.5.0
2024-08-22 15:53:52 -03:00
dependabot[bot]andGitHub d9842d5a04 build(deps): bump minimatch and recursive-readdir
Bumps [minimatch](https://github.com/isaacs/minimatch) and [recursive-readdir](https://github.com/jergason/recursive-readdir). These dependencies needed to be updated together.

Updates `minimatch` from 3.0.4 to 3.1.2
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2)

Updates `recursive-readdir` from 2.2.2 to 2.2.3
- [Changelog](https://github.com/jergason/recursive-readdir/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jergason/recursive-readdir/commits/v2.2.3)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-type: indirect
- dependency-name: recursive-readdir
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 18:53:12 +00:00
dependabot[bot]andGitHub 52f3ce23cc build(deps): bump @types/node from 16.11.62 to 22.5.0
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 16.11.62 to 22.5.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 18:52:42 +00:00
Ricardo CamposandGitHub b906abc1c3 Merge pull request #22 from ricardo-campos-org/dependabot/npm_and_yarn/webpack-5.94.0
build(deps): bump webpack from 5.74.0 to 5.94.0
2024-08-22 15:52:24 -03:00
Ricardo CamposandGitHub de2e28afee Merge pull request #21 from ricardo-campos-org/dependabot/npm_and_yarn/tough-cookie-4.1.4
build(deps): bump tough-cookie from 4.1.2 to 4.1.4
2024-08-22 15:52:11 -03:00
Ricardo CamposandGitHub dc9a80f41b Merge pull request #20 from ricardo-campos-org/dependabot/npm_and_yarn/multi-4cbdc11141
build(deps): bump json5
2024-08-22 15:51:39 -03:00
Ricardo CamposandGitHub ce60197a92 Merge pull request #19 from ricardo-campos-org/dependabot/npm_and_yarn/multi-781d63ddae
build(deps): bump semver
2024-08-22 15:51:11 -03:00
Ricardo CamposandGitHub 7939137a80 Merge pull request #18 from ricardo-campos-org/dependabot/npm_and_yarn/word-wrap-1.2.5
build(deps): bump word-wrap from 1.2.3 to 1.2.5
2024-08-22 15:50:46 -03:00
Ricardo CamposandGitHub 713ba9ae27 Merge pull request #17 from ricardo-campos-org/dependabot/npm_and_yarn/multi-ec30208de6
build(deps): bump react-dom and @types/react-dom
2024-08-22 15:50:04 -03:00
dependabot[bot]andGitHub 1c22b6202f build(deps): bump react-dom and @types/react-dom
Bumps [react-dom](https://github.com/facebook/react/tree/HEAD/packages/react-dom) and [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom). These dependencies needed to be updated together.

Updates `react-dom` from 18.2.0 to 18.3.1
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v18.3.1/packages/react-dom)

Updates `@types/react-dom` from 18.0.6 to 18.3.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: react-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: "@types/react-dom"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 18:48:51 +00:00
Ricardo CamposandGitHub ccefa60e4b Merge pull request #16 from ricardo-campos-org/dependabot/npm_and_yarn/testing-library/react-16.0.0
build(deps): bump @testing-library/react from 13.4.0 to 16.0.0
2024-08-22 15:48:30 -03:00
dependabot[bot]andGitHub 0226e3ee27 build(deps): bump webpack from 5.74.0 to 5.94.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.74.0 to 5.94.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.74.0...v5.94.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 18:48:10 +00:00
Ricardo CamposandGitHub 2af02b3f70 Merge pull request #14 from ricardo-campos-org/dependabot/npm_and_yarn/types/jest-29.5.12
build(deps): bump @types/jest from 27.5.2 to 29.5.12
2024-08-22 15:48:01 -03:00
dependabot[bot]andGitHub 935cd66503 build(deps): bump json5
Bumps  and [json5](https://github.com/json5/json5). These dependencies needed to be updated together.

Updates `json5` from 2.2.1 to 2.2.3
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)

Updates `json5` from 1.0.1 to 2.2.3
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 18:47:50 +00:00
dependabot[bot]andGitHub 98223ee47e build(deps): bump tough-cookie from 4.1.2 to 4.1.4
Bumps [tough-cookie](https://github.com/salesforce/tough-cookie) from 4.1.2 to 4.1.4.
- [Release notes](https://github.com/salesforce/tough-cookie/releases)
- [Changelog](https://github.com/salesforce/tough-cookie/blob/master/CHANGELOG.md)
- [Commits](https://github.com/salesforce/tough-cookie/compare/v4.1.2...v4.1.4)

---
updated-dependencies:
- dependency-name: tough-cookie
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 18:47:48 +00:00
Ricardo CamposandGitHub 6047d01353 Merge pull request #13 from ricardo-campos-org/dependabot/npm_and_yarn/multi-1015d7eecf
build(deps): bump react and @types/react
2024-08-22 15:47:38 -03:00
dependabot[bot]andGitHub 8cb719c2f9 build(deps): bump semver
Bumps  and [semver](https://github.com/npm/node-semver). These dependencies needed to be updated together.

Updates `semver` from 6.3.0 to 7.6.3
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v6.3.0...v7.6.3)

Updates `semver` from 7.3.7 to 7.6.3
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v6.3.0...v7.6.3)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 18:47:22 +00:00
dependabot[bot]andGitHub 0d377b05d1 build(deps): bump word-wrap from 1.2.3 to 1.2.5
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.5.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.5)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 18:47:09 +00:00
Ricardo CamposandGitHub 5b7d16c459 Merge pull request #7 from ricardo-campos-org/dependabot/npm_and_yarn/ejs-3.1.10
Bump ejs from 3.1.8 to 3.1.10
2024-08-22 15:47:05 -03:00
Ricardo CamposandGitHub 6f22117c98 Merge pull request #6 from ricardo-campos-org/dependabot/npm_and_yarn/adobe/css-tools-4.4.0
Bump @adobe/css-tools from 4.0.1 to 4.4.0
2024-08-22 15:46:54 -03:00
Ricardo CamposandGitHub 1ab7e7a0d7 Merge pull request #5 from ricardo-campos-org/dependabot/npm_and_yarn/webpack-dev-middleware-5.3.4
Bump webpack-dev-middleware from 5.3.3 to 5.3.4
2024-08-22 15:46:42 -03:00
Ricardo CamposandGitHub 28b2ec6439 Merge pull request #4 from ricardo-campos-org/dependabot/npm_and_yarn/babel/traverse-7.25.4
Bump @babel/traverse from 7.19.3 to 7.25.4
2024-08-22 15:46:32 -03:00
Ricardo CamposandGitHub 0c64aad2f2 Merge pull request #3 from ricardo-campos-org/dependabot/npm_and_yarn/braces-3.0.3
Bump braces from 3.0.2 to 3.0.3
2024-08-22 15:46:20 -03:00
Ricardo CamposandGitHub 3b5dfb8674 Merge pull request #2 from ricardo-campos-org/dependabot/npm_and_yarn/express-4.19.2
Bump express from 4.18.1 to 4.19.2
2024-08-22 15:46:07 -03:00
Ricardo CamposandGitHub 548626864e Merge pull request #1 from ricardo-campos-org/dependabot/npm_and_yarn/follow-redirects-1.15.6
Bump follow-redirects from 1.15.2 to 1.15.6
2024-08-22 15:45:09 -03:00
dependabot[bot]andGitHub ae8e5cdae8 build(deps): bump @testing-library/react from 13.4.0 to 16.0.0
Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 13.4.0 to 16.0.0.
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v13.4.0...v16.0.0)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 18:43:36 +00:00
dependabot[bot]andGitHub b3d7d44903 build(deps): bump @types/jest from 27.5.2 to 29.5.12
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 27.5.2 to 29.5.12.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: "@types/jest"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 18:43:21 +00:00
dependabot[bot]andGitHub b2e5aa16e8 build(deps): bump react and @types/react
Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) and [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react). These dependencies needed to be updated together.

Updates `react` from 18.2.0 to 18.3.1
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v18.3.1/packages/react)

Updates `@types/react` from 18.0.21 to 18.3.4
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: react
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: "@types/react"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 18:43:12 +00:00
Ricardo CamposandGitHub 68946ce5f7 Merge pull request #8 from ricardo-campos-org/feat/readme-and-dependabot
feat: improve readme and add dependabot
2024-08-22 15:42:09 -03:00
Ricardo Campos 4be5722f5b ci: pr workflow fix 2024-08-22 15:34:35 -03:00
Ricardo Campos 191950fdc8 ci: add workflows 2024-08-22 15:33:26 -03:00
Ricardo Campos 1cb355f8da feat: improve readme and add dependabot 2024-08-22 14:57:33 -03:00
dependabot[bot]andGitHub ea7c519963 Bump ejs from 3.1.8 to 3.1.10
Bumps [ejs](https://github.com/mde/ejs) from 3.1.8 to 3.1.10.
- [Release notes](https://github.com/mde/ejs/releases)
- [Commits](https://github.com/mde/ejs/compare/v3.1.8...v3.1.10)

---
updated-dependencies:
- dependency-name: ejs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 16:24:48 +00:00
dependabot[bot]andGitHub b318cffcb7 Bump @adobe/css-tools from 4.0.1 to 4.4.0
Bumps [@adobe/css-tools](https://github.com/adobe/css-tools) from 4.0.1 to 4.4.0.
- [Changelog](https://github.com/adobe/css-tools/blob/main/History.md)
- [Commits](https://github.com/adobe/css-tools/commits)

---
updated-dependencies:
- dependency-name: "@adobe/css-tools"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 16:24:17 +00:00
dependabot[bot]andGitHub a80232668c Bump webpack-dev-middleware from 5.3.3 to 5.3.4
Bumps [webpack-dev-middleware](https://github.com/webpack/webpack-dev-middleware) from 5.3.3 to 5.3.4.
- [Release notes](https://github.com/webpack/webpack-dev-middleware/releases)
- [Changelog](https://github.com/webpack/webpack-dev-middleware/blob/v5.3.4/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-middleware/compare/v5.3.3...v5.3.4)

---
updated-dependencies:
- dependency-name: webpack-dev-middleware
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 16:24:00 +00:00
dependabot[bot]andGitHub bc50c19f21 Bump @babel/traverse from 7.19.3 to 7.25.4
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.19.3 to 7.25.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.25.4/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 16:23:59 +00:00
dependabot[bot]andGitHub a2d06c8403 Bump braces from 3.0.2 to 3.0.3
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 16:23:55 +00:00
dependabot[bot]andGitHub 8217da31e5 Bump express from 4.18.1 to 4.19.2
Bumps [express](https://github.com/expressjs/express) from 4.18.1 to 4.19.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.1...4.19.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 16:23:55 +00:00
dependabot[bot]andGitHub 380b542a78 Bump follow-redirects from 1.15.2 to 1.15.6
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.2 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.2...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-22 16:23:54 +00:00
Ricardo CamposandGitHub 089cdd8639 Update README.md 2022-10-23 16:33:49 -03:00
743 changed files with 205202 additions and 28888 deletions
+20
View File
@@ -0,0 +1,20 @@
{
"image": "mcr.microsoft.com/devcontainers/java:25-trixie",
"features": {
"ghcr.io/devcontainers/features/java:1": {
"installMaven": true,
"version": "latest",
"jdkDistro": "tem",
"gradleVersion": "latest",
"mavenVersion": "latest",
"antVersion": "latest",
"groovyVersion": "latest"
},
"ghcr.io/devcontainers/features/node:1": {
"installYarnUsingApt": true,
"version": "lts",
"pnpmVersion": "latest",
"nvmVersion": "latest"
}
}
}
+57
View File
@@ -0,0 +1,57 @@
name: Build App Candidate
on:
workflow_dispatch:
jobs:
build-and-push-app:
name: Build & Push App
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.ref }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}/app
tags: |
type=raw,value=candidate
- name: Generate version tag
id: version
run: |
DATE=$(date +'%Y.%m.%d')
TAG="app-v${DATE}.${{ github.run_number }}"
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "Generated tag: ${TAG}"
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: ./client
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
VITE_BUILD=${{ steps.version.outputs.tag }}
@@ -0,0 +1,59 @@
name: Build Server Candidate
on:
workflow_dispatch:
jobs:
build-and-push-server:
name: Build & Push Server
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.ref }}
- name: Set lowercase repo name
id: repo
run: echo "name=${GITHUB_REPOSITORY,,}" >> $GITHUB_OUTPUT
- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '25'
cache: 'maven'
cache-dependency-path: 'server/pom.xml'
- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Cache Buildpack layers
uses: actions/cache@v4
with:
path: ~/.cache/reproducible-builds
key: ${{ runner.os }}-buildpack-${{ hashFiles('server/pom.xml') }}
restore-keys: |
${{ runner.os }}-buildpack-
- name: Build Docker image
working-directory: ./server
run: |
# Use the dynamic repo name to prevent tagging errors
./mvnw -Pnative -DskipTests spring-boot:build-image \
-Dspring-boot.build-image.imageName=ghcr.io/${{ steps.repo.outputs.name }}/api:latest \
-Dspring-boot.build-image.builder=paketobuildpacks/builder-jammy-tiny:latest
- name: Tag and push candidate
run: |
docker tag ghcr.io/${{ steps.repo.outputs.name }}/api:latest ghcr.io/${{ steps.repo.outputs.name }}/api:candidate
docker push ghcr.io/${{ steps.repo.outputs.name }}/api:candidate
+106
View File
@@ -0,0 +1,106 @@
name: Frontend PR
on:
workflow_dispatch:
pull_request:
types: [opened, synchronize, reopened]
branches:
- 'main'
paths:
- 'client/**/*.html'
- 'client/**/*.png'
- 'client/**/*.json'
- 'client/**/*.txt'
- 'client/**/*.ts'
- 'client/**/*.tsx'
- 'client/**/*.js'
- 'client/Dockerfile'
- 'client/Caddyfile'
- '.github/workflows/client-ci.yml'
jobs:
run-checks:
name: Checks
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm install
working-directory: ./client
- name: Run lint
run: npm run lint
working-directory: ./client
- name: Run build
run: npm run build
working-directory: ./client
- name: Run tests
run: npm run test:no-watch
working-directory: ./client
build-and-push:
name: Build & Push
runs-on: ubuntu-latest
needs: ["run-checks"]
permissions:
contents: write
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}/app
tags: |
type=raw,value=candidate
- name: Generate version tag
id: version
run: |
DATE=$(date +'%Y.%m.%d')
TAG="app-v${DATE}.${{ github.run_number }}"
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "Generated tag: ${TAG}"
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: ./client
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
VITE_BUILD=${{ steps.version.outputs.tag }}
+135
View File
@@ -0,0 +1,135 @@
name: Deploy to staging
on:
workflow_dispatch:
workflow_run:
workflows: [ "Backend PR", "Frontend PR" ]
types: [ completed ]
jobs:
terraform-plan-stg:
name: Plan changs to staging
runs-on: ubuntu-latest
outputs:
no_changes: ${{ steps.check-changes.outputs.no_changes }}
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
- name: Setup kubectl
uses: azure/setup-kubectl@v4
- name: Setup Kubeconfig
run: |
mkdir -p ~/.kube
echo "${{ secrets.KUBECONFIG_DATA }}" | base64 -d > ~/.kube/config
chmod 600 ~/.kube/config
- name: Validate cluster access
run: |
kubectl cluster-info
kubectl get namespace tasknote-stg
- name: Determine deployment values
id: deploy-vars
run: |
backend_image="ghcr.io/rmcampos/tasknote/api:candidate"
frontend_image="ghcr.io/rmcampos/tasknote/app:candidate"
echo "backend_image=$backend_image" >> "$GITHUB_OUTPUT"
echo "frontend_image=$frontend_image" >> "$GITHUB_OUTPUT"
- name: Terraform Fmt -check -diff
working-directory: terraform-stg
run: terraform fmt -check -diff
- name: Terraform Init
working-directory: terraform-stg
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
run: terraform init -input=false
- name: Terraform Validate
working-directory: terraform-stg
run: terraform validate
- name: Terraform Plan
id: check-changes
working-directory: terraform-stg
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
run: |
timeout 1m terraform plan -input=false -out=tfplan \
-var="db_user=${{ secrets.DB_USER }}" \
-var="db_password=${{ secrets.DB_PASSWORD }}" \
-var="db_name=${{ secrets.DB_NAME }}" \
-var="security_key=${{ secrets.JWT_SECURITY_KEY }}" \
-var="mailgun_apikey=${{ secrets.MAILGUN_API_KEY }}" \
-var="backend_image=${{ steps.deploy-vars.outputs.backend_image }}" \
-var="frontend_image=${{ steps.deploy-vars.outputs.frontend_image }}" \
-var="deploy_version=${{ github.run_id }}"
terraform show -json tfplan > tfplan.json
if jq -e '.resource_changes | length == 0' tfplan.json >/dev/null; then
echo "no_changes=true" >> "$GITHUB_OUTPUT"
echo "No changes to apply."
exit 0
else
echo "Changes detected. Proceeding with apply"
echo "no_changes=false" >> "$GITHUB_OUTPUT"
fi
- name: Upload plan artifact
uses: actions/upload-artifact@v4
with:
name: tfplan
path: terraform-stg/tfplan
terraform-apply:
runs-on: ubuntu-latest
needs: terraform-plan-stg
if: needs.terraform-plan-stg.outputs.no_changes == 'false'
environment:
name: staging
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
- name: Download plan artifact
uses: actions/download-artifact@v4
with:
name: tfplan
path: terraform-stg
- name: Setup Kubeconfig
run: |
mkdir -p ~/.kube
echo "${{ secrets.KUBECONFIG_DATA }}" | base64 -d > ~/.kube/config
chmod 600 ~/.kube/config
- name: Terraform Init
working-directory: terraform-stg
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
run: terraform init -input=false
- name: Terraform Apply
working-directory: terraform-stg
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
run: timeout 1m terraform apply tfplan
+171
View File
@@ -0,0 +1,171 @@
name: Deploy to prod
on:
workflow_dispatch:
inputs:
backend_image:
description: "Backend image tag (full image reference)"
required: false
frontend_image:
description: "Frontend image tag (full image reference)"
required: false
apply:
description: "Apply changes after plan"
required: false
default: "true"
workflow_run:
workflows: [ "Backend Main", "Frontend Main" ]
types: [ completed ]
jobs:
terraform-plan:
if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
outputs:
no_changes: ${{ steps.check-changes.outputs.no_changes }}
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
- name: Setup kubectl
uses: azure/setup-kubectl@v4
- name: Setup Kubeconfig
run: |
mkdir -p ~/.kube
echo "${{ secrets.KUBECONFIG_DATA }}" | base64 -d > ~/.kube/config
chmod 600 ~/.kube/config
- name: Validate cluster access
run: |
kubectl cluster-info
kubectl get namespace tasknote
- name: Determine deployment values
id: deploy-vars
run: |
backend_image="${{ github.event.inputs.backend_image }}"
frontend_image="${{ github.event.inputs.frontend_image }}"
latest_backend_tag_tmp="$(git tag --list 'api-v*' | sort -V | tail -n1)"
latest_backend_tag="${latest_backend_tag_tmp#api-v}"
latest_frontend_tag="$(git tag --list 'app-v*' | sort -V | tail -n1)"
if [ -z "$latest_backend_tag" ]; then
echo "No backend tag found matching [0-9]*" >&2
exit 1
fi
if [ -z "$latest_frontend_tag" ]; then
echo "No frontend tag found matching app-v*" >&2
exit 1
fi
if [ -z "$backend_image" ]; then
backend_image="ghcr.io/rmcampos/tasknote/api:$latest_backend_tag"
fi
if [ -z "$frontend_image" ]; then
frontend_image="ghcr.io/rmcampos/tasknote/app:$latest_frontend_tag"
fi
echo "Resolved backend_image=$backend_image"
echo "Resolved frontend_image=$frontend_image"
echo "backend_image=$backend_image" >> "$GITHUB_OUTPUT"
echo "frontend_image=$frontend_image" >> "$GITHUB_OUTPUT"
- name: Terraform Fmt -check -diff
working-directory: terraform
run: terraform fmt -check -diff
- name: Terraform Init
working-directory: terraform
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
run: terraform init -input=false
- name: Terraform Validate
working-directory: terraform
run: terraform validate
- name: Terraform Plan
id: check-changes
working-directory: terraform
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
run: |
timeout 1m terraform plan -input=false -out=tfplan \
-var="db_user=${{ secrets.DB_USER }}" \
-var="db_password=${{ secrets.DB_PASSWORD }}" \
-var="db_name=${{ secrets.DB_NAME }}" \
-var="security_key=${{ secrets.JWT_SECURITY_KEY }}" \
-var="mailgun_apikey=${{ secrets.MAILGUN_API_KEY }}" \
-var="backend_image=${{ steps.deploy-vars.outputs.backend_image }}" \
-var="frontend_image=${{ steps.deploy-vars.outputs.frontend_image }}"
terraform show -json tfplan > tfplan.json
if jq -e '.resource_changes | length == 0' tfplan.json >/dev/null; then
echo "no_changes=true" >> "$GITHUB_OUTPUT"
echo "No changes to apply."
exit 0
else
echo "Changes detected. Proceeding with apply"
echo "no_changes=false" >> "$GITHUB_OUTPUT"
fi
- name: Upload plan artifact
uses: actions/upload-artifact@v4
with:
name: tfplan
path: terraform/tfplan
terraform-apply:
runs-on: ubuntu-latest
needs: terraform-plan
if: >
(github.event_name == 'push' || github.event_name == 'workflow_run' || inputs.apply == 'true')
&& needs.terraform-plan.outputs.no_changes == 'false'
environment:
name: production
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
- name: Download plan artifact
uses: actions/download-artifact@v4
with:
name: tfplan
path: terraform
- name: Setup Kubeconfig
run: |
mkdir -p ~/.kube
echo "${{ secrets.KUBECONFIG_DATA }}" | base64 -d > ~/.kube/config
chmod 600 ~/.kube/config
- name: Terraform Init
working-directory: terraform
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
run: terraform init -input=false
- name: Terraform Apply
working-directory: terraform
env:
AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
run: timeout 1m terraform apply tfplan
+79
View File
@@ -0,0 +1,79 @@
name: Frontend Main
on:
workflow_dispatch:
push:
branches:
- main
paths:
- 'client/**/*.html'
- 'client/**/*.png'
- 'client/**/*.json'
- 'client/**/*.txt'
- 'client/**/*.ts'
- 'client/**/*.tsx'
- 'client/**/*.js'
- 'client/Dockerfile'
- 'client/Caddyfile'
- '.github/workflows/main-client.yml'
jobs:
build-and-push:
name: Build & Push
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Generate version tag
id: version
run: |
DATE=$(date +'%Y.%m.%d')
TAG="app-v${DATE}.${{ github.run_number }}"
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "Generated tag: ${TAG}"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}/app
tags: |
type=raw,value=${{ steps.version.outputs.tag }}
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: ./client
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
VITE_BUILD=v${{ steps.version.outputs.tag }}
- name: Create and push Git tag
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag -a ${{ steps.version.outputs.tag }} -m "Release ${{ steps.version.outputs.tag }}"
git push origin ${{ steps.version.outputs.tag }}
+90
View File
@@ -0,0 +1,90 @@
name: Backend Main
on:
workflow_dispatch:
push:
branches:
- main
paths:
- 'server/**/*.java'
- 'server/**/*.xml'
- 'server/pom.xml'
- '.github/workflows/main-server.yml'
jobs:
build-and-push:
name: Build & Push
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set lowercase repo name
id: repo
run: echo "name=${GITHUB_REPOSITORY,,}" >> $GITHUB_OUTPUT
- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '25'
cache: 'maven'
- name: Increment version in pom.xml
id: version
working-directory: ./server
run: |
# Extract current version from pom.xml
CURRENT_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)
echo "Current version: ${CURRENT_VERSION}"
# Increment version
NEW_VERSION=$((CURRENT_VERSION + 1))
echo "New version: ${NEW_VERSION}"
# Update pom.xml with new version
./mvnw versions:set -DnewVersion=${NEW_VERSION} -DgenerateBackupFiles=false -q
# Output for later steps
echo "version=${NEW_VERSION}" >> $GITHUB_OUTPUT
- name: Commit version bump
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add server/pom.xml
git commit -m "chore: bump api version to ${{ steps.version.outputs.version }} [skip ci]"
git push
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build Docker image with Spring Boot
working-directory: ./server
run: |
./mvnw -Pnative -DskipTests spring-boot:build-image \
-Dspring-boot.build-image.imageName=ghcr.io/${{ steps.repo.outputs.name }}/api:latest \
-Dspring-boot.build-image.builder=paketobuildpacks/builder-jammy-tiny:latest
- name: Tag and push Docker image
run: |
docker tag ghcr.io/${{ steps.repo.outputs.name }}/api:latest ghcr.io/${{ steps.repo.outputs.name }}/api:${{ steps.version.outputs.version }}
docker push ghcr.io/${{ steps.repo.outputs.name }}/api:latest
docker push ghcr.io/${{ steps.repo.outputs.name }}/api:${{ steps.version.outputs.version }}
- name: Create and push Git tag
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag -a api-v${{ steps.version.outputs.version }} -m "Release API v${{ steps.version.outputs.version }}"
git push origin api-v${{ steps.version.outputs.version }}
+100
View File
@@ -0,0 +1,100 @@
name: Backend PR
on:
workflow_dispatch:
pull_request:
types: [opened, synchronize, reopened]
branches:
- 'main'
paths:
- 'server/**/*.java'
- 'server/**/*.xml'
- 'server/pom.xml'
- '.github/workflows/server-ci.yml'
jobs:
run-checks:
name: Checks
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '25'
cache: 'maven'
cache-dependency-path: 'server/pom.xml'
- name: Run Check Style
working-directory: ./server
run: ./mvnw --no-transfer-progress checkstyle:check -Dcheckstyle.skip=false
- name: Run build
working-directory: ./server
run: ./mvnw --no-transfer-progress clean compile -DskipTests
- name: Run tests
working-directory: ./server
run: ./mvnw --no-transfer-progress clean verify -P tests --file pom.xml
build-and-push:
name: Build & Push
runs-on: ubuntu-latest
needs: ["run-checks"]
permissions:
contents: read
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Set lowercase repo name
id: repo
run: echo "name=${GITHUB_REPOSITORY,,}" >> $GITHUB_OUTPUT
- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '25'
cache: 'maven'
cache-dependency-path: 'server/pom.xml'
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Cache Buildpack layers
uses: actions/cache@v4
with:
path: |
~/.cache/reproducible-builds
key: ${{ runner.os }}-buildpack-${{ hashFiles('server/pom.xml') }}
restore-keys: |
${{ runner.os }}-buildpack-
- name: Build Docker image with Spring Boot
working-directory: ./server
run: |
./mvnw -Pnative -DskipTests spring-boot:build-image \
-Dspring-boot.build-image.imageName=ghcr.io/rmcampos/tasknote/api:latest \
-Dspring-boot.build-image.builder=paketobuildpacks/builder-jammy-tiny:latest
- name: Tag and push Docker image
run: |
docker tag ghcr.io/${{ steps.repo.outputs.name }}/api:latest ghcr.io/${{ steps.repo.outputs.name }}/api:candidate
docker push ghcr.io/${{ steps.repo.outputs.name }}/api:candidate
+14 -5
View File
@@ -1,15 +1,16 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
client/node_modules
client/.pnp
client.pnp.js
# testing
/coverage
client/coverage
# production
/build
client/build
client/dist
# misc
.DS_Store
@@ -21,3 +22,11 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.env
# Local PG data
/localpgdata
# IDE
.vscode/
+81
View File
@@ -0,0 +1,81 @@
# 🤝 Contributing
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
This project is an opensource project, meaning you can contribute as many times as you want! We work with the **Fork & Merge** flow.
If you want to contribute, please create a fork and a Merge Request. Take a look [here to learn more.](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork)
## Steps to Contribute
1. Fork the Project
2. Clone it on your local (`git clone https://github.com/ricardo-campos-org/react-typescript-todolist`)
3. Develop your amazing feature/changes
4. Make sure your name is set (`git config user.name 'YOUR NAME'; git config user.email 'YOUR EMAIL'`)
5. Commit your changes (`git commit -m 'Add some amazing feature'`)
6. Push to the Branch (`git push`)
7. Open a Merge Request
## 🏃‍♀️ Running locally
> If your OS is Microsoft Windows, make sure to run this on a Linux VM over WSL2.
The easiest way of having the app up and running is using [Docker](https://www.docker.com/). Once you're all set, follow these steps to see it live locally:
1. Start the database engine (PostgreSQL)
```sh
bash tools/run-docker-db.sh
```
2. Start the back-end engine (Java & Spring Boot)
```sh
bash tools/run-docker-server.sh
```
3. Start the app server
```sh
bash tools/run-docker-client.sh
```
> Remember to follow up logs with 'docker ps' and 'docker logs -f <name>'
If everything went well, you can head to [http://localhost:5000](http://localhost:5000) and create your user.
## 🦾 Automation
Once you finish your changes, just create a Merge Request to get started.
This project has workflows to ensure quality code, including linting, testing and security checks. Your changes will be merged only after all check passes.
You can check locally if changes are passing:
1. Back-end
```sh
bash tools/check-backend.sh
```
2. Front-end
```sh
bash tools/check-frontend.sh
```
> Remember to follow up logs with 'docker ps' and 'docker logs -f <name>'
## Debugging Java
You might need to create a `launch.json` file. Here's a working one
```json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Debug (Attach)",
"request": "attach",
"hostName": "localhost",
"port": 5005
}
]
}
```
+674
View File
@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
+293 -6
View File
@@ -1,8 +1,295 @@
## Simple React Project to Study
# TaskNote
- React
- TypeScript
- Featuring
- CSS as modules
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![React App CI](https://github.com/RMCampos/tasknote/actions/workflows/client-ci.yml/badge.svg)](https://github.com/RMCampos/tasknote/actions/workflows/client-ci.yml)
[![Server API CI](https://github.com/RMCampos/tasknote/actions/workflows/server-ci.yml/badge.svg)](https://github.com/RMCampos/tasknote/actions/workflows/server-ci.yml)
[![Build and Push App Docker Image](https://github.com/RMCampos/tasknote/actions/workflows/main-client.yml/badge.svg)](https://github.com/RMCampos/tasknote/actions/workflows/main-client.yml)
[![Build and Push API Docker Image](https://github.com/RMCampos/tasknote/actions/workflows/main-server.yml/badge.svg)](https://github.com/RMCampos/tasknote/actions/workflows/main-server.yml)
This project was based on a course from **Matheus Battisti** on Udemy (https://www.udemy.com/course/typescript-do-basico-ao-avancado-c-react-express/)
## 📋 Table of Contents
- [📝 About the Project](#-about-the-project)
- [✨ Features](#-features)
- [🚀 Tech Stack](#-tech-stack)
- [🏗️ Architecture](#-architecture)
- [🚀 Getting Started](#-getting-started)
- [🛠️ Development](#-development)
- [🧪 Testing](#-testing)
- [📦 Deployment](#-deployment)
- [🤝 Contributing](#-contributing)
- [👨‍💻 Developer](#-developer)
- [📞 Contact](#-contact)
- [📄 License](#-license)
## 📝 About the Project
TaskNote is a full-stack productivity application designed for managing tasks and notes with simplicity and effectiveness in mind. Originally created to address personal productivity needs, it has evolved into a comprehensive, open-source solution featuring a modern tech stack and enterprise-grade architecture.
The project was born from a month-long technical challenge and has since grown to include robust authentication, internationalization support, responsive design, and comprehensive testing coverage.
## ✨ Features
### Current Features
- **Task Management**: Create, edit, delete, and organize TODO items with due dates and priority levels
- **Note Taking**: Rich text notes with Markdown support for better formatting
- **Smart Search**: Full-text search across tasks and notes with real-time filtering
- **User Authentication**: Secure JWT-based authentication with automatic token refresh
- **Internationalization**: Multi-language support (English, Portuguese, Spanish, Russian)
- **Responsive Design**: Mobile-first approach with Bootstrap 5 and dark/light theme support
- **Data Visualization**: Task completion charts and productivity analytics
- **File Attachments**: URL attachments for tasks and notes
- **Tagging System**: `#tag` support for better organization
- **Mobile App**: Native mobile applications for iOS and Android with PWA plugin
- **Collaboration**: Share tasks and notes with other users
### Upcoming Features
- **Advanced Filters**: Enhanced search with date ranges, priority levels, and status filters
- **Notifications**: Email and push notifications for due dates and reminders
## 🚀 Tech Stack
### Frontend (React & TypeScript)
- **Framework**: React 19 with TypeScript for type safety
- **Build Tool**: Vite for fast development and optimized production builds
- **Testing**: Vitest with React Testing Library and comprehensive coverage reporting
- **Styling**: Bootstrap 5 with custom SCSS and theme support
- **State Management**: React Context API for authentication and sidebar state
- **Routing**: React Router 7 with dynamic route configuration
- **Internationalization**: i18next with automatic language detection
- **API Client**: Centralized API service with automatic authentication headers
### Backend (Java & Spring Boot)
- **Framework**: Spring Boot 4.x.x with Java 25
- **Security**: Spring Security with JWT authentication and refresh tokens
- **Database**: PostgreSQL with JPA/Hibernate ORM
- **Migration**: Flyway for database schema versioning
- **Documentation**: OpenAPI/Swagger UI for API documentation
- **Testing**: JUnit with separate unit and integration test suites
- **Code Quality**: Checkstyle, JaCoCo coverage (75% minimum), Maven Enforcer
- **Build Options**: Traditional JAR or GraalVM native image compilation
### Database & Infrastructure
- **Database**: PostgreSQL with optimized indexes and constraints
- **Containerization**: Docker and Docker Compose for development environment
- **Web Server**: Caddy for reverse proxy and SSL termination
- **CI/CD**: GitHub Actions with automated testing and quality gates
## 🏗️ Architecture
### Monorepo Structure
```
tasknote/
├── client/ # React TypeScript frontend
├── server/ # Java Spring Boot REST API
├── tools/ # Development and deployment scripts
└── docker-compose.yml
```
### Frontend Architecture
- **Component Structure**: Modular components with TypeScript interfaces
- **Authentication Flow**: JWT tokens with 2-minute refresh intervals
- **Theme System**: CSS custom properties for dark/light mode switching
- **Responsive Layout**: Mobile-first design with sidebar navigation
- **Error Handling**: Centralized error boundary and user feedback
### Backend Architecture
- **RESTful API**: Clean REST endpoints with proper HTTP status codes
- **Security Layer**: JWT validation, CORS configuration, and input validation
- **Service Layer**: Business logic separation with transaction management
- **Repository Pattern**: Data access abstraction with custom queries
- **Email Service**: Template-based email notifications for user actions
## 🚀 Getting Started
### Prerequisites
- **Docker & Docker Compose** (recommended for easy setup)
- **Node.js 20+** and **npm** (for frontend development)
- **Java 25+** and **Maven 3.6+** (for backend development)
- **PostgreSQL 15+** (if running without Docker)
### Quick Start with Docker
1. **Clone the repository**
```bash
git clone https://github.com/rmcampos/tasknote.git
cd tasknote
```
2. **Start the database**
```bash
bash tools/run-docker-db.sh
```
3. **Start the backend server**
```bash
bash tools/run-docker-server.sh
```
4. **Start the frontend application**
```bash
bash tools/run-docker-client.sh
```
5. **Access the application**
- Frontend: http://localhost:5000
## 🛠️ Development
### Frontend Development
```bash
cd client
npm install # Install dependencies
npm start # Start development server (port 5000)
npm run build # Build for production
npm run preview # Preview production build
npm run lint # Run ESLint
npm run lint:fix # Fix ESLint issues
```
### Backend Development
```bash
cd server
./mvnw spring-boot:run # Start development server
./mvnw clean compile # Compile sources
./mvnw spring-boot:build-image # Build Docker image
./mvnw clean verify -Pnative # Build GraalVM native image
```
### Quality Checks
Run quality checks before submitting changes:
```bash
bash tools/check-frontend.sh # Frontend linting, testing, coverage
bash tools/check-backend.sh # Backend compilation, tests, checkstyle
```
## 🧪 Testing
### Frontend Testing
- **Framework**: Vitest with React Testing Library
- **Coverage**: Comprehensive test coverage with reports in `client/coverage/`
- **Commands**:
```bash
npm test # Run tests in watch mode
npm run test:coverage # Generate coverage report
```
### Backend Testing
- **Unit Tests**: Fast, isolated tests with mocked dependencies
- **Integration Tests**: Full application context with test database
- **Coverage**: JaCoCo reporting with 75% minimum requirement
- **Commands**:
```bash
./mvnw test # Unit tests only
./mvnw clean verify -Ptests # All tests with coverage
```
## 📦 Deployment
### Production Deployment
The application supports multiple deployment strategies:
1. **Docker Containers** (recommended)
```bash
docker-compose -f docker-compose.prod.yml up -d
```
2. **Traditional JAR Deployment**
```bash
cd server && ./mvnw clean package
java -jar target/tasknote-api.jar
```
3. **GraalVM Native Image** (for optimal performance)
```bash
cd server && ./mvnw clean verify -Pnative
./target/tasknote-api
```
### Environment Configuration
- Database connection via environment variables
- JWT secret configuration for production
- Email service configuration for notifications
- CORS settings for frontend domain
## 🤝 Contributing
We welcome contributions from the community! This project follows the **Fork & Merge** workflow.
### How to Contribute
1. **Fork the Project** on GitHub
2. **Clone your fork** locally
```bash
git clone https://github.com/YOUR_USERNAME/tasknote.git
```
3. **Create a feature branch**
```bash
git checkout -b feature/amazing-feature
```
4. **Make your changes** and ensure they follow the project standards
5. **Run quality checks**
```bash
bash tools/check-frontend.sh
bash tools/check-backend.sh
```
6. **Commit your changes**
```bash
git commit -m 'Add some amazing feature'
```
7. **Push to your fork**
```bash
git push origin feature/amazing-feature
```
8. **Open a Pull Request** with a detailed description
### Development Guidelines
- Follow existing code conventions and patterns
- Write tests for new functionality
- Update documentation when necessary
- Ensure all quality checks pass
- Keep commits focused and descriptive
For detailed setup instructions and development workflows, see [CONTRIBUTING.md](CONTRIBUTING.md).
## 👨‍💻 Developer
**Ricardo Campos** - Full-Stack Developer & Project Maintainer
- **GitHub**: [@RMCampos](https://github.com/RMCampos)
- **Twitter/X**: [@RMCamposs](https://x.com/RMCamposs)
- **LinkedIn**: [Ricardo Campos](https://www.linkedin.com/in/ricardompcampos/)
### About the Developer
Ricardo is a passionate full-stack developer with expertise in modern web technologies, cloud architecture, and agile development practices. This project showcases his skills in:
- **Frontend Development**: React, TypeScript, modern CSS, responsive design
- **Backend Development**: Java, Spring Boot, RESTful APIs, microservices
- **DevOps & Infrastructure**: Docker, CI/CD, cloud deployment, monitoring
- **Software Quality**: Testing strategies, code coverage, static analysis
- **Open Source**: Community engagement, documentation, maintainership
The TaskNote project represents a commitment to clean code, comprehensive testing, and user-centered design principles.
## 📞 Contact
For questions, suggestions, or collaboration opportunities:
- **Email**: Contact via GitHub issues or discussions
- **Twitter/X**: [@RMCamposs](https://x.com/RMCamposs) for quick questions
- **GitHub Issues**: [Create an issue](https://github.com/rmcampos/tasknote/issues) for bugs or feature requests
- **GitHub Discussions**: [Join discussions](https://github.com/rmcampos/tasknote/discussions) for general questions
## 📄 License
This project is licensed under the **GNU General Public License v3.0** - see the [LICENSE](LICENSE) file for details.
### What this means:
-**Freedom to use**: Use the software for any purpose
-**Freedom to study**: Access and modify the source code
-**Freedom to share**: Distribute copies of the software
-**Freedom to improve**: Distribute modified versions
**Copyleft**: Any derivative work must also be open source under GPL v3.0
---
**Star this repository if you find it helpful!**
@@ -0,0 +1,42 @@
meta {
name: 0-Signup new user
type: http
seq: 1
}
put {
url: {{addr}}/auth/sign-up
body: json
auth: inherit
}
body:json {
{
"email": "{{testEmail}}",
"password": "Teste@123.,",
"passwordAgain": "Teste@123.,",
"lang": "en"
}
}
script:pre-request {
const testEmail = `test_${Date.now()}@example.com`;
const testUsername = `test_user_${Date.now()}`;
bru.setVar("testEmail", testEmail);
}
tests {
test("Status code is 204", function() {
expect(res.getStatus()).to.equal(204);
});
test("Response time is acceptable", function() {
expect(res.getResponseTime()).to.be.below(3000);
});
}
settings {
encodeUrl: true
}
@@ -0,0 +1,46 @@
meta {
name: 1-Signup duplicate user
type: http
seq: 2
}
put {
url: {{addr}}/auth/sign-up
body: json
auth: inherit
}
body:json {
{
"email": "{{testEmail}}",
"password": "Teste@123.,",
"passwordAgain": "Teste@123.,",
"lang": "en"
}
}
tests {
test("Status code is 409", function() {
expect(res.getStatus()).to.equal(409);
});
test("Response time is acceptable", function() {
expect(res.getResponseTime()).to.be.below(3000);
});
test("Content type is JSON", function() {
expect(res.getHeader('content-type')).to.contain('application/json');
});
test("Response has data property", function() {
const body = res.getBody();
expect(body).to.have.property('error');
expect(body).to.have.property('message');
expect(body.message).to.equal('Email already exists!');
bru.setVar("authToken", body.token);
});
}
settings {
encodeUrl: true
}
@@ -0,0 +1,63 @@
meta {
name: 2-Sign in user
type: http
seq: 3
}
post {
url: {{addr}}/auth/sign-in
body: json
auth: inherit
}
body:json {
{
"email": "{{testEmail}}",
"password": "Teste@123.,",
"passwordAgain": "Teste@123.,",
"lang": "en"
}
}
tests {
test("Status code is 200", function() {
expect(res.getStatus()).to.equal(200);
});
test("Response time is acceptable", function() {
expect(res.getResponseTime()).to.be.below(3000);
});
test("Content type is JSON", function() {
expect(res.getHeader('content-type')).to.contain('application/json');
});
test("Response has all data well set and defined", function() {
const body = res.getBody();
expect(body).to.have.property('userId');
expect(body).to.have.property('name');
expect(body).to.have.property('email');
expect(body).to.have.property('admin');
expect(body).to.have.property('createdAt');
expect(body).to.have.property('inactivatedAt');
expect(body).to.have.property('gravatarImageUrl');
expect(body).to.have.property('token');
expect(body).to.have.property('lang');
expect(body.userId).to.be.greaterThan(0);
expect(body.name).to.be.null;
expect(body.email).to.equal(bru.getVar("testEmail"));
expect(body.admin).to.equal(false);
expect(body.createdAt).to.not.be.null;
expect(body.inactivatedAt).to.be.null;
expect(body.gravatarImageUrl).to.not.be.null;
expect(body.token).to.not.be.null;
expect(body.lang).to.equal('en');
bru.setVar("authToken", body.token);
});
}
settings {
encodeUrl: true
}
@@ -0,0 +1,53 @@
meta {
name: 3-Sign in user wrong pw
type: http
seq: 4
}
post {
url: {{addr}}/auth/sign-in
body: json
auth: inherit
}
body:json {
{
"email": "{{testEmail}}",
"password": "Teste@123.,11",
"lang": "en"
}
}
tests {
test("Status code is 401", function() {
expect(res.getStatus()).to.equal(401);
});
test("Response time is acceptable", function() {
expect(res.getResponseTime()).to.be.below(3000);
});
test("Content type is JSON", function() {
expect(res.getHeader('content-type')).to.contain('application/json');
});
test("Response has all data well set and defined", function() {
const body = res.getBody();
expect(body).to.have.property('timestamp');
expect(body).to.have.property('status');
expect(body).to.have.property('error');
expect(body).to.have.property('message');
expect(body).to.have.property('path');
expect(body.timestamp).to.not.be.null;
expect(body.status).to.equal(401);
expect(body.error).to.equal('Unauthorized');
expect(body.message).to.equal('Invalid credentials');
expect(body.path).to.equal('/auth/sign-in');
});
}
settings {
encodeUrl: true
}
@@ -0,0 +1,23 @@
meta {
name: Confirm Password Reset
type: http
seq: 8
}
post {
url: {{addr}}/auth/complete-password-reset
body: json
auth: inherit
}
body:json {
{
"token": "string",
"password": "string",
"passwordAgain": "string"
}
}
settings {
encodeUrl: true
}
@@ -0,0 +1,21 @@
meta {
name: Email Confirmation
type: http
seq: 7
}
post {
url: {{addr}}/auth/email-confirmation
body: json
auth: inherit
}
body:json {
{
"email": "ricardompcampos@gmail.com"
}
}
settings {
encodeUrl: true
}
@@ -0,0 +1,21 @@
meta {
name: ReSend Email
type: http
seq: 5
}
post {
url: {{addr}}/auth/resend-email-confirmation
body: json
auth: inherit
}
body:json {
{
"email": "ricardompcampos@gmail.com"
}
}
settings {
encodeUrl: true
}
@@ -0,0 +1,21 @@
meta {
name: Reset Password
type: http
seq: 6
}
post {
url: {{addr}}/auth/password-reset
body: json
auth: inherit
}
body:json {
{
"email": "ricardompcampos@gmail.com"
}
}
settings {
encodeUrl: true
}
+8
View File
@@ -0,0 +1,8 @@
meta {
name: Authentication
seq: 2
}
auth {
mode: inherit
}
+26
View File
@@ -0,0 +1,26 @@
meta {
name: 5-Get tags empty
type: http
seq: 3
}
get {
url: {{addr}}/rest/home/tasks/tags
body: none
auth: none
}
headers {
Authorization: Bearer {{authToken}}
}
tests {
test("Response is an empty array", function() {
const body = res.getBody();
expect(body).to.be.an('array').that.is.empty;
});
}
settings {
encodeUrl: true
}
+8
View File
@@ -0,0 +1,8 @@
meta {
name: Home
seq: 4
}
auth {
mode: inherit
}
+15
View File
@@ -0,0 +1,15 @@
meta {
name: Refresh
type: http
seq: 1
}
get {
url: {{addr}}/rest/user-sessions/refresh
body: none
auth: inherit
}
settings {
encodeUrl: true
}
+8
View File
@@ -0,0 +1,8 @@
meta {
name: Session
seq: 2
}
auth {
mode: inherit
}
+8
View File
@@ -0,0 +1,8 @@
meta {
name: Task
seq: 3
}
auth {
mode: inherit
}
@@ -0,0 +1,83 @@
meta {
name: 999-Delete account
type: http
seq: 2
}
delete {
url: {{addr}}/rest/user-sessions/delete-account
body: none
auth: none
}
headers {
Authorization: Bearer {{authToken}}
}
tests {
test("Status code is 200", function() {
expect(res.getStatus()).to.equal(200);
});
test("Response time is acceptable", function() {
expect(res.getResponseTime()).to.be.below(3000);
});
test("User deletion response is valid", function() {
const body = res.getBody();
// User ID assertions
expect(body.userId).to.exist;
expect(body.userId).to.be.a('number');
expect(body.userId).to.be.greaterThan(0);
// Name should be null after deletion
expect(body.name).to.be.null;
// Email assertions
expect(body.email).to.exist;
expect(body.email).to.be.a('string');
expect(body.email).to.not.be.empty;
expect(body.email).to.match(/^[\w\.-]+@[\w\.-]+\.\w+$/);
// Admin flag
expect(body.admin).to.exist;
expect(body.admin).to.be.a('boolean');
// CreatedAt assertions
expect(body.createdAt).to.exist;
expect(body.createdAt).to.be.a('string');
expect(body.createdAt).to.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/);
// InactivatedAt should exist and not be null (user was deleted)
expect(body.inactivatedAt).to.exist;
expect(body.inactivatedAt).to.not.be.null;
expect(body.inactivatedAt).to.be.a('string');
expect(body.inactivatedAt).to.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/);
// Gravatar URL
expect(body.gravatarImageUrl).to.exist;
expect(body.gravatarImageUrl).to.be.a('string');
expect(body.gravatarImageUrl).to.have.lengthOf(64); // SHA-256 hash length
});
test("User was inactivated after creation", function() {
const body = res.getBody();
const createdAt = new Date(body.createdAt);
const inactivatedAt = new Date(body.inactivatedAt);
expect(inactivatedAt).to.be.greaterThan(createdAt);
});
test("Email matches the test user", function() {
const body = res.getBody();
const expectedEmail = bru.getVar("testEmail");
expect(body.email).to.equal(expectedEmail);
});
}
settings {
encodeUrl: true
}
+8
View File
@@ -0,0 +1,8 @@
meta {
name: User Session
seq: 5
}
auth {
mode: inherit
}
+9
View File
@@ -0,0 +1,9 @@
{
"version": "1",
"name": "TaskNoteBruno",
"type": "collection",
"ignore": [
"node_modules",
".git"
]
}
+11
View File
@@ -0,0 +1,11 @@
auth {
mode: bearer
}
auth:bearer {
token: eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJKYXZhLUFQSSIsInN1YiI6InJpY2FyZG9tcGNhbXBvc0BnbWFpbC5jb20iLCJpYXQiOjE3NTgzOTQ5NzEsImV4cCI6MTc1ODk5OTc3MSwicm9sZXMiOltdLCJ1c2VySWQiOjEsImVtYWlsIjoicmljYXJkb21wY2FtcG9zQGdtYWlsLmNvbSJ9.ZdlouCYWF_kIEwJ2d7Nl3ASA6xS9OeSke84KXa94ugo
}
vars:pre-request {
addr: http://localhost:8585
}
+3
View File
@@ -0,0 +1,3 @@
vars {
addr: http://localhost:8585
}
+3
View File
@@ -0,0 +1,3 @@
vars {
addr: https://api.tasknoteapp.dev.br
}
+3
View File
@@ -0,0 +1,3 @@
vars {
addr: https://stageapi.tasknoteapp.dev.br
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+63
View File
@@ -0,0 +1,63 @@
# https://taskfile.dev
version: '3'
vars:
GREETING: Hello, World!
tasks:
docker-build-web:
desc: Build the tasknote-web prod-ready docker image, tagging it as candidate
cmd: docker build --no-cache --build-arg VITE_BUILD="v999-$(date '+%Y-%m-%d-%H%M%S')" --build-arg SOURCE_PR="v999-123456789-$(date '+%Y-%m-%d-%H%M%S')" -t ghcr.io/rmcampos/tasknote/app:latest ./client
docker-build-api:
desc: Build the tasknote-api prod-ready docker image, tagging it as candidate
cmd: cd server && mvn -Pnative -DskipTests spring-boot:build-image -Dspring-boot.build-image.imageName=ghcr.io/rmcampos/tasknote/api:latest -Dspring-boot.build-image.builder=paketobuildpacks/builder-jammy-tiny:latest
prod-up-web:
desc: Speed up the tasknote-web prod-like image, building it if required
cmd: docker compose -f docker-compose.prod.yml up -d tasknote-web
prod-up-api:
desc: Speed up the tasknote-api prod-like image, building it if required
cmd: docker compose -f docker-compose.prod.yml up -d tasknote-api
prod-up-db:
desc: Start the database container
cmd: docker compose -f docker-compose.prod.yml up -d tasknote-db
prod-up:
desc: Speed up the prod-like images for both tasknote-api and tasknote-web, building them if required
cmd: docker compose -f docker-compose.prod.yml up -d
prod-stop:
desc: Stop prod containers
cmd: docker compose -f docker-compose.prod.yml stop
prod-tier-down:
desc: Stop and remove prod containers
cmd: docker compose -f docker-compose.prod.yml down --remove-orphans
dev-run-web:
desc: Get the tasknote-web up and running locally inside docker ready for development
cmd: docker compose -f docker-compose.dev.yml up -d tasknote-web
dev-run-api:
desc: Get the tasknote-api up and running locally inside docker ready for development
cmd: docker compose -f docker-compose.dev.yml up -d tasknote-api
dev-run-db:
desc: Get the tasknote-db up and running locally inside docker ready for development
cmd: docker compose -f docker-compose.dev.yml up -d tasknote-db
dev-run:
desc: Get both tasknote-web and tasknote-api up and running locally inside docker ready for development
cmd: docker compose -f docker-compose.dev.yml up -d
dev-stop:
desc: Stop dev containers
cmd: docker compose -f docker-compose.dev.yml stop
dev-tier-down:
desc: Stop and remove dev containers
cmd: docker compose -f docker-compose.dev.yml down --remove-orphans
+11
View File
@@ -0,0 +1,11 @@
module.exports = {
arrowParens: 'avoid',
bracketSameLine: true,
bracketSpacing: false,
singleQuote: false,
trailingComma: 'all',
tabWidth: 2,
useTabs: false,
semi: true,
printWidth: 80
};
+61
View File
@@ -0,0 +1,61 @@
{
auto_https off
admin off
}
:5000 {
root * /app/dist
encode gzip
log {
output stdout
format console {
time_format iso8601
level_format color
}
level "INFO"
}
header {
X-Frame-Options "SAMEORIGIN"
X-XSS-Protection "1;mode=block"
Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate"
X-Content-Type-Options "nosniff"
Strict-Transport-Security "max-age=31536000"
Content-Security-Policy "
base-uri 'self';
connect-src 'self' {$VITE_BACKEND_SERVER};
default-src 'self' data:;
font-src 'self' https://fonts.gstatic.com/ https://cdn.jsdelivr.net/;
frame-src 'self';
img-src 'self' data: https://gravatar.com/;
manifest-src 'self';
media-src 'self';
object-src 'none';
script-src 'unsafe-inline' 'report-sample' 'self' https://*.cloudfront.net;
style-src 'report-sample' 'self' https://cdn.jsdelivr.net/ https://fonts.googleapis.com;
worker-src 'none';
"
Referrer-Policy "same-origin"
}
handle /env.js {
header Content-Type "text/javascript"
respond `window.config = {"VITE_BACKEND_SERVER":"{$VITE_BACKEND_SERVER}","VITE_BUILD":"{$VITE_BUILD}"};`
}
handle /favicon.ico {
file_server
}
file_server
handle_errors {
@404 {
expression {http.error.status_code} == 404
}
rewrite @404 /
file_server
}
}
+42
View File
@@ -0,0 +1,42 @@
# Build static files
# Node Bullseye has npm
FROM node:22.14-bookworm-slim AS build
ENV NODE_OPTIONS="--max-old-space-size=3072"
# Build
WORKDIR /app
COPY *.html *.json *.ts ./
COPY ./src ./src
COPY ./public ./public
RUN npm i --ignore-scripts --no-update-notifier --omit=dev && \
npm run build && \
rm -rf node_modules
# Deploy container
# Caddy serves static files
FROM caddy:2.10.2-alpine
RUN apk add --no-cache ca-certificates curl
# Receive build number as argument, retain as environment variable
ARG VITE_BUILD
ARG SOURCE_PR
ENV VITE_BUILD=${VITE_BUILD}
ENV SOURCE_PR=${SOURCE_PR}
# Add metadata to the final image
LABEL org.opencontainers.image.authors="Ricardo Campos <ricardompcampos@gmail.com>" \
org.opencontainers.image.vendor="Ricardo Campos Org" \
org.opencontainers.image.title="TaskNoteApp client" \
org.opencontainers.image.description="React Web app application" \
org.opencontainers.image.version="${SOURCE_PR}" \
org.opencontainers.image.source="https://github.com/ricardo-campos-org/react-typescript-todolist"
# Copy files and run formatting
COPY --from=build /app/dist/ /app/dist
COPY Caddyfile /etc/caddy/Caddyfile
RUN caddy fmt --overwrite /etc/caddy/Caddyfile
# User, port and healthcheck
EXPOSE 5000
HEALTHCHECK CMD curl -f http://localhost:5000
USER 1001
+4
View File
@@ -0,0 +1,4 @@
FROM node:22.14-bookworm-slim
WORKDIR /app
HEALTHCHECK CMD timeout 10s bash -c 'true > /dev/tcp/127.0.0.1/5000'
CMD ["sh", "run-from-docker.sh"]
+62
View File
@@ -0,0 +1,62 @@
import globals from 'globals';
import { fixupConfigRules } from '@eslint/compat';
import jsLint from '@eslint/js';
import tsLint from 'typescript-eslint';
import pluginReactConfig from 'eslint-plugin-react/configs/recommended.js';
import stylistic from '@stylistic/eslint-plugin';
export default [
{
files: ['**/*.{ts,tsx}']
},
{
languageOptions: {
// common parser options, enable TypeScript and JSX
parser: '@typescript-eslint/parser',
parserOptions: {
sourceType: 'module'
}
}
},
{
ignores: [
'**/__test__/*',
'**/assets/*',
'**/*.scss',
'**/*.css',
'**/*.svg'
]
},
{
languageOptions: {
globals: { ...globals.browser, ...globals.node }
}
},
{
settings: {
'import/resolver': {
node: {
extensions: ['.js', '.jsx', ',ts', '.tsx']
}
},
'react': {
pragma: 'React',
fragment: 'Fragment',
version: '18.3'
}
}
},
// syntax rules
jsLint.configs.recommended,
...tsLint.configs.recommended,
...fixupConfigRules(pluginReactConfig),
// code style rules
stylistic.configs['disable-legacy'],
stylistic.configs.customize({
indent: 2,
quotes: 'single',
semi: true,
commaDangle: 'never',
jsx: true
})
];
+27
View File
@@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="icon" href="/favicon.ico" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#ffffff" />
<meta name="description" content="This app provides you tools to get organized and stay on op of notes and TODOs." />
<meta name="robots" content="noindex" />
<meta name="robots" content="nofollow" />
<meta name="googlebot-news" content="noindex" />
<meta name="keywords" content="TODOs, organization, notes, tools" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<link rel="manifest" href="/manifest.json" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.1/font/bootstrap-icons.css">
<link rel="canonical" href="https://tasknoteapp.dev.br" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,200..800;1,200..800&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
<title>TaskNote is your daily-basis friend to keep up with notes and tasks</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script type="module" src="/src/index.tsx"></script>
</body>
</html>
+37
View File
@@ -0,0 +1,37 @@
server {
root /var/www/example.com/html;
index index.html;
server_name example.com www.example.com;
location / {
try_files $uri /index.html
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/texample.com/privkey.pem;
location /server {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_pass http://localhost:8585;
}
}
server {
if ($host = www.example.com) {
return 301 https://$host$request_uri;
}
if ($host = example.com) {
return 301 https://$host$request_uri;
}
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 404;
}
+10240
View File
File diff suppressed because it is too large Load Diff
+91
View File
@@ -0,0 +1,91 @@
{
"name": "task-note",
"version": "1.0.0",
"license": "GPL-3.0-only",
"description": "TaskNote App - Your daily-basis friend to help you with TODOs and Notes",
"keywords": [
"react",
"typescript",
"node",
"nestjs"
],
"repository": "https://github.com/ricardo-campos-org/react-typescript-todolist",
"private": true,
"dependencies": {
"@popperjs/core": "^2.11.8",
"@types/node": "^25.5.2",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^5.1.4",
"bootstrap": "^5.3.8",
"dompurify": "^3.3.3",
"i18next": "^25.10.10",
"react": "^19.2.4",
"react-bootstrap": "^2.10.10",
"react-bootstrap-icons": "^1.11.6",
"react-charts": "^3.0.0-beta.57",
"react-datepicker": "^9.1.0",
"react-dom": "^19.2.4",
"react-i18next": "^16.6.6",
"react-markdown": "^10.1.0",
"react-router": "^7.14.0",
"react-router-bootstrap": "^0.26.3",
"remark-gfm": "^4.0.1",
"typescript": "^5.9.3",
"vite": "^7.3.1"
},
"scripts": {
"start": "vite --host",
"build": "tsc && vite build",
"preview": "vite build && vite preview",
"test": "vitest",
"test:no-watch": "vitest --watch=false",
"test:coverage": "vitest run --coverage --watch=false",
"lint": "./node_modules/.bin/eslint",
"lint:fix": "./node_modules/.bin/eslint --fix"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@eslint/compat": "^2.0.4",
"@eslint/eslintrc": "^3.3.5",
"@eslint/js": "^9.39.2",
"@stylistic/eslint-plugin": "^5.10.0",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@testing-library/user-event": "^14.6.1",
"@types/jest": "^30.0.0",
"@types/react": "^19.2.14",
"@types/react-router-bootstrap": "^0.26.8",
"@vitest/coverage-v8": "^4.1.2",
"eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jsdoc": "^62.9.0",
"eslint-plugin-n": "^17.24.0",
"eslint-plugin-promise": "^7.2.1",
"eslint-plugin-react": "^7.37.5",
"globals": "^17.4.0",
"jsdom": "^29.0.1",
"prettier": "^3.8.1",
"sass": "^1.99.0",
"source-map-support": "^0.5.21",
"typescript-eslint": "^8.58.0",
"vitest": "^4.1.0"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 831 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

+20
View File
@@ -0,0 +1,20 @@
{
"name": "TastNote",
"short_name": "TastNote",
"icons":[
{
"src":"/android-chrome-192x192.png",
"sizes":"192x192",
"type":"image/png"
},
{
"src":"/android-chrome-512x512.png",
"sizes":"512x512",
"type":"image/png"
}
],
"theme_color":"#ffffff",
"background_color":"#ffffff",
"display":"standalone",
"start_url": "."
}
+21
View File
@@ -0,0 +1,21 @@
# Must be unique in a given SonarQube instance
sonar.projectKey=ricardo-campos-org_react-typescript-todolist_client
sonar.organization=ricardo-campos-org
# This is the name and version displayed in the SonarQube UI.
# Was mandatory prior to SonarQube 6.1.
sonar.projectName=tasknote-webapp
#sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file.
# Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.javascript.lcov.reportPaths=coverage/lcov.info
sonar.typescript.tsconfigPaths=tsconfig.json
sonar.sources=src/
sonar.exclusions=src/__test__/**
sonar.tests=src/__test__/
sonar.verbose=false
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
+146
View File
@@ -0,0 +1,146 @@
import React, { useContext, useEffect, useState } from 'react';
import {
createBrowserRouter,
Navigate,
RouteObject,
RouterProvider
} from 'react-router';
import AuthContext from './context/AuthContext';
import BrowserRoutes from './routes';
import ProtectedRoute from './routes/ProtectedRoute';
import PrivateLayout from './layout/PrivateLayout';
import Landing from './views/Landing';
import Login from './views/Login';
import NotFound from './views/NotFound';
import Register from './views/Register';
import EmailConfirmation from './views/EmailConfirmation';
import ResetPassword from './views/ResetPassword';
import CompleteResetPassword from './views/CompleteResetPassword';
import SharedNote from './views/SharedNote';
import './styles/custom.scss';
/**
* The main application component that sets up routing based on the
* user's authentication status.
*
* @component
* @returns {React.ReactNode} The rendered component.
*/
function App(): React.ReactNode {
const { signed, checkCurrentAuthUser } = useContext(AuthContext);
const [theme, setTheme] = useState(() => {
return localStorage.getItem('theme') ?? 'light';
});
/**
* Routes for the users who are not signed in.
* @type {RouteObject[]}
*/
const notSignedRouter: RouteObject[] = [
{
path: '/',
element: <Landing />
},
{
path: '/login',
element: <Login />
},
{
path: '/register',
element: <Register />
},
{
path: '/home',
element: <Navigate to="/login" replace />
},
{
path: '/email-confirmation',
element: <EmailConfirmation />
},
{
// The reset-password is where the password reset workflow starts
path: '/reset-password',
element: <ResetPassword />
},
{
path: '/finish-reset-password',
element: <CompleteResetPassword />
},
{
path: '/public/notes/:token',
element: <SharedNote />
},
{
path: '*',
element: <Navigate to="/" replace />
}
];
/**
* Routes for users who are signed in.
* @type {RouteObject[]}
*/
const signedRouter: RouteObject[] = [
{
path: '/',
element: <ProtectedRoute />,
children: [
{
element: <PrivateLayout />,
children: BrowserRoutes
}
]
},
{
path: '/public/notes/:token',
element: <SharedNote />
},
{
path: '*',
element: <NotFound />
}
];
/**
* Determines the appropriate router based on the user's authentication status.
* @returns {Router} The configured router.
*/
const getBrowserRouter = () => {
if (signed) {
return createBrowserRouter(signedRouter);
}
return createBrowserRouter(notSignedRouter);
};
const browserRouter = getBrowserRouter();
useEffect(() => {
checkCurrentAuthUser(window.location.pathname);
}, []);
useEffect(() => {
document.body.setAttribute('data-bs-theme', theme);
localStorage.setItem('theme', theme);
}, [theme]);
const toggleTheme = () => {
setTheme(prev => (prev === 'light' ? 'dark' : 'light'));
};
return (
<>
<button
type="button"
className="btn btn-dark"
onClick={toggleTheme}
>
{theme === 'dark' ? '☀ Light Mode' : '🌙 Dark Mode'}
</button>
{/* Your routes or content here */}
<RouterProvider router={browserRouter} />
</>
);
};
export default App;
View File
+28
View File
@@ -0,0 +1,28 @@
import React from 'react';
import { test, vi } from 'vitest';
import App from '../App';
import { act, render } from '@testing-library/react';
import AuthContext from '../context/AuthContext';
import authContextMock from './__mocks__/authContextMock';
import SidebarContext from '../context/SidebarContext';
const sidebarContextMock = {
currentPage: '/home',
setNewPage: vi.fn()
};
vi.mock('react-charts', () => ({
Chart: ({ options }) => <div data-testid="mocked-chart">Mocked Chart</div>
}));
test('Renders the app', async () => {
await act(async () => {
render(
<AuthContext.Provider value={authContextMock}>
<SidebarContext.Provider value={sidebarContextMock}>
<App />
</SidebarContext.Provider>
</AuthContext.Provider>
);
});
});
@@ -0,0 +1,14 @@
import { vi } from "vitest";
const authContextMock = {
signed: true,
user: undefined,
checkCurrentAuthUser: vi.fn(),
signIn: vi.fn(),
signOut: vi.fn(),
register: vi.fn(),
isAdmin: false,
updateUser: vi.fn()
};
export default authContextMock;
@@ -0,0 +1,31 @@
import React from 'react';
import { render } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import AlertError from '../../components/AlertError';
describe('AlertError Component tests', () => {
const dataTestId: string = "alert-error-msg-tests";
const renderAlert = (message?: string) => {
return render(
<AlertError errorMessage={message} dataTestid={dataTestId} />
);
};
it('should display the message if error', () => {
const errorMessage = "Oops, something went wrong";
const { getByTestId } = renderAlert(errorMessage);
expect(getByTestId(dataTestId)).toBeDefined();
});
// Personal notes: queryByTestId should be used to find elements
// that possibly aren't in the document. getByTestId expect always
// to find the element.
it('should not display the message if no error', () => {
const errorMessage = "";
const { queryByTestId } = renderAlert(errorMessage);
(errorMessage);
expect(queryByTestId(dataTestId)).toBeNull();
});
});
@@ -0,0 +1,49 @@
import React from 'react';
import { render } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { MemoryRouter } from 'react-router';
import ContentHeader from '../../components/ContentHeader';
const headerProps = {
h1TextRegular: "Title part one",
h1TextBold: "Title part two",
subtitle: "This is the subtitle",
h2BlackText: "Another text part one",
h2GreenText: "Another green text",
isHomeComponent: false
};
describe('ContentHeader test cases', () => {
it('should render all the text elements', () => {
const { getByText } = render(<ContentHeader {...headerProps} />);
expect(getByText(headerProps.h1TextRegular)).toBeDefined();
expect(getByText(headerProps.h1TextBold)).toBeDefined();
expect(getByText(headerProps.subtitle)).toBeDefined();
expect(getByText(headerProps.h2BlackText)).toBeDefined();
expect(getByText(headerProps.h2GreenText)).toBeDefined();
});
it('should render all the text elements for home', () => {
const { getByText } = render(
<MemoryRouter>
<ContentHeader
{ ...headerProps }
isHomeComponent={true}
newTaskI18n="New task"
newNoteI18n="New note"
/>
</MemoryRouter>
);
expect(getByText(headerProps.h1TextRegular)).toBeDefined();
expect(getByText(headerProps.h1TextBold)).toBeDefined();
expect(getByText(headerProps.subtitle)).toBeDefined();
expect(getByText(headerProps.h2BlackText)).toBeDefined();
expect(getByText(headerProps.h2GreenText)).toBeDefined();
// renders only if it's the home (dashboard)
expect(getByText("New note")).toBeDefined();
expect(getByText("New task")).toBeDefined();
});
});
@@ -0,0 +1,27 @@
import React from 'react';
import { render, screen } from '@testing-library/react';
import { MemoryRouter } from 'react-router';
import { describe, it, expect } from 'vitest';
import Header from '../../components/Header';
import '../../i18n';
describe('Header component test', () => {
it('should renders the Header with all elements', () => {
render(
<MemoryRouter>
<Header />
</MemoryRouter>,
);
const logo = screen.getByAltText('TaskNote logo');
const homeLink = screen.getByText('Home');
const tasksLink = screen.getByText('Tasks');
const notesLink = screen.getByText('Notes');
const aboutLink = screen.getByText('About');
expect(logo).toBeDefined();
expect(homeLink).toBeDefined();
expect(tasksLink).toBeDefined();
expect(notesLink).toBeDefined();
expect(aboutLink).toBeDefined();
});
});
@@ -0,0 +1,137 @@
import React from 'react';
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { BrowserRouter } from 'react-router';
import { fireEvent, render, screen } from '@testing-library/react';
import LoginForm from '../../components/LoginForm';
import '../../i18n';
import AuthContext from '../../context/AuthContext';
const authContextMock = {
signed: true,
user: {
userId: 1,
name: 'Ricardo',
email: 'test@example.com',
admin: false,
createdAt: new Date(),
gravatarImageUrl: 'http://image.com'
},
checkCurrentAuthUser: vi.fn(),
signIn: vi.fn(),
signOut: vi.fn(),
register: vi.fn(),
isAdmin: false,
updateUser: vi.fn()
};
describe('LoginForm Component test', () => {
beforeEach(() => {
vi.resetAllMocks();
});
const renderFn = (prefix: string) => {
return render(
<BrowserRouter>
<AuthContext.Provider value={authContextMock}>
<LoginForm prefix={prefix} />
</AuthContext.Provider>
</BrowserRouter>
);
};
it('should render the Login Form component correctly', () => {
renderFn("login");
const loginEmailInput: HTMLInputElement = screen.getByTestId('login_email_input');
expect(loginEmailInput).toBeDefined();
expect(loginEmailInput.required).toBe(true);
});
it('should render the Register Form component correctly', () => {
renderFn("register");
const loginEmailInput: HTMLInputElement = screen.getByTestId('register_email_input');
expect(loginEmailInput).toBeDefined();
expect(loginEmailInput.required).toBe(true);
});
it('should render the Login Form correctly for "login" prefix', () => {
renderFn("login");
const emailInput = screen.getByTestId('login_email_input');
const passwordInput = screen.getByTestId('account-password-login');
const submitButton = screen.getByRole('button', { name: /login/i });
expect(emailInput).toBeDefined();
expect(passwordInput).toBeDefined();
expect(submitButton).toBeDefined();
});
it('should render the Register Form correctly for "register" prefix', () => {
renderFn("register");
const emailInput = screen.getByTestId('register_email_input');
const passwordInput = screen.getByTestId('account-password-login');
const repeatPasswordInput = screen.getByTestId('account-repeat-password-register');
const submitButton = screen.getByRole('button', { name: /create account/i });
expect(emailInput).toBeDefined();
expect(passwordInput).toBeDefined();
expect(repeatPasswordInput).toBeDefined();
expect(submitButton).toBeDefined();
});
it('should render the Reset Password Form correctly for "reset" prefix', () => {
renderFn("reset");
const emailInput = screen.getByTestId('reset_email_input');
const submitButton = screen.getByRole('button', { name: /Send confirmation email/i });
expect(emailInput).toBeDefined();
expect(submitButton).toBeDefined();
});
it('should display error message when form is invalid', () => {
renderFn("login");
const submitButton = screen.getByRole('button', { name: /login/i });
fireEvent.click(submitButton);
const errorMessage = screen.getByText(/please fill in your username and password/i);
expect(errorMessage).toBeDefined();
});
it('should display success message for "register" prefix after successful submission', async () => {
renderFn("register");
const emailInput = screen.getByTestId('register_email_input');
const passwordInput = screen.getByTestId('account-password-login');
const repeatPasswordInput = screen.getByTestId('account-repeat-password-register');
const submitButton = screen.getByRole('button', { name: /create account/i });
fireEvent.change(emailInput, { target: { value: 'test@example.com' } });
fireEvent.change(passwordInput, { target: { value: 'password123' } });
fireEvent.change(repeatPasswordInput, { target: { value: 'password123' } });
fireEvent.click(submitButton);
const successMessage = await screen.findByText(/please confirm your email before proceeding/i);
expect(successMessage).toBeDefined();
});
it('should disable resend button and show countdown for "register" prefix', async () => {
renderFn("register");
const emailInput = screen.getByTestId('register_email_input');
const passwordInput = screen.getByTestId('account-password-login');
const repeatPasswordInput = screen.getByTestId('account-repeat-password-register');
const submitButton = screen.getByRole('button', { name: /create account/i });
fireEvent.change(emailInput, { target: { value: 'test@example.com' } });
fireEvent.change(passwordInput, { target: { value: 'password123' } });
fireEvent.change(repeatPasswordInput, { target: { value: 'password123' } });
fireEvent.click(submitButton);
const resendButton = screen.queryByRole('button', { name: /resend confirmation email/i }) as HTMLButtonElement;
expect(resendButton).toBeNull();
});
});
@@ -0,0 +1,107 @@
import React from 'react';
import { describe, vi, it, expect, beforeEach } from 'vitest';
import { render, screen, fireEvent, act, waitFor } from '@testing-library/react';
import ModalMarkdown from '../../components/ModalMarkdown';
describe('ModalMarkdown Component', () => {
const props = {
show: true,
title: 'Test Title',
markdownText: '# Test Markdown',
onHide: vi.fn(),
};
beforeEach(() => {
Object.assign(navigator, {
clipboard: {
writeText: vi.fn().mockResolvedValue(undefined),
},
});
});
it('should render the modal with the correct title and markdown text', () => {
render(<ModalMarkdown {...props} />);
expect(screen.getByTestId('modal-header-title').innerHTML).toBe('Test Title');
expect(screen.getByText('Test Markdown')).toBeDefined();
});
it('should call onHide when the close button is clicked', () => {
render(<ModalMarkdown {...props} />);
fireEvent.click(screen.getByText('Close'));
expect(props.onHide).toHaveBeenCalled();
});
it('should not render the modal when show is false', () => {
render(<ModalMarkdown {...props} show={false} />);
expect(screen.queryByTestId('modal-header-title')).toBeNull();
});
it('should render "No title" when title is an empty string', () => {
render(<ModalMarkdown {...props} title="" />);
expect(screen.getByTestId('modal-header-title').innerHTML).toBe('No title');
});
it('should show Source and Copy buttons', () => {
render(<ModalMarkdown {...props} />);
expect(screen.getByTestId('modal-source-button')).toBeDefined();
expect(screen.getByTestId('modal-copy-button')).toBeDefined();
});
it('should toggle to source view when Source button is clicked', () => {
render(<ModalMarkdown {...props} />);
expect(screen.queryByTestId('markdown-source-view')).toBeNull();
fireEvent.click(screen.getByTestId('modal-source-button'));
expect(screen.getByTestId('markdown-source-view')).toBeDefined();
expect(screen.getByTestId('markdown-source-view').textContent).toBe('# Test Markdown');
});
it('should toggle back to rendered view when Source button is clicked again', () => {
render(<ModalMarkdown {...props} />);
fireEvent.click(screen.getByTestId('modal-source-button'));
expect(screen.getByTestId('markdown-source-view')).toBeDefined();
fireEvent.click(screen.getByTestId('modal-source-button'));
expect(screen.queryByTestId('markdown-source-view')).toBeNull();
});
it('should call clipboard writeText with markdownText when Copy button is clicked', async () => {
render(<ModalMarkdown {...props} />);
await act(async () => {
fireEvent.click(screen.getByTestId('modal-copy-button'));
});
expect(navigator.clipboard.writeText).toHaveBeenCalledWith('# Test Markdown');
});
it('should show "Copied!" text after Copy button is clicked', async () => {
render(<ModalMarkdown {...props} />);
await act(async () => {
fireEvent.click(screen.getByTestId('modal-copy-button'));
});
await waitFor(() => {
expect(screen.getByTestId('modal-copy-button').textContent).toBe('Copied!');
});
});
it('should reset source view state when modal is closed', () => {
render(<ModalMarkdown {...props} />);
fireEvent.click(screen.getByTestId('modal-source-button'));
expect(screen.getByTestId('markdown-source-view')).toBeDefined();
fireEvent.click(screen.getByText('Close'));
expect(props.onHide).toHaveBeenCalled();
});
});
@@ -0,0 +1,12 @@
import React from 'react';
import { render } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import NoteTitle from '../../components/NoteTitle';
describe('NoteTitle test cases', () => {
it('should render the note title', () => {
const { getByText } = render(<NoteTitle title="Test Title" noteUrl={null} />)
expect(getByText('Test Title')).toBeDefined();
});
});
@@ -0,0 +1,67 @@
import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import { describe, expect, it, vi } from 'vitest';
import { MemoryRouter } from 'react-router';
import { I18nextProvider } from 'react-i18next';
import Sidebar from '../../components/Sidebar';
import AuthContext from '../../context/AuthContext';
import SidebarContext from '../../context/SidebarContext';
import i18n from '../../i18n';
const authContextMock = {
signed: true,
user: {
userId: 1,
name: 'Ricardo',
email: 'ricardo@campos.com',
admin: false,
createdAt: new Date(),
gravatarImageUrl: 'http://url.com'
},
checkCurrentAuthUser: vi.fn(),
signIn: vi.fn(),
signOut: vi.fn(),
register: vi.fn(),
isAdmin: false,
updateUser: vi.fn(),
};
const sidebarContextMock = {
currentPage: '/home',
setNewPage: vi.fn()
};
describe('Sidebar Component', () => {
const renderSidebar = () => {
return render(
<MemoryRouter>
<AuthContext.Provider value={authContextMock}>
<I18nextProvider i18n={i18n}>
<SidebarContext.Provider value={sidebarContextMock}>
<Sidebar isMobileOpen={false} setIsMobileOpen={vi.fn()} />
</SidebarContext.Provider>
</I18nextProvider>
</AuthContext.Provider>
</MemoryRouter>
);
};
it('should render the Sidebar component', () => {
const { getByText } = renderSidebar();
expect(getByText('Ricardo')).toBeDefined();
});
it('should call signOut when logout is clicked', () => {
const { getByText } = renderSidebar();
fireEvent.click(getByText('Logout'));
expect(authContextMock.signOut).toHaveBeenCalled();
});
it('should highlight the selected menu item', () => {
const { getByText } = renderSidebar();
fireEvent.click(getByText('Home'));
const dashboardElement = getByText('Home').closest('.sidebar-nav');
expect(dashboardElement).not.toBeNull();
expect(dashboardElement!.classList.contains('selected')).toBe(true);
});
});
@@ -0,0 +1,18 @@
import React from 'react';
import { render } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import TaskTag from '../../components/TaskTag';
describe('TaskTag Component', () => {
it('should render the TaskTag component with provided tag and last update', () => {
const { getByText } = render(<TaskTag tag="important" lastUpdate="2025-02-20" />);
expect(getByText('#important')).toBeDefined();
expect(getByText('2025-02-20')).toBeDefined();
});
it('should render the TaskTag component with default tag when no tag is provided', () => {
const { getByText } = render(<TaskTag lastUpdate="2025-02-20" />);
expect(getByText('#untagged')).toBeDefined();
expect(getByText('2025-02-20')).toBeDefined();
});
});
@@ -0,0 +1,26 @@
import React from 'react';
import { render } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import TaskTimeLeft from '../../components/TaskTimeLeft';
describe('TaskTimeLeft Component', () => {
const renderComponent = (done: boolean) => {
return render(
<TaskTimeLeft
text="2 days left"
done={done}
tooltip="2025-03-20"
/>
);
};
it('should render the TaskTimeLeft component with text when task is not done', () => {
const { getByText } = renderComponent(false);
expect(getByText('2 days left')).toBeDefined();
});
it('should not render the TaskTimeLeft component when task is done', () => {
const { queryByText } = renderComponent(true);
expect(queryByText('2 days left')).toBeNull();
});
});
@@ -0,0 +1,38 @@
import React from 'react';
import { render } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import TaskTitle from '../../components/TaskTitle';
describe('TaskTitle Component', () => {
it('should render the TaskTitle component with high priority and done', () => {
const { getByText, container } = render(<TaskTitle title="Test Task" highPriority={true} done={true} />);
expect(container.querySelector('.task-title-icon')).toBeDefined();
expect(container.querySelector('.text-strike')).toBeDefined();
expect(getByText('Test Task')).toBeDefined();
expect(container.querySelector('svg')).toBeDefined(); // Check2Circle icon
});
it('should render the TaskTitle component with high priority and not done', () => {
const { getByText, container } = render(<TaskTitle title="Test Task" highPriority={true} done={false} />);
expect(container.querySelector('.task-title-icon')).toBeDefined();
expect(container.querySelector('.text-strike')).toBeNull();
expect(getByText('Test Task')).toBeDefined();
expect(container.querySelector('svg')).toBeDefined(); // Bell icon
});
it('should render the TaskTitle component with not high priority and done', () => {
const { getByText, container } = render(<TaskTitle title="Test Task" highPriority={false} done={true} />);
expect(container.querySelector('.task-title-icon')).toBeDefined();
expect(container.querySelector('.text-strike')).toBeDefined();
expect(getByText('Test Task')).toBeDefined();
expect(container.querySelector('svg')).toBeDefined(); // Check2Circle icon
});
it('should render the TaskTitle component with not high priority and not done', () => {
const { getByText, container } = render(<TaskTitle title="Test Task" highPriority={false} done={false} />);
expect(container.querySelector('.task-title-icon')).toBeDefined();
expect(container.querySelector('.text-strike')).toBeNull();
expect(getByText('Test Task')).toBeDefined();
expect(container.querySelector('svg')).toBeNull(); // No icon
});
});
@@ -0,0 +1,256 @@
// AuthProvider.test.tsx
import React, { useContext } from 'react';
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
import { render, act, waitFor, cleanup } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import AuthProvider from '../../context/AuthProvider';
import AuthContext, { AuthContextData } from '../../context/AuthContext';
import api from '../../api-service/api';
import { API_TOKEN, USER_DATA } from '../../app-constants/app-constants';
// Mock the API service methods.
vi.mock('../../api-service/api');
// Create a helper component to consume AuthContext for testing.
const ConsumerComponent: React.FC = () => {
const {
signed,
user,
signIn,
register,
signOut,
updateUser,
checkCurrentAuthUser
} = useContext<AuthContextData>(AuthContext);
return (
<div>
<div data-testid="signed">{signed ? 'true' : 'false'}</div>
<div data-testid="user">{user ? user.name : 'none'}</div>
<button
data-testid="signIn"
onClick={async() => {
await signIn('test@example.com', 'password123');
}}
>
Sign In
</button>
<button
data-testid="register"
onClick={() => {
register('new@example.com', 'password123', 'password123');
}}
>
Register
</button>
<button
data-testid="sign-out-btn"
onClick={() => {
signOut();
}}
>
Sign Out
</button>
<button
data-testid="updateUser"
onClick={() => {
updateUser({
userId: 1,
name: 'Updated User',
email: 'updated@example.com',
admin: false,
createdAt: new Date(),
gravatarImageUrl: 'http://dummyimage.com'
});
}}
>
Update User
</button>
<button
data-testid="checkCurrentAuthUser"
onClick={() => {
checkCurrentAuthUser('/some-path');
}}
>
Check Current Auth User
</button>
</div>
);
};
describe('AuthProvider', () => {
// Reset DOM and mocks for each test.
beforeEach(() => {
localStorage.clear();
vi.clearAllMocks();
});
afterEach(() => {
cleanup();
});
it('should render the default context values', () => {
const { getByTestId } = render(
<AuthProvider>
<ConsumerComponent />
</AuthProvider>
);
expect(getByTestId('signed').textContent).toBe('false');
expect(getByTestId('user').textContent).toBe('none');
});
it('should sign in a user successfully', async () => {
// Create a fake sign-in response.
const fakeResponse = {
userId: '123',
name: 'Test User',
email: 'test@example.com',
admin: false,
createdAt: new Date(),
token: 'dummy-token',
gravatarImageUrl: 'http://dummyimage.com'
};
vi.spyOn(api, 'postJSON').mockResolvedValue(fakeResponse);
const { getByTestId } = render(
<AuthProvider>
<ConsumerComponent />
</AuthProvider>
);
await act(async () => {
userEvent.click(getByTestId('signIn'));
});
await waitFor(() =>
expect(getByTestId('signed').textContent).toBe('true')
);
expect(getByTestId('user').textContent).toBe('Test User');
// LocalStorage should have API_TOKEN and USER_DATA set.
expect(localStorage.getItem(API_TOKEN)).toBe('dummy-token');
expect(localStorage.getItem(USER_DATA)).not.toBeNull();
});
it('should sign out a user', async () => {
// Pre-populate localStorage to simulate a signed-in state.
localStorage.setItem(API_TOKEN, 'dummy-token');
localStorage.setItem(
USER_DATA,
JSON.stringify({
userId: '123',
name: 'Test User',
email: 'test@example.com',
admin: false,
createdAt: new Date(),
gravatarImageUrl: 'http://dummyimage.com'
})
);
const fakeResponse = {
userId: '123',
name: 'Test User',
email: 'test@example.com',
admin: false,
createdAt: new Date(),
token: 'dummy-token',
gravatarImageUrl: 'http://dummyimage.com'
};
vi.spyOn(api, 'postJSON').mockResolvedValue(fakeResponse);
const { getByTestId } = render(
<AuthProvider>
<ConsumerComponent />
</AuthProvider>
);
// Make sure that the context initially renders with the signed user by triggering a signIn.
await act(async () => {
userEvent.click(getByTestId('signIn'));
});
await waitFor(() =>
expect(getByTestId('signed').textContent).toBe('true')
);
// Now sign out
await act(async () => {
userEvent.click(getByTestId('sign-out-btn'));
});
await waitFor(() =>
expect(getByTestId('signed').textContent).toBe('false')
);
expect(getByTestId('user').textContent).toBe('none');
// LocalStorage items should be removed.
expect(localStorage.getItem(API_TOKEN)).toBeNull();
expect(localStorage.getItem(USER_DATA)).toBeNull();
});
it('should update user in context and localStorage', async () => {
const { getByTestId } = render(
<AuthProvider>
<ConsumerComponent />
</AuthProvider>
);
await act(async () => {
userEvent.click(getByTestId('updateUser'));
});
await waitFor(() => {
act(() => {
expect(getByTestId('user').textContent).toBe('Updated User')
})
const savedUser = localStorage.getItem(USER_DATA);
expect(savedUser).not.toBeNull();
if (savedUser) {
const parsedUser = JSON.parse(savedUser);
expect(parsedUser.name).toBe('Updated User');
}
});
});
it('should call fetchCurrentSession when checking current auth user', async () => {
const fakeResponse = {
token: 'refresh-token',
userId: '789',
name: 'Refreshed User',
email: 'refreshed@example.com',
admin: false,
createdAt: new Date().toISOString(),
gravatarImageUrl: 'http://dummyimage.com'
};
vi.spyOn(api, 'getJSON').mockResolvedValue(fakeResponse);
// Store API_TOKEN so that fetchCurrentSession runs the refresh logic.
localStorage.setItem(API_TOKEN, 'dummy');
const user = userEvent.setup();
let getByTestIdFunction;
await act(async () => {
const { getByTestId } = render(
<AuthProvider>
<ConsumerComponent />
</AuthProvider>
);
getByTestIdFunction = getByTestId;
});
// Wait for any initial renders to complete
await waitFor(() => expect(getByTestIdFunction('checkCurrentAuthUser')).toBeDefined());
await user.click(getByTestIdFunction('checkCurrentAuthUser'));
await waitFor(() =>
expect(localStorage.getItem(API_TOKEN)).toBe('refresh-token')
);
});
});
@@ -0,0 +1,66 @@
// AuthProvider.test.tsx
import React, { useContext } from 'react';
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
import { render, act, waitFor, cleanup } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import SidebarProvider from '../../context/SidebarProvider';
import SidebarContext, { SidebarContextData } from '../../context/SidebarContext';
// Create a helper component to consume AuthContext for testing.
const ConsumerComponent: React.FC = () => {
const {
currentPage,
setNewPage
} = useContext<SidebarContextData>(SidebarContext);
return (
<div>
<div data-testid="page">{currentPage}</div>
<button
data-testid="setPage"
onClick={() => {
setNewPage('/another');
}}
>
Change page
</button>
</div>
);
};
describe('SidebarProvider', () => {
// Reset DOM and mocks for each test.
beforeEach(() => {
vi.clearAllMocks();
});
afterEach(() => {
cleanup();
});
it('should render the default context values', () => {
const { getByTestId } = render(
<SidebarProvider>
<ConsumerComponent />
</SidebarProvider>
);
expect(getByTestId('page').textContent).toBe('/home');
});
it('should set a new page after click', async () => {
const { getByTestId } = render(
<SidebarProvider>
<ConsumerComponent />
</SidebarProvider>
);
await act(async () => {
userEvent.click(getByTestId('setPage'));
});
await waitFor(() =>
expect(getByTestId('page').textContent).toBe('/another')
);
});
});
+52
View File
@@ -0,0 +1,52 @@
import { afterEach, beforeEach } from 'vitest';
import { cleanup } from '@testing-library/react';
import { vi } from 'vitest';
// runs a cleanup after each test case (e.g. clearing jsdom)
afterEach(() => {
cleanup();
});
window.matchMedia = window.matchMedia || function() {
return {
matches: false,
addListener: function() {},
removeListener: function() {}
};
};
class ResizeObserver {
observe() {}
unobserve() {}
disconnect() {}
}
window.ResizeObserver = window.ResizeObserver || ResizeObserver;
// Mock fetch globally
global.fetch = vi.fn().mockResolvedValue({
ok: true,
json: vi.fn().mockResolvedValue([]),
text: vi.fn().mockResolvedValue(''),
blob: vi.fn().mockResolvedValue(new Blob()),
arrayBuffer: vi.fn().mockResolvedValue(new ArrayBuffer(0)),
headers: new Headers(),
status: 200,
statusText: 'OK',
});
beforeEach(() => {
vi.resetAllMocks();
// Reset the fetch mock with default successful response
global.fetch = vi.fn().mockResolvedValue({
ok: true,
json: vi.fn().mockResolvedValue([]),
text: vi.fn().mockResolvedValue(''),
blob: vi.fn().mockResolvedValue(new Blob()),
arrayBuffer: vi.fn().mockResolvedValue(new ArrayBuffer(0)),
headers: new Headers(),
status: 200,
statusText: 'OK',
});
});
@@ -0,0 +1,65 @@
import { describe, expect, it } from 'vitest';
import { translateTimeMessage, translateServerResponse } from '../../utils/TranslatorUtils';
import { serverResponses } from '../../constants/serverResponses';
describe('Portuguese Utils unit tests', () => {
it('should translate all time ago messages to pt_br', () => {
expect(translateTimeMessage('2 years ago', 'pt_br')).toBe('2 anos atrás');
expect(translateTimeMessage('1 year ago', 'pt_br')).toBe('1 ano atrás');
expect(translateTimeMessage('2 months ago', 'pt_br')).toBe('2 meses atrás');
expect(translateTimeMessage('1 month ago', 'pt_br')).toBe('1 mês atrás');
expect(translateTimeMessage('2 days ago', 'pt_br')).toBe('2 dias atrás');
expect(translateTimeMessage('1 day ago', 'pt_br')).toBe('1 dia atrás');
expect(translateTimeMessage('2 hours ago', 'pt_br')).toBe('2 horas atrás');
expect(translateTimeMessage('1 hour ago', 'pt_br')).toBe('1 hora atrás');
expect(translateTimeMessage('2 minutes ago', 'pt_br')).toBe('2 minutos atrás');
expect(translateTimeMessage('1 minute ago', 'pt_br')).toBe('1 minuto atrás');
expect(translateTimeMessage('2 seconds ago', 'pt_br')).toBe('2 segundos atrás');
expect(translateTimeMessage('1 second ago', 'pt_br')).toBe('1 segundo atrás');
expect(translateTimeMessage('Moments ago', 'pt_br')).toBe('Momentos atrás');
expect(translateTimeMessage('lala', 'pt_br')).toBe('lala');
expect(translateTimeMessage('null', 'pt_br')).toBe('null');
});
it('should translate all time left messages to pt_br', () => {
expect(translateTimeMessage('2 years left', 'pt_br')).toBe('2 anos restantes');
expect(translateTimeMessage('1 year left', 'pt_br')).toBe('1 ano restante');
expect(translateTimeMessage('2 months left', 'pt_br')).toBe('2 meses restantes');
expect(translateTimeMessage('1 month left', 'pt_br')).toBe('1 mês restante');
expect(translateTimeMessage('2 days left', 'pt_br')).toBe('2 dias restantes');
expect(translateTimeMessage('1 day left', 'pt_br')).toBe('1 dia restante');
expect(translateTimeMessage('lala', 'pt_br')).toBe('lala');
expect(translateTimeMessage('null', 'pt_br')).toBe('null');
});
it('should translate all server responses to pt_br', () => {
const keys: string[] = Object.keys(serverResponses);
expect(translateServerResponse(keys[0], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 8 letras');
expect(translateServerResponse(keys[1], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 8 letras, 1 caracter especial');
expect(translateServerResponse(keys[2], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 8 letras, 1 número, 1 caracter especial');
expect(translateServerResponse(keys[3], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 8 letras, 1 maiúscula, 1 número, 1 caracter especial');
expect(translateServerResponse(keys[4], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 8 letras, 1 maiúscula, 1 caracter especial');
expect(translateServerResponse(keys[5], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 1 maiúscula, 1 caracter especial');
expect(translateServerResponse(keys[6], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 1 caracter especial');
expect(translateServerResponse(keys[7], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 1 número');
expect(translateServerResponse(keys[8], 'pt_br')).toBe('E-mail já cadastrado!');
expect(translateServerResponse(keys[9], 'pt_br')).toBe('Proibido! Acesso negado');
expect(translateServerResponse(keys[10], 'pt_br')).toBe('Se o endereço de e-mail informado estiver associado a uma conta, você receberá um link para resetar a senha em breve.');
expect(translateServerResponse(keys[11], 'pt_br')).toBe('Erro Interno do Servidor!');
expect(translateServerResponse(keys[12], 'pt_br')).toBe('Limite máximo de tentativas atingido. Por favor aguarde 30 minutos');
expect(translateServerResponse(keys[13], 'pt_br')).toBe('Erro de rede ao tentar obter recursos.');
expect(translateServerResponse(keys[14], 'pt_br')).toBe('Por favor, confirme seu e-mail antes de continuar');
expect(translateServerResponse(keys[15], 'pt_br')).toBe('Por favor, preencha todos os campos');
expect(translateServerResponse(keys[16], 'pt_br')).toBe('Por favor, informe seu e-mail');
expect(translateServerResponse(keys[17], 'pt_br')).toBe('Por favor, informe seu e-mail e senha!');
expect(translateServerResponse(keys[18], 'pt_br')).toBe('Por favor, informe a nova senha');
expect(translateServerResponse(keys[19], 'pt_br')).toBe('Por favor, digite pelo menos 3 letras');
expect(translateServerResponse(keys[20], 'pt_br')).toBe('O tamanho máximo do texto é 2000');
expect(translateServerResponse(keys[21], 'pt_br')).toBe('Erro desconhecido');
expect(translateServerResponse(keys[22], 'pt_br')).toBe('Identificação incorreta ou faltando');
expect(translateServerResponse(keys[23], 'pt_br')).toBe('Informação errada ou incompleta!');
expect(translateServerResponse(keys[24], 'pt_br')).toBe('E-mail ou senha inválidos!');
expect(translateServerResponse(keys[25], 'pt_br')).toBe('Nada para atualizar!');
});
});
@@ -0,0 +1,86 @@
import { describe, expect, it } from 'vitest';
import { translateTimeMessage, translateServerResponse } from '../../utils/TranslatorUtils';
import { serverResponses } from '../../constants/serverResponses';
describe('Russian Utils unit tests', () => {
it('should translate all time ago messages to ru', () => {
expect(translateTimeMessage('2 years ago', 'ru')).toBe('2 года назад');
expect(translateTimeMessage('1 year ago', 'ru')).toBe('1 год назад');
expect(translateTimeMessage('2 months ago', 'ru')).toBe('2 месяца назад');
expect(translateTimeMessage('1 month ago', 'ru')).toBe('1 месяц назад');
expect(translateTimeMessage('2 days ago', 'ru')).toBe('2 дня назад');
expect(translateTimeMessage('1 day ago', 'ru')).toBe('1 день назад');
expect(translateTimeMessage('2 hours ago', 'ru')).toBe('2 часа назад');
expect(translateTimeMessage('1 hour ago', 'ru')).toBe('1 час назад');
expect(translateTimeMessage('2 minutes ago', 'ru')).toBe('2 минуты назад');
expect(translateTimeMessage('1 minute ago', 'ru')).toBe('1 минуту назад');
expect(translateTimeMessage('2 seconds ago', 'ru')).toBe('2 секунды назад');
expect(translateTimeMessage('1 second ago', 'ru')).toBe('1 секунду назад');
expect(translateTimeMessage('Moments ago', 'ru')).toBe('Несколько минут назад');
expect(translateTimeMessage('lala', 'ru')).toBe('lala');
expect(translateTimeMessage('null', 'ru')).toBe('null');
});
it('should translate all time left messages to ru', () => {
expect(translateTimeMessage('1 year left', 'ru')).toBe('Остался 1 год');
expect(translateTimeMessage('2 years left', 'ru')).toBe('осталось 2 года');
expect(translateTimeMessage('3 years left', 'ru')).toBe('осталось 3 года');
expect(translateTimeMessage('4 years left', 'ru')).toBe('осталось 4 года');
expect(translateTimeMessage('5 years left', 'ru')).toBe('осталось 5 лет');
expect(translateTimeMessage('6 years left', 'ru')).toBe('осталось 6 лет');
expect(translateTimeMessage('7 years left', 'ru')).toBe('осталось 7 лет');
expect(translateTimeMessage('8 years left', 'ru')).toBe('осталось 8 лет');
expect(translateTimeMessage('9 years left', 'ru')).toBe('осталось 9 лет');
expect(translateTimeMessage('1 month left', 'ru')).toBe('Остался 1 месяц');
expect(translateTimeMessage('2 months left', 'ru')).toBe('осталось 2 месяца');
expect(translateTimeMessage('3 months left', 'ru')).toBe('осталось 3 месяца');
expect(translateTimeMessage('4 months left', 'ru')).toBe('осталось 4 месяца');
expect(translateTimeMessage('5 months left', 'ru')).toBe('осталось 5 месяцев');
expect(translateTimeMessage('6 months left', 'ru')).toBe('осталось 6 месяцев');
expect(translateTimeMessage('7 months left', 'ru')).toBe('осталось 7 месяцев');
expect(translateTimeMessage('8 months left', 'ru')).toBe('осталось 8 месяцев');
expect(translateTimeMessage('9 months left', 'ru')).toBe('осталось 9 месяцев');
expect(translateTimeMessage('1 day left', 'ru')).toBe('Остался 1 день');
expect(translateTimeMessage('2 days left', 'ru')).toBe('осталось 2 дня');
expect(translateTimeMessage('3 days left', 'ru')).toBe('осталось 3 дня');
expect(translateTimeMessage('4 days left', 'ru')).toBe('осталось 4 дня');
expect(translateTimeMessage('5 days left', 'ru')).toBe('осталось 5 дней');
expect(translateTimeMessage('6 days left', 'ru')).toBe('осталось 6 дней');
expect(translateTimeMessage('7 days left', 'ru')).toBe('осталось 7 дней');
expect(translateTimeMessage('8 days left', 'ru')).toBe('осталось 8 дней');
expect(translateTimeMessage('9 days left', 'ru')).toBe('осталось 9 дней');
expect(translateTimeMessage('lala', 'ru')).toBe('lala');
expect(translateTimeMessage('null', 'ru')).toBe('null');
});
it('should translate all server responses to ru', () => {
const keys: string[] = Object.keys(serverResponses);
expect(translateServerResponse(keys[0], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 8 символов.');
expect(translateServerResponse(keys[1], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 специальный символ.');
expect(translateServerResponse(keys[2], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 цифру, 1 специальный символ.');
expect(translateServerResponse(keys[3], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 заглавную букву, 1 цифру, 1 специальный символ.');
expect(translateServerResponse(keys[4], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 заглавную букву, 1 специальный символ.');
expect(translateServerResponse(keys[5], 'ru')).toBe('Неправильный пароль: Пароль должен содержать как минимум 1 заглавную букву и 1 специальный символ.');
expect(translateServerResponse(keys[6], 'ru')).toBe('Неправильный пароль: Пароль должен содержать хотя бы 1 специальный символ.');
expect(translateServerResponse(keys[7], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 1 цифры.');
expect(translateServerResponse(keys[8], 'ru')).toBe('Электронная почта уже используется!');
expect(translateServerResponse(keys[9], 'ru')).toBe('Доступ запрещен!');
expect(translateServerResponse(keys[10], 'ru')).toBe('Если введенный вами адрес электронной почты связан с учетной записью, вы вскоре получите ссылку для сброса пароля.');
expect(translateServerResponse(keys[11], 'ru')).toBe('Внутренняя ошибка сервера!');
expect(translateServerResponse(keys[12], 'ru')).toBe('Достигнут максимальный лимит попыток входа. Пожалуйста, подождите 30 минут');
expect(translateServerResponse(keys[13], 'ru')).toBe('Ошибка сети при попытке получить ресурс.');
expect(translateServerResponse(keys[14], 'ru')).toBe('Пожалуйста, подтвердите свой адрес электронной почты, прежде чем продолжить');
expect(translateServerResponse(keys[15], 'ru')).toBe('Пожалуйста, заполните все поля');
expect(translateServerResponse(keys[16], 'ru')).toBe('Пожалуйста, введите свой адрес электронной почты');
expect(translateServerResponse(keys[17], 'ru')).toBe('Пожалуйста, введите свое имя пользователя и пароль!');
expect(translateServerResponse(keys[18], 'ru')).toBe('Пожалуйста, введите новый пароль');
expect(translateServerResponse(keys[19], 'ru')).toBe('Пожалуйста, введите не менее 3 символов');
expect(translateServerResponse(keys[20], 'ru')).toBe('Максимальная длина текста — 2000 символов.');
expect(translateServerResponse(keys[21], 'ru')).toBe('Неизвестная ошибка');
expect(translateServerResponse(keys[22], 'ru')).toBe('Неправильная или отсутствующая идентификация');
expect(translateServerResponse(keys[23], 'ru')).toBe('Неверная или отсутствующая информация!');
expect(translateServerResponse(keys[24], 'ru')).toBe('Неправильный пользователь или пароль');
expect(translateServerResponse(keys[25], 'ru')).toBe('Нечего обновлять!');
});
});
@@ -0,0 +1,65 @@
import { describe, expect, it } from 'vitest';
import { translateTimeMessage, translateServerResponse } from '../../utils/TranslatorUtils';
import { serverResponses } from '../../constants/serverResponses';
describe('Spanish Utils unit tests', () => {
it('should translate all time ago messages to es', () => {
expect(translateTimeMessage('2 years ago', 'es')).toBe('Hace 2 años');
expect(translateTimeMessage('1 year ago', 'es')).toBe('Hace 1 año');
expect(translateTimeMessage('2 months ago', 'es')).toBe('Hace 2 meses');
expect(translateTimeMessage('1 month ago', 'es')).toBe('Hace 1 mes');
expect(translateTimeMessage('2 days ago', 'es')).toBe('Hace 2 días');
expect(translateTimeMessage('1 day ago', 'es')).toBe('Hace 1 día');
expect(translateTimeMessage('2 hours ago', 'es')).toBe('Hace 2 horas');
expect(translateTimeMessage('1 hour ago', 'es')).toBe('Hace 1 hora');
expect(translateTimeMessage('2 minutes ago', 'es')).toBe('Hace 2 minutos');
expect(translateTimeMessage('1 minute ago', 'es')).toBe('Hace 1 minuto');
expect(translateTimeMessage('2 seconds ago', 'es')).toBe('Hace 2 segundos');
expect(translateTimeMessage('1 second ago', 'es')).toBe('Hace 1 segundo');
expect(translateTimeMessage('Moments ago', 'es')).toBe('Hace momentos');
expect(translateTimeMessage('lala', 'es')).toBe('lala');
expect(translateTimeMessage('null', 'es')).toBe('null');
});
it('should translate all time left messages to es', () => {
expect(translateTimeMessage('2 years left', 'es')).toBe('Faltan 2 años');
expect(translateTimeMessage('1 year left', 'es')).toBe('Falta 1 año');
expect(translateTimeMessage('2 months left', 'es')).toBe('Faltan 2 meses');
expect(translateTimeMessage('1 month left', 'es')).toBe('Falta 1 mes');
expect(translateTimeMessage('2 days left', 'es')).toBe('Faltan 2 días');
expect(translateTimeMessage('1 day left', 'es')).toBe('Falta 1 día');
expect(translateTimeMessage('lala', 'es')).toBe('lala');
expect(translateTimeMessage('null', 'es')).toBe('null');
});
it('should translate all server responses to es', () => {
const keys: string[] = Object.keys(serverResponses);
expect(translateServerResponse(keys[0], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 8 caracteres');
expect(translateServerResponse(keys[1], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 carácter especial');
expect(translateServerResponse(keys[2], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 número, 1 carácter especial');
expect(translateServerResponse(keys[3], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 mayúscula, 1 número, 1 carácter especial');
expect(translateServerResponse(keys[4], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 mayúscula y 1 carácter especial');
expect(translateServerResponse(keys[5], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 1 mayúscula y 1 carácter especial');
expect(translateServerResponse(keys[6], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 1 carácter especial');
expect(translateServerResponse(keys[7], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 1 número');
expect(translateServerResponse(keys[8], 'es')).toBe('¡El correo ya está registrado!');
expect(translateServerResponse(keys[9], 'es')).toBe('¡Prohibido! Acceso denegado');
expect(translateServerResponse(keys[10], 'es')).toBe('Si la dirección de correo electrónico ingresada está asociada a una cuenta, recibirá un enlace para restablecer su contraseña en breve.');
expect(translateServerResponse(keys[11], 'es')).toBe('¡Error interno del servidor!');
expect(translateServerResponse(keys[12], 'es')).toBe('Has alcanzado el límite máximo de intentos de inicio de sesión. Por favor, espera 30 minutos');
expect(translateServerResponse(keys[13], 'es')).toBe('Error de red al intentar obtener el recurso.');
expect(translateServerResponse(keys[14], 'es')).toBe('Por favor, confirme su correo electrónico antes de continuar');
expect(translateServerResponse(keys[15], 'es')).toBe('Por favor, completa todos los campos');
expect(translateServerResponse(keys[16], 'es')).toBe('Por favor, ingresa tu correo electronico');
expect(translateServerResponse(keys[17], 'es')).toBe('¡Por favor, ingresa tu correo electronico y contraseña!');
expect(translateServerResponse(keys[18], 'es')).toBe('Por favor, rellene la nueva contraseña');
expect(translateServerResponse(keys[19], 'es')).toBe('¡Por favor, escriba al menos 3 caracteres!');
expect(translateServerResponse(keys[20], 'es')).toBe('La longitud máxima del texto es 2000');
expect(translateServerResponse(keys[21], 'es')).toBe('Error desconocido');
expect(translateServerResponse(keys[22], 'es')).toBe('Identificación incorrecta o faltante');
expect(translateServerResponse(keys[23], 'es')).toBe('¡Información incorrecta o incompleta!');
expect(translateServerResponse(keys[24], 'es')).toBe('¡Usuario o contraseña incorrectos!');
expect(translateServerResponse(keys[25], 'es')).toBe('¡Nada que actualizar!');
});
});
@@ -0,0 +1,59 @@
import { describe, expect, it } from 'vitest';
import { translateTaskResponse } from '../../utils/TranslatorUtils';
import { TaskResponse } from '../../types/TaskResponse';
const tasks: TaskResponse[] = [
{
id: 1,
description: 'description',
done: false,
highPriority: true,
dueDate: '',
dueDateFmt: '',
lastUpdate: 'Moments ago',
tag: 'test',
urls: []
}
];
describe('Translator utils unit tests', () => {
it('should translate all task responses to pt_br', () => {
const newListPtBr = JSON.parse(JSON.stringify(tasks));
const translatedPtBr = translateTaskResponse(newListPtBr, 'pt_br');
expect(translatedPtBr.length).toBe(1);
translatedPtBr.forEach((task: TaskResponse) => {
expect(task.lastUpdate).toBe('Momentos atrás');
});
});
it('should translate all task responses to es', () => {
const newListEs = JSON.parse(JSON.stringify(tasks));
const translatedEs = translateTaskResponse(newListEs, 'es');
expect(translatedEs.length).toBe(1);
translatedEs.forEach((task: TaskResponse) => {
expect(task.lastUpdate).toBe('Hace momentos');
});
});
it('should translate all task responses to ru', () => {
const newListRu = JSON.parse(JSON.stringify(tasks));
const translatedRu = translateTaskResponse(newListRu, 'ru');
expect(translatedRu.length).toBe(1);
translatedRu.forEach((task: TaskResponse) => {
expect(task.lastUpdate).toBe('Несколько минут назад');
});
});
it('should not translate a task responses from en', () => {
const newListEn = JSON.parse(JSON.stringify(tasks));
const translatedEn = translateTaskResponse(newListEn, 'en');
expect(translatedEn.length).toBe(1);
translatedEn.forEach((task: TaskResponse) => {
expect(task.lastUpdate).toBe('Moments ago');
});
});
});
+29
View File
@@ -0,0 +1,29 @@
import React from 'react';
import { render } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import About from '../../views/About';
import '../../i18n';
describe('Renders the about view', () => {
it('should render the about view', async() => {
render(
<About />
);
expect(document.querySelector('.justify-content-center')).toBeDefined();
expect(document.querySelector('.poppins-medium')).toBeDefined();
expect(document.querySelector('.poppins-light')).toBeDefined();
});
it('should render text based on new contentHeader component', () => {
const { getByText } = render(
<About />
);
expect(getByText('About the')).toBeDefined();
expect(getByText('TaskNote App')).toBeDefined();
expect(getByText('Find more information about us and the app')).toBeDefined();
expect(getByText('Tasks and notes made')).toBeDefined();
expect(getByText('Easy')).toBeDefined();
});
});
+129
View File
@@ -0,0 +1,129 @@
import React from 'react';
import { render, fireEvent, waitFor } from '@testing-library/react';
import { describe, expect, it, vi } from 'vitest';
import { I18nextProvider } from 'react-i18next';
import { MemoryRouter } from 'react-router';
import Account from '../../views/Account';
import AuthContext from '../../context/AuthContext';
import i18n from '../../i18n';
import api from '../../api-service/api';
import ApiConfig from '../../api-service/apiConfig';
vi.mock('../../api-service/api');
const changeLanguageMock = vi.fn();
vi.mock('react-i18next', () => ({
useTranslation: () => ({
i18n: {
changeLanguage: changeLanguageMock,
language: 'en'
},
t: (key: string) => key,
}),
initReactI18next: {
type: '3rdParty',
init: vi.fn(),
},
I18nextProvider: ({ children }: any) => children,
}));
const authContextMock = {
signed: true,
user: {
userId: 1,
name: 'Ricardo',
email: 'test@example.com',
admin: false,
createdAt: new Date(),
gravatarImageUrl: 'http://image.com',
lang: 'en'
},
checkCurrentAuthUser: vi.fn(),
signIn: vi.fn(),
signOut: vi.fn(),
register: vi.fn(),
isAdmin: false,
updateUser: vi.fn()
};
describe('Account Component', () => {
const renderAccount = () => {
return render(
<MemoryRouter>
<AuthContext.Provider value={authContextMock}>
<I18nextProvider i18n={i18n}>
<Account />
</I18nextProvider>
</AuthContext.Provider>
</MemoryRouter>
);
};
it('should render the Account component', () => {
const { getByText } = renderAccount();
expect(getByText('account_data_update_header')).toBeDefined();
});
it('should change language when a language button is clicked', () => {
const { getByTestId } = renderAccount();
const languageButton = getByTestId('language-button-pt_br');
fireEvent.click(languageButton);
expect(changeLanguageMock).toHaveBeenCalled();
});
it('should show alert when delete button is clicked', () => {
const { getByText } = renderAccount();
const deleteButton = getByText('account_privacy_delete_btn');
fireEvent.click(deleteButton);
expect(getByText('account_delete_title')).toBeDefined();
})
it('should call deleteAccount API and signOut when delete is confirmed', async () => {
const { getByText } = renderAccount();
const deleteButton = getByText('account_privacy_delete_btn');
fireEvent.click(deleteButton);
const confirmButton = getByText('account_delete_btn');
fireEvent.click(confirmButton);
await waitFor(() => {
expect(api.deleteNoContent).toHaveBeenCalledWith(ApiConfig.deleteAccountUrl);
expect(authContextMock.signOut).toHaveBeenCalled();
});
});
it('should submit the form with correct patchPayload', async () => {
const mockPatchJSON = vi.spyOn(api, 'patchJSON').mockResolvedValue(authContextMock.user);
const { getByLabelText, getByText, getByTestId } = renderAccount();
fireEvent.change(getByLabelText('account_form_first_name_label'), { target: { value: 'Jane' } });
fireEvent.change(getByLabelText('login_email_label'), { target: { value: 'jane.doe@example.com' } });
fireEvent.change(getByTestId('account-password-one'), { target: { value: 'password123' } });
fireEvent.change(getByLabelText(/register_password_repeat_label/i), { target: { value: 'password123' } });
fireEvent.click(getByText('account_form_save'));
await waitFor(() => {
expect(mockPatchJSON).toHaveBeenCalledWith(expect.any(String), {
name: 'Jane',
email: 'jane.doe@example.com',
password: 'password123',
passwordAgain: 'password123',
lang: ''
});
});
mockPatchJSON.mockRestore();
});
it('should render text based on new contentHeader component', () => {
const { getByText } = renderAccount();
expect(getByText('account_header_my')).toBeDefined();
expect(getByText('account_header_account')).toBeDefined();
expect(getByText('account_my_account_hello')).toBeDefined();
expect(getByText('account_header_update_manage')).toBeDefined();
expect(getByText('account_header_data')).toBeDefined();
});
});
@@ -0,0 +1,104 @@
import React from 'react';
import { render, screen } from '@testing-library/react';
import { beforeEach, describe, expect, test, vi, Mock } from 'vitest';
import { useNavigate } from 'react-router';
import AuthContext from '../../context/AuthContext';
import CompleteResetPassword from '../../views/CompleteResetPassword';
// Mock useNavigate
vi.mock('react-router', () => ({
useNavigate: vi.fn()
}));
// Mock LoginForm
vi.mock('../../components/LoginForm', () => ({
__esModule: true,
default: ({ prefix }: { prefix: string }) => (
<div data-testid="login-form">LoginForm with prefix: {prefix}</div>
)
}));
vi.mock('react-router', () => {
return {
useNavigate: vi.fn(),
};
});
const mockedUseNavigate = useNavigate as unknown as Mock;
const authContextMock = {
signed: true,
user: {
userId: 1,
name: 'Ricardo',
email: 'test@example.com',
admin: false,
createdAt: new Date(),
gravatarImageUrl: 'http://image.com'
},
checkCurrentAuthUser: vi.fn(),
signIn: vi.fn(),
signOut: vi.fn(),
register: vi.fn(),
isAdmin: false,
updateUser: vi.fn()
};
describe('CompleteResetPassword Component', () => {
const mockCheckCurrentAuthUser = vi.fn();
const mockNavigate = vi.fn();
beforeEach(() => {
vi.clearAllMocks();
mockedUseNavigate.mockReturnValue(mockNavigate);
});
test('calls checkCurrentAuthUser with the correct pathname', () => {
render(
<AuthContext.Provider
value={{
...authContextMock,
signed: false,
checkCurrentAuthUser: mockCheckCurrentAuthUser,
}}
>
<CompleteResetPassword />
</AuthContext.Provider>
);
expect(mockCheckCurrentAuthUser).toHaveBeenCalledWith(window.location.pathname);
});
test('navigates to /home when signed is true', () => {
render(
<AuthContext.Provider
value={{
...authContextMock,
signed: true,
checkCurrentAuthUser: mockCheckCurrentAuthUser,
}}
>
<CompleteResetPassword />
</AuthContext.Provider>
);
expect(mockNavigate).toHaveBeenCalledWith('/home');
});
test('renders LoginForm with the correct prefix', () => {
render(
<AuthContext.Provider
value={{
...authContextMock,
signed: false,
checkCurrentAuthUser: mockCheckCurrentAuthUser,
}}
>
<CompleteResetPassword />
</AuthContext.Provider>
);
const loginForm = screen.getByTestId('login-form');
expect(loginForm.innerHTML.includes('LoginForm with prefix: complete_reset')).toBe(true);
});
});
@@ -0,0 +1,175 @@
// filepath: /home/ricardo/Projects/react-typescript-todolist/client/src/__test__/views/EmailConfirmation.test.tsx
import React from 'react';
import { render, screen, waitFor } from '@testing-library/react';
import { vi, describe, test, expect, beforeEach } from 'vitest';
import api from '../../api-service/api';
import EmailConfirmation from '../../views/EmailConfirmation';
import { MemoryRouter } from 'react-router';
import ApiConfig from '../../api-service/apiConfig';
// Mock the entire api module
vi.mock('../../api-service/api', () => ({
default: {
postJSON: vi.fn()
}
}));
// Mock the translation hook
vi.mock('react-i18next', () => ({
useTranslation: () => ({
t: (key: string) => {
const translations: Record<string, string> = {
'email_confirmation_loading': 'Confirming your email address...',
'email_confirmation_success': '✅ Email Confirmed!',
'email_confirmation_success_text': 'Your email has been successfully confirmed.',
'email_confirmation_btn': 'Login'
};
return translations[key] || key;
},
i18n: { language: 'en' }
})
}));
// Mock the lang handler
vi.mock('../../lang-service/LangHandler', () => ({
handleDefaultLang: vi.fn()
}));
// Mock the translator utils
vi.mock('../../utils/TranslatorUtils', () => ({
translateServerResponse: (message: string) => message
}));
const mockedApi = vi.mocked(api);
describe('EmailConfirmation Component', () => {
beforeEach(() => {
vi.clearAllMocks();
vi.resetAllMocks();
});
const renderWithRouter = (initialEntries: string[] = ['/?identification=test-id']) => {
return render(
<MemoryRouter initialEntries={initialEntries}>
<EmailConfirmation />
</MemoryRouter>
);
}
test('renders loading state initially', () => {
window.history.pushState({}, '', '/?identification=test-id'); // Default query param
// Mock a pending promise to keep loading state
mockedApi.postJSON.mockImplementation(() => new Promise(() => {}));
renderWithRouter(['/?identification=test-id']);
expect(screen.getByText('Confirming your email address...')).toBeDefined();
});
test('shows error when identification is missing', async () => {
window.history.pushState({}, '', '/'); // No query param
renderWithRouter();
await waitFor(() => {
expect(screen.getByText('❌ Oops!')).toBeDefined();
expect(screen.getByTestId('email-confirm-error-msg')).toBeDefined();
});
});
test('shows success message when API call succeeds', async () => {
window.history.pushState({}, '', '/?identification=test-id');
vi.spyOn(api, 'postJSON').mockResolvedValue({});
renderWithRouter(['/?identification=test-id']);
await waitFor(() => {
expect(screen.getByTestId('email-confirm-success-msg')).toBeDefined();
});
});
test('shows error message when API call fails', async () => {
window.history.pushState({}, '', '/?identification=test-id');
mockedApi.postJSON.mockRejectedValue(new Error('API error occurred')); // Mock API failure
renderWithRouter(['/?identification=test-id']);
await waitFor(() => {
expect(screen.getByText('❌ Oops!')).toBeDefined();
expect(screen.getByText('API error occurred')).toBeDefined();
});
});
test('does not call API if identification is missing', async () => {
window.history.pushState({}, '', '/'); // No query param
renderWithRouter();
await waitFor(() => {
expect(mockedApi.postJSON).not.toHaveBeenCalled();
});
});
test('calls API with correct payload when identification is present', async () => {
window.history.pushState({}, '', '/?identification=test-id');
mockedApi.postJSON.mockResolvedValueOnce({}); // Mock successful API response
renderWithRouter(['/?identification=test-id']);
await waitFor(() => {
expect(mockedApi.postJSON).toHaveBeenCalledWith(ApiConfig.confirmUrl, { identification: 'test-id' });
});
});
test('renders correct styles for success state', async () => {
window.history.pushState({}, '', '/?identification=test-id');
mockedApi.postJSON.mockResolvedValueOnce({}); // Mock successful API response
renderWithRouter(['/?identification=test-id']);
await waitFor(() => {
const successMessage = screen.getByTestId('email-confirm-success-msg');
expect(successMessage).toBeDefined();
expect(successMessage.classList.contains('mb-4')).toBe(true);
});
});
test('renders correct styles for error state', async () => {
window.history.pushState({}, '', '/?identification=test-id');
mockedApi.postJSON.mockRejectedValueOnce(new Error('API error occurred'));
renderWithRouter(['/?identification=test-id']);
await waitFor(() => {
const errorMessage = screen.getByText('❌ Oops!');
expect(errorMessage).toBeDefined();
expect(errorMessage.classList.contains('mb-3')).toBe(true);
});
});
test('renders "Go to Login" button on success', async () => {
window.history.pushState({}, '', '/?identification=test-id');
mockedApi.postJSON.mockResolvedValueOnce({}); // Mock successful API response
renderWithRouter(['/?identification=test-id']);
await waitFor(() => {
const loginButton = screen.getByText('Login');
expect(loginButton).toBeDefined();
expect(loginButton.classList.contains('btn-success')).toBe(true);
});
});
test('does not render "Go to Login" button on error', async () => {
window.history.pushState({}, '', '/?identification=test-id');
mockedApi.postJSON.mockRejectedValueOnce(new Error('API error occurred')); // Mock API failure
renderWithRouter(['/?identification=test-id']);
await waitFor(() => {
const loginButton = screen.queryByText('Go to Login');
expect(loginButton).toBeNull();
});
});
test('shows error message when API call fails', async () => {
window.history.pushState({}, '', '/?identification=test-id');
mockedApi.postJSON.mockRejectedValueOnce(new Error('API error occurred')); // Mock API failure
renderWithRouter(['/?identification=test-id']);
await waitFor(() => {
expect(screen.getByText('❌ Oops!')).toBeDefined();
expect(screen.getByText('API error occurred')).toBeDefined();
});
});
});
+560
View File
@@ -0,0 +1,560 @@
import React from 'react';
import { test, describe, expect, vi, beforeEach, afterEach } from 'vitest';
import { render, screen, act, fireEvent, waitFor } from '@testing-library/react';
import AuthContext from '../../context/AuthContext';
import FilterProvider from '../../context/FilterProvider';
import { BrowserRouter } from 'react-router-dom';
import api from '../../api-service/api';
import { TaskResponse } from '../../types/TaskResponse';
import { NoteResponse } from '../../types/NoteResponse';
import Home from '../../views/Home';
// filepath: client/src/views/Home/index.test.tsx
// Mock dependencies
vi.mock('react-i18next', () => ({
useTranslation: () => ({
t: (key: string) => key,
i18n: { language: 'en', changeLanguage: vi.fn() }
})
}));
vi.mock('../../api-service/api', () => ({
default: {
getJSON: vi.fn(),
deleteNoContent: vi.fn()
}
}));
vi.mock('../../lang-service/LangHandler', () => ({
handleDefaultLang: vi.fn()
}));
vi.mock('../../utils/TranslatorUtils', () => ({
translateServerResponse: (text: string) => text,
translateTaskResponse: (tasks: any[]) => tasks
}));
vi.mock('react-router', () => ({
NavLink: ({ to, children }: { to: string, children: React.ReactNode }) => (
<a href={to} data-testid={`navlink-${to}`}>{children}</a>
)
}));
vi.mock('react-bootstrap-icons', () => ({
ThreeDotsVertical: () => <div data-testid="three-dots-icon"></div>
}));
// Mock components
vi.mock('../../components/ContentHeader', () => ({
default: (props: any) => <div data-testid="content-header">{props.h1TextRegular} {props.h1TextBold}</div>
}));
vi.mock('../../components/AlertError', () => ({
default: (props: any) => <div data-testid="alert-error">{props.errorMessage}</div>
}));
vi.mock('../../components/ModalMarkdown', () => ({
default: (props: any) => <div data-testid="modal-markdown">{props.show ? 'Modal Open' : ''}</div>
}));
vi.mock('../../components/TaskTitle', () => ({
default: (props: any) => <div data-testid="task-title">{props.title}</div>
}));
vi.mock('../../components/TaskTimeLeft', () => ({
default: (props: any) => <div data-testid="task-time-left">{props.text}</div>
}));
vi.mock('../../components/TaskTag', () => ({
default: (props: any) => <div data-testid="task-tag">{props.tag}</div>
}));
vi.mock('../../components/NoteTitle', () => ({
default: (props: any) => <div data-testid="note-title">{props.title}</div>
}));
// Test mock data
const mockTasks: TaskResponse[] = [
{
id: 1,
description: 'Task 1',
done: false,
urls: ['http://example.com'],
tag: 'work',
lastUpdate: '2023-10-10',
highPriority: true,
dueDateFmt: '2 days left',
dueDate: '2023-10-12',
},
{
id: 2,
description: 'Task 2',
done: true,
urls: [],
tag: 'home',
lastUpdate: '2023-10-09',
highPriority: false,
dueDateFmt: '',
dueDate: '',
}
];
const mockNotes: NoteResponse[] = [
{
id: 1,
title: 'Note 1',
description: 'Line 1\nLine 2\nLine 3',
tag: 'work',
lastUpdate: '2023-10-10',
url: 'http://example.com'
},
{
id: 2,
title: 'Note 2',
description: 'This is a sample\nnote content',
tag: 'personal',
lastUpdate: '2023-10-09',
url: null
}
];
const mockTags = ['work', 'home', 'personal', 'untagged'];
const authContextValue = {
signed: true,
user: {
userId: 1,
name: 'Test User',
email: 'test@example.com',
admin: false,
createdAt: new Date(),
gravatarImageUrl: 'http://image.com',
lang: 'en'
},
checkCurrentAuthUser: vi.fn(),
signIn: vi.fn(),
signOut: vi.fn(),
register: vi.fn(),
isAdmin: false,
updateUser: vi.fn()
};
describe('Home Component', () => {
const renderHome = () => render(
<AuthContext.Provider value={authContextValue}>
<FilterProvider>
<BrowserRouter>
<Home />
</BrowserRouter>
</FilterProvider>
</AuthContext.Provider>
);
beforeEach(() => {
// Reset mocks and setup default responses
vi.clearAllMocks();
localStorage.clear();
(api.getJSON as any).mockImplementation((url: string) => {
if (url.includes('tags')) {
return Promise.resolve(mockTags);
} else if (url.includes('tasks')) {
return Promise.resolve(mockTasks);
} else if (url.includes('notes')) {
return Promise.resolve(mockNotes);
}
return Promise.resolve([]);
});
(api.deleteNoContent as any).mockResolvedValue(undefined);
// Mock window.innerWidth for the cleanText function
Object.defineProperty(window, 'innerWidth', {
writable: true,
configurable: true,
value: 1024
});
});
afterEach(() => {
vi.resetAllMocks();
});
test('renders with initial data', async () => {
await act(async () => {
renderHome();
});
expect(screen.getByTestId('content-header')).toBeDefined();
expect(screen.getByPlaceholderText('home_input_filter')).toBeDefined();
// Check that API calls were made
expect(api.getJSON).toHaveBeenCalledTimes(3);
// Wait for tasks and notes to render
await waitFor(() => {
expect(screen.getAllByTestId('task-title').length).toBe(2);
expect(screen.getAllByTestId('note-title').length).toBe(2);
});
});
test('filters tasks and notes when search text is entered', async () => {
await act(async () => {
renderHome();
});
await waitFor(() => {
expect(screen.getAllByTestId('task-title').length).toBe(2);
expect(screen.getAllByTestId('note-title').length).toBe(2);
});
const searchInput = screen.getByPlaceholderText('home_input_filter');
// Test filtering by entering text
await act(async () => {
fireEvent.change(searchInput, { target: { value: 'Task 1' } });
});
// Expect filtered results
await waitFor(() => {
const taskTitles = screen.getAllByTestId('task-title');
expect(taskTitles.length).toBe(1);
expect(taskTitles[0].textContent).toBe('Task 1');
});
});
test('filters by radio button selection', async () => {
await act(async () => {
renderHome();
});
await waitFor(() => {
expect(screen.getAllByTestId('task-title').length).toBe(2);
expect(screen.getAllByTestId('note-title').length).toBe(2);
});
const dropdownToggle = screen.getByTestId('main-label-selector');
await act(async () => {
fireEvent.click(dropdownToggle);
});
// Select "Only Tasks" from dropdown
const onlyTasksOption = screen.getByRole('button', { name: /home_radio_tasks/i });
await act(async () => {
fireEvent.click(onlyTasksOption);
});
// Should only show tasks
await waitFor(() => {
expect(screen.getAllByTestId('task-title').length).toBe(2);
expect(screen.queryAllByTestId('note-title').length).toBe(0);
});
// Select "Only Notes" radio button
const onlyNotesOption = screen.getByRole('button', { name: /home_radio_notes/i });
await act(async () => {
fireEvent.click(onlyNotesOption);
});
// Should only show notes
await waitFor(() => {
expect(screen.queryAllByTestId('task-title').length).toBe(0);
expect(screen.getAllByTestId('note-title').length).toBe(2);
});
});
test('filters by tag selection', async () => {
await act(async () => {
renderHome();
});
await waitFor(() => {
expect(screen.getAllByTestId('task-title').length).toBe(2);
expect(screen.getAllByTestId('note-title').length).toBe(2);
});
const dropdownToggle = screen.getByTestId('main-label-selector');
await act(async () => {
fireEvent.click(dropdownToggle);
});
// Select "work" tag radio button
const workTagOption = screen.getByRole('button', { name: /#work/i });
await act(async () => {
fireEvent.click(workTagOption);
});
// Should only show items with "work" tag
await waitFor(() => {
const taskTitles = screen.getAllByTestId('task-title');
const noteTitles = screen.getAllByTestId('note-title');
expect(taskTitles.length).toBe(1);
expect(noteTitles.length).toBe(1);
expect(taskTitles[0].textContent).toBe('Task 1');
expect(noteTitles[0].textContent).toBe('Note 1');
});
});
test('marks task as done', async () => {
await act(async () => {
renderHome();
});
await waitFor(() => {
expect(screen.getAllByTestId('task-title').length).toBe(2);
});
// Find the dropdown toggle for the first task
const dropdownToggles = screen.getAllByTestId('three-dots-icon');
// Click the dropdown toggle
await act(async () => {
fireEvent.click(dropdownToggles[0]);
});
// Find and click the "Mark as Done" option
// Since we mocked the components, we need to find it by aria role
const dropdownItems = screen.getAllByRole('button');
const markAsDoneButton = dropdownItems.find(
item => item.textContent === 'task_table_action_done'
);
await act(async () => {
fireEvent.click(markAsDoneButton!);
});
// Should call deleteNoContent API
expect(api.deleteNoContent).toHaveBeenCalledWith(expect.stringContaining('/1'));
// Should reload tasks
expect(api.getJSON).toHaveBeenCalledWith(expect.stringContaining('tasks'));
});
test('deletes note', async () => {
await act(async () => {
renderHome();
});
await waitFor(() => {
expect(screen.getAllByTestId('note-title').length).toBe(2);
});
// Find the dropdown toggle for the first note
const noteDropdownToggles = screen.getAllByTestId('three-dots-icon');
// Note dropdowns start after task dropdowns
const firstNoteDropdown = noteDropdownToggles[mockTasks.length];
// Click the dropdown toggle
await act(async () => {
fireEvent.click(firstNoteDropdown);
});
// Find and click the "Delete" option by testId
const deleteButtons = screen.getAllByRole('button');
const deleteButton = deleteButtons.find(
button => button.textContent === 'task_table_action_delete'
);
await act(async () => {
fireEvent.click(deleteButton!);
});
// Should call deleteNoContent API
expect(api.deleteNoContent).toHaveBeenCalledWith(expect.stringContaining('/2'));
// Should reload notes
expect(api.getJSON).toHaveBeenCalledWith(expect.stringContaining('notes'));
});
test('opens markdown modal when clicking on note tag', async () => {
await act(async () => {
renderHome();
});
await waitFor(() => {
expect(screen.getAllByTestId('task-tag').length).toBe(mockTasks.length + mockNotes.length);
});
// Find the tags for notes (they start after task tags)
const noteTags = screen.getAllByTestId('task-tag').slice(mockTasks.length);
// Click on the first note tag
await act(async () => {
// Simulate the onClick prop by finding the element and firing a click event
fireEvent.click(noteTags[0]);
});
// Modal should be opened
const modal = screen.getByTestId('modal-markdown');
expect(modal.textContent).toBe('');
});
test('handles API errors gracefully', async () => {
// Mock API to throw error
(api.getJSON as any).mockImplementation(() => {
throw new Error('API Error');
});
await act(async () => {
renderHome();
});
// Should show error message
expect(screen.getByTestId('alert-error')).toBeDefined();
expect(screen.getByTestId('alert-error').textContent).toBe('API Error');
});
test('keeps filter selection after marking task as done', async () => {
await act(async () => {
renderHome();
});
await waitFor(() => {
expect(screen.getAllByTestId('task-title').length).toBe(2);
});
// Select "Only Tasks" filter
const dropdownToggle = screen.getByTestId('main-label-selector');
await act(async () => {
fireEvent.click(dropdownToggle);
});
const onlyTasksOption = screen.getByRole('button', { name: /home_radio_tasks/i });
await act(async () => {
fireEvent.click(onlyTasksOption);
});
// Verify filter is applied - notes should be hidden
await waitFor(() => {
expect(screen.queryAllByTestId('note-title').length).toBe(0);
});
// Mark a task as done
const dropdownToggles = screen.getAllByTestId('three-dots-icon');
await act(async () => {
fireEvent.click(dropdownToggles[0]);
});
const dropdownItems = screen.getAllByRole('button');
const markAsDoneButton = dropdownItems.find(
item => item.textContent === 'task_table_action_done'
);
await act(async () => {
fireEvent.click(markAsDoneButton!);
});
// After reload, filter should still be applied - notes should remain hidden
await waitFor(() => {
expect(screen.queryAllByTestId('note-title').length).toBe(0);
expect(screen.getAllByTestId('task-title').length).toBe(2);
});
});
test('keeps filter selection after deleting a note', async () => {
await act(async () => {
renderHome();
});
await waitFor(() => {
expect(screen.getAllByTestId('note-title').length).toBe(2);
});
// Select "Only Notes" filter
const dropdownToggle = screen.getByTestId('main-label-selector');
await act(async () => {
fireEvent.click(dropdownToggle);
});
const onlyNotesOption = screen.getByRole('button', { name: /home_radio_notes/i });
await act(async () => {
fireEvent.click(onlyNotesOption);
});
// Verify filter is applied - tasks should be hidden
await waitFor(() => {
expect(screen.queryAllByTestId('task-title').length).toBe(0);
});
// Delete a note
const noteDropdownToggles = screen.getAllByTestId('three-dots-icon');
await act(async () => {
fireEvent.click(noteDropdownToggles[0]);
});
const deleteButtons = screen.getAllByRole('button');
const deleteButton = deleteButtons.find(
button => button.textContent === 'task_table_action_delete'
);
await act(async () => {
fireEvent.click(deleteButton!);
});
// After reload, filter should still be applied - tasks should remain hidden
await waitFor(() => {
expect(screen.queryAllByTestId('task-title').length).toBe(0);
expect(screen.getAllByTestId('note-title').length).toBe(2);
});
});
test('keeps text search after marking task as done', async () => {
await act(async () => {
renderHome();
});
await waitFor(() => {
expect(screen.getAllByTestId('task-title').length).toBe(2);
});
// Enter search text to filter to only 'Task 1'
const searchInput = screen.getByPlaceholderText('home_input_filter');
await act(async () => {
fireEvent.change(searchInput, { target: { value: 'Task 1' } });
});
await waitFor(() => {
expect(screen.getAllByTestId('task-title').length).toBe(1);
expect(screen.getAllByTestId('task-title')[0].textContent).toBe('Task 1');
});
// Mark the task as done
const dropdownToggles = screen.getAllByTestId('three-dots-icon');
await act(async () => {
fireEvent.click(dropdownToggles[0]);
});
const dropdownItems = screen.getAllByRole('button');
const markAsDoneButton = dropdownItems.find(
item => item.textContent === 'task_table_action_done'
);
await act(async () => {
fireEvent.click(markAsDoneButton!);
});
// After reload, text filter should still be applied
await waitFor(() => {
expect(screen.getAllByTestId('task-title').length).toBe(1);
expect(screen.getAllByTestId('task-title')[0].textContent).toBe('Task 1');
});
});
/*
test('getFirstRows properly formats note preview', async () => {
await act(async () => {
renderHome();
});
await waitFor(() => {
expect(screen.getAllByTestId('note-title').length).toBe(2);
});
// Find rendered note previews
const noteCards = screen.getAllByClassName('text-muted span-line-break font-size-14');
// First note should have preview with the first two lines
expect(noteCards[0].textContent).toBe('Line 1\nLine 2');
});*/
});
+230
View File
@@ -0,0 +1,230 @@
import React from 'react';
import { render, fireEvent, waitFor } from '@testing-library/react';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { MemoryRouter } from 'react-router';
import { I18nextProvider } from 'react-i18next';
import NoteAdd from '../../views/NoteAdd';
import AuthContext from '../../context/AuthContext';
import i18n from '../../i18n';
import api from '../../api-service/api';
import ApiConfig from '../../api-service/apiConfig';
import { NoteResponse } from '../../types/NoteResponse';
import SidebarContext from '../../context/SidebarContext';
// Mock the entire api module
vi.mock('../../api-service/api', () => ({
default: {
postJSON: vi.fn(),
getJSON: vi.fn(),
}
}));
vi.mock('react-i18next', () => ({
useTranslation: () => ({
i18n: {
changeLanguage: vi.fn(),
language: 'en',
},
t: (key: string) => key,
}),
initReactI18next: {
type: '3rdParty',
init: vi.fn(),
},
I18nextProvider: ({ children }: any) => children,
}));
vi.mock('react-router', async () => {
const actual = await vi.importActual<any>('react-router');
return {
...actual,
useSearchParams: vi.fn(),
useParams: vi.fn()
};
});
import { useSearchParams, useParams } from 'react-router';
const authContextMock = {
signed: true,
user: {
userId: 1,
name: 'Ricardo',
email: 'test@example.com',
admin: false,
createdAt: new Date(),
gravatarImageUrl: 'http://url.com',
lang: 'en'
},
checkCurrentAuthUser: vi.fn(),
signIn: vi.fn(),
signOut: vi.fn(),
register: vi.fn(),
isAdmin: false,
updateUser: vi.fn(),
};
const sidebarContextMock = {
currentPage: '/home',
setNewPage: vi.fn()
};
// Mock the lang handler
vi.mock('../../lang-service/LangHandler', () => ({
handleDefaultLang: vi.fn()
}));
// Mock the translator utils
vi.mock('../../utils/TranslatorUtils', () => ({
translateServerResponse: (message: string) => message
}));
const mockedApi = vi.mocked(api);
const mockedUseParams = vi.mocked(useParams);
describe('NoteAdd Component', () => {
const renderNoteAdd = () => {
return render(
<MemoryRouter>
<AuthContext.Provider value={authContextMock}>
<I18nextProvider i18n={i18n}>
<SidebarContext.Provider value={sidebarContextMock}>
<NoteAdd />
</SidebarContext.Provider>
</I18nextProvider>
</AuthContext.Provider>
</MemoryRouter>
);
};
beforeEach(() => {
// Reset mock between tests
(useSearchParams as unknown as ReturnType<typeof vi.fn>).mockReset();
vi.clearAllMocks();
vi.resetAllMocks();
});
it('should render the NoteAdd component', () => {
const { getByText } = renderNoteAdd();
expect(getByText('note_form_title_label')).toBeDefined();
expect(getByText('task_form_url_label')).toBeDefined();
expect(getByText('note_form_content_label')).toBeDefined();
expect(getByText('note_form_submit')).toBeDefined();
});
it('should show error message when form is invalid', async () => {
const { getByText, getByRole } = renderNoteAdd();
const submitButton = getByRole('button', { name: 'note_form_submit' });
fireEvent.click(submitButton);
await waitFor(() => {
expect(getByText('Please fill in all the fields')).toBeDefined();
});
});
it('should add a new note when form is valid', async () => {
(useSearchParams as unknown as ReturnType<typeof vi.fn>).mockReturnValue([
new URLSearchParams("backTo=home"),
]);
const { getByLabelText, getByTestId, getByRole } = renderNoteAdd();
const descriptionInput = getByLabelText('note_form_title_label') as HTMLInputElement;
const noteContentInput = getByTestId('note-content-input-area') as HTMLAreaElement;
const submitButton = getByRole('button', { name: 'note_form_submit' });
fireEvent.change(descriptionInput, { target: { value: 'New Note' } });
fireEvent.change(noteContentInput, { target: { value: 'Note content' } });
fireEvent.click(submitButton);
await waitFor(() => {
const newNote: NoteResponse = {
id: 0,
title: 'New Note',
description: 'Note content',
url: '',
tag: '',
lastUpdate: '',
shared: false,
shareToken: null
}
expect(api.postJSON).toHaveBeenCalledWith(ApiConfig.notesUrl, newNote);
});
});
it('should render text based on new contentHeader component', () => {
const { getByText } = renderNoteAdd();
expect(getByText('Add')).toBeDefined();
expect(getByText('Note')).toBeDefined();
expect(getByText('Save your notes in plain text or Markdown format')).toBeDefined();
expect(getByText('Create, Filter, and Easily Find')).toBeDefined();
expect(getByText('Them')).toBeDefined();
});
it('should render a note to edit', async () => {
mockedUseParams.mockReturnValue({ id: '1' });
const toEdit: NoteResponse = {
id: 1,
title: 'Note one',
description: 'Description of note one',
url: 'http://notes.domain.com',
tag: 'dev',
lastUpdate: '3 minutes ago',
};
vi.spyOn(api, 'getJSON').mockResolvedValue(toEdit);
const { getByLabelText, getByTestId } = renderNoteAdd();
await waitFor(() => {
const noteTitle = getByLabelText('note_form_title_label') as HTMLInputElement;
const noteUrl = getByLabelText('task_form_url_label') as HTMLInputElement;
const noteContentInput = getByTestId('note-content-input-area') as HTMLAreaElement;
expect(noteTitle.value).toBe(toEdit.title);
expect(noteUrl.value).toBe(toEdit.url);
expect(noteContentInput.innerHTML).toBe(toEdit.description);
});
});
it('should render a cloned note', async () => {
window.history.pushState({}, '', '?cloneFrom=123');
const toClone: NoteResponse = {
id: 11,
title: 'Old title',
description: 'Old description',
url: 'http://notes.domain.com',
tag: 'dev',
lastUpdate: '1 minute ago',
};
vi.spyOn(api, 'getJSON').mockResolvedValue(toClone);
const { getByLabelText, getByTestId } = renderNoteAdd();
await waitFor(() => {
const noteTitle = getByLabelText('note_form_title_label') as HTMLInputElement;
const noteUrl = getByLabelText('task_form_url_label') as HTMLInputElement;
const noteContentInput = getByTestId('note-content-input-area') as HTMLAreaElement;
expect(noteTitle.value).toBe(toClone.title);
expect(noteUrl.value).toBe(toClone.url);
expect(noteContentInput.innerHTML).toBe(toClone.description);
});
});
it('should not render a cloned note when user is trying to mess up', async () => {
window.history.pushState({}, '', '?cloneFrom=12345');
const { getByLabelText, getByTestId } = renderNoteAdd();
await waitFor(() => {
const noteTitle = getByLabelText('note_form_title_label') as HTMLInputElement;
const noteUrl = getByLabelText('task_form_url_label') as HTMLInputElement;
const noteContentInput = getByTestId('note-content-input-area') as HTMLAreaElement;
expect(noteTitle.value).toBe('');
expect(noteUrl.value).toBe('');
expect(noteContentInput.innerHTML).toBe('');
});
});
});
+141
View File
@@ -0,0 +1,141 @@
import React from 'react';
import { render, fireEvent, waitFor } from '@testing-library/react';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { MemoryRouter } from 'react-router';
import { I18nextProvider } from 'react-i18next';
import TaskAdd from '../../views/TaskAdd';
import AuthContext from '../../context/AuthContext';
import i18n from '../../i18n';
import api from '../../api-service/api';
import ApiConfig from '../../api-service/apiConfig';
import TaskNoteRequest from '../../types/TaskNoteRequest';
import SidebarContext from '../../context/SidebarContext';
vi.mock('../../api-service/api');
vi.mock('react-i18next', () => ({
useTranslation: () => ({
i18n: {
changeLanguage: vi.fn(),
language: 'en',
},
t: (key: string) => key,
}),
initReactI18next: {
type: '3rdParty',
init: vi.fn(),
},
I18nextProvider: ({ children }: any) => children,
}));
vi.mock("react-router-dom", async () => {
const actual = await vi.importActual<any>("react-router-dom");
return {
...actual,
useSearchParams: vi.fn(),
};
});
import { useSearchParams } from "react-router-dom";
const authContextMock = {
signed: true,
user: {
userId: 1,
name: 'Ricardo',
email: 'test@example.com',
admin: false,
createdAt: new Date(),
gravatarImageUrl: 'http://url.com'
},
checkCurrentAuthUser: vi.fn(),
signIn: vi.fn(),
signOut: vi.fn(),
register: vi.fn(),
isAdmin: false,
updateUser: vi.fn(),
};
const sidebarContextMock = {
currentPage: '/home',
setNewPage: vi.fn()
};
describe('TaskAdd Component', () => {
const renderTaskAdd = () => {
return render(
<MemoryRouter>
<AuthContext.Provider value={authContextMock}>
<I18nextProvider i18n={i18n}>
<SidebarContext.Provider value={sidebarContextMock}>
<TaskAdd />
</SidebarContext.Provider>
</I18nextProvider>
</AuthContext.Provider>
</MemoryRouter>
);
};
beforeEach(() => {
// Reset mock between tests
(useSearchParams as unknown as ReturnType<typeof vi.fn>).mockReset();
});
it('should render the TaskAdd component', () => {
const { getByText } = renderTaskAdd();
expect(getByText('task_form_title')).toBeDefined();
expect(getByText('task_form_desc_label')).toBeDefined();
expect(getByText('task_form_url_label')).toBeDefined();
expect(getByText('task_form_duedate_label')).toBeDefined();
expect(getByText('task_form_submit')).toBeDefined();
});
it('should show error message when form is invalid', async () => {
const { getByText, getByRole } = renderTaskAdd();
const submitButton = getByRole('button', { name: 'task_form_submit' });
fireEvent.click(submitButton);
await waitFor(() => {
expect(getByText('Please fill in all the fields')).toBeDefined();
});
});
it('should add a new task when form is valid', async () => {
(useSearchParams as unknown as ReturnType<typeof vi.fn>).mockReturnValue([
new URLSearchParams("backTo=home"),
]);
const { getByLabelText, getByRole } = renderTaskAdd();
const descriptionInput = getByLabelText('task_form_desc_label') as HTMLInputElement;
const submitButton = getByRole('button', { name: 'task_form_submit' });
fireEvent.change(descriptionInput, { target: { value: 'New Task' } });
expect(descriptionInput.value).toBe('New Task');
fireEvent.click(submitButton);
await waitFor(() => {
const newTask: TaskNoteRequest = {
description: 'New Task',
dueDate: '',
highPriority: false,
tag: '',
urls: []
}
expect(api.postJSON).toHaveBeenCalledWith(ApiConfig.tasksUrl, newTask);
});
});
it('should render text based on new contentHeader component', () => {
(useSearchParams as unknown as ReturnType<typeof vi.fn>).mockReturnValue([
new URLSearchParams("backTo=home"),
]);
const { getByText } = renderTaskAdd();
expect(getByText('Add')).toBeDefined();
expect(getByText('Task')).toBeDefined();
expect(getByText('Be on top of your TODO list')).toBeDefined();
expect(getByText('Create, Filter, and Easily Find')).toBeDefined();
expect(getByText('Them')).toBeDefined();
});
});
+116
View File
@@ -0,0 +1,116 @@
import { API_TOKEN } from '../app-constants/app-constants';
/**
* Retrieves the API token from local storage.
*
* @returns {string} The API token if it exists in local storage, otherwise an empty string.
*/
function getToken(): string {
const tokenState = localStorage.getItem(API_TOKEN);
return tokenState ?? '';
}
/**
* Retrieves all the headers for the app.
*
* @returns {Headers} the headers.
*/
function getHeaders(addAuth: boolean = true): Headers {
const headers = new Headers();
headers.append('Content-Type', 'application/json');
if (addAuth) {
headers.append('Authorization', `Bearer ${getToken()}`);
}
return headers;
}
function getRequestInit(method: string, payload: object | undefined, addAuth: boolean = true): RequestInit {
const body: string | undefined = method !== 'GET' ? JSON.stringify(payload) : undefined;
return {
method: method,
mode: 'cors',
credentials: 'include',
headers: getHeaders(addAuth),
body
};
};
/**
* Handle errors for the AJAX HTTPS requests.
*
* @param {number} httpStatusCode The HTTP response status code.
*/
function handleError(httpStatusCode: number) {
if (httpStatusCode === 500) {
throw new Error('Internal Server Error!');
}
throw new Error('Unknown error');
}
async function handleResponse(response: Response) {
// Successful responses
if (response?.ok) {
const codesToIgnore: number[] = [204];
if (codesToIgnore.includes(response.status)) {
return;
}
return await response.json();
}
// Error responses
if (response) {
const contentType = response.headers.get('content-type');
if (contentType && contentType.includes('application/json')) {
const data = await response.json();
if ('message' in data && typeof data.message === 'string') {
throw new Error(data.message);
}
if ('fields' in data && Array.isArray(data.fields)) {
const firstError = data.fields[0].fieldMessage as string;
throw new Error(firstError);
}
}
handleError(response.status);
}
}
function isAddAuth(url: string): boolean {
return !url.includes('sign-in') && !url.includes('sign-up');
}
const api = {
getJSON: async (url: string) => {
const response = await fetch(url, getRequestInit('GET', {}));
return handleResponse(response);
},
getJSONNoAuth: async (url: string) => {
const response = await fetch(url, getRequestInit('GET', {}, false));
return handleResponse(response);
},
postJSON: async (url: string, payload: object) => {
const response = await fetch(url, getRequestInit('POST', payload, isAddAuth(url)));
return handleResponse(response);
},
patchJSON: async (url: string, payload: object) => {
const response = await fetch(url, getRequestInit('PATCH', payload));
return handleResponse(response);
},
putJSON: async (url: string, payload: object) => {
const response = await fetch(url, getRequestInit('PUT', payload, isAddAuth(url)));
return handleResponse(response);
},
deleteNoContent: async (url: string) => {
const response = await fetch(url, getRequestInit('DELETE', {}));
return handleResponse(response);
}
};
export default api;
+34
View File
@@ -0,0 +1,34 @@
import { env } from '../env';
const server = env.VITE_BACKEND_SERVER;
const ApiConfig = {
signInUrl: `${server}/auth/sign-in`,
registerUrl: `${server}/auth/sign-up`,
confirmUrl: `${server}/auth/email-confirmation`,
resetPwdUrl: `${server}/auth/password-reset`,
completeResetPwdUrl: `${server}/auth/complete-password-reset`,
resendConfirmUrl: `${server}/auth/resend-email-confirmation`,
refreshTokenUrl: `${server}/rest/user-sessions/refresh`,
deleteAccountUrl: `${server}/rest/user-sessions/delete-account`,
tasksUrl: `${server}/rest/tasks`,
homeUrl: `${server}/rest/home`,
notesUrl: `${server}/rest/notes`,
publicNotesUrl: `${server}/public/notes`,
userUrl: `${server}/rest/users`
};
export default ApiConfig;
@@ -0,0 +1,3 @@
export const REDIRECT_PATH = 'TASKNOTE-REDIRECT';
export const API_TOKEN = 'TASKNOTE-TOKEN';
export const USER_DATA = 'TASKNOTE-USER';
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

+12
View File
@@ -0,0 +1,12 @@
<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect opacity="0.8" x="0.5" y="0.5" width="43" height="43" rx="7.5" stroke="#C3D4E9"/>
<path d="M18 12V15" stroke="#222222" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M26 12V15" stroke="#222222" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M13.5 19.09H30.5" stroke="#222222" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M32 29C32 29.75 31.79 30.46 31.42 31.06C30.73 32.22 29.46 33 28 33C26.99 33 26.07 32.63 25.37 32C25.06 31.74 24.79 31.42 24.58 31.06C24.21 30.46 24 29.75 24 29C24 26.79 25.79 25 28 25C29.2 25 30.27 25.53 31 26.36C31.62 27.07 32 27.99 32 29Z" stroke="#222222" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M26.44 29L27.43 29.99L29.56 28.02" stroke="#222222" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M31 18.5V26.36C30.27 25.53 29.2 25 28 25C25.79 25 24 26.79 24 29C24 29.75 24.21 30.46 24.58 31.06C24.79 31.42 25.06 31.74 25.37 32H18C14.5 32 13 30 13 27V18.5C13 15.5 14.5 13.5 18 13.5H26C29.5 13.5 31 15.5 31 18.5Z" stroke="#222222" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M21.9955 23.7H22.0045" stroke="#222222" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18.2943 23.7H18.3033" stroke="#222222" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18.2943 26.7H18.3033" stroke="#222222" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+8
View File
@@ -0,0 +1,8 @@
<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect opacity="0.8" x="0.5" y="0.5" width="43" height="43" rx="7.5" fill="white" stroke="#C3D4E9"/>
<path d="M15.9 27H28.09C29.99 27 30.99 26 30.99 24.1V12H12.99V24.1C13 26 14 27 15.9 27Z" stroke="#222222" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M12 12H32" stroke="#222222" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18 32L22 30V27" stroke="#222222" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M26 32L22 30" stroke="#222222" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M17.5 21L20.65 18.37C20.9 18.16 21.23 18.22 21.4 18.5L22.6 20.5C22.77 20.78 23.1 20.83 23.35 20.63L26.5 18" stroke="#222222" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1018 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

+8
View File
@@ -0,0 +1,8 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="8" fill="white" fill-opacity="0.2"/>
<path d="M18 14H22C24 14 24 13 24 12C24 10 23 10 22 10H18C17 10 16 10 16 12C16 14 17 14 18 14Z" stroke="white" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M22 30H17C12 30 11 28 11 24V18C11 13.44 12.67 12.2 16 12.02" stroke="white" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M24 12.02C27.33 12.2 29 13.43 29 18V23" stroke="white" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M23 27V24H26" stroke="white" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M29 30L23.04 24.04" stroke="white" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 970 B

+6
View File
@@ -0,0 +1,6 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="8" fill="white" fill-opacity="0.2"/>
<path d="M17.31 22.7L18.81 24.2L22.81 20.2" stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18 14H22C24 14 24 13 24 12C24 10 23 10 22 10H18C17 10 16 10 16 12C16 14 17 14 18 14Z" stroke="white" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M24 12.02C27.33 12.2 29 13.43 29 18V24C29 28 28 30 23 30H17C12 30 11 28 11 24V18C11 13.44 12.67 12.2 16 12.02" stroke="white" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 728 B

+7
View File
@@ -0,0 +1,7 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="40" height="40" rx="8" fill="white" fill-opacity="0.2"/>
<path d="M16 20.2H23" stroke="white" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M16 24.2H20.38" stroke="white" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18 14H22C24 14 24 13 24 12C24 10 23 10 22 10H18C17 10 16 10 16 12C16 14 17 14 18 14Z" stroke="white" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M24 12.02C27.33 12.2 29 13.43 29 18V24C29 28 28 30 23 30H17C12 30 11 28 11 24V18C11 13.44 12.67 12.2 16 12.02" stroke="white" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 860 B

Some files were not shown because too many files have changed in this diff Show More