{"id":17343240,"url":"https://github.com/geirolz/fp-microservice","last_synced_at":"2025-04-13T09:05:47.087Z","repository":{"id":37815362,"uuid":"363132059","full_name":"geirolz/fp-microservice","owner":"geirolz","description":"A purely functional microservice template in Scala","archived":false,"fork":false,"pushed_at":"2025-03-16T00:11:07.000Z","size":636,"stargazers_count":12,"open_issues_count":55,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-13T09:05:31.924Z","etag":null,"topics":["cats","distributed-systems","fp","functional-programming","kafka","microservice","scala","template"],"latest_commit_sha":null,"homepage":"https://geirolz.github.io/fp-microservice/","language":"Scala","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/geirolz.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":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-30T12:20:59.000Z","updated_at":"2024-12-27T16:20:32.000Z","dependencies_parsed_at":"2024-04-20T10:48:57.886Z","dependency_job_id":"80ab637c-f1d5-4340-9de9-cfe1332930a3","html_url":"https://github.com/geirolz/fp-microservice","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geirolz%2Ffp-microservice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geirolz%2Ffp-microservice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geirolz%2Ffp-microservice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geirolz%2Ffp-microservice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/geirolz","download_url":"https://codeload.github.com/geirolz/fp-microservice/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248688574,"owners_count":21145766,"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":["cats","distributed-systems","fp","functional-programming","kafka","microservice","scala","template"],"created_at":"2024-10-15T16:08:53.019Z","updated_at":"2025-04-13T09:05:47.066Z","avatar_url":"https://github.com/geirolz.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Purely Functional HTTP microservice\n[![Build Status](https://github.com/geirolz/fp-microservice/actions/workflows/cicd.yml/badge.svg)](https://github.com/geirolz/fp-microservice/actions)\n[![Scala Steward](https://img.shields.io/badge/Scala_Steward-helping-blue.svg?style=flat\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAMAAAARSr4IAAAAVFBMVEUAAACHjojlOy5NWlrKzcYRKjGFjIbp293YycuLa3pYY2LSqql4f3pCUFTgSjNodYRmcXUsPD/NTTbjRS+2jomhgnzNc223cGvZS0HaSD0XLjbaSjElhIr+AAAAAXRSTlMAQObYZgAAAHlJREFUCNdNyosOwyAIhWHAQS1Vt7a77/3fcxxdmv0xwmckutAR1nkm4ggbyEcg/wWmlGLDAA3oL50xi6fk5ffZ3E2E3QfZDCcCN2YtbEWZt+Drc6u6rlqv7Uk0LdKqqr5rk2UCRXOk0vmQKGfc94nOJyQjouF9H/wCc9gECEYfONoAAAAASUVORK5CYII=)](https://gitlab.com/moneyfarm-tech/sandbox/steward)\n[![Mergify Status](https://img.shields.io/endpoint.svg?url=https://gh.mergify.io/badges/geirolz/fp-microservice\u0026style=flat)](https://mergify.io)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/5c46a629cc5d447ca3d1e36ad776ba19)](https://www.codacy.com/gh/geirolz/fp-microservice/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=geirolz/fp-microservice\u0026amp;utm_campaign=Badge_Grade)\n\nSimple POC for dockerized HTTP microservice using Scala in a functional programming way.\n\n1. [Prerequisites](#Prerequisites)\n2. [Stack](#Stack)\n3. [Usage](#Usage)\n4. [Customize](#Customize)\n5. [Roadmap](#Roadmap)\n\n\n## Prerequisites\n- JDK 17 (jenv can help)\n- SBT\n- Docker\n- Minikube\n- Terraform\n\n## Stack\n### Application stack\n| SCOPE                               | TECH                                                                     |\n|-------------------------------------|--------------------------------------------------------------------------|\n| ✅ Effects                           | [cats-effect](https://github.com/typelevel/cats-effect)                  |\n| ✅ Logging                           | [log4cats](https://github.com/typelevel/log4cats)                        |\n| ✅ Jdbc (plain, transactions, etc..) | [doobie](https://github.com/tpolecat/doobie)                             |\n| ✅ Db migration                      | [fly4s](https://github.com/geirolz/fly4s)                                |\n| ✅ Http client and server            | [http4s](https://github.com/http4s/http4s)                               |\n| ✅ Http route definitions            | [tapir](https://github.com/softwaremill/tapir)                           |\n| ✅ Config                            | [pureconfig](https://github.com/pureconfig/pureconfig)                   |\n| ✅ Json                              | [circe](https://github.com/circe/circe)                                  |\n| ✅ Refinement types                  | [refined](https://github.com/fthomas/refined)                            |                        |\n| ⬜ Unit tests                        | [munit](https://github.com/scalameta/munit)                              |\n| ⬜ IT tests                          | [testcontainers](https://github.com/testcontainers/testcontainers-scala) |\n\n\n\n### Infrastructure stack\n| SCOPE                     | TECH                                                                                 |\n|---------------------------|--------------------------------------------------------------------------------------|\n| ⬜ Project as template     | [g8](http://www.foundweekends.org/giter8/)                                           |\n| ✅ Containerized app       | [Docker](https://www.docker.com/) via [DockerSbt](https://github.com/sbt/docker-sbt) |\n| ⬜ Containers orchestrator | [K8s](https://kubernetes.io/)                                                        |\n| ⬜ Service mesh            | [Istio](https://istio.io/)                                                           |\n\n\n## Local Usage\n\nFirst of all you have to publish the docker image of the app into your local repository with \n```shell\n./deployLocalDockerImage.sh\n```\n\nThen you can choose to either run the app with `docker-compose` or `minikube`.\n\n### Docker\nRun the deploy script to run the app and the database with docker-compose\n```shell\n.infra/local/docker-compose/deploy.sh\n```\n\u003e ⚠️ **You should use `http`** and not `https` beware that Chrome by default use `https`\n\n\n### Minikube\nRun the deploy script to run the app and the database with minikube.\nServices are not port forwarded by default.\n\n```shell\n.infra/local/minikube/deploy.sh\n```\n\n## Customize\nTo customize this project please read the [guide](doc/guide.md)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeirolz%2Ffp-microservice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeirolz%2Ffp-microservice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeirolz%2Ffp-microservice/lists"}