-
Notifications
You must be signed in to change notification settings - Fork 0
/
PrismaRepository.ts
105 lines (96 loc) · 2.13 KB
/
PrismaRepository.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import { PrismaClient } from '@prisma/client'
import { Item, ItemFormRequest, SearchQuery } from '@/types/item'
import { ItemRepository } from './interface'
import { ITEM_DEFAULT_DATA } from './mock'
export class PrismaItemRepository implements ItemRepository {
itemList: Item[]
client: PrismaClient
constructor() {
this.itemList = [...ITEM_DEFAULT_DATA]
this.client = new PrismaClient()
}
async findList(param: SearchQuery): Promise<Item[]> {
const { keyword, maxPrice, area } = param
const keywordContains = keyword
? {
OR: [
{
name: {
contains: keyword,
},
},
{
description: {
contains: keyword,
},
},
],
}
: {}
const maxPriceLte = maxPrice
? {
price: {
lte: maxPrice,
},
}
: {}
const areaEqual = area ? { area } : {}
const list = await this.client.item.findMany({
where: {
AND: {
...keywordContains,
...maxPriceLte,
...areaEqual,
},
},
})
return list as Item[]
}
async findItem(id: number): Promise<Item> {
const item = await this.client.item.findUnique({
where: {
id: id,
},
})
if (!item) {
return Promise.reject()
}
return item as Item
}
async addItem(param: ItemFormRequest): Promise<boolean> {
const result = await this.client.item.create({
data: {
...param,
},
})
if (!result) {
return Promise.reject()
}
return true
}
async updateItem(id: number, param: ItemFormRequest): Promise<boolean> {
const result = await this.client.item.update({
where: {
id: id,
},
data: {
...param,
},
})
if (!result) {
return Promise.reject()
}
return true
}
async deleteItem(id: number): Promise<boolean> {
const result = await this.client.item.delete({
where: {
id: id,
},
})
if (!result) {
return Promise.reject()
}
return true
}
}