From bc5c6e55c9fabbd0647425c601eb728d917d1193 Mon Sep 17 00:00:00 2001 From: Mohan Kotak <73296174+Mohan29997@users.noreply.github.com> Date: Tue, 11 Apr 2023 12:14:16 +0530 Subject: [PATCH] Database user check (#125) * spalsh user check * spalsh user check format * navigation according to dat * navigation according to dat format * changes for names convention * changes for names convention format * changes for names to camelcase * changes for names to camelcase format --- packages/data/src/out/database_port.ts | 5 +-- packages/data/src/out/network_port.ts | 2 +- .../src/repositories/user_repository_impl.ts | 17 ++++++---- .../database-watermelon/src/dao/user_dao.ts | 9 ++++-- .../src/database_adapter.ts | 11 +++++-- packages/domain/src/di/domain_module.ts | 15 ++++++--- packages/domain/src/domain.ts | 15 +++++---- .../domain/src/repository/user_repository.ts | 5 +-- ...check_usecase.ts => login_user_usecase.ts} | 9 +++--- .../src/usecases/user_details_usecase.ts | 8 ++--- .../src/usecases/user_present_data_usecase.ts | 31 +++++++++++++++++++ .../feature/dashboard/dashboard_screen.tsx | 14 +++------ .../mobile/src/feature/login/login_screen.tsx | 12 +++---- packages/mobile/src/navigation/app_router.tsx | 11 +++++-- .../network-retrofit/src/network_adapter.ts | 2 +- .../presentation/src/feature/login/actions.ts | 12 +++---- .../presentation/src/feature/login/reducer.ts | 12 +++---- .../presentation/src/feature/login/saga.ts | 16 +++++----- packages/presentation/src/feature/store.ts | 11 +++++-- .../src/feature/userDetail/action.ts | 12 +++---- .../src/feature/userDetail/reducer.ts | 12 +++---- .../src/feature/userDetail/saga.ts | 14 ++++----- .../src/feature/userpresent/action.ts | 10 ++++++ .../src/feature/userpresent/reducer.ts | 19 ++++++++++++ .../src/feature/userpresent/saga.ts | 18 +++++++++++ packages/presentation/src/presentation.ts | 8 +++-- packages/presentation/src/utils/rootSaga.ts | 15 +++++---- 27 files changed, 220 insertions(+), 105 deletions(-) rename packages/domain/src/usecases/{login_check_usecase.ts => login_user_usecase.ts} (72%) create mode 100644 packages/domain/src/usecases/user_present_data_usecase.ts create mode 100644 packages/presentation/src/feature/userpresent/action.ts create mode 100644 packages/presentation/src/feature/userpresent/reducer.ts create mode 100644 packages/presentation/src/feature/userpresent/saga.ts diff --git a/packages/data/src/out/database_port.ts b/packages/data/src/out/database_port.ts index cef8c27..fa2d937 100644 --- a/packages/data/src/out/database_port.ts +++ b/packages/data/src/out/database_port.ts @@ -1,6 +1,7 @@ import { UserModel } from 'shared' export interface DatabasePort { - adduser(params?: { email: string; password: string; token: string }): Promise - getUserDetails(data: UserModel): Promise + addUser(params?: { email: string; password: string; token: string }): Promise + fetchUserData(data: UserModel): Promise + fetchUserExists(data: UserModel): Promise } diff --git a/packages/data/src/out/network_port.ts b/packages/data/src/out/network_port.ts index b1d25fe..9d8c00c 100644 --- a/packages/data/src/out/network_port.ts +++ b/packages/data/src/out/network_port.ts @@ -1,5 +1,5 @@ import { UserModel } from 'shared' export interface NetworkPort { - loginCall(params?: { email: string; password: string }): Promise + login(params?: { email: string; password: string }): Promise } diff --git a/packages/data/src/repositories/user_repository_impl.ts b/packages/data/src/repositories/user_repository_impl.ts index 21fb450..421980a 100644 --- a/packages/data/src/repositories/user_repository_impl.ts +++ b/packages/data/src/repositories/user_repository_impl.ts @@ -12,13 +12,13 @@ export class UserRepositoryImpl implements UserRepository { this.network = params.networkPort } - async loginCheck(params?: { email: string; password: string }): Promise { - const usermodel: any = await this.network.loginCall({ email: params.email, password: params.password }) + async login(params?: { email: string; password: string }): Promise { + const usermodel: any = await this.network.login({ email: params.email, password: params.password }) + console.log(usermodel) if (usermodel == 'Request failed with status code 403') { return usermodel } else { - console.log(usermodel.access_token) - const databaseResponse = await this.database.adduser({ + const databaseResponse = await this.database.addUser({ email: params.email, password: params.password, token: usermodel.access_token @@ -26,8 +26,13 @@ export class UserRepositoryImpl implements UserRepository { return databaseResponse } } - async getuserdata(params?: { email: string }): Promise { - return await this.database.getUserDetails({ + async fetchUserData(params?: { email: string }): Promise { + return await this.database.fetchUserData({ + email: params.email + }) + } + async fetchUserExists(params?: { email: string }): Promise { + return await this.database.fetchUserExists({ email: params.email }) } diff --git a/packages/database-watermelon/src/dao/user_dao.ts b/packages/database-watermelon/src/dao/user_dao.ts index 1408a81..bb46b8a 100644 --- a/packages/database-watermelon/src/dao/user_dao.ts +++ b/packages/database-watermelon/src/dao/user_dao.ts @@ -30,8 +30,13 @@ export class UserDao extends BaseDao { ) } - async getUser(data: { email: string }): Promise { + async fetchUserData(data: { email: string }): Promise { const response: any = await safeDbCall(this.databaseData.query().fetch()) - return !response ? [] : response[0]?._raw?.email + return response[0] ? response[0]?._raw?.email : [] + } + async fetchUserExists(data: { email: string }): Promise { + const userCount: number = await safeDbCall(this.databaseData.query().fetchCount()) + if (userCount > 0) return true + else return false } } diff --git a/packages/database-watermelon/src/database_adapter.ts b/packages/database-watermelon/src/database_adapter.ts index f614eb8..96b5679 100644 --- a/packages/database-watermelon/src/database_adapter.ts +++ b/packages/database-watermelon/src/database_adapter.ts @@ -9,7 +9,7 @@ class DatabaseAdapter implements DatabasePort { this.databases = params.databases } - async adduser(params?: { email: string; password: string; token: string }): Promise { + async addUser(params?: { email: string; password: string; token: string }): Promise { const response = await this.databases.userDao.insertOrUpdate({ email: params.email, password: params.password, @@ -18,8 +18,13 @@ class DatabaseAdapter implements DatabasePort { if (response) return true } - async getUserDetails(data: UserModel): Promise { - return await this.databases.userDao.getUser({ + async fetchUserData(data: UserModel): Promise { + return await this.databases.userDao.fetchUserData({ + email: data.email + }) + } + async fetchUserExists(data: UserModel): Promise { + return await this.databases.userDao.fetchUserExists({ email: data.email }) } diff --git a/packages/domain/src/di/domain_module.ts b/packages/domain/src/di/domain_module.ts index f5020d7..7433dae 100644 --- a/packages/domain/src/di/domain_module.ts +++ b/packages/domain/src/di/domain_module.ts @@ -1,17 +1,22 @@ -import { LoginCheckUsecase, UserDetailsUseCase } from 'domain-layer' import { UserRepository } from './../repository/user_repository' import { DataModule } from 'data' import { Graph, ObjectGraph, Provides, Singleton } from 'di' +import { LoginUseCase } from '../usecases/login_user_usecase' +import { FetchUserDataUseCase, FetchUserExistsUseCase } from '../domain' @Singleton() @Graph({ subgraphs: [DataModule] }) export class DomainModule extends ObjectGraph { @Provides() - providesLoginCheckUseCase(provideUserRepository: UserRepository): LoginCheckUsecase { - return new LoginCheckUsecase(provideUserRepository) + providesLoginUseCase(provideUserRepository: UserRepository): LoginUseCase { + return new LoginUseCase(provideUserRepository) } @Provides() - provideUserDetailsUseCase(provideUserRepository: UserRepository): UserDetailsUseCase { - return new UserDetailsUseCase(provideUserRepository) + provideUserDataUseCase(provideUserRepository: UserRepository): FetchUserDataUseCase { + return new FetchUserDataUseCase(provideUserRepository) + } + @Provides() + provideUserExistsUseCase(provideUserRepository: UserRepository): FetchUserExistsUseCase { + return new FetchUserExistsUseCase(provideUserRepository) } } diff --git a/packages/domain/src/domain.ts b/packages/domain/src/domain.ts index 632324e..45c16bd 100644 --- a/packages/domain/src/domain.ts +++ b/packages/domain/src/domain.ts @@ -1,13 +1,16 @@ -import { LoginCheckParams, LoginCheckUsecase } from './usecases/login_check_usecase' +import { FetchUserExistsUseCase, FetchUserExistsUseCaseParams } from './usecases/user_present_data_usecase' +import { FetchUserDataUseCase, FetchUserDataUseCaseParams } from './usecases/user_details_usecase' +import { LoginUseCase, LoginParams } from './usecases/login_user_usecase' import { DomainModule } from './di/domain_module' import { UserRepository } from './repository/user_repository' -import { UserDetailsUseCaseParams, UserDetailsUseCase } from './usecases/user_details_usecase' export { - LoginCheckParams, - LoginCheckUsecase, DomainModule, UserRepository, - UserDetailsUseCase, - UserDetailsUseCaseParams + LoginUseCase, + LoginParams, + FetchUserDataUseCase, + FetchUserDataUseCaseParams, + FetchUserExistsUseCase, + FetchUserExistsUseCaseParams } diff --git a/packages/domain/src/repository/user_repository.ts b/packages/domain/src/repository/user_repository.ts index cc25ca0..96a6f6d 100644 --- a/packages/domain/src/repository/user_repository.ts +++ b/packages/domain/src/repository/user_repository.ts @@ -1,6 +1,7 @@ import { UserModel } from 'shared' export interface UserRepository { - loginCheck(params?: { email: string; password: string }): Promise - getuserdata(params?: { email: string }): Promise + login(params?: { email: string; password: string }): Promise + fetchUserData(params?: { email: string }): Promise + fetchUserExists(params?: { email: string }): Promise } diff --git a/packages/domain/src/usecases/login_check_usecase.ts b/packages/domain/src/usecases/login_user_usecase.ts similarity index 72% rename from packages/domain/src/usecases/login_check_usecase.ts rename to packages/domain/src/usecases/login_user_usecase.ts index 9ba36bb..2436355 100644 --- a/packages/domain/src/usecases/login_check_usecase.ts +++ b/packages/domain/src/usecases/login_user_usecase.ts @@ -2,23 +2,22 @@ import { UserRepository } from '../repository/user_repository' import { FutureUseCase } from './base/base_usecase' import { Params } from './base/params' -export class LoginCheckUsecase extends FutureUseCase { +export class LoginUseCase extends FutureUseCase { private readonly userRepository: UserRepository constructor(repo: UserRepository) { super() this.userRepository = repo } - async execute(params?: LoginCheckParams): Promise { + async execute(params?: LoginParams): Promise { if (params?.verify()) { - console.log('in verify ') - return await this.userRepository.loginCheck({ + return await this.userRepository.login({ email: params.email, password: params.password }) } else return false } } -export class LoginCheckParams extends Params { +export class LoginParams extends Params { readonly email?: string readonly password?: string diff --git a/packages/domain/src/usecases/user_details_usecase.ts b/packages/domain/src/usecases/user_details_usecase.ts index 32ff4ec..63b51f0 100644 --- a/packages/domain/src/usecases/user_details_usecase.ts +++ b/packages/domain/src/usecases/user_details_usecase.ts @@ -3,21 +3,21 @@ import { UserRepository } from '../domain' import { FutureUseCase } from './base/base_usecase' import { Params } from './base/params' -export class UserDetailsUseCase extends FutureUseCase { +export class FetchUserDataUseCase extends FutureUseCase { private readonly userRepository: UserRepository constructor(repo: UserRepository) { super() this.userRepository = repo } - async execute(params?: UserDetailsUseCaseParams): Promise { + async execute(params?: FetchUserDataUseCaseParams): Promise { if (params?.verify) { - return await this.userRepository.getuserdata({ + return await this.userRepository.fetchUserData({ email: params.email }) } } } -export class UserDetailsUseCaseParams extends Params { +export class FetchUserDataUseCaseParams extends Params { readonly email?: string constructor(params?: { email: string }) { diff --git a/packages/domain/src/usecases/user_present_data_usecase.ts b/packages/domain/src/usecases/user_present_data_usecase.ts new file mode 100644 index 0000000..8a7a6c8 --- /dev/null +++ b/packages/domain/src/usecases/user_present_data_usecase.ts @@ -0,0 +1,31 @@ +import { UserModel } from 'packages/shared/src/shared' +import { UserRepository } from '../domain' +import { FutureUseCase } from './base/base_usecase' +import { Params } from './base/params' + +export class FetchUserExistsUseCase extends FutureUseCase { + private readonly userRepository: UserRepository + constructor(repo: UserRepository) { + super() + this.userRepository = repo + } + async execute(params?: FetchUserExistsUseCaseParams): Promise { + if (params?.verify) { + return await this.userRepository.fetchUserExists({ + email: params.email + }) + } + } +} +export class FetchUserExistsUseCaseParams extends Params { + readonly email?: string + + constructor(params?: { email: string }) { + super({}) + this.email = params.email + } + + verify(): boolean { + return true + } +} diff --git a/packages/mobile/src/feature/dashboard/dashboard_screen.tsx b/packages/mobile/src/feature/dashboard/dashboard_screen.tsx index 0dd8b79..1143fb9 100644 --- a/packages/mobile/src/feature/dashboard/dashboard_screen.tsx +++ b/packages/mobile/src/feature/dashboard/dashboard_screen.tsx @@ -6,30 +6,26 @@ import { AppButton } from '../../widgets/app_button/app_button' import { useTheme } from '../../theme/themeprovider' import { useEffect, useState } from 'react' import { useDispatch, useSelector } from 'react-redux' -import { userDataRequest } from 'presentation' +import { fetchUserAction } from 'presentation' const DashboardScreen = () => { const { theme, isDark } = useTheme() const [lodingState, setLodingState] = useState(false) - const databaseemail: any = useSelector((state: any) => state?.userData?.data?.payload) + const databaseEmail: any = useSelector((state: any) => state?.userData?.data?.payload) const dispatch = useDispatch() useEffect(() => { - dispatch(userDataRequest({})) + dispatch(fetchUserAction({})) }, []) - const saveData = () => { - setLodingState(true) - dispatch(userDataRequest({})) - } return ( - {i18n.t('uber')} + {`${i18n.t('uber')} - ${databaseEmail}`} {i18n.t('getThere')} - saveData()} /> + ) diff --git a/packages/mobile/src/feature/login/login_screen.tsx b/packages/mobile/src/feature/login/login_screen.tsx index 9b9ad18..6518e3e 100644 --- a/packages/mobile/src/feature/login/login_screen.tsx +++ b/packages/mobile/src/feature/login/login_screen.tsx @@ -7,7 +7,7 @@ import i18n from 'localisation' import { useDispatch, useSelector } from 'react-redux' import { AppButton } from '../../widgets/app_button/app_button' import { AppInput } from '../../widgets/app_input/app_input' -import { userRequest } from 'presentation' +import { loginAction } from 'presentation' import { useTheme } from '../../theme/themeprovider' import { useNavigation } from '@react-navigation/native' import RoutePaths from '../../navigation/router_path' @@ -20,22 +20,22 @@ const LoginScreen = () => { const [password, setPassword] = useState('') const [loadingState, setLodingState] = useState(false) const dispatch = useDispatch() - const loginData: any = useSelector(state => state.loginData) + const loginData: any = useSelector(state => state?.login) const saveData = () => { const data = { email: username, password: password } - dispatch(userRequest({ data: data })) + dispatch(loginAction({ data: data })) } useEffect(() => { - if (loginData?.status == Status.loading) setLodingState(true) + if (loginData?.status == Status?.loading) setLodingState(true) else setLodingState(false) }, [loginData]) useEffect(() => { - if (loginData?.status == Status.success) navigation.navigate(RoutePaths.dashboard) - else if (loginData?.status == Status.error) alert(i18n.t('noInput')) + if (loginData?.status == Status?.success) navigation.navigate(RoutePaths.dashboard) + else if (loginData?.status == Status?.error) alert(i18n.t('noInput')) }, [loginData]) return ( diff --git a/packages/mobile/src/navigation/app_router.tsx b/packages/mobile/src/navigation/app_router.tsx index 3ec458e..cb6c1d1 100644 --- a/packages/mobile/src/navigation/app_router.tsx +++ b/packages/mobile/src/navigation/app_router.tsx @@ -1,12 +1,19 @@ import { NavigationContainer } from '@react-navigation/native' import { createNativeStackNavigator } from '@react-navigation/native-stack' -import React from 'react' +import React, { useEffect } from 'react' import DashboardScreen from '../feature/dashboard/dashboard_screen' import LoginScreen from '../feature/login/login_screen' import RoutePaths from './router_path' +import { useDispatch, useSelector } from 'react-redux' +import { fetchUserExistsAction } from 'presentation' const AppRouter = () => { const Stack = createNativeStackNavigator() + const databaseEmail: any = useSelector((state: any) => state?.userPresentData?.data?.payload) + const dispatch = useDispatch() + useEffect(() => { + dispatch(fetchUserExistsAction({})) + }, []) return ( { headerShown: false }} > - + {!databaseEmail && } diff --git a/packages/network-retrofit/src/network_adapter.ts b/packages/network-retrofit/src/network_adapter.ts index 063852c..7c7c13f 100644 --- a/packages/network-retrofit/src/network_adapter.ts +++ b/packages/network-retrofit/src/network_adapter.ts @@ -9,7 +9,7 @@ class NetworkAdapter implements NetworkPort { this.retrofitService = params.retrofitService } - async loginCall(params?: { email: string; password: string }): Promise { + async login(params?: { email: string; password: string }): Promise { const response = await safeApiCall(this.retrofitService.login({ email: params.email, password: params.password })) return response.data } diff --git a/packages/presentation/src/feature/login/actions.ts b/packages/presentation/src/feature/login/actions.ts index 1ce8013..40ddd48 100644 --- a/packages/presentation/src/feature/login/actions.ts +++ b/packages/presentation/src/feature/login/actions.ts @@ -1,10 +1,10 @@ -export enum REQUEST_USER { - MAKE_REQUEST = 'MAKE_REQUEST', - REQUEST_USER_SUCCESS = 'REQUEST_USER_SUCCESS', - REQUEST_USER_FAILURE = 'REQUEST_USER_FAILURE' +export enum LOGIN { + request = 'LOGIN_REQUEST', + success = 'LOGIN_SUCCESS', + failure = 'LOGIN_FAILURE' } -export const userRequest = params => ({ - type: REQUEST_USER.MAKE_REQUEST, +export const loginAction = params => ({ + type: LOGIN.request, params }) diff --git a/packages/presentation/src/feature/login/reducer.ts b/packages/presentation/src/feature/login/reducer.ts index a3ff3f6..7c74076 100644 --- a/packages/presentation/src/feature/login/reducer.ts +++ b/packages/presentation/src/feature/login/reducer.ts @@ -1,18 +1,18 @@ import data from 'packages/data/lib/data' import { Resource } from '../../utils/resource' -import { REQUEST_USER } from './actions' +import { LOGIN } from './actions' -const userRequestReducer = (initialState = Resource.none, action) => { +const loginReducer = (initialState = Resource.none, action) => { switch (action.type) { - case REQUEST_USER.MAKE_REQUEST: + case LOGIN.request: return Resource.loading() - case REQUEST_USER.REQUEST_USER_SUCCESS: + case LOGIN.success: return Resource.success({ data: action }) - case REQUEST_USER.REQUEST_USER_FAILURE: + case LOGIN.failure: return Resource.error({ error: 'User Not logged in' }) @@ -20,4 +20,4 @@ const userRequestReducer = (initialState = Resource.none, action) => { return initialState } } -export default userRequestReducer +export default loginReducer diff --git a/packages/presentation/src/feature/login/saga.ts b/packages/presentation/src/feature/login/saga.ts index a1c184c..42afe60 100644 --- a/packages/presentation/src/feature/login/saga.ts +++ b/packages/presentation/src/feature/login/saga.ts @@ -1,22 +1,22 @@ import { DomainModule } from 'domain-layer/src/di/domain_module' import { Obsidian } from 'di' import { put } from 'redux-saga/effects' -import { REQUEST_USER } from './actions' -import { LoginCheckParams } from 'domain-layer' +import { LOGIN } from './actions' +import { LoginParams } from 'domain-layer' -function* getUserSaga(action) { +function* loginSaga(action) { const mesage = 'Request failed with status code 403' try { const data: any = yield Obsidian.obtain(DomainModule) - .providesLoginCheckUseCase() - .execute(new LoginCheckParams({ email: action?.params?.data?.email, password: action?.params?.data?.password })) + .providesLoginUseCase() + .execute(new LoginParams({ email: action?.params?.data?.email, password: action?.params?.data?.password })) if (data == mesage || data == false) { - yield put({ type: REQUEST_USER.REQUEST_USER_FAILURE, payload: data }) + yield put({ type: LOGIN.failure, payload: data }) } else { - yield put({ type: REQUEST_USER.REQUEST_USER_SUCCESS, payload: data }) + yield put({ type: LOGIN.success, payload: data }) } } catch (e) { console.log(e) } } -export default getUserSaga +export default loginSaga diff --git a/packages/presentation/src/feature/store.ts b/packages/presentation/src/feature/store.ts index c30df9a..174afd7 100644 --- a/packages/presentation/src/feature/store.ts +++ b/packages/presentation/src/feature/store.ts @@ -1,12 +1,17 @@ import createSagaMiddleware from '@redux-saga/core' import { combineReducers, configureStore } from '@reduxjs/toolkit' import rootSaga from '../utils/rootSaga' -import userRequestReducer from './login/reducer' -import UserDataRequestReduceer from './userDetail/reducer' +import loginReducer from './login/reducer' +import fetchUserReducer from './userDetail/reducer' +import fetchUserExistsReducer from './userpresent/reducer' const sagaMiddleware = createSagaMiddleware() const store = configureStore({ - reducer: combineReducers({ loginData: userRequestReducer, userData: UserDataRequestReduceer }), + reducer: combineReducers({ + login: loginReducer, + userData: fetchUserReducer, + userExistsData: fetchUserExistsReducer + }), middleware: [sagaMiddleware] }) sagaMiddleware.run(rootSaga) diff --git a/packages/presentation/src/feature/userDetail/action.ts b/packages/presentation/src/feature/userDetail/action.ts index 9d93a00..6b3fd1e 100644 --- a/packages/presentation/src/feature/userDetail/action.ts +++ b/packages/presentation/src/feature/userDetail/action.ts @@ -1,10 +1,10 @@ -export enum REQUEST_USER_DATA { - MAKE_REQUEST = 'MAKE_REQUEST', - REQUEST_USER_DATA_SUCCESS = 'REQUEST_USER_DATA_SUCCESS', - REQUEST_USER_DATA_FAILURE = 'REQUEST_USER_DATA_FAILURE' +export enum FETCH_USER_DATA { + request = 'FETCH_USER_DATA_REQUEST', + success = 'FETCH_USER_DATA_SUCCESS', + failure = 'FETCH_USER_DATA_FAILURE' } -export const userDataRequest = params => ({ - type: REQUEST_USER_DATA.MAKE_REQUEST, +export const fetchUserAction = params => ({ + type: FETCH_USER_DATA.request, params }) diff --git a/packages/presentation/src/feature/userDetail/reducer.ts b/packages/presentation/src/feature/userDetail/reducer.ts index 857cef4..dfda3c9 100644 --- a/packages/presentation/src/feature/userDetail/reducer.ts +++ b/packages/presentation/src/feature/userDetail/reducer.ts @@ -1,17 +1,17 @@ import { Resource } from '../../presentation' -import { REQUEST_USER_DATA } from './action' +import { FETCH_USER_DATA } from './action' -const UserDataRequestReduceer = (initialState = Resource.none, action) => { +const fetchUserReducer = (initialState = Resource.none, action) => { switch (action.type) { - case REQUEST_USER_DATA.MAKE_REQUEST: + case FETCH_USER_DATA.request: return Resource.loading() - case REQUEST_USER_DATA.REQUEST_USER_DATA_SUCCESS: + case FETCH_USER_DATA.success: return Resource.success({ data: action }) - case REQUEST_USER_DATA.REQUEST_USER_DATA_FAILURE: + case FETCH_USER_DATA.failure: return Resource.error({ error: 'User Not logged in' }) @@ -19,4 +19,4 @@ const UserDataRequestReduceer = (initialState = Resource.none, action) => { return initialState } } -export default UserDataRequestReduceer +export default fetchUserReducer diff --git a/packages/presentation/src/feature/userDetail/saga.ts b/packages/presentation/src/feature/userDetail/saga.ts index 9ea60b1..8e144b7 100644 --- a/packages/presentation/src/feature/userDetail/saga.ts +++ b/packages/presentation/src/feature/userDetail/saga.ts @@ -1,18 +1,18 @@ -import { UserDetailsUseCaseParams } from './../../../../domain/src/usecases/user_details_usecase' import { DomainModule } from 'domain-layer/src/di/domain_module' import { Obsidian } from 'di' import { call, put } from 'redux-saga/effects' import React from 'react' -import { REQUEST_USER_DATA } from './action' +import { FETCH_USER_DATA } from './action' +import { FetchUserDataUseCaseParams } from 'packages/domain/src/domain' -function* UserDataRequestSaga(action) { +function* fetchUserSaga(action) { try { const data = yield Obsidian.obtain(DomainModule) - .provideUserDetailsUseCase() - .execute(new UserDetailsUseCaseParams({ email: action.params.email })) - yield put({ type: REQUEST_USER_DATA.REQUEST_USER_DATA_SUCCESS, payload: data }) + .provideUserDataUseCase() + .execute(new FetchUserDataUseCaseParams({ email: action.params.email })) + yield put({ type: FETCH_USER_DATA.success, payload: data }) } catch (e) { console.log(e) } } -export default UserDataRequestSaga +export default fetchUserSaga diff --git a/packages/presentation/src/feature/userpresent/action.ts b/packages/presentation/src/feature/userpresent/action.ts new file mode 100644 index 0000000..9837237 --- /dev/null +++ b/packages/presentation/src/feature/userpresent/action.ts @@ -0,0 +1,10 @@ +export enum FETCH_USER_EXISTS { + request = 'FETCH_USER_EXISTS_REQUEST', + success = 'FETCH_USER_EXISTS_SUCCESS', + failure = 'FETCH_USER_EXISTS_FAILURE' +} + +export const fetchUserExistsAction = params => ({ + type: FETCH_USER_EXISTS.request, + params +}) diff --git a/packages/presentation/src/feature/userpresent/reducer.ts b/packages/presentation/src/feature/userpresent/reducer.ts new file mode 100644 index 0000000..fb55b68 --- /dev/null +++ b/packages/presentation/src/feature/userpresent/reducer.ts @@ -0,0 +1,19 @@ +import { Resource } from '../../presentation' +import { FETCH_USER_EXISTS } from './action' + +const fetchUserExistsReducer = (initialState = Resource.none, action) => { + switch (action.type) { + case FETCH_USER_EXISTS.success: + return Resource.success({ + data: action + }) + + case FETCH_USER_EXISTS.failure: + return Resource.error({ + error: 'User Not logged in' + }) + default: + return initialState + } +} +export default fetchUserExistsReducer diff --git a/packages/presentation/src/feature/userpresent/saga.ts b/packages/presentation/src/feature/userpresent/saga.ts new file mode 100644 index 0000000..ca26bae --- /dev/null +++ b/packages/presentation/src/feature/userpresent/saga.ts @@ -0,0 +1,18 @@ +import { DomainModule } from 'domain-layer/src/di/domain_module' +import { Obsidian } from 'di' +import { call, put } from 'redux-saga/effects' +import React from 'react' +import { FETCH_USER_EXISTS } from './action' +import { FetchUserExistsUseCaseParams } from 'packages/domain/src/domain' + +function* fetchUserExistsSaga(action) { + try { + const data = yield Obsidian.obtain(DomainModule) + .provideUserExistsUseCase() + .execute(new FetchUserExistsUseCaseParams({ email: '' })) + yield put({ type: FETCH_USER_EXISTS.success, payload: data }) + } catch (e) { + console.log(e) + } +} +export default fetchUserExistsSaga diff --git a/packages/presentation/src/presentation.ts b/packages/presentation/src/presentation.ts index 6871dba..5b03721 100644 --- a/packages/presentation/src/presentation.ts +++ b/packages/presentation/src/presentation.ts @@ -1,6 +1,8 @@ +import { fetchUserExistsAction } from './feature/userpresent/action' +import { fetchUserAction } from './feature/userDetail/action' +import { loginAction } from './feature/login/actions' import { Resource } from './utils/resource' import store from './feature/store' import { Status } from './utils/status' -import { userRequest } from './feature/login/actions' -import { userDataRequest } from './feature/userDetail/action' -export { store, Status, Resource, userRequest, userDataRequest } + +export { store, Status, Resource, loginAction, fetchUserAction, fetchUserExistsAction } diff --git a/packages/presentation/src/utils/rootSaga.ts b/packages/presentation/src/utils/rootSaga.ts index 6768594..10fa4ff 100644 --- a/packages/presentation/src/utils/rootSaga.ts +++ b/packages/presentation/src/utils/rootSaga.ts @@ -1,10 +1,13 @@ import { takeLatest } from '@redux-saga/core/effects' -import { REQUEST_USER } from '../feature/login/actions' -import getUserSaga from '../feature/login/saga' -import { REQUEST_USER_DATA } from '../feature/userDetail/action' -import UserDataRequestSaga from '../feature/userDetail/saga' +import { LOGIN } from '../feature/login/actions' +import loginSaga from '../feature/login/saga' +import { FETCH_USER_DATA } from '../feature/userDetail/action' +import fetchUserSaga from '../feature/userDetail/saga' +import { FETCH_USER_EXISTS } from '../feature/userpresent/action' +import fetchUserExistsSaga from '../feature/userpresent/saga' export default function* rootSaga() { - yield takeLatest(REQUEST_USER.MAKE_REQUEST, getUserSaga) - yield takeLatest(REQUEST_USER_DATA.MAKE_REQUEST, UserDataRequestSaga) + yield takeLatest(LOGIN.request, loginSaga) + yield takeLatest(FETCH_USER_DATA.request, fetchUserSaga) + yield takeLatest(FETCH_USER_EXISTS.request, fetchUserExistsSaga) }