Skip to content

Commit

Permalink
feat: adopt Prisma Accelerate
Browse files Browse the repository at this point in the history
  • Loading branch information
windchime-yk committed Nov 16, 2024
1 parent 7c67589 commit f15dc33
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 29 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ node_modules/
# env
.env
.env.production
.dev.vars

# logs
logs/
Expand Down
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Learn Prisma feat. TiDB Serverless
<!-- ![Status: ToDo](https://flat.badgen.net/static/Status/ToDo/red) -->
![Status: In Progress](https://flat.badgen.net/static/Status/In%20Progress/yellow)
<!-- ![Status: Done](https://flat.badgen.net/static/Status/Done/green) -->
<!-- ![Status: In Progress](https://flat.badgen.net/static/Status/In%20Progress/yellow) -->
![Status: Done](https://flat.badgen.net/static/Status/Done/green)
<!-- ![Status: Deprecated](https://flat.badgen.net/static/Status/Deprecated/black) -->

## 本リポジトリの目的
Expand All @@ -14,10 +14,11 @@ TiDB ServerlessとPrismaツール群を利用して、DB周りを楽したい
- [x] シネログの新しいスキーマを反映し、移行ファイルを生成
- [x] HonoでREST APIを構築し、CRUDを構築
- [x] Remixでアプリケーションを構築し、REST APIを利用
- [ ] Prisma Accelerateを適用
- [x] Prisma Accelerateを適用

## 参考資料
- [cinelog/db at main · windchime-yk/cinelog](https://github.com/windchime-yk/cinelog/tree/main/db)
- [Prisma | Next-generation ORM for Node.js & TypeScript](https://www.prisma.io/orm)
- [Prisma Accelerate | Make your database queries faster](https://www.prisma.io/data-platform/accelerate)
- [Connect to TiDB with Prisma | TiDB Docs](https://docs.pingcap.com/tidbcloud/dev-guide-sample-application-nodejs-prisma)
- [Getting started with Prisma Accelerate | Prisma Documentation](https://www.prisma.io/docs/accelerate/getting-started)
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"check": "biome check --unsafe .",
"format": "pnpm check --write",
"prepare": "pnpm db:generate",
"db:generate": "prisma generate",
"db:generate": "prisma generate --no-engine",
"db:migrate": "prisma migrate dev --name init",
"db:seed": "tsx prisma/seed.ts"
},
Expand Down Expand Up @@ -43,6 +43,7 @@
},
"dependencies": {
"@prisma/client": "^5.21.1",
"@prisma/extension-accelerate": "^1.2.1",
"@remix-run/cloudflare": "^2.13.1",
"@remix-run/cloudflare-pages": "^2.13.1",
"@remix-run/react": "^2.13.1",
Expand Down
13 changes: 13 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 4 additions & 7 deletions prisma/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import { PrismaClient } from "@prisma/client";
import { PrismaTiDBCloud } from "@tidbcloud/prisma-adapter";
import { connect } from "@tidbcloud/serverless";
import { PrismaClient } from "@prisma/client/edge";
import { withAccelerate } from "@prisma/extension-accelerate";

export const setupPrisma = (url: string) => {
const connection = connect({ url });
const adapter = new PrismaTiDBCloud(connection);
return new PrismaClient({ adapter });
export const setupPrisma = () => {
return new PrismaClient().$extends(withAccelerate());
};
8 changes: 4 additions & 4 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init

generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
provider = "prisma-client-js"
}

datasource db {
provider = "mysql"
url = env("DATABASE_URL")
provider = "mysql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_DATABASE_URL")
}

model Movie {
Expand Down
26 changes: 16 additions & 10 deletions server/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ulid } from "@std/ulid";
import { Hono } from "hono";
import { setupPrisma } from "../prisma";
const app = new Hono<{ Bindings: { DATABASE_URL: string } }>();
const app = new Hono();

const BASE_PATH = "/api";

Expand All @@ -11,7 +11,7 @@ const routes = app
})
.get(`${BASE_PATH}/movie/:id`, async (c) => {
const id = c.req.param("id");
const prisma = setupPrisma(c.env.DATABASE_URL);
const prisma = setupPrisma();

const movie = await prisma.movie.findFirst({
where: {
Expand Down Expand Up @@ -39,6 +39,9 @@ const routes = app
},
},
},
cacheStrategy: {
ttl: 60,
},
});

if (!movie) {
Expand All @@ -48,7 +51,7 @@ const routes = app
return c.json(movie);
})
.get(`${BASE_PATH}/movies`, async (c) => {
const prisma = setupPrisma(c.env.DATABASE_URL);
const prisma = setupPrisma();

const movies = await prisma.movie.findMany({
include: {
Expand All @@ -73,6 +76,9 @@ const routes = app
},
},
},
cacheStrategy: {
ttl: 60,
},
});

return c.json(movies);
Expand All @@ -91,7 +97,7 @@ const routes = app
rating: number | null;
comment: string | null;
}>();
const prisma = setupPrisma(c.env.DATABASE_URL);
const prisma = setupPrisma();

const movie = await prisma.movie.create({
data: {
Expand All @@ -114,7 +120,7 @@ const routes = app
})
.patch(`${BASE_PATH}/movie/:id`, async (c) => {
const id = c.req.param("id");
const prisma = setupPrisma(c.env.DATABASE_URL);
const prisma = setupPrisma();

const sorceMovie = await prisma.movie.findFirst({
where: {
Expand All @@ -136,7 +142,7 @@ const routes = app
})
.delete(`${BASE_PATH}/movie/:id`, async (c) => {
const id = c.req.param("id");
const prisma = setupPrisma(c.env.DATABASE_URL);
const prisma = setupPrisma();

const sorceMovie = await prisma.movie.findFirst({
where: {
Expand All @@ -154,28 +160,28 @@ const routes = app
return c.json(movie);
})
.get(`${BASE_PATH}/theaters`, async (c) => {
const prisma = setupPrisma(c.env.DATABASE_URL);
const prisma = setupPrisma();

const theaters = await prisma.theater.findMany();

return c.json(theaters);
})
.get(`${BASE_PATH}/creaters_countries`, async (c) => {
const prisma = setupPrisma(c.env.DATABASE_URL);
const prisma = setupPrisma();

const createrCountries = await prisma.createrCountry.findMany();

return c.json(createrCountries);
})
.get(`${BASE_PATH}/movie_formats`, async (c) => {
const prisma = setupPrisma(c.env.DATABASE_URL);
const prisma = setupPrisma();

const movieFormats = await prisma.movieFormat.findMany();

return c.json(movieFormats);
})
.get(`${BASE_PATH}/screening_formats`, async (c) => {
const prisma = setupPrisma(c.env.DATABASE_URL);
const prisma = setupPrisma();

const screeningFormats = await prisma.screeningFormat.findMany();

Expand Down
5 changes: 2 additions & 3 deletions worker-configuration.d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
// Generated by Wrangler by running `wrangler types`

interface Env {
DATABASE_URL: string;
}
// biome-ignore lint/complexity/noBannedTypes: 自動生成ファイルのため
type Env = {};

0 comments on commit f15dc33

Please sign in to comment.