{"id":22636112,"url":"https://github.com/47degrees/sample-tagless-final","last_synced_at":"2025-03-29T04:46:37.898Z","repository":{"id":148139159,"uuid":"160174563","full_name":"47degrees/sample-tagless-final","owner":"47degrees","description":null,"archived":false,"fork":false,"pushed_at":"2023-01-24T08:19:16.000Z","size":26,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":43,"default_branch":"master","last_synced_at":"2025-02-03T14:42:46.071Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/47degrees.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":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-03T10:36:06.000Z","updated_at":"2021-11-16T22:21:13.000Z","dependencies_parsed_at":"2023-05-19T07:18:21.252Z","dependency_job_id":null,"html_url":"https://github.com/47degrees/sample-tagless-final","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/47degrees%2Fsample-tagless-final","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/47degrees%2Fsample-tagless-final/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/47degrees%2Fsample-tagless-final/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/47degrees%2Fsample-tagless-final/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/47degrees","download_url":"https://codeload.github.com/47degrees/sample-tagless-final/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246140543,"owners_count":20729797,"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":[],"created_at":"2024-12-09T03:18:18.757Z","updated_at":"2025-03-29T04:46:37.892Z","avatar_url":"https://github.com/47degrees.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"### EncryptionService\n\n* This service should use a Java library with an static method.\n* The static method returns the encrypted array but can also throw some runtime exception.\n* We need to implement an algebra that call to this method but logging the exception and raising our exception into the `F` context:\n\n`case object EncryptionError extends RuntimeException with NoStackTrace`\n\n* This is the signature of the Java method:\n\n`com.sample.encryption.Encryptor.encryptString(s: String): Array[Byte]`\n\n### HTTPService\n\n* The company already has a HTTPClient for interacting with their API. We need to add a log call before and after the call.\n\n* We need to implement the algebra through a builder receiving the HTTPClient. \n\n* The client looks like following:\n\n```scala\nclass SampleClient[F[_]: Async] {\n  def loadInfoRequest(id: UUID, prefs: Preferences): F[UserInformation] = ???\n}\n```\n\n### ValidationService\n\nWe need to add an implementation for this algebra. It needs to validate the following things:\n\n * The age should be \u003e= 18.\n * The gender need to be `M` (Male) or `F` (Female)\n * The heightAndWeight comes in the form: 175x80 (cm and kg). We need to split the value and put in two int fields.\n\nThe errors need to be accumulated in a NonEmptyList but we don’t give details about the original values, we need to log them as errors.\n\n* Logging\n\nWe will use `org.slf4j` for logging but we should treat the logger instantiation and the logging message as a side effect.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F47degrees%2Fsample-tagless-final","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F47degrees%2Fsample-tagless-final","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F47degrees%2Fsample-tagless-final/lists"}