Skip to content

Commit 5e39aa3

Browse files
committed
feat: refactor prisma
1 parent e20d78d commit 5e39aa3

File tree

8 files changed

+21
-77
lines changed

8 files changed

+21
-77
lines changed

apps/web/@/molecules/post-form/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Image from "next/image"
66
import Link from "next/link"
77

88
import { zodResolver } from "@hookform/resolvers/zod"
9-
import { Image as ImageType, Prisma, TPostItem } from "database"
9+
import { Prisma, TImage, TPostItem } from "database"
1010
import { Upload as UploadIcon, X } from "lucide-react"
1111
import { useSession } from "next-auth/react"
1212
import { useTranslations } from "next-intl"
@@ -28,7 +28,7 @@ const PostForm = ({ post: postData }: { post?: TPostItem }) => {
2828

2929
const t = useTranslations()
3030
const session = useSession()
31-
const [image, setImage] = useState<ImageType | null>(postData?.Image)
31+
const [image, setImage] = useState<TImage | null>(postData?.Image)
3232

3333
const userId = session?.data?.user?.id
3434

packages/database/src/images/queries.ts

Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
11
import { Image, Prisma } from "@prisma/client"
22

33
import prisma from "../prisma"
4-
import { DEFAULT_LIMIT, DEFAULT_PAGE, IActionReturn, IGetListResponse } from "../shared/type"
5-
import { imageSelect, TImageItem } from "./selects"
4+
import { DEFAULT_LIMIT, DEFAULT_PAGE, IActionReturn } from "../shared/type"
5+
import { imageSelect, TImage } from "./selects"
66
import { IImageFilter, IListImageResponse } from "./type"
77

88
export const getImages = async (options: IImageFilter): Promise<IListImageResponse> => {
9-
const {
10-
page = DEFAULT_PAGE,
11-
limit = DEFAULT_LIMIT,
12-
userId,
13-
orderBy: orderByKey,
14-
order,
15-
search,
16-
} = options
9+
const { page = DEFAULT_PAGE, limit = DEFAULT_LIMIT, userId, order } = options
1710

1811
try {
1912
let where = {}
@@ -23,33 +16,10 @@ export const getImages = async (options: IImageFilter): Promise<IListImageRespon
2316
userId: userId,
2417
}
2518
}
26-
27-
if (search) {
28-
where = {
29-
...where,
30-
name: {
31-
contains: search,
32-
mode: "insensitive",
33-
},
34-
}
35-
}
36-
37-
let orderBy = {
38-
createdAt: Prisma.SortOrder.desc,
39-
}
40-
41-
if (orderByKey && order) {
42-
orderBy = {
43-
...orderBy,
44-
[orderByKey]: order,
45-
}
46-
}
47-
4819
const [total, data] = await Promise.all([
4920
prisma.image.count({ where }),
5021
prisma.image.findMany({
5122
where,
52-
orderBy,
5323
take: limit,
5424
skip: (page - 1) * limit,
5525
select: imageSelect,
@@ -103,8 +73,8 @@ export const getImage = async (id: string): Promise<IActionReturn<Image>> => {
10373
}
10474

10575
export const createImage = async (
106-
data: Omit<Image, "id" | "createdAt" | "updatedAt">
107-
): Promise<IActionReturn<TImageItem>> => {
76+
data: Prisma.ImageCreateInput
77+
): Promise<IActionReturn<TImage>> => {
10878
try {
10979
const image = await prisma.image.create({
11080
data,
@@ -122,8 +92,8 @@ export const createImage = async (
12292

12393
export const updateImage = async (
12494
id: string,
125-
data: Partial<Omit<Image, "id" | "createdAt" | "updatedAt">>
126-
): Promise<IActionReturn<TImageItem>> => {
95+
data: Prisma.ImageUpdateInput
96+
): Promise<IActionReturn<TImage>> => {
12797
try {
12898
const image = await prisma.image.update({
12999
where: { id },
@@ -142,7 +112,6 @@ export const updateImage = async (
142112

143113
export const deleteImage = async (id: string, userId: string): Promise<IActionReturn<Image>> => {
144114
try {
145-
// only owner can delete
146115
const deleteImage = await prisma.image.delete({
147116
where: { id, userId },
148117
})

packages/database/src/images/selects.ts

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,6 @@ export const imageSelect = {
1818
updatedAt: true,
1919
} satisfies Prisma.ImageSelect
2020

21-
const getImage = Prisma.validator<Prisma.ImageDefaultArgs>()({
22-
select: imageSelect,
23-
})
24-
25-
export type TImageItem = Prisma.ImageGetPayload<{
21+
export type TImage = Prisma.ImageGetPayload<{
2622
select: typeof imageSelect
2723
}>
28-
29-
type Color =
30-
| string
31-
| {
32-
r: number
33-
g: number
34-
b: number
35-
a: number
36-
}
37-
38-
let a: Color = "red"
39-
let a1: Color = { r: 1, g: 2, b: 3, a: 4 }
40-
let b = { r: 1 } as Color
41-
let c = { r: 1, g: 2, b: 3, a: 4 } satisfies Color
42-
let c1 = "blue" satisfies Color
43-
44-
a1.r
45-
c.r
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
import { Image } from "@prisma/client"
2-
import { IActionReturn, IGetListResponse, OrderBy } from "src/shared/type"
1+
import { Image, Prisma } from "@prisma/client"
2+
import { IActionReturn, IGetListResponse } from "src/shared/type"
33

44
export type ImageOrderBys = "createdAt" | "name"
55

66
export interface IImageFilter {
77
page?: number
88
limit?: number
99
userId?: string
10-
orderBy?: ImageOrderBys
11-
order?: OrderBy
12-
search?: string
10+
where?: Prisma.ImageWhereInput
11+
order?: Prisma.ImageOrderByRelevanceInput
1312
}
1413

1514
export interface IListImageResponse extends IActionReturn<IGetListResponse<Image>> {}

packages/database/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { createImage, deleteImage, getImage, getImages, updateImage } from "./images/queries"
2+
import { TImage } from "./images/selects"
23
import { IImageFilter, IListImageResponse, ImageOrderBys } from "./images/type"
34
import { createPost, getPost, getPosts, updatePost, updatePostStatus } from "./posts/queries"
45
import { TCreatePostInput, TPostActionType, TPostItem } from "./posts/selects"
@@ -9,7 +10,6 @@ import {
910
DEFAULT_PAGE,
1011
IActionReturn,
1112
IGetListResponse,
12-
OrderBy,
1313
PeriodValues,
1414
} from "./shared/type"
1515
import { createTag, getTag, getTags, getTopTags } from "./tags/queries"
@@ -56,10 +56,10 @@ export type {
5656
IImageFilter,
5757
IListImageResponse,
5858
ImageOrderBys,
59+
TImage,
5960

6061
// Shared
6162
IActionReturn,
62-
OrderBy,
6363
IGetListResponse,
6464
PeriodValues,
6565
DEFAULT_LIMIT,

packages/database/src/posts/queries.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,13 +157,15 @@ export const getPosts = async ({ searchParams }: TGetPostsRequest): Promise<TGet
157157
total: total,
158158
page: Number(page),
159159
limit: Number(limit),
160+
totalPages: Math.ceil(total / Number(limit)),
160161
},
161162
}
162163
} catch (error) {
163164
return {
164165
data: {
165166
data: [],
166167
total: 0,
168+
totalPages: 0,
167169
page: Number(page),
168170
limit: Number(limit),
169171
},

packages/database/src/posts/selects.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,9 @@ export const postSelect = {
5050
},
5151
} satisfies Prisma.PostSelect
5252

53-
const getPostItem = Prisma.validator<Prisma.PostDefaultArgs>()({
54-
select: postSelect,
55-
})
56-
57-
export type TPostItem = Prisma.PostGetPayload<typeof getPostItem>
53+
export type TPostItem = Prisma.PostGetPayload<{
54+
select: typeof postSelect
55+
}>
5856

5957
export type TCreatePostInput = Prisma.PostCreateInput & {
6058
tags?: {

packages/database/src/shared/type.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ export interface IActionReturn<T> {
1919
error?: any
2020
}
2121

22-
export type OrderBy = "asc" | "desc"
23-
2422
export interface IGetListResponse<T> {
2523
data: T[]
2624
total: number

0 commit comments

Comments
 (0)