{"id":26070288,"url":"https://github.com/fresult/task-mgmt","last_synced_at":"2025-10-15T13:38:05.460Z","repository":{"id":213080616,"uuid":"726409063","full_name":"fResult/Task-MGMT","owner":"fResult","description":"My Reactive Programming learning using Spring Boot Webflux, and Kotlin.","archived":false,"fork":false,"pushed_at":"2024-10-31T18:56:51.000Z","size":144,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-31T19:31:37.548Z","etag":null,"topics":["docker-compose","functional-programming","functional-reactive-programming","kotlin","kotlin-coroutines","postgresql","project-reactor","r2dbc","r2dbc-postgresql","reactive-programming","spring-boot","webflux"],"latest_commit_sha":null,"homepage":"https://medium.com/p/555589fce607","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fResult.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-12-02T10:05:57.000Z","updated_at":"2024-10-31T18:56:55.000Z","dependencies_parsed_at":"2023-12-18T10:56:31.834Z","dependency_job_id":"e740ba7c-ecec-4137-acae-ba389952fcab","html_url":"https://github.com/fResult/Task-MGMT","commit_stats":{"total_commits":43,"total_committers":1,"mean_commits":43.0,"dds":0.0,"last_synced_commit":"e123317e4fad0652f1e2ae45ec0513e965eabe23"},"previous_names":["fresult/task-mgmt"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fResult%2FTask-MGMT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fResult%2FTask-MGMT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fResult%2FTask-MGMT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fResult%2FTask-MGMT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fResult","download_url":"https://codeload.github.com/fResult/Task-MGMT/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242619124,"owners_count":20159003,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker-compose","functional-programming","functional-reactive-programming","kotlin","kotlin-coroutines","postgresql","project-reactor","r2dbc","r2dbc-postgresql","reactive-programming","spring-boot","webflux"],"created_at":"2025-03-08T23:15:48.339Z","updated_at":"2025-10-15T13:38:00.433Z","avatar_url":"https://github.com/fResult.png","language":"Kotlin","readme":"# Task Management\n## Prerequisite\n1. Java Development Kit (JDK) version 21 or more (I preferred version 21)\n2. Gradle 8 (or more)\n3. IntelliJ IDEA (or any preferred IDE)\n4. Kotlin Plugin: (for IntelliJ IDEA’s user)\n5. Docker (and Docker Compose)\n\n## API Documentation\nSee [API_DOC.md](/apidoc/API_DOC.md) and [Task MGMT API | Postman](/apidoc/api-doc.json)\n\u003e **Note:**\\\n\u003e Import *Task MGMT API Collection* on Postman\\\n\u003e and setup environment variable `base-url` = `http://«hostname»:«port»` (e.g. `http://localhost:8080`)\n\n## Available Scripts\n**Prepare**\n\nTo build containerized database:\n\n```shell\ndocker-compose -f docker/compose.dev.yml up --build -d\n```\n\n**Build**\n\nTo install packages:\n\n```shell\n./gradlew clean build\n```\n\nTo run application on local machine:\n\n**Run**\n```shell\n./gradlew bootRun\n```\n\n**Create Docker Image**\n```shell\ndocker build -t «tag_name» .\n# Example\ndocker build -t app-task-mgmt .\n```\n\n**Create Container by Docker Command**\n```shell\ndocker run -d --name «container_name» \\\n  --network «network_name» \\\n  -e POSTGRES_URL=r2dbc:postgresql://«postgres_container_name»:5432/«database_name» \\\n  -p «target_port»/8080 \\\n  «app_image_name»\n# For example\ndocker run -d --name app-task-mgmt \\\n  --network taskmgmt-dev \\\n  -e POSTGRES_URL=r2dbc:postgresql://taskmgmt-db:5432/task-mgmt \\\n  -p 8088:8080 \\\n  app-task-mgmt\n```\n\n**Data Table change**\n1. Change Table definition in the `/src/main/resources/schemas.sql` file to relate with the Entity data classes\n2. Access to the containerized database (Postgresql)\n    ```shell\n    docker exec -it taskmgmt-db bash\n   \n    # In the container\n    psql -U postgres -d task-mgmt -W\n    ```\n3. Delete tables\n    ```sql\n    \\dt+; -- To see every tables\n    DROP TABLE «table_name»;\n    \n    exit; -- When finish dropping tables\n    ```\n4. Run project again\n    ```shell\n    ./gradlew bootRun\n    # Data table will be re-created follow the `schemas.sql` file\n    ```\n\n## TODO (for improvement)\n- [x] Validate body request to response 400 Bad Request\n- [x] Create DTO for Tasks by UserId\n- [x] Create GET `/tasks` API route to retrieve tasks that match specific due dates, statuses, or created/updated users.\n- [ ] Create API Document with Open API or Swagger\n- [ ] Add the source method in the Logger to (right now we know only source class)\n    - **Actual Result   -** 2023-11-28T15:35:56.540+07:00 ERROR 39490 --- [actor-tcp-nio-2] d.fresult.taskmgmt.handlers.UserHandler [«METHOD_NAME»]  : [User] with ID [222] does not exist)\n    - **Expected Result -** 2023-11-28T15:35:56.540+07:00 ERROR 39490 --- [actor-tcp-nio-2] d.fresult.taskmgmt.handlers.UserHandler [byId]  : [User] with ID [222] does not exist)\n- [ ] Make `status` accept only possible 3 values in enum\n- [ ] Hash Password\n- [ ] Do authorization for most of API routes\n- [ ] Make `createdBy` and `updatedBy` refer to authentication (token) automatic update by data auditing\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffresult%2Ftask-mgmt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffresult%2Ftask-mgmt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffresult%2Ftask-mgmt/lists"}