Skip to content

Commit

Permalink
add: UserBLoCからfirebaseの依存を取り除いた
Browse files Browse the repository at this point in the history
  • Loading branch information
kahirokunn committed Feb 2, 2019
1 parent 0e39506 commit c31a02e
Show file tree
Hide file tree
Showing 19 changed files with 106 additions and 72 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import {
IBook,
IRegistrationBook,
IRegistrationParams,
} from './InOutType'

export abstract class IBookApplicationService {
public abstract create(params: IRegistrationBook): Promise<void>
public abstract create(params: IRegistrationParams): Promise<void>
public abstract update(book: IBook): Promise<void>
public abstract delete(id: Identifier): Promise<void>
}
24 changes: 21 additions & 3 deletions src/boundary/bookApplicationService/InOutType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@ export enum Owner {
OTHER = 'OTHER',
}

export type BookType = 'Ebook' | 'PhysicalBook'
export enum BookType {
PHYSICAL_BOOK = 'PhysicalBook',
E_BOOK = 'Ebook',
}
export type Evaluation = 1 | 2 | 3 | 4 | 5
export enum PurchasedLocation {
ONLINE = 'ONLINE',
ONLINE = 'ONLcINE',
OFFLINE = 'OFFLINE',
}

Expand All @@ -31,4 +34,19 @@ export type IBook = {
updatedAt: Date,
}

export type IRegistrationBook = IBook & {id?: Identifier}
export type IRegistrationParams = {
userId: Identifier,
title: string,
purchasedLocation: PurchasedLocation,
purchasedDatetime: Date,
description: string,
type: BookType,
price: number,
owner: Owner,

// 任意
coverImageFilePath: string | null,
purchasedUrl: string | null,
evaluation: Evaluation | null,
receiptImageFilePath: string | null,
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IBookApplicationService } from '@/boundary/bookApplicationService/IBookApplicationService'
import {
IBook,
IRegistrationBook,
IRegistrationParams,
} from '@/boundary/bookApplicationService/InOutType'
import { IBookRepository } from '@/domain/model/book/IBookRepository'
import { inject, injectable } from 'inversify'
Expand All @@ -14,7 +14,7 @@ export class BookApplicationService implements IBookApplicationService {
) {
}

public create(params: IRegistrationBook): Promise<void> {
public create(params: IRegistrationParams): Promise<void> {
return this.bookRepository.create(params)
}
public update(book: IBook): Promise<void> {
Expand Down
4 changes: 2 additions & 2 deletions src/domain/model/book/IBookRepository.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import {
IBook,
IRegistrationBook,
IRegistrationParams,
} from '@/boundary/bookApplicationService/InOutType'

export abstract class IBookRepository {
public abstract create(params: IRegistrationBook): Promise<void>
public abstract create(params: IRegistrationParams): Promise<void>
public abstract update(book: IBook): Promise<void>
public abstract delete(id: Identifier): Promise<void>
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { IUser } from '@/boundary/userApplicationService/InOutType'
import { User } from '@/models/user'
import { IUserBLoC } from '@/query/user/IUserBLoC'
import { IUserObservableRepository } from '@/query/observableRepository/user/IUserObservableRepository'
import { injectable } from 'inversify'
import { docData } from 'rxfire/firestore'
import { Observable } from 'rxjs'
Expand All @@ -18,18 +18,11 @@ function userMapper(userId: Identifier, user: any): IUser {
}

@injectable()
export class UserBLoC implements IUserBLoC {
private observables: {[id: string]: Observable<IUser>} = {}

public execute(id: Identifier) {
if (id in this.observables) {
return this.observables[id]
}
export class UserObservableRepository implements IUserObservableRepository {
public getUser(id: Identifier): Observable<IUser> {
const docRef = User.getReference().doc(id)

this.observables[id] = docData(docRef)
return docData(docRef)
.pipe(filter((data) => data && Object.keys(data).length > 0))
.pipe(map((data) => userMapper(id, data)))
return this.observables[id]
}
}
8 changes: 5 additions & 3 deletions src/inversify/firebaseProviders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,18 @@ import { FirebaseAuthDomainService } from '@/firebaseImpl/domain/auth/FirebaseAu
import { FirebaseAuthRepository } from '@/firebaseImpl/domain/auth/FirebaseAuthRepository'
import { FirebaseBookRepository } from '@/firebaseImpl/domain/book/FirebaseBookRepository'
import { FirebaseUserRepository } from '@/firebaseImpl/domain/user/FirebaseUserRepository'
import { UserBLoC } from '@/firebaseImpl/query/UserBLoC'
import { IUserBLoC } from '@/query/user/IUserBLoC'
import { UserObservableRepository } from '@/firebaseImpl/query/observableRepository/UserObservableRepository'
import { UserBLoC } from '@/query/bloc/user/UserBLoC'
import { IUserObservableRepository } from '@/query/observableRepository/user/IUserObservableRepository'
import { Container } from 'inversify'

export function firebaseProviders(container: Container): void {
// core
container.bind(ILogger).to(ConsoleLogger).inSingletonScope()

// query
container.bind(IUserBLoC).to(UserBLoC).inSingletonScope()
container.bind(UserBLoC).to(UserBLoC).inSingletonScope()
container.bind(IUserObservableRepository).to(UserObservableRepository).inSingletonScope()

// application
container.bind(IUserApplicationService).to(UserApplicationService).inSingletonScope()
Expand Down
10 changes: 5 additions & 5 deletions src/inversify/rejectStubProviders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,24 @@ import {
} from '@/boundary/userApplicationService/IUserApplicationService'
import { ILogger } from '@/drivers/ILogger'
import { BlankLogger } from '@/drivers/logger/BlankLogger'
import { IUserBLoC } from '@/query/user/IUserBLoC'
import { UserBLoC } from '@/query/bloc/user/UserBLoC'
import { IUserObservableRepository } from '@/query/observableRepository/user/IUserObservableRepository'
import {
AuthApplicationService,
} from '@/stub/domain/app/authApplicationService/RejectService'
import {
UserApplicationService,
} from '@/stub/domain/app/userApplicationService/RejectService'
import {
UserBLoC,
} from '@/stub/query/UserBLoC/RejectBLoC'
import { UserObservableRepository } from '@/stub/query/observableRepository/UserObservableRepository/RejectRepository'
import { Container } from 'inversify'

export function stubProviders(container: Container): void {
// core
container.bind(ILogger).to(BlankLogger).inSingletonScope()

// query
container.bind(IUserBLoC).to(UserBLoC).inSingletonScope()
container.bind(UserBLoC).to(UserBLoC).inSingletonScope()
container.bind(IUserObservableRepository).to(UserObservableRepository).inSingletonScope()

// application
container.bind(IUserApplicationService).to(UserApplicationService).inSingletonScope()
Expand Down
8 changes: 5 additions & 3 deletions src/inversify/resolveStubProviders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,20 @@ import {
} from '@/boundary/userApplicationService/IUserApplicationService'
import { ILogger } from '@/drivers/ILogger'
import { BlankLogger } from '@/drivers/logger/BlankLogger'
import { IUserBLoC } from '@/query/user/IUserBLoC'
import { UserBLoC } from '@/query/bloc/user/UserBLoC'
import { IUserObservableRepository } from '@/query/observableRepository/user/IUserObservableRepository'
import { AuthApplicationService } from '@/stub/domain/app/authApplicationService/ResolveService'
import { UserApplicationService } from '@/stub/domain/app/userApplicationService/ResolveService'
import { UserBLoC } from '@/stub/query/UserBLoC/ResolveBLoC'
import { UserObservableRepository } from '@/stub/query/observableRepository/UserObservableRepository/ResolveRepository'
import { Container } from 'inversify'

export function stubProviders(container: Container): void {
// core
container.bind(ILogger).to(BlankLogger).inSingletonScope()

// query
container.bind(IUserBLoC).to(UserBLoC).inSingletonScope()
container.bind(UserBLoC).to(UserBLoC).inSingletonScope()
container.bind(IUserObservableRepository).to(UserObservableRepository).inSingletonScope()

// application
container.bind(IUserApplicationService).to(UserApplicationService).inSingletonScope()
Expand Down
22 changes: 22 additions & 0 deletions src/query/bloc/user/UserBLoC.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { IUser } from '@/boundary/userApplicationService/InOutType'
import { IUserObservableRepository } from '@/query/observableRepository/user/IUserObservableRepository'
import { inject, injectable } from 'inversify'
import { Observable } from 'rxjs'

@injectable()
export class UserBLoC {
private observables: {[id: string]: Observable<IUser>} = {}

constructor(
@inject(IUserObservableRepository)
private readonly userObservableRepository: IUserObservableRepository,
) {}

public userObservable(id: Identifier) {
if (id in this.observables) {
return this.observables[id]
}
this.observables[id] = this.userObservableRepository.getUser(id)
return this.observables[id]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { IUser } from '@/boundary/userApplicationService/InOutType'
import { Observable } from 'rxjs'

export abstract class IUserObservableRepository {
public abstract getUser(id: Identifier): Observable<IUser>
}
6 changes: 0 additions & 6 deletions src/query/user/IUserBLoC.ts

This file was deleted.

8 changes: 3 additions & 5 deletions src/serviceLocator/UserBLoC.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { serviceContainer } from '@/inversify/config'
import {
IUserBLoC,
} from '@/query/user/IUserBLoC'
import { UserBLoC as UserBLoCImpl } from '@/query/bloc/user/UserBLoC'

export class UserBLoC {
public static getInstance(): IUserBLoC {
return serviceContainer.get(IUserBLoC)
public static getInstance(): UserBLoCImpl {
return serviceContainer.get(UserBLoCImpl)
}
}
5 changes: 4 additions & 1 deletion src/store/containers/index.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,23 @@
import changeUserProfileForm from './changeUserProfileForm'
// import createBookForm from './createBookForm'
import loginForm from './loginForm'
import navigation from './navigation'
import userRegistrationForm from './userRegistrationForm'

export type ContainersState = {
changeUserProfileForm: ReturnType<typeof changeUserProfileForm.state>,
// createBookForm: ReturnType<typeof createBookForm.state>,
loginForm: ReturnType<typeof loginForm.state>,
navigation: ReturnType<typeof navigation.state>,
userRegistrationForm: ReturnType<typeof userRegistrationForm.state>,
}

export default {
modules: {
changeUserProfileForm,
// createBookForm,
loginForm,
navigation,
userRegistrationForm,
changeUserProfileForm,
},
}
2 changes: 1 addition & 1 deletion src/store/middleware/auth/action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ import { actionCreatorFactory } from 'typescript-fsa-vuex'
export const actionCreator = actionCreatorFactory('middleware/auth')

export const userLogin = actionCreator('USER_LOGIN')
export const unsubscribeUserData = actionCreator('UNSUBSCRIBE_USER')
export const deposeUser = actionCreator('DEPOSE_USER')
export const successUserLogin = actionCreator<{authInfo: IAuthInfo}>('SUCCESS_USER_LOGIN')
6 changes: 3 additions & 3 deletions src/store/middleware/auth/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import {
} from 'typescript-fsa-vuex'
import {
actionCreator,
deposeUser,
successUserLogin,
unsubscribeUserData,
userLogin,
} from './action'

Expand Down Expand Up @@ -52,7 +52,7 @@ const mutations = combineMutation<State>(
state.isLoggedIn = false
state.user = initialState().user
}),
mutation(unsubscribeUserData, (state) => {
mutation(deposeUser, (state) => {
state.subscriptions.map((subscription) => subscription.unsubscribe())
}),
mutation(receiveUserFromStream, (state, action) => {
Expand Down Expand Up @@ -81,7 +81,7 @@ const actions = combineAction<State, any>(
commit(beforeSubscribe({authInfo}))
const subscription = UserBLoC
.getInstance()
.execute(authInfo.userId)
.userObservable(authInfo.userId)
.subscribe((user) => commit(receiveUserFromStream({user})))
commit(startedSubscribe({subscription}))
}),
Expand Down
12 changes: 0 additions & 12 deletions src/stub/query/UserBLoC/RejectBLoC.ts

This file was deleted.

13 changes: 0 additions & 13 deletions src/stub/query/UserBLoC/ResolveBLoC.ts

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { IUserObservableRepository } from '@/query/observableRepository/user/IUserObservableRepository'
import { injectable } from 'inversify'
import { Observable } from 'rxjs'

@injectable()
export class UserObservableRepository implements IUserObservableRepository {
public getUser() {
return Observable.throw(new Error())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { IUserObservableRepository } from '@/query/observableRepository/user/IUserObservableRepository'
import { userFactory } from '@/stub/domain/factory/IUser'
import { injectable } from 'inversify'
import { from } from 'rxjs'

@injectable()
export class UserObservableRepository implements IUserObservableRepository {
public getUser(id: Identifier) {
return from([userFactory({id})])
}
}

0 comments on commit c31a02e

Please sign in to comment.