From e11c1b34c88fca563f125d2b89faabb0246b4c9e Mon Sep 17 00:00:00 2001 From: Brian Valette <47712216+brian-xu-vlt@users.noreply.github.com> Date: Wed, 28 Dec 2022 09:26:52 +0100 Subject: [PATCH] Ex6 fixes (#108) * improve comments readability * fix name of function to clarify expectation * fix inaccurate expectation --- src/exo6/exo6.test.ts | 10 +++++----- src/exo6/exo6.ts | 32 ++++++++++++++++++++------------ 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/exo6/exo6.test.ts b/src/exo6/exo6.test.ts index 10c3879..991ec0b 100644 --- a/src/exo6/exo6.test.ts +++ b/src/exo6/exo6.test.ts @@ -5,7 +5,7 @@ import { getCapitalizedUserName, getConcatenationOfTheBestFriendNameAndUserName, getConcatenationOfTheTwoUserNames, - getConcatenationOfUserNameAndYear, + getConcatenationOfUserNameAndCurrentYear, } from './exo6'; describe('exo6', () => { @@ -34,7 +34,7 @@ describe('exo6', () => { const result = await usecase(); - expect(result).toEqual(either.right('robscott')); + expect(result).toEqual(either.right('RobScott')); }); it('should return the concatenation of the two capitalized user names based on the best friend relation', async () => { @@ -49,13 +49,13 @@ describe('exo6', () => { const result = await usecase(); - expect(result).toEqual(either.right('robscott')); + expect(result).toEqual(either.right('RobScott')); }); - it('should return the concatenation of the two capitalized user names based on the best friend relation', async () => { + it('should return the concatenation of the user name and the current year', async () => { const timeservice = new Application.NodeTimeService.NodeTimeService(); - const usecase = getConcatenationOfUserNameAndYear({ + const usecase = getConcatenationOfUserNameAndCurrentYear({ userIdOne: '1', })({ userRepository: new User.Repository.InMemoryUserRepository([ diff --git a/src/exo6/exo6.ts b/src/exo6/exo6.ts index 690c657..6cac58a 100644 --- a/src/exo6/exo6.ts +++ b/src/exo6/exo6.ts @@ -6,7 +6,8 @@ import { unimplemented } from '../utils'; import { Application } from './application'; import { User } from './domain'; -// In real world applications you will mostly manipulate `ReaderTaskEither` aka `rte` in the use-cases of the application. +// In real world applications you will mostly manipulate `ReaderTaskEither` aka +// `rte` in the use-cases of the application. // `Reader` -> For dependency injection // `Task` -> For async operation // `Either` -> For computations that may fail @@ -18,8 +19,10 @@ import { User } from './domain'; // You will learn the usage of the most common in the following usecases. // In the following usecase, you will learn the usage of `rte.map()`. -// `rte.map()` allows you to perform an operation on the values stored in the current context. -// In the following example, we need to fetch a user by its id and then we want to return its capitalized. +// `rte.map()` allows you to perform an operation on the values stored in the +// current context. In the following example, we need to fetch a user by its id +// and then we want to return its capitalized. + export const getCapitalizedUserName: (args: { userId: string; @@ -29,11 +32,12 @@ export const getCapitalizedUserName: (args: { string > = unimplemented; -// Sometimes you will need to get multiple data before performing an operation on them. -// In this case, it is very convenient to use the `Do` notation. +// Sometimes you will need to get multiple data before performing an operation +// on them. In this case, it is very convenient to use the `Do` notation. // -// The `Do` notation allows you to enrich the context step-by-step by binding the result -// of an effect (in this case a RTE) to a named variable using `rte.apS` or `rte.apSW`. +// The `Do` notation allows you to enrich the context step-by-step by binding +// the result of an effect (in this case a RTE) to a named variable using +// `rte.apS` or `rte.apSW`. // // For example: // pipe( @@ -51,10 +55,14 @@ export const getConcatenationOfTheTwoUserNames: (args: { string > = unimplemented; -// Sometimes, you will need to feed the current context with data that you can only retrieve after performing some operations. -// For example, if you want to fetch the best friend of a user you will have to fetch the first user and then fetch its bestfriend. -// In this case, we will use `rte.bindW()` to use data of the current context (the firstly fetched user) -// to perform a second operation (fetch its bestfriend) and bind the return value to feed the context and use those data. +// Sometimes, you will need to feed the current context with data that you can +// only retrieve after performing some operations, in other words, operations +// need to be sequential. +// For example, if you want to fetch the best friend of a user you will have to +// fetch the first user and then fetch its best friend. +// In this case, we will use `rte.bindW()` to use data of the current context +// (the firstly fetched user) to perform a second operation (fetch its best friend) +// and bind the return value to feed the context and use those data. export const getConcatenationOfTheBestFriendNameAndUserName: (args: { userIdOne: string; @@ -68,7 +76,7 @@ export const getConcatenationOfTheBestFriendNameAndUserName: (args: { // The challenge of this usecase is to use TimeService in the flow of our `rte` type Dependencies = User.Repository.Access & Application.TimeService.Access; -export const getConcatenationOfUserNameAndYear: (args: { +export const getConcatenationOfUserNameAndCurrentYear: (args: { userIdOne: string; }) => ReaderTaskEither< Dependencies,