bradb 2.1.1 → 2.2.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.
@@ -5,11 +5,11 @@ import { Filter } from "./types";
5
5
  import { InferInsertModel } from "drizzle-orm";
6
6
  export declare function findOneBuilder<TReturn>(service: {
7
7
  findOne: (id: any) => Promise<TReturn>;
8
- }, hook?: (item: TReturn) => void): (req: Request, res: Response) => Promise<void>;
8
+ }, hook?: (item: TReturn) => Promise<object>): (req: Request, res: Response) => Promise<Response<any, Record<string, any>> | undefined>;
9
9
  export declare function findAllBuilder<FSchema extends ZodObject, TReturn>(service: {
10
10
  findAll: (filters?: Filter<FSchema>, page?: number, pageSize?: number) => Promise<TReturn[]>;
11
11
  count: (filters?: Filter<FSchema>) => Promise<number>;
12
- }, filter: FSchema, hook?: (items: TReturn[], total: number) => void, hasPagination?: boolean): (req: Request, res: Response) => Promise<Response<any, Record<string, any>>>;
12
+ }, filter: FSchema, hook?: (items: TReturn[], total: number) => Promise<object[]>, hasPagination?: boolean): (req: Request, res: Response) => Promise<Response<any, Record<string, any>>>;
13
13
  export declare function createBuilder<CSchema extends ZodObject, TReturn>(service: {
14
14
  create: (data: z.core.output<CSchema>) => Promise<TReturn>;
15
15
  }, schema: CSchema, hook?: (req: Request, res: Response, data: z.core.output<CSchema>, item: TReturn) => Promise<object>): (req: Request, res: Response) => Promise<Response<any, Record<string, any>>>;
@@ -11,7 +11,8 @@ 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
- hook(item);
14
+ const i = await hook(item);
15
+ return res.status(200).json(i);
15
16
  }
16
17
  res.status(200).json(item);
17
18
  };
@@ -32,17 +33,20 @@ function findAllBuilder(service, filter, hook, hasPagination = true) {
32
33
  }
33
34
  const totalProm = service.count(filters);
34
35
  const [items, total] = await Promise.all([itemsProm, totalProm]);
35
- hook?.(items, total);
36
+ let resItems = items;
37
+ if (hook != undefined) {
38
+ resItems = await hook(items, total);
39
+ }
36
40
  if (hasPagination) {
37
41
  return res.status(200).json({
38
42
  pagination,
39
- items,
43
+ items: resItems,
40
44
  total
41
45
  });
42
46
  }
43
47
  else {
44
48
  return res.status(200).json({
45
- items,
49
+ items: resItems,
46
50
  total
47
51
  });
48
52
  }
@@ -16,8 +16,8 @@ export declare class ServiceBuilder<T extends Table, TSchema extends Record<stri
16
16
  findOne<S extends PgSelect>(select: S): (id: PrimaryKeyType<T>) => Promise<Awaited<ReturnType<S["execute"]>>[number]>;
17
17
  findAll<S extends PgSelect>(select: S, paginated?: boolean): (filters?: Filter<FSchema>, page?: number, pageSize?: number) => Promise<Awaited<ReturnType<S["execute"]>>[number][]>;
18
18
  count(): (filters?: Filter<FSchema>) => Promise<number>;
19
- create<S extends any>(pre?: (data: S extends Object ? S : InferInsertModel<T>, tx?: PgTransaction<any, TSchema, any>) => Promise<InferInsertModel<T>>): (data: S extends Object ? S : InferInsertModel<T>, tx?: PgTransaction<any, TSchema, any>) => 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>;
20
- update(): (id: PrimaryKeyType<T>, data: Partial<InferInsertModel<T>>, tx?: PgTransaction<any, TSchema, any>) => 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>;
19
+ create<S extends any>(hook?: (data: S extends Object ? S : InferInsertModel<T>, tx?: PgTransaction<any, TSchema, any>) => Promise<InferInsertModel<T>>): (data: S extends Object ? S : InferInsertModel<T>, tx?: PgTransaction<any, TSchema, any>) => 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>;
20
+ update<S extends any>(pre?: (data: S extends Object ? S : InferInsertModel<T>, tx?: PgTransaction<any, TSchema, any>) => Promise<InferInsertModel<T>>): (id: PrimaryKeyType<T>, data: S extends Object ? S : InferInsertModel<T>, tx?: PgTransaction<any, TSchema, any>) => 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>;
21
21
  delete(): (id: PrimaryKeyType<T>, tx?: PgTransaction<any, TSchema, any>) => Promise<void>;
22
22
  softDelete(): (id: PrimaryKeyType<T>, tx?: PgTransaction<any, TSchema, any>) => Promise<void>;
23
23
  hardDelete(): (id: PrimaryKeyType<T>, tx?: PgTransaction<any, TSchema, any>) => Promise<void>;
@@ -57,32 +57,35 @@ class ServiceBuilder {
57
57
  return result.count;
58
58
  };
59
59
  }
60
- create(pre) {
60
+ create(hook) {
61
61
  return async (data, tx) => {
62
62
  // If pre exists data is going to be InferInsertModel<T>
63
- if (pre) {
64
- data = await pre(data, tx);
63
+ let values = data;
64
+ if (hook) {
65
+ values = await hook(data);
65
66
  }
66
67
  const executor = tx || this.db;
67
68
  const [result] = await executor
68
69
  .insert(this.table)
69
- .values(data)
70
+ .values(values)
70
71
  .returning()
71
72
  .catch(errors_1.handleSqlError);
72
73
  return result;
73
74
  };
74
75
  }
75
- update() {
76
- return async (
77
- // pkFilter: PrimaryKeyData<T>,
78
- id, data, tx) => {
76
+ update(pre) {
77
+ return async (id, data, tx) => {
78
+ let values = data;
79
+ if (pre) {
80
+ values = await pre(data);
81
+ }
79
82
  if (Object.keys(data).length == 0) {
80
83
  throw new errors_1.BadRequest("update needs at least one field");
81
84
  }
82
85
  const executor = tx || this.db;
83
86
  const [result] = await executor
84
87
  .update(this.table)
85
- .set(data)
88
+ .set(values)
86
89
  .where(this.findOneConditions(id))
87
90
  .returning()
88
91
  .catch(errors_1.handleSqlError);
@@ -149,6 +152,9 @@ function getPKs(table) {
149
152
  return pks;
150
153
  }
151
154
  function notFoundWithId(tableName, pkFilter) {
155
+ // for (const [key, val] of pkFilter.values()) {
156
+ //
157
+ // }
152
158
  // TODO: proper message
153
159
  return new errors_1.NotFound(`${tableName} not found`);
154
160
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bradb",
3
- "version": "2.1.1",
3
+ "version": "2.2.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",