- This service should use a Java library with an static method.
- The static method returns the encrypted array but can also throw some runtime exception.
- We need to implement an algebra that call to this method but logging the exception and raising our exception into the
F
context:
case object EncryptionError extends RuntimeException with NoStackTrace
- This is the signature of the Java method:
com.sample.encryption.Encryptor.encryptString(s: String): Array[Byte]
-
The company already has a HTTPClient for interacting with their API. We need to add a log call before and after the call.
-
We need to implement the algebra through a builder receiving the HTTPClient.
-
The client looks like following:
class SampleClient[F[_]: Async] {
def loadInfoRequest(id: UUID, prefs: Preferences): F[UserInformation] = ???
}
We need to add an implementation for this algebra. It needs to validate the following things:
- The age should be >= 18.
- The gender need to be
M
(Male) orF
(Female) - The heightAndWeight comes in the form: 175x80 (cm and kg). We need to split the value and put in two int fields.
The 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.
- Logging
We will use org.slf4j
for logging but we should treat the logger instantiation and the logging message as a side effect.