🧺

TypeScriptのリポジトリレイヤで使用している雛形

2021/10/10に公開

APIからfetchしてデータを取得したりする際に、リポジトリレイヤとして使っている雛形をこの記事に残します。

ちなみに、この記事ではFirebaseのFireStoreを使用する前提で作成していますが、メソッド内の処理は適宜変更できるような構成になっています。

あと、trycatchはこのリポジトリレイヤを呼び出すところで使うといいかもです。

repositories/example.ts
import firebase, { db } from 'common/firebase'

const Example = db.collection('examples')

type TExample = {
  id: number
  created_at: firebase.firestore.Timestamp
}

/**
 * all get
 */
export const get = async (): Promise<TExample[]> => {
  const res: TExample[] = []
  
  const datas = await Example.get()
  datas.docs.forEach((doc) => {
    const example: TExample = doc as TExample
    res.push(example)
  })
  
  return res
}

/**
 * create
 */
export const store = async (example: TExample): Promise<void> => {
  await Example.doc(example.id).set(example)
}

/**
 * update
 */
export const update = async (example: TExample): Promise<void> => {
  example.updated_at = firebase.firestore.Timestamp.now()

  await Example.doc(example.id).update(example)
}

/**
 * delete
 */
export const remove = async (example: TExample): Promise<void> => {
  await Example.doc(example.id).delete()
}

FirebaseV9系でないのは悪しからず😓

Discussion