bradb 1.2.4 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/controller.d.ts +18 -7
- package/dist/src/controller.js +19 -12
- package/dist/src/standard.d.ts +1 -1
- package/dist/src/standard.js +16 -8
- package/dist/src/types.d.ts +1 -1
- package/package.json +1 -1
package/dist/src/controller.d.ts
CHANGED
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import { PgTable } from "drizzle-orm/pg-core";
|
|
2
2
|
import { Request, Response } from "express";
|
|
3
3
|
import { z, ZodObject } from "zod";
|
|
4
|
-
import {
|
|
5
|
-
export declare function findOneBuilder<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export declare function
|
|
9
|
-
|
|
4
|
+
import { Filter } from "./types";
|
|
5
|
+
export declare function findOneBuilder<TReturn>(service: {
|
|
6
|
+
findOne: (id: any) => Promise<TReturn>;
|
|
7
|
+
}, hook?: (item: TReturn) => void): (req: Request, res: Response) => Promise<void>;
|
|
8
|
+
export declare function findAllBuilder<FSchema extends ZodObject, TReturn>(service: {
|
|
9
|
+
findAll: (filters?: Filter<FSchema>, page?: number, pageSize?: number) => Promise<TReturn[]>;
|
|
10
|
+
count: (filters?: Filter<FSchema>) => Promise<number>;
|
|
11
|
+
}, filter: FSchema, hook?: (items: TReturn[], total: number) => void, hasPagination?: boolean): (req: Request, res: Response) => Promise<Response<any, Record<string, any>>>;
|
|
12
|
+
export declare function createBuilder<CSchema extends ZodObject, TReturn>(service: {
|
|
13
|
+
create: (data: z.core.output<CSchema>) => Promise<TReturn>;
|
|
14
|
+
}, schema: CSchema): (req: Request, res: Response) => Promise<Response<any, Record<string, any>>>;
|
|
15
|
+
export declare function updateBuilder<USchema extends ZodObject, TReturn>(service: {
|
|
16
|
+
update: (id: any, data: z.core.output<USchema>) => Promise<TReturn>;
|
|
17
|
+
}, schema: USchema): (req: Request, res: Response) => Promise<Response<any, Record<string, any>>>;
|
|
18
|
+
export declare function deleteBuilder(service: {
|
|
19
|
+
delete: (id: any) => Promise<void>;
|
|
20
|
+
}): (req: Request, res: Response) => Promise<Response<any, Record<string, any>>>;
|
|
10
21
|
export declare function validate<T extends ZodObject>(schema: T, fn: (req: Request, res: Response, data: z.output<T>) => Promise<Response>): (req: Request, res: Response) => Promise<Response<any, Record<string, any>>>;
|
|
11
22
|
interface CRUDService<FSchema extends ZodObject> {
|
|
12
23
|
findOne: (id: any) => Promise<any>;
|
|
13
|
-
findAll: (filters?: Filter<FSchema>, page?: number, pageSize?: number) => Promise<any>;
|
|
24
|
+
findAll: (filters?: Filter<FSchema>, page?: number, pageSize?: number) => Promise<any[]>;
|
|
14
25
|
count: (filters: Filter<FSchema>) => Promise<number>;
|
|
15
26
|
create: (data: any) => Promise<any>;
|
|
16
27
|
update: (id: any, data: Partial<any>) => Promise<any>;
|
package/dist/src/controller.js
CHANGED
|
@@ -11,34 +11,41 @@ function findOneBuilder(service, hook) {
|
|
|
11
11
|
return async (req, res) => {
|
|
12
12
|
const item = await service.findOne(req.params.id);
|
|
13
13
|
if (hook !== undefined) {
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
res.status(200).json(item);
|
|
14
|
+
hook(item);
|
|
18
15
|
}
|
|
16
|
+
res.status(200).json(item);
|
|
19
17
|
};
|
|
20
18
|
}
|
|
21
|
-
function findAllBuilder(service, filter, hook) {
|
|
19
|
+
function findAllBuilder(service, filter, hook, hasPagination = true) {
|
|
22
20
|
return async (req, res) => {
|
|
23
21
|
const filters = filter.parse({
|
|
24
22
|
...req.params,
|
|
25
23
|
...req.query
|
|
26
24
|
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
service.
|
|
31
|
-
]);
|
|
32
|
-
if (hook !== undefined) {
|
|
33
|
-
return hook(items, total);
|
|
25
|
+
let pagination, itemsProm;
|
|
26
|
+
if (hasPagination) {
|
|
27
|
+
pagination = getPagination(req);
|
|
28
|
+
itemsProm = service.findAll(filters, pagination.page, pagination.pageSize);
|
|
34
29
|
}
|
|
35
30
|
else {
|
|
31
|
+
itemsProm = service.findAll(filters);
|
|
32
|
+
}
|
|
33
|
+
const totalProm = service.count(filters);
|
|
34
|
+
const [items, total] = await Promise.all([itemsProm, totalProm]);
|
|
35
|
+
hook?.(items, total);
|
|
36
|
+
if (hasPagination) {
|
|
36
37
|
return res.status(200).json({
|
|
37
38
|
pagination,
|
|
38
39
|
items,
|
|
39
40
|
total
|
|
40
41
|
});
|
|
41
42
|
}
|
|
43
|
+
else {
|
|
44
|
+
return res.status(200).json({
|
|
45
|
+
items,
|
|
46
|
+
total
|
|
47
|
+
});
|
|
48
|
+
}
|
|
42
49
|
};
|
|
43
50
|
}
|
|
44
51
|
function createBuilder(service, schema) {
|
package/dist/src/standard.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare class ServiceBuilder<T extends Table, TSchema extends Record<stri
|
|
|
10
10
|
readonly tableName: string;
|
|
11
11
|
constructor(db: NodePgDatabase<TSchema>, table: T, map: FilterMap<FSchema>);
|
|
12
12
|
findOne<S extends PgSelect>(select: S): (id: number) => Promise<Awaited<ReturnType<S["execute"]>>[number]>;
|
|
13
|
-
findAll<S extends PgSelect>(select: S): (filters?: Filter<FSchema>, page?: number, pageSize?: number) => Promise<Awaited<ReturnType<S["execute"]>>[number][]>;
|
|
13
|
+
findAll<S extends PgSelect>(select: S, paginated?: boolean): (filters?: Filter<FSchema>, page?: number, pageSize?: number) => Promise<Awaited<ReturnType<S["execute"]>>[number][]>;
|
|
14
14
|
create(): (data: InferInsertModel<T>) => Promise<{ [Key in keyof T["_"]["columns"] & string as Key]: T["_"]["columns"][Key]["_"]["notNull"] extends true ? T["_"]["columns"][Key]["_"]["data"] : T["_"]["columns"][Key]["_"]["data"] | null; } extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never>;
|
|
15
15
|
update(): (id: PrimaryKeyType<T>, data: Partial<InferInsertModel<T>>) => Promise<{ [Key in keyof T["_"]["columns"] & string as Key]: T["_"]["columns"][Key]["_"]["notNull"] extends true ? T["_"]["columns"][Key]["_"]["data"] : T["_"]["columns"][Key]["_"]["data"] | null; } extends infer T_1 ? { [K in keyof T_1]: T_1[K]; } : never>;
|
|
16
16
|
softDelete(): (id: PrimaryKeyType<T>) => Promise<void>;
|
package/dist/src/standard.js
CHANGED
|
@@ -19,14 +19,22 @@ class ServiceBuilder {
|
|
|
19
19
|
return result[0];
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
findAll(select) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
findAll(select, paginated = true) {
|
|
23
|
+
const base = (f) => select
|
|
24
|
+
.where((0, drizzle_orm_1.and)((0, drizzle_orm_1.isNull)(this.table.deletedAt), (0, filters_1.buildFilters)(this.map, f)));
|
|
25
|
+
if (paginated) {
|
|
26
|
+
return async (filters, page = 1, pageSize = 10) => {
|
|
27
|
+
const offset = (page - 1) * pageSize;
|
|
28
|
+
return await base(filters)
|
|
29
|
+
.limit(pageSize)
|
|
30
|
+
.offset(offset);
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
return async (filters) => {
|
|
35
|
+
return await base(filters);
|
|
36
|
+
};
|
|
37
|
+
}
|
|
30
38
|
}
|
|
31
39
|
create() {
|
|
32
40
|
return async (data) => {
|
package/dist/src/types.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export interface RetrieverService<FSchema extends ZodObject, TTable extends PgTa
|
|
|
6
6
|
count: (filters: Filter<FSchema>) => Promise<number>;
|
|
7
7
|
}
|
|
8
8
|
export interface FindOneService<TTable extends PgTable> {
|
|
9
|
-
findOne: (id: any) => Promise<TTable
|
|
9
|
+
findOne: (id: any) => Promise<Partial<TTable>>;
|
|
10
10
|
}
|
|
11
11
|
export interface CreateService<TTable extends PgTable> {
|
|
12
12
|
create: (data: TTable["$inferInsert"]) => Promise<TTable["$inferSelect"]>;
|