diff --git a/src/business-logic/core/users/common/data/model/usersModel.ts b/src/business-logic/core/users/common/data/model/usersModel.ts index 90f8d64..22df41f 100644 --- a/src/business-logic/core/users/common/data/model/usersModel.ts +++ b/src/business-logic/core/users/common/data/model/usersModel.ts @@ -16,6 +16,11 @@ class UsersModel { getTitle(): string { return this.modelTitle; } + + addUser(user: Users): Users[] { + this.usersList.push(user); + return this.usersList; + } } export default UsersModel; diff --git a/src/business-logic/core/users/create-user/create-account/data/dto/createAccountDTO.ts b/src/business-logic/core/users/create-user/create-account/data/dto/createAccountDTO.ts new file mode 100644 index 0000000..a075008 --- /dev/null +++ b/src/business-logic/core/users/create-user/create-account/data/dto/createAccountDTO.ts @@ -0,0 +1,12 @@ +import { CreateAccountDTOReturnType, INewUserDTO } from './protocols'; + +const createAccountDTO = ( + newUser: INewUserDTO +): CreateAccountDTOReturnType => ({ + enabled: true, + firstName: newUser.firstname, + lastName: newUser.lastname, + username: newUser.phonenumber, +}); + +export default createAccountDTO; diff --git a/src/business-logic/core/users/create-user/create-account/data/dto/protocols.ts b/src/business-logic/core/users/create-user/create-account/data/dto/protocols.ts new file mode 100644 index 0000000..46f35e4 --- /dev/null +++ b/src/business-logic/core/users/create-user/create-account/data/dto/protocols.ts @@ -0,0 +1,12 @@ +export interface INewUserDTO { + firstname: string; + lastname: string; + phonenumber: string; +} + +export type CreateAccountDTOReturnType = { + username: string; + firstName: string; + lastName: string; + enabled: true; +}; diff --git a/src/business-logic/core/users/create-user/create-account/data/repository/ICreateAcountRepo.ts b/src/business-logic/core/users/create-user/create-account/data/repository/ICreateAcountRepo.ts new file mode 100644 index 0000000..50805de --- /dev/null +++ b/src/business-logic/core/users/create-user/create-account/data/repository/ICreateAcountRepo.ts @@ -0,0 +1,8 @@ +import { INewUserDTO } from '../dto/protocols'; +import { CreateAccountROReturnType } from '../response-object/protocols'; + +interface ICreateAcountRepo { + execute: (newUser: INewUserDTO) => Promise; +} + +export default ICreateAcountRepo; diff --git a/src/business-logic/core/users/create-user/create-account/data/repository/createAcountRepo.ts b/src/business-logic/core/users/create-user/create-account/data/repository/createAcountRepo.ts new file mode 100644 index 0000000..248d115 --- /dev/null +++ b/src/business-logic/core/users/create-user/create-account/data/repository/createAcountRepo.ts @@ -0,0 +1,25 @@ +import createAccountDTO from '../dto/createAccountDTO'; +import { INewUserDTO } from '../dto/protocols'; +import createAcountRO from '../response-object/createAcountRO'; +import { CreateAccountROReturnType } from '../response-object/protocols'; +import ICreateAcountRepo from './ICreateAcountRepo'; +import { HttpHandler } from './protocols'; + +export default class CreateAccountRepo implements ICreateAcountRepo { + private httpHandler: HttpHandler; + + constructor(httpHandler: HttpHandler) { + this.httpHandler = httpHandler; + } + + execute: (newUser: INewUserDTO) => Promise = + async (newUser: INewUserDTO) => { + // call dto + const dto = createAccountDTO(newUser); + // call + const newAccountResponse = await this.httpHandler(dto); + // call response object + const newAccount = createAcountRO(newAccountResponse); + return newAccount; + }; +} diff --git a/src/business-logic/core/users/create-user/create-account/data/repository/protocols.ts b/src/business-logic/core/users/create-user/create-account/data/repository/protocols.ts new file mode 100644 index 0000000..19a5be3 --- /dev/null +++ b/src/business-logic/core/users/create-user/create-account/data/repository/protocols.ts @@ -0,0 +1,6 @@ +import { CreateAccountDTOReturnType } from '../dto/protocols'; +import { CreateAcountResponseApi } from '../response-object/protocols'; + +export type HttpHandler = ( + newUser: CreateAccountDTOReturnType +) => Promise; diff --git a/src/business-logic/core/users/create-user/create-account/data/response-object/createAcountRO.ts b/src/business-logic/core/users/create-user/create-account/data/response-object/createAcountRO.ts new file mode 100644 index 0000000..ac9bbb8 --- /dev/null +++ b/src/business-logic/core/users/create-user/create-account/data/response-object/createAcountRO.ts @@ -0,0 +1,13 @@ +import { + CreateAccountROReturnType, + CreateAcountResponseApi, +} from './protocols'; + +const createAcountRO = ( + apiResponse: CreateAcountResponseApi +): CreateAccountROReturnType => ({ + accountId: apiResponse.id, + phonenumber: apiResponse.username, +}); + +export default createAcountRO; diff --git a/src/business-logic/core/users/create-user/create-account/data/response-object/protocols.ts b/src/business-logic/core/users/create-user/create-account/data/response-object/protocols.ts new file mode 100644 index 0000000..3ff64ba --- /dev/null +++ b/src/business-logic/core/users/create-user/create-account/data/response-object/protocols.ts @@ -0,0 +1,10 @@ +export type CreateAcountResponseApi = { + nextRequestTimestamp: number; + username: string; + id: string; +}; + +export type CreateAccountROReturnType = { + phonenumber: string; + accountId: string; +}; diff --git a/src/business-logic/core/users/create-user/data/repository/ICreateUserRepo.ts b/src/business-logic/core/users/create-user/data/repository/ICreateUserRepo.ts new file mode 100644 index 0000000..eaac72a --- /dev/null +++ b/src/business-logic/core/users/create-user/data/repository/ICreateUserRepo.ts @@ -0,0 +1,5 @@ +import UsersModel from '../../../common/data/model/usersModel'; + +type ICreateUserRepo = () => Promise; + +export default ICreateUserRepo; diff --git a/src/business-logic/core/users/create-user/data/repository/createUserRepo.ts b/src/business-logic/core/users/create-user/data/repository/createUserRepo.ts new file mode 100644 index 0000000..91903f9 --- /dev/null +++ b/src/business-logic/core/users/create-user/data/repository/createUserRepo.ts @@ -0,0 +1,7 @@ +import ICreateUserRepo from './ICreateUserRepo'; + +const creatUserRepo = () => { + +}; + +export default creatUserRepo; diff --git a/src/business-logic/core/users/create-user/usecase/createUserUsecase.ts b/src/business-logic/core/users/create-user/usecase/createUserUsecase.ts new file mode 100644 index 0000000..29dee5f --- /dev/null +++ b/src/business-logic/core/users/create-user/usecase/createUserUsecase.ts @@ -0,0 +1,14 @@ +import ICreateUserRepo from '../data/repository/ICreateUserRepo'; + +export default class CreateUserUsecase { + private accountRepository: ICreateUserRepo; + + constructor(repository: ICreateUserRepo) { + this.repository = repository; + } + + async execute() { + // create acount + // create profile by account ID + } +}