Skip to content

Commit f0f2a38

Browse files
committed
fix: update query builder
1 parent 5ea65b0 commit f0f2a38

6 files changed

Lines changed: 42 additions & 8 deletions

File tree

src/app/handler/role.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ const service = new RoleService()
99
route.get(
1010
'/',
1111
asyncHandler(async (req: Request, res: Response) => {
12-
const records = await service.find()
12+
const { page, pageSize, filtered, sorted } = req.getQuery()
13+
const records = await service.find({ page, pageSize, filtered, sorted })
1314
const httpResponse = HttpResponse.get({ data: records })
1415
res.status(200).json(httpResponse)
1516
})

src/app/handler/session.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ const service = new SessionService()
99
route.get(
1010
'/',
1111
asyncHandler(async (req: Request, res: Response) => {
12-
const records = await service.find()
12+
const { page, pageSize, filtered, sorted } = req.getQuery()
13+
const records = await service.find({ page, pageSize, filtered, sorted })
1314
const httpResponse = HttpResponse.get({ data: records })
1415
res.status(200).json(httpResponse)
1516
})

src/app/handler/upload.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ const service = new UploadService()
99
route.get(
1010
'/',
1111
asyncHandler(async (req: Request, res: Response) => {
12-
const records = await service.find()
12+
const { page, pageSize, filtered, sorted } = req.getQuery()
13+
const records = await service.find({ page, pageSize, filtered, sorted })
1314
const httpResponse = HttpResponse.get({ data: records })
1415
res.status(200).json(httpResponse)
1516
})

src/app/handler/user.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ const service = new UserService()
99
route.get(
1010
'/',
1111
asyncHandler(async (req: Request, res: Response) => {
12-
const records = await service.find()
12+
const { page, pageSize, filtered, sorted } = req.getQuery()
13+
const records = await service.find({ page, pageSize, filtered, sorted })
1314
const httpResponse = HttpResponse.get({ data: records })
1415
res.status(200).json(httpResponse)
1516
})

src/app/service/base.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import _ from 'lodash'
22
import { FindOneOptions, In, ObjectLiteral, Repository } from 'typeorm'
33
import { z } from 'zod'
44
import ErrorResponse from '~/lib/http/errors'
5+
import { QueryBuilder } from '~/lib/query-builder'
56
import { validate } from '~/lib/validate'
67

78
type IProps<T extends ObjectLiteral> = {
@@ -10,6 +11,18 @@ type IProps<T extends ObjectLiteral> = {
1011
model: string
1112
}
1213

14+
type FindParams = {
15+
page: number
16+
pageSize: number
17+
filtered: any
18+
sorted: any
19+
}
20+
21+
type DtoFindAll<T extends ObjectLiteral> = {
22+
data: T[]
23+
total: number
24+
}
25+
1326
export default class BaseService<T extends ObjectLiteral> {
1427
public repository: Repository<T>
1528
private _schema: z.ZodType<any>
@@ -24,8 +37,20 @@ export default class BaseService<T extends ObjectLiteral> {
2437
/**
2538
* Find all
2639
*/
27-
async find(): Promise<T[]> {
28-
return this.repository.find()
40+
async find({ page, pageSize, filtered = [], sorted = [] }: FindParams): Promise<DtoFindAll<T>> {
41+
const query = this.repository.createQueryBuilder(this._model)
42+
const newQuery = QueryBuilder({
43+
params: {
44+
query,
45+
model: this._model,
46+
reqQuery: { page, pageSize, filtered, sorted },
47+
},
48+
})
49+
50+
const data = await newQuery.getMany()
51+
const total = await newQuery.getCount()
52+
53+
return { data, total }
2954
}
3055

3156
/**

src/lib/query-builder/index.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import _ from 'lodash'
2-
import { ObjectLiteral } from 'typeorm'
2+
import { ObjectLiteral, SelectQueryBuilder } from 'typeorm'
33
import { validate } from '../validate'
44
import { applyFilter } from './filtered'
55
import { applyPagination } from './pagination'
@@ -9,7 +9,10 @@ import { QueryBuilderParams } from './types'
99
/**
1010
* Query builder for TypeORM
1111
*/
12-
export function QueryBuilder<T extends ObjectLiteral>({ params, options }: QueryBuilderParams<T>) {
12+
export function QueryBuilder<T extends ObjectLiteral>({
13+
params,
14+
options,
15+
}: QueryBuilderParams<T>): SelectQueryBuilder<T> {
1316
const { query, model, reqQuery, options: opt } = params
1417

1518
const queryPage = _.get(reqQuery, 'page', 1)
@@ -35,4 +38,6 @@ export function QueryBuilder<T extends ObjectLiteral>({ params, options }: Query
3538
pageSize: validate.number(queryPageSize),
3639
limit,
3740
})
41+
42+
return query
3843
}

0 commit comments

Comments
 (0)