AyumuOgasawara / receipt-scanner

レシートの写真から家計簿を生成してくれるアプリ
0 stars 0 forks source link

ダミーデータを作成する #40

Open AyumuOgasawara opened 4 days ago

AyumuOgasawara commented 4 days ago

概要

fakerでダミーデータを作成する。

AyumuOgasawara commented 4 days ago

prisma は クライアントが複数つくられるとエラーになるため、以下ように実装する。 warn(prisma-client) There are already 10 instances of Prisma Client actively running.

参考:https://www.prisma.io/docs/orm/more/help-and-troubleshooting/help-articles/nextjs-prisma-client-dev-practices

import { PrismaClient } from '@prisma/client'

const prismaClientSingleton = () => {
  return new PrismaClient()
}

declare const globalThis: {
  prismaGlobal: ReturnType<typeof prismaClientSingleton>;
} & typeof global;

const prisma = globalThis.prismaGlobal ?? prismaClientSingleton()

export default prisma

if (process.env.NODE_ENV !== 'production') globalThis.prismaGlobal = prisma
AyumuOgasawara commented 3 days ago

ただ、seedingをする際には、nextのアプリとしてではないため、上記ではなく、書き用用に、Prisma Clientを呼び出す。 import { PrismaClient } from '@prisma/client'

AyumuOgasawara commented 3 days ago

予算も作成することがめんどくさかったため、seedingで作成する。

AyumuOgasawara commented 3 days ago

TypeScriptのDateコンストラクタは、月を0始まり(0が1月、11が12月)で考えるため、9月を指定したい場合は、8として指定する必要があります。

よって、2024/9を作成する場合は、

new Date(2024, 8)
AyumuOgasawara commented 3 days ago

https://github.com/prisma/prisma/issues/5051#issuecomment-1279790199

prisma側では、登録されたものがUTCになるという場がバグがある。

以下の写真は、コード上では、2024/08/01-01:00と2024/09/01-01:00を指定したもの

スクリーンショット 2024-09-27 21 54 58

コードの指定方法

// 予算の作成
    // 8月分
    for (let i = 1; i < 10; i++){
      const newBudget = await prisma.budget.create({
        data: {
          amount: parseInt(faker.finance.amount({ min: 10000, max: 30000, dec: 0 })),
          year_month: new Date(2024, 7, 1, 1),
          userId: newUser.id,
          categoryId: i,
        }
      })
      console.log(`Created newBudget ${newBudget.year_month}`);
    }

    // 9月分
    for (let i = 1; i < 10; i++){
      const newBudget = await prisma.budget.create({
        data: {
          amount: parseInt(faker.finance.amount({ min: 10000, max: 30000, dec: 0 })),
          year_month: new Date(2024, 8, 1, 1),
          userId: newUser.id,
          categoryId: i,
        }
      })
      console.log(`Created newBudget ${newBudget.year_month}`);
    }
AyumuOgasawara commented 3 days ago

ここでは、年と月が分かれば良いので、以下のように指定するようにする。濃くすれば、 UTCとの時差も考えなくて良い。

// 8月
new Date(2024, 7, 15)

// 9月
new Date(2024, 8, 15)
AyumuOgasawara commented 3 days ago

そうすることで、以下のように、8月9月のダミーデータが作成された。

スクリーンショット 2024-09-27 22 01 04