autoscriptorm 1.0.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/README.md ADDED
@@ -0,0 +1,257 @@
1
+ <img src ="https://img.shields.io/badge/TypeScript-v5.9.3-blue"/> <img src ="https://img.shields.io/badge/PG-v8.17.1-red"/>
2
+
3
+ ## Autoscript ORM
4
+ ### Description
5
+ Autoscript is a lite TypeScript ORM for [PostgreSQL](https://www.npmjs.com/package/pg). </br>
6
+ NPM Link: [https://www.npmjs.com/package/autoscriptorm](https://www.npmjs.com/package/autoscriptorm)
7
+
8
+ ### Installation
9
+ ```
10
+ npm i autoscriptorm
11
+ ```
12
+
13
+ ### Prerequisite & Rules
14
+ - Every table must have the following fields:
15
+ - id [uuid, generated, not null]
16
+ - is_deleted [boolean, default = false, not null]
17
+ - create_date [timestamp, default = now(), not null]
18
+ - update_date [timestamp]
19
+ - The orm does not keep track of table relationships(Foraign Key).
20
+ - The orm does not hard delete any row it sets `is_deleted = false` for the deleted row.
21
+
22
+ ### Supported MySQL functions
23
+ - CREATE
24
+ - UPDATE
25
+ - DELETE
26
+ - READ
27
+ - WHERE `=` `!=` `<>` `<` `>` `<=` `>=` `like` `in` `not in` `is null` `is not null`
28
+ - ORDER BY `ASC` `DESC`
29
+ - OFFSET
30
+ - LIMIT
31
+ - INNER JOIN
32
+ - LEFT JOIN
33
+ - RIGHT JOIN
34
+ - VIRTUAL COLUMN
35
+
36
+ ### How To Use
37
+
38
+ #### For raw sql query you can use `query()` function
39
+
40
+ ```typescript
41
+ import { query, configureDB } from 'autoscript'
42
+
43
+ // 1. Set credentials once at startup
44
+ configureDB({
45
+ user: 'my_user',
46
+ host: 'localhost',
47
+ database: 'my_db',
48
+ password: 'password123',
49
+ port: 1234
50
+ })
51
+
52
+ async function main() {
53
+ console.log(await query("SELECT * FROM user"))
54
+ }
55
+
56
+ main()
57
+ ```
58
+
59
+ #### A DTO class represents a table and its columns. Every `TableDTO` should extend `DTO` class and implement functions
60
+ - `setChildFromObject(obj: any): void` : setter for column data from a object
61
+ - `setChildFromDBObject(obj: any): void` : setter for column data from a db response object
62
+ - `getChildAsObject(): Omit<T, keyof DTOType>` : getter for column data of the class
63
+
64
+ #### Also every `TableDTO` should implement object
65
+ - `childVarToCol:{[key in keyof Omit<T, keyof DTOType>]:string}` : mapping of db column to class column variables
66
+
67
+ #### For virtual columns `computedVarToCol` can be used to map column and expression
68
+
69
+ #### Here is an example of how to create a `DTO`
70
+
71
+ ```typescript
72
+ export type DummyDTOType = DTOType & {
73
+ firstName: string, // Actual Column
74
+ calculatedCol: string //Virtual Column
75
+ }
76
+
77
+ export class DummyDTO extends DTO<DummyDTOType> {
78
+
79
+ public firstName: string = "" // Variable for actual Column
80
+ public calculatedCol: string = "" // Variable for virtual Column
81
+
82
+ public childVarToCol = {
83
+ firstName: "first_name", // Actual column name in the database
84
+ calculatedCol: "calculated_col", // Virtual column name
85
+ }
86
+
87
+ public override computedVarToCol = {
88
+ // Virtual column expression
89
+ calculatedCol: "CONCAT(first_name, 'potato')"
90
+ }
91
+
92
+ constructor() {
93
+ // Must pass database table name
94
+ super("dummy")
95
+ }
96
+
97
+ // Since `calculatedCol` is a virtual column we won't set it in the setter
98
+ // You can use the helper function (assignIfTypeMatches) to enforce typecheck
99
+ protected setChildFromObject(obj: any): void {
100
+ obj ??= {}
101
+ this.firstName = DTO.assignIfTypeMatches(this.firstName, obj["firstName"], "string") as string
102
+ }
103
+
104
+ // We will set both properties because this is used for db serialization
105
+ protected setChildFromDBObject(obj: any): void {
106
+ obj ??= {}
107
+ this.firstName = obj[this.varToCol["firstName"]]
108
+ this.calculatedCol = obj[this.varToCol["calculatedCol"]]
109
+ }
110
+
111
+ // Getter for table data
112
+ protected getChildAsObject() {
113
+ return {
114
+ firstName: this.firstName,
115
+ calculatedCol: this.calculatedCol
116
+ }
117
+ }
118
+
119
+ }
120
+ ```
121
+
122
+ #### `TableDAO` class is responsible for crud operation. So, after creating the `DTO` class it is recommanded to create a `DAO` class for that table.
123
+
124
+ #### Here is an example of how to create a `DAO`
125
+
126
+ ```typescript
127
+ import { DummyDTO, type DummyDTOType } from "./Dummy1DTO.ts"
128
+ import { DAO } from "autoscript"
129
+
130
+ export class DummyDAO extends DAO<DummyDTOType, DummyDTO> {
131
+ public constructor() {
132
+ super(Dummy1DTO)
133
+ }
134
+ }
135
+ ```
136
+
137
+ #### Here is an example of how to use the `DAO` class
138
+
139
+ ```typescript
140
+ import { configureDB } from 'autoscript'
141
+ import DummyDAO from 'DummyDAO.ts'
142
+
143
+ // 1. Set credentials once at startup
144
+ configureDB({
145
+ user: 'my_user',
146
+ host: 'localhost',
147
+ database: 'my_db',
148
+ password: 'password123',
149
+ port: 1234
150
+ })
151
+
152
+ async function main() {
153
+
154
+ let dummyDAO = new DummyDAO()
155
+
156
+ // Gets all rows
157
+ let dtos = await dummyDAO.execute()
158
+ if(dtos != null) {
159
+ console.log(dtos.map(e => e.getAsObject()))
160
+ }
161
+
162
+ // [
163
+ // {
164
+ // id: 04e45af8-bd52-495a-93e5-3cd09c29ea63,
165
+ // isDeleted: false,
166
+ // createDate: '2025-02-28T06:05:20.380Z',
167
+ // updateDate: '',
168
+ // firstName: 'Jhon',
169
+ // calculatedCol: 'Jhonpotato'
170
+ // },
171
+ // {
172
+ // id: 0e9e0d4f-f390-40dc-b675-91a704e58658,
173
+ // isDeleted: false,
174
+ // createDate: '2025-02-28T06:05:20.380Z',
175
+ // updateDate: '',
176
+ // firstName: 'Doe',
177
+ // calculatedCol: 'Doepotato'
178
+ // }
179
+ // ]
180
+
181
+ // Gets rows that satisfies where clause
182
+ dtos = await dummyDAO.where("firstName", "=", "Jhon").execute()
183
+ if(dtos != null) {
184
+ console.log(dtos.map(e => e.getAsObject()))
185
+ }
186
+ // [
187
+ // {
188
+ // id: 04e45af8-bd52-495a-93e5-3cd09c29ea63,
189
+ // isDeleted: false,
190
+ // createDate: '2025-02-28T06:05:20.380Z',
191
+ // updateDate: '',
192
+ // firstName: 'Jhon',
193
+ // calculatedCol: 'Jhonpotato'
194
+ // }
195
+ // ]
196
+
197
+ // Gets rows that satisfies chained where clause
198
+ dtos = await dummyDAO
199
+ .where("firstName", "=", "Jhon")
200
+ .or()
201
+ .where("firstName", "=", "Doe")
202
+ .execute()
203
+ if(dtos != null) {
204
+ console.log(dtos.map(e => e.getAsObject()))
205
+ }
206
+
207
+ // [
208
+ // {
209
+ // id: 04e45af8-bd52-495a-93e5-3cd09c29ea63,
210
+ // isDeleted: false,
211
+ // createDate: '2025-02-28T06:05:20.380Z',
212
+ // updateDate: '',
213
+ // firstName: 'Jhon',
214
+ // calculatedCol: 'Jhonpotato'
215
+ // },
216
+ // {
217
+ // id: 0e9e0d4f-f390-40dc-b675-91a704e58658,
218
+ // isDeleted: false,
219
+ // createDate: '2025-02-28T06:05:20.380Z',
220
+ // updateDate: '',
221
+ // firstName: 'Doe',
222
+ // calculatedCol: 'Doepotato'
223
+ // }
224
+ // ]
225
+
226
+ }
227
+
228
+ main()
229
+ ```
230
+
231
+ #### For join operation `JoinDAO` class needs to be used. This class can be used to perform `innerJoin`, `leftJoin`, `rightJoin` and `where` operations. Also virtual columns can be added based on multiple tables. Here is an example
232
+
233
+ ```typescript
234
+ import { configureDB } from 'autoscript'
235
+
236
+ let result = await new JoinDAO(new Dummy1DAO())
237
+ .innerJoin(new Dummy2DAO(), "table1_name1", "table2_name2")
238
+ .leftJoin(new Dummy3DAO(), "table2_name2", "table3_name3")
239
+ .rightJoin(new Dummy4DAO(), "table4_name4", "table3_name3")
240
+ .addComputedColumn("col1", "CONCAT(table1_name1, table2_name2)")
241
+ .where("table1_name1", "=", "potato")
242
+ .and()
243
+ .where("table2_name2", "=", "tomato")
244
+ .execute()
245
+
246
+ if(result!=null) {
247
+ result.map(e => {
248
+ console.log(
249
+ e[0].getAsObject(), //Dummy1DTO
250
+ e[1].getAsObject(), //Dummy2DTO
251
+ e[2].getAsObject(), //Dummy3DTO
252
+ e[3].getAsObject(), //Dummy4DTO
253
+ e[4] //Record<"col1", any>
254
+ )
255
+ })
256
+ }
257
+ ```
@@ -0,0 +1,7 @@
1
+ import { configureDB } from "./utils/DB.js";
2
+ import { type DTOType, DTO } from "./utils/DTO.js";
3
+ import { DAO } from "./utils/DAO.js";
4
+ import { JoinDAO } from "./utils/JoinDAO.js";
5
+ import query from "./utils/Query.js";
6
+ export { query, configureDB, type DTOType, DTO, DAO, JoinDAO };
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,KAAK,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,MAAM,kBAAkB,CAAA;AAEpC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ import { configureDB } from "./utils/DB.js";
2
+ import { DTO } from "./utils/DTO.js";
3
+ import { DAO } from "./utils/DAO.js";
4
+ import { JoinDAO } from "./utils/JoinDAO.js";
5
+ import query from "./utils/Query.js";
6
+ export { query, configureDB, DTO, DAO, JoinDAO };
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAgB,GAAG,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,MAAM,kBAAkB,CAAA;AAEpC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAgB,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA"}
@@ -0,0 +1,44 @@
1
+ import { DTO, type DTOType } from "./DTO.js";
2
+ export declare class DAO<T extends DTOType, TDTO extends DTO<T>> {
3
+ protected _dtoType: new () => TDTO;
4
+ protected _dto: TDTO;
5
+ protected whereArray: {
6
+ condition: string;
7
+ params: any[];
8
+ }[];
9
+ protected orderArray: string[];
10
+ protected limitValue: number | undefined;
11
+ protected offsetValue: number | undefined;
12
+ constructor(dtoType: new () => TDTO);
13
+ get dtoType(): new () => TDTO;
14
+ get dto(): TDTO;
15
+ protected resetQueryClauses(): void;
16
+ where(field: keyof T, operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">=" | "like" | "in" | "not in" | "is null" | "is not null", value?: string | number | boolean | Date | null | (string | number | boolean | Date)[], func?: "UPPER" | "LOWER"): this;
17
+ and(): this;
18
+ or(): this;
19
+ orderBy(column: keyof T, sort?: "ASC" | "DESC"): this;
20
+ limit(value: number): this;
21
+ offset(value: number): this;
22
+ queryBuilder(alias?: string, limit?: number, offset?: number, join?: boolean): {
23
+ queryText: string;
24
+ queryParams: any[];
25
+ };
26
+ execute(): Promise<TDTO[] | null>;
27
+ paginatedExecute(page?: number, pageSize?: number): Promise<{
28
+ dtoList: TDTO[];
29
+ currentPage: number;
30
+ pageSize: number;
31
+ totalEntries: number;
32
+ totalPages: number;
33
+ hasMore: boolean;
34
+ } | null>;
35
+ read(id: string[]): Promise<TDTO[] | null>;
36
+ read(id: string): Promise<TDTO | null>;
37
+ create(dto: TDTO): Promise<TDTO | null>;
38
+ create(dto: Array<TDTO>): Promise<Array<TDTO> | null>;
39
+ update(dto: TDTO): Promise<TDTO | null>;
40
+ update(dto: Array<TDTO>): Promise<Array<TDTO> | null>;
41
+ delete(dto: TDTO): Promise<boolean>;
42
+ delete(dto: Array<TDTO>): Promise<Array<boolean>>;
43
+ }
44
+ //# sourceMappingURL=DAO.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DAO.d.ts","sourceRoot":"","sources":["../../src/utils/DAO.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,KAAK,OAAO,EAAE,MAAM,UAAU,CAAA;AAI5C,qBAAa,GAAG,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IAEnD,SAAS,CAAC,QAAQ,YAOmB,IAAI,CAPvB;IAClB,SAAS,CAAC,IAAI,OAAA;IACd,SAAS,CAAC,UAAU,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,EAAE,CAAA;KAAE,EAAE,CAAM;IAClE,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,CAAK;IACnC,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAY;IACpD,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAY;gBAElC,OAAO,EAAE,UAAS,IAAI;IAKzC,IAAW,OAAO,cALmB,IAAI,CAOxC;IAED,IAAW,GAAG,SAEb;IAED,SAAS,CAAC,iBAAiB;IAOpB,KAAK,CACR,KAAK,EAAE,MAAM,CAAC,EACd,QAAQ,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,aAAa,EAC5G,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE,EACtF,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO;IA2CrB,GAAG;IAKH,EAAE;IAKF,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,GAAE,KAAK,GAAG,MAAc,GAAG,IAAI;IAK5D,KAAK,CAAC,KAAK,EAAE,MAAM;IAKnB,MAAM,CAAC,KAAK,EAAE,MAAM;IAKpB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,UAAQ;;;;IAuDpE,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;IAwBjC,gBAAgB,CAAC,IAAI,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAW;;;;;;;;IA2CxD,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;IAC1C,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAuBtC,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAuErD,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAmDrD,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IACnC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CA6BjE"}
@@ -0,0 +1,332 @@
1
+ import { DTO } from "./DTO.js";
2
+ import query from "./Query.js";
3
+ export class DAO {
4
+ _dtoType;
5
+ _dto;
6
+ whereArray = [];
7
+ orderArray = [];
8
+ limitValue = undefined;
9
+ offsetValue = undefined;
10
+ constructor(dtoType) {
11
+ this._dtoType = dtoType;
12
+ this._dto = new this._dtoType();
13
+ }
14
+ get dtoType() {
15
+ return this._dtoType;
16
+ }
17
+ get dto() {
18
+ return this._dto;
19
+ }
20
+ resetQueryClauses() {
21
+ this.whereArray = [];
22
+ this.orderArray = [];
23
+ this.limitValue = undefined;
24
+ this.offsetValue = undefined;
25
+ }
26
+ where(field, operator, value, func) {
27
+ let colName = this.dto.varToCol[field];
28
+ if (field in this.dto.computedVarToCol) {
29
+ colName = this.dto.computedVarToCol[field];
30
+ }
31
+ if (func !== undefined) {
32
+ colName = ` ${func}( ${colName} ) `;
33
+ }
34
+ if (operator === "in" || operator === "not in") {
35
+ if (!Array.isArray(value)) {
36
+ console.warn(`Invalid value for '${operator}' operator`);
37
+ return this;
38
+ }
39
+ if (value.length === 0) {
40
+ this.whereArray.push({ condition: "1 = 1", params: [] });
41
+ return this;
42
+ }
43
+ let placeholders = value.map(() => `$`).join(", ");
44
+ let condition = `${colName} ${operator} (${placeholders})`;
45
+ this.whereArray.push({ condition, params: value });
46
+ return this;
47
+ }
48
+ if (operator === "is null" || operator === "is not null") {
49
+ this.whereArray.push({ condition: `${colName} ${operator}`, params: [] });
50
+ return this;
51
+ }
52
+ if (value === null || value === undefined) {
53
+ console.warn(`Invalid value for '${operator}' operator. Must be a non null value`);
54
+ return this;
55
+ }
56
+ this.whereArray.push({ condition: `${colName} ${operator} $ `, params: [value] });
57
+ return this;
58
+ }
59
+ and() {
60
+ this.whereArray.push({ condition: "AND", params: [] });
61
+ return this;
62
+ }
63
+ or() {
64
+ this.whereArray.push({ condition: "OR", params: [] });
65
+ return this;
66
+ }
67
+ orderBy(column, sort = "ASC") {
68
+ this.orderArray.push(`${this.dto.varToCol[column]} ${sort}`);
69
+ return this;
70
+ }
71
+ limit(value) {
72
+ this.limitValue = value;
73
+ return this;
74
+ }
75
+ offset(value) {
76
+ this.offsetValue = value;
77
+ return this;
78
+ }
79
+ queryBuilder(alias, limit, offset, join = false) {
80
+ const whereClauses = [];
81
+ const queryParams = [];
82
+ if (this.whereArray.length != 0) {
83
+ this.and();
84
+ }
85
+ this.where("isDeleted", "=", false);
86
+ this.whereArray.forEach(clause => {
87
+ let condition = clause.condition;
88
+ whereClauses.push(condition);
89
+ queryParams.push(...clause.params);
90
+ });
91
+ let whereString = whereClauses.length > 0 ? ` WHERE ${whereClauses.join(" ")} ` : "";
92
+ if (!join) {
93
+ let counter = 1;
94
+ whereString = whereString.replace(/\$/g, () => `$${counter++}`);
95
+ }
96
+ let columnString = "";
97
+ if (alias != undefined) {
98
+ columnString = [
99
+ ...Object.entries(this.dto.varToCol)
100
+ .filter(([k, v]) => !(k in this.dto.computedVarToCol))
101
+ .map(([k, v]) => `${v} AS ${alias}_${v}`),
102
+ ...Object.entries(this.dto.computedVarToCol)
103
+ .map(([k, v]) => `${v} as ${alias}_${this.dto.varToCol[k]}`)
104
+ ].join(" ,");
105
+ }
106
+ else {
107
+ columnString = [
108
+ "*",
109
+ ...Object.entries(this.dto.computedVarToCol)
110
+ .map(([k, v]) => `${v} as ${this.dto.varToCol[k]}`)
111
+ ].join(", ");
112
+ }
113
+ if (this.limitValue == undefined) {
114
+ this.limitValue = limit;
115
+ }
116
+ let limitString = this.limitValue == undefined ? "" : ` LIMIT ${this.limitValue} `;
117
+ if (this.offsetValue == undefined) {
118
+ this.offsetValue = offset;
119
+ }
120
+ let offsetString = this.offsetValue == undefined ? "" : ` OFFSET ${this.offsetValue} `;
121
+ let orderString = this.orderArray.length > 0 ? ` ORDER BY ${this.orderArray.join(", ")} ` : "";
122
+ let queryText = `SELECT ${columnString} FROM ${this.dto.tableName} ${whereString} ${orderString} ${limitString} ${offsetString}`;
123
+ return { queryText: queryText, queryParams: queryParams };
124
+ }
125
+ async execute() {
126
+ let { queryText, queryParams } = this.queryBuilder(undefined, 100, 0, false);
127
+ this.resetQueryClauses();
128
+ try {
129
+ const result = await query(queryText, queryParams);
130
+ if (result == null) {
131
+ return null;
132
+ }
133
+ const dtoList = new Array();
134
+ result.forEach(e => {
135
+ const dto = new this.dtoType();
136
+ dto.setFromDBObject(e);
137
+ dtoList.push(dto);
138
+ });
139
+ return dtoList;
140
+ }
141
+ catch (err) {
142
+ console.error('Error in DAO execute:', err);
143
+ throw err;
144
+ }
145
+ }
146
+ async paginatedExecute(page = 1, pageSize = 20) {
147
+ let limit = Math.max(1, pageSize);
148
+ let offset = (Math.max(1, page) - 1) * limit;
149
+ let { queryText, queryParams } = this.queryBuilder(undefined, undefined, undefined, false);
150
+ let countQueryText = `SELECT COUNT(*) FROM (${queryText}) AS CountTable`;
151
+ queryText = ` ${queryText} LIMIT ${limit} OFFSET ${offset} `;
152
+ this.resetQueryClauses();
153
+ try {
154
+ const countResult = await query(countQueryText, queryParams);
155
+ if (countResult?.[0]?.count == null) {
156
+ return null;
157
+ }
158
+ const result = await query(queryText, queryParams);
159
+ if (result == null) {
160
+ return null;
161
+ }
162
+ const dtoList = new Array();
163
+ result.forEach(e => {
164
+ const dto = new this.dtoType();
165
+ dto.setFromDBObject(e);
166
+ dtoList.push(dto);
167
+ });
168
+ return {
169
+ dtoList: dtoList,
170
+ currentPage: page,
171
+ pageSize: pageSize,
172
+ totalEntries: parseInt(countResult[0].count, 10),
173
+ totalPages: Math.ceil(parseInt(countResult[0].count, 10) / pageSize),
174
+ hasMore: page < Math.ceil(parseInt(countResult[0].count, 10) / pageSize)
175
+ };
176
+ }
177
+ catch (err) {
178
+ console.error('Error in DAO execute:', err);
179
+ throw err;
180
+ }
181
+ }
182
+ async read(id) {
183
+ try {
184
+ if (Array.isArray(id)) {
185
+ const dtoList = await this.where("id", "in", id).execute();
186
+ if (dtoList == null) {
187
+ return null;
188
+ }
189
+ return dtoList;
190
+ }
191
+ const dtoList = await this.where("id", "=", id).execute();
192
+ if (dtoList == null) {
193
+ return null;
194
+ }
195
+ return dtoList[0];
196
+ }
197
+ catch (err) {
198
+ console.warn("Error in DAO read", err);
199
+ throw err;
200
+ }
201
+ }
202
+ async create(dto) {
203
+ if (Array.isArray(dto)) {
204
+ if (dto.length == 0) {
205
+ return null;
206
+ }
207
+ for (let i = 0; i < dto.length; i++) {
208
+ dto[i].createDate = new Date();
209
+ dto[i].updateDate = null;
210
+ dto[i].isDeleted = false;
211
+ }
212
+ const columns = Object.entries(dto[0].varToCol)
213
+ .filter(([k, _]) => !(k in dto[0].computedVarToCol))
214
+ .map(([_, v]) => v)
215
+ .filter(e => e != "id");
216
+ const colToVar = Object.entries(dto[0].varToCol).reduce((acc, [key, value]) => ({ ...acc, [value]: key }), {});
217
+ const queryParams = dto.map(d => columns.map(col => d[colToVar[col]])).reduce((acc, val) => acc.concat(val), []);
218
+ const placeholders = dto.map((_, i) => ` (${columns.map((__, index) => `$${(columns.length * i) + index + 1}`).join(", ")}) `).join(', ');
219
+ const queryText = `INSERT INTO ${dto[0].tableName} (${columns.join(", ")}) VALUES ${placeholders} RETURNING id`;
220
+ try {
221
+ const result = await query(queryText, queryParams);
222
+ if (result == null) {
223
+ return null;
224
+ }
225
+ result.forEach((e, i) => {
226
+ dto[i].id = e.id;
227
+ });
228
+ return dto;
229
+ }
230
+ catch (err) {
231
+ console.error('Error in DAO create:', err);
232
+ throw err;
233
+ }
234
+ }
235
+ else {
236
+ dto.createDate = new Date();
237
+ dto.updateDate = null;
238
+ dto.isDeleted = false;
239
+ const colToVar = Object.entries(dto.varToCol).reduce((acc, [key, value]) => ({ ...acc, [value]: key }), {});
240
+ const columns = Object.entries(dto.varToCol)
241
+ .filter(([k, _]) => !(k in dto.computedVarToCol))
242
+ .map(([_, v]) => v)
243
+ .filter(e => e != "id");
244
+ const queryParams = columns.map(col => dto[colToVar[col]]);
245
+ const placeholders = columns.map((_, i) => `$${i + 1}`).join(", ");
246
+ const queryText = `INSERT INTO ${dto.tableName} (${columns.join(", ")}) VALUES (${placeholders}) RETURNING id`;
247
+ try {
248
+ const result = await query(queryText, queryParams);
249
+ if (result == null) {
250
+ return null;
251
+ }
252
+ if (result[0]?.id == null) {
253
+ return null;
254
+ }
255
+ dto.id = result[0].id;
256
+ return dto;
257
+ }
258
+ catch (err) {
259
+ console.error('Error in DAO create:', err);
260
+ throw err;
261
+ }
262
+ }
263
+ }
264
+ async update(dto) {
265
+ if (Array.isArray(dto)) {
266
+ if (dto.length == 0) {
267
+ return null;
268
+ }
269
+ const updatedDTOList = [];
270
+ for (const eachDTO of dto) {
271
+ try {
272
+ const insertDTO = await this.update(eachDTO);
273
+ if (insertDTO != null) {
274
+ updatedDTOList.push(insertDTO);
275
+ }
276
+ }
277
+ catch (err) {
278
+ console.warn("Error in DAO create:", err);
279
+ }
280
+ }
281
+ return updatedDTOList;
282
+ }
283
+ else {
284
+ dto.updateDate = new Date();
285
+ dto.isDeleted = false;
286
+ const colToVar = Object.entries(dto.varToCol).reduce((acc, [key, value]) => ({ ...acc, [value]: key }), {});
287
+ const columns = Object.entries(dto.varToCol)
288
+ .filter(([k, _]) => !(k in dto.computedVarToCol))
289
+ .map(([_, v]) => v)
290
+ .filter(e => e != "id" && e != "createdate");
291
+ const queryParams = columns.map(col => dto[colToVar[col]]);
292
+ queryParams.push(dto.id);
293
+ const placeholders = columns.map((e, i) => `${e} = $${i + 1}`).join(", ");
294
+ const queryText = `UPDATE ${dto.tableName} SET ${placeholders} WHERE id = $${columns.length + 1}`;
295
+ try {
296
+ const result = await query(queryText, queryParams);
297
+ if (result == null) {
298
+ return null;
299
+ }
300
+ return dto;
301
+ }
302
+ catch (err) {
303
+ console.error('Error in DAO create:', err);
304
+ throw err;
305
+ }
306
+ }
307
+ }
308
+ async delete(dto) {
309
+ if (Array.isArray(dto)) {
310
+ if (dto.length == 0) {
311
+ return false;
312
+ }
313
+ const successList = [];
314
+ for (const eachDTO of dto) {
315
+ successList.push(await this.delete(eachDTO));
316
+ }
317
+ return successList;
318
+ }
319
+ else {
320
+ const queryText = `UPDATE ${dto.tableName} SET is_deleted = true WHERE id = $1 RETURNING id`;
321
+ try {
322
+ let result = await query(queryText, [dto.id]);
323
+ return !(result[0]?.id == null);
324
+ }
325
+ catch (err) {
326
+ console.error('Error in DAO delete:', err);
327
+ throw err;
328
+ }
329
+ }
330
+ }
331
+ }
332
+ //# sourceMappingURL=DAO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DAO.js","sourceRoot":"","sources":["../../src/utils/DAO.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Pool, type PoolConfig } from 'pg';
2
+ export declare function configureDB(config: PoolConfig): void;
3
+ export declare function getPool(): Pool;
4
+ //# sourceMappingURL=DB.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DB.d.ts","sourceRoot":"","sources":["../../src/utils/DB.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,IAAI,CAAC;AAK3C,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAKpD;AAsBD,wBAAgB,OAAO,IAAI,IAAI,CAK9B"}
@@ -0,0 +1,45 @@
1
+ import { Pool } from 'pg';
2
+ let pool = null;
3
+ let dbConfig = null;
4
+ export function configureDB(config) {
5
+ if (pool) {
6
+ throw new Error("Cannot configure DB after the pool has been initialized.");
7
+ }
8
+ dbConfig = config;
9
+ }
10
+ function createPool() {
11
+ const config = dbConfig || {
12
+ host: process.env.DB_HOST,
13
+ user: process.env.DB_USER,
14
+ password: process.env.DB_PASSWORD,
15
+ database: process.env.DB_NAME,
16
+ port: Number(process.env.DB_PORT) || 5432
17
+ };
18
+ const newPool = new Pool(config);
19
+ newPool.on('error', (err) => {
20
+ console.error('Unexpected error on idle pg pool client', err);
21
+ process.exit(-1);
22
+ });
23
+ return newPool;
24
+ }
25
+ export function getPool() {
26
+ if (!pool) {
27
+ pool = createPool();
28
+ }
29
+ return pool;
30
+ }
31
+ async function endPool() {
32
+ if (pool) {
33
+ await pool.end();
34
+ pool = null;
35
+ console.log('PostgreSQL pool has ended.');
36
+ }
37
+ }
38
+ const handleShutdown = async (signal) => {
39
+ console.log(`Received ${signal}. Ending PostgreSQL pool...`);
40
+ await endPool();
41
+ process.exit(0);
42
+ };
43
+ process.on('SIGINT', () => handleShutdown('SIGINT'));
44
+ process.on('SIGTERM', () => handleShutdown('SIGTERM'));
45
+ //# sourceMappingURL=DB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DB.js","sourceRoot":"","sources":["../../src/utils/DB.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,IAAI,CAAC;AAE3C,IAAI,IAAI,GAAgB,IAAI,CAAA;AAC5B,IAAI,QAAQ,GAAsB,IAAI,CAAA;AAEtC,MAAM,UAAU,WAAW,CAAC,MAAkB;IAC1C,IAAI,IAAI,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC/E,CAAC;IACD,QAAQ,GAAG,MAAM,CAAA;AACrB,CAAC;AAED,SAAS,UAAU;IAEf,MAAM,MAAM,GAAe,QAAQ,IAAI;QACnC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QACzB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QACzB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;QACjC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QAC7B,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI;KAC5C,CAAA;IAED,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAA;IAEhC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;QAC/B,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAA;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,OAAO;IACnB,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,IAAI,GAAG,UAAU,EAAE,CAAA;IACvB,CAAC;IACD,OAAO,IAAI,CAAA;AACf,CAAC;AAED,KAAK,UAAU,OAAO;IAClB,IAAI,IAAI,EAAE,CAAC;QACP,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA;QAChB,IAAI,GAAG,IAAI,CAAA;QACX,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;IAC7C,CAAC;AACL,CAAC;AAED,MAAM,cAAc,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;IAC5C,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,6BAA6B,CAAC,CAAA;IAC5D,MAAM,OAAO,EAAE,CAAA;IACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC,CAAA;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;AACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAA"}
@@ -0,0 +1,46 @@
1
+ export type DTOType = {
2
+ id: string;
3
+ isDeleted: boolean;
4
+ createDate: Date;
5
+ updateDate: Date | null;
6
+ };
7
+ export declare abstract class DTO<T extends DTOType> {
8
+ id: string;
9
+ isDeleted: boolean;
10
+ createDate: Date;
11
+ updateDate: Date | null;
12
+ protected _tableName: string;
13
+ protected abstract setChildFromObject(obj: any): void;
14
+ protected abstract setChildFromDBObject(obj: any): void;
15
+ protected abstract getChildAsObject(): Omit<T, keyof DTOType>;
16
+ protected baseVarToCol: {
17
+ id: string;
18
+ isDeleted: string;
19
+ createDate: string;
20
+ updateDate: string;
21
+ };
22
+ computedVarToCol: {
23
+ [key in keyof Omit<T, keyof DTOType>]?: string;
24
+ };
25
+ abstract childVarToCol: {
26
+ [key in keyof Omit<T, keyof DTOType>]: string;
27
+ };
28
+ get varToCol(): {
29
+ [key in keyof T]: string;
30
+ };
31
+ constructor(tableName: string);
32
+ setFromObject(obj: any): this;
33
+ setFromDBObject(obj: any): this;
34
+ static assignIfTypeMatches<T>(target: T, source: any, type: string | Function, allowNull?: boolean): T | null;
35
+ get tableName(): string;
36
+ getAsObject(): Omit<T, keyof DTOType> & {
37
+ id: string;
38
+ isDeleted: boolean;
39
+ createDate: Date;
40
+ updateDate: Date | null;
41
+ };
42
+ getAsDBObject(): {
43
+ [key: string]: any;
44
+ };
45
+ }
46
+ //# sourceMappingURL=DTO.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DTO.d.ts","sourceRoot":"","sources":["../../src/utils/DTO.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG;IAClB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,IAAI,CAAA;IAChB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAA;CAC1B,CAAA;AAED,8BAAsB,GAAG,CAAC,CAAC,SAAS,OAAO;IAEhC,EAAE,EAAE,MAAM,CAAK;IACf,SAAS,EAAE,OAAO,CAAQ;IAC1B,UAAU,EAAE,IAAI,CAAa;IAC7B,UAAU,EAAE,IAAI,GAAG,IAAI,CAAO;IAErC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAK;IAEjC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAErD,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAEvD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,OAAO,CAAC;IAE7D,SAAS,CAAC,YAAY;;;;;MAKpB;IAEK,gBAAgB,EAAE;SAAE,GAAG,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM;KAAC,CAAK;IAE9E,SAAgB,aAAa,EAAE;SAAG,GAAG,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE,MAAM,OAAO,CAAC,GAAG,MAAM;KAAE,CAAC;IAEjF,IAAW,QAAQ,IAAI;SAAG,GAAG,IAAI,MAAM,CAAC,GAAG,MAAM;KAAE,CAElD;gBAEW,SAAS,EAAE,MAAM;IAItB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAU7B,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;WAUxB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,SAAS,GAAE,OAAe,GAAG,CAAC,GAAG,IAAI;IAqB3H,IAAW,SAAS,WAEnB;IAEM,WAAW,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,OAAO,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE;IAWrH,aAAa,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;CAejD"}
@@ -0,0 +1,86 @@
1
+ export class DTO {
2
+ id = "";
3
+ isDeleted = false;
4
+ createDate = new Date();
5
+ updateDate = null;
6
+ _tableName = "";
7
+ baseVarToCol = {
8
+ id: "id",
9
+ isDeleted: "is_deleted",
10
+ createDate: "create_date",
11
+ updateDate: "update_date",
12
+ };
13
+ computedVarToCol = {};
14
+ get varToCol() {
15
+ return { ...this.baseVarToCol, ...this.childVarToCol };
16
+ }
17
+ constructor(tableName) {
18
+ this._tableName = tableName;
19
+ }
20
+ setFromObject(obj) {
21
+ obj ??= {};
22
+ this.id = DTO.assignIfTypeMatches(this.id, obj["id"], "string");
23
+ this.isDeleted = DTO.assignIfTypeMatches(this.isDeleted, obj["isDeleted"], "boolean");
24
+ this.createDate = DTO.assignIfTypeMatches(this.createDate, obj["createDate"], Date);
25
+ this.updateDate = DTO.assignIfTypeMatches(this.updateDate, obj["updateDate"], Date, true);
26
+ this.setChildFromObject(obj);
27
+ return this;
28
+ }
29
+ setFromDBObject(obj) {
30
+ obj ??= {};
31
+ this.id = DTO.assignIfTypeMatches(this.id, obj[this.varToCol["id"]], "string");
32
+ this.isDeleted = DTO.assignIfTypeMatches(this.isDeleted, obj[this.varToCol["isDeleted"]], "boolean");
33
+ this.createDate = DTO.assignIfTypeMatches(this.createDate, obj[this.varToCol["createDate"]], Date);
34
+ this.updateDate = DTO.assignIfTypeMatches(this.updateDate, obj[this.varToCol["updateDate"]], Date, true);
35
+ this.setChildFromDBObject(obj);
36
+ return this;
37
+ }
38
+ static assignIfTypeMatches(target, source, type, allowNull = false) {
39
+ if (source === undefined) {
40
+ return target;
41
+ }
42
+ if (source === null) {
43
+ return allowNull ? null : target;
44
+ }
45
+ if (typeof type === 'string') {
46
+ if (typeof source === type) {
47
+ return source;
48
+ }
49
+ }
50
+ else if (typeof type === 'function') {
51
+ if (source instanceof type) {
52
+ return source;
53
+ }
54
+ }
55
+ console.warn(target, source, type, allowNull);
56
+ console.warn(`Type mismatch: Expected ${typeof type === 'string' ? type : type.name}, but received ${typeof source}`);
57
+ return target;
58
+ }
59
+ get tableName() {
60
+ return this._tableName;
61
+ }
62
+ getAsObject() {
63
+ const baseObject = {
64
+ id: this.id,
65
+ isDeleted: this.isDeleted,
66
+ createDate: this.createDate,
67
+ updateDate: this.updateDate,
68
+ };
69
+ const childObject = this.getChildAsObject();
70
+ return { ...baseObject, ...childObject };
71
+ }
72
+ getAsDBObject() {
73
+ const dbObject = {};
74
+ const dtoObject = this.getAsObject();
75
+ for (const key in this.varToCol) {
76
+ if (Object.prototype.hasOwnProperty.call(this.varToCol, key)) {
77
+ const colName = this.varToCol[key];
78
+ if (Object.prototype.hasOwnProperty.call(dtoObject, key)) {
79
+ dbObject[colName] = dtoObject[key];
80
+ }
81
+ }
82
+ }
83
+ return dbObject;
84
+ }
85
+ }
86
+ //# sourceMappingURL=DTO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DTO.js","sourceRoot":"","sources":["../../src/utils/DTO.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { DTO, type DTOType } from "./DTO.js";
2
+ import { DAO } from "./DAO.js";
3
+ type TablePrefix<T, N extends number> = {
4
+ [K in keyof T as `table${N}_${K & string}`]: T[K];
5
+ };
6
+ type Join<T extends DTOType, TDTO extends DTO<T>, T1 extends DTOType, TDTO1 extends DTO<T1>, R extends string, L extends any[]> = JoinDAO<DTOType & (L["length"] extends 1 ? TablePrefix<T, 1> : T) & TablePrefix<T1, [...L, unknown]["length"]>, DTO<DTOType & (L["length"] extends 1 ? TablePrefix<T, 1> : T) & TablePrefix<T1, [...L, unknown]["length"]>>, R, [
7
+ ...L,
8
+ TDTO1
9
+ ]>;
10
+ type ColType<L extends any[], T extends DTOType, T1 extends DTOType> = keyof ((L["length"] extends 1 ? TablePrefix<T, 1> : T) & TablePrefix<T1, [...L, unknown]["length"]>);
11
+ type ColWithTablePrefix<L extends any[], T extends DTOType> = keyof (L["length"] extends 1 ? TablePrefix<T, 1> : T);
12
+ export declare class JoinDAO<T extends DTOType, TDTO extends DTO<T>, R extends string, L extends any[] = [TDTO]> {
13
+ private query;
14
+ private params;
15
+ private dtoList;
16
+ private dtoTypeList;
17
+ protected whereArray: {
18
+ condition: string;
19
+ params: any[];
20
+ }[];
21
+ protected orderArray: string[];
22
+ protected limitValue: number | undefined;
23
+ protected offsetValue: number | undefined;
24
+ protected computedColumn: Record<R, string>;
25
+ protected resetQueryClauses(): void;
26
+ constructor(dao: DAO<T, TDTO>);
27
+ innerJoin<T1 extends DTOType, TDTO1 extends DTO<T1>>(dao: DAO<T1, TDTO1>, onCol1: ColType<L, T, T1>, onCol2: ColType<L, T, T1>): Join<T, TDTO, T1, TDTO1, R, L>;
28
+ leftJoin<T1 extends DTOType, TDTO1 extends DTO<T1>>(dao: DAO<T1, TDTO1>, onCol1: ColType<L, T, T1>, onCol2: ColType<L, T, T1>): Join<T, TDTO, T1, TDTO1, R, L>;
29
+ rightJoin<T1 extends DTOType, TDTO1 extends DTO<T1>>(dao: DAO<T1, TDTO1>, onCol1: ColType<L, T, T1>, onCol2: ColType<L, T, T1>): Join<T, TDTO, T1, TDTO1, R, L>;
30
+ addComputedColumn<R1 extends R>(column: R1, ...expression: Array<ColWithTablePrefix<L, T> | (string & {})>): JoinDAO<T, TDTO, R & R1, L>;
31
+ where(column: ColWithTablePrefix<L, T>, operator: "=" | "!=" | "<>" | "<" | ">" | "<=" | ">=" | "like" | "in" | "not in" | "is null" | "is not null", value?: string | number | boolean | Date | null | (string | number | boolean | Date)[]): this;
32
+ and(): this;
33
+ or(): this;
34
+ orderBy(column: ColWithTablePrefix<L, T> | R, sort?: "ASC" | "DESC"): this;
35
+ limit(value: number): this;
36
+ offset(value: number): this;
37
+ queryBuilder(limit?: number, offset?: number): {
38
+ queryText: string;
39
+ queryParams: any[];
40
+ };
41
+ execute(): Promise<[...L, Record<R, any>][] | null>;
42
+ paginatedExecute(page?: number, pageSize?: number): Promise<{
43
+ dtoList: Array<[...L, Record<R, any>]>;
44
+ currentPage: number;
45
+ pageSize: number;
46
+ totalEntries: number;
47
+ totalPages: number;
48
+ hasMore: boolean;
49
+ } | null>;
50
+ }
51
+ export {};
52
+ //# sourceMappingURL=JoinDAO.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JoinDAO.d.ts","sourceRoot":"","sources":["../../src/utils/JoinDAO.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ import { DTO } from "./DTO.js";
2
+ import query from "./Query.js";
3
+ import { DAO } from "./DAO.js";
4
+ export class JoinDAO {
5
+ query = "";
6
+ params = [];
7
+ dtoList = [];
8
+ dtoTypeList = [];
9
+ whereArray = [];
10
+ orderArray = [];
11
+ limitValue = undefined;
12
+ offsetValue = undefined;
13
+ computedColumn = {};
14
+ resetQueryClauses() {
15
+ this.query = "";
16
+ this.params = [];
17
+ this.dtoList = [];
18
+ this.dtoTypeList = [];
19
+ this.whereArray = [];
20
+ this.orderArray = [];
21
+ this.limitValue = 100;
22
+ this.offsetValue = 0;
23
+ }
24
+ constructor(dao) {
25
+ this.dtoList.push(dao.dto);
26
+ this.dtoTypeList.push(dao.dtoType);
27
+ let { queryText, queryParams } = dao.queryBuilder("table1", undefined, undefined, true);
28
+ this.query = ` (${queryText}) AS t1 `;
29
+ queryParams.forEach(e => this.params.push(e));
30
+ }
31
+ innerJoin(dao, onCol1, onCol2) {
32
+ this.dtoList.push(dao.dto);
33
+ this.dtoTypeList.push(dao.dtoType);
34
+ let { queryText, queryParams } = dao.queryBuilder(`table${this.dtoList.length}`, undefined, undefined, true);
35
+ this.query += ` INNER JOIN (${queryText}) as t${this.dtoList.length} ON ${onCol1} = ${onCol2} `;
36
+ queryParams.forEach(e => this.params.push(e));
37
+ return this;
38
+ }
39
+ leftJoin(dao, onCol1, onCol2) {
40
+ this.dtoList.push(dao.dto);
41
+ this.dtoTypeList.push(dao.dtoType);
42
+ let { queryText, queryParams } = dao.queryBuilder(`table${this.dtoList.length}`, undefined, undefined, true);
43
+ this.query += ` LEFT JOIN (${queryText}) as t${this.dtoList.length} ON ${onCol1} = ${onCol2} `;
44
+ queryParams.forEach(e => this.params.push(e));
45
+ return this;
46
+ }
47
+ rightJoin(dao, onCol1, onCol2) {
48
+ this.dtoList.push(dao.dto);
49
+ this.dtoTypeList.push(dao.dtoType);
50
+ let { queryText, queryParams } = dao.queryBuilder(`table${this.dtoList.length}`, undefined, undefined, true);
51
+ this.query += ` RIGHT JOIN (${queryText}) as t${this.dtoList.length} ON ${onCol1} = ${onCol2} `;
52
+ queryParams.forEach(e => this.params.push(e));
53
+ return this;
54
+ }
55
+ addComputedColumn(column, ...expression) {
56
+ this.computedColumn[column] = expression.join("");
57
+ return this;
58
+ }
59
+ where(column, operator, value) {
60
+ if (operator === "in" || operator === "not in") {
61
+ if (!Array.isArray(value)) {
62
+ console.warn(`Invalid value for '${operator}' operator`);
63
+ return this;
64
+ }
65
+ if (value.length === 0) {
66
+ this.whereArray.push({ condition: "1 = 1", params: [] });
67
+ return this;
68
+ }
69
+ const placeholders = value.map(() => `$`).join(", ");
70
+ const condition = `${column} ${operator} (${placeholders})`;
71
+ this.whereArray.push({ condition, params: value });
72
+ return this;
73
+ }
74
+ if (operator === "is null" || operator === "is not null") {
75
+ this.whereArray.push({ condition: `${column} ${operator}`, params: [] });
76
+ return this;
77
+ }
78
+ if (value === null || value === undefined) {
79
+ console.warn(`Invalid value for '${operator}' operator. Must be a non null value`);
80
+ return this;
81
+ }
82
+ this.whereArray.push({ condition: `${column} ${operator} $ `, params: [value] });
83
+ return this;
84
+ }
85
+ and() {
86
+ this.whereArray.push({ condition: "AND", params: [] });
87
+ return this;
88
+ }
89
+ or() {
90
+ this.whereArray.push({ condition: "OR", params: [] });
91
+ return this;
92
+ }
93
+ orderBy(column, sort = "ASC") {
94
+ this.orderArray.push(`${column} ${sort}`);
95
+ return this;
96
+ }
97
+ limit(value) {
98
+ this.limitValue = value;
99
+ return this;
100
+ }
101
+ offset(value) {
102
+ this.offsetValue = value;
103
+ return this;
104
+ }
105
+ queryBuilder(limit, offset) {
106
+ let selectString = `SELECT ${["*", ...Object.entries(this.computedColumn).map(([k, v]) => `${v} as ${k}`)].join(", ")} FROM `;
107
+ let whereClauses = [];
108
+ this.whereArray.forEach(clause => {
109
+ let condition = clause.condition;
110
+ whereClauses.push(condition);
111
+ this.params.push(...clause.params);
112
+ });
113
+ let whereString = whereClauses.length > 0 ? ` WHERE ${whereClauses.join(" ")} ` : "";
114
+ let orderString = this.orderArray.length > 0 ? ` ORDER BY ${this.orderArray.join(", ")} ` : "";
115
+ if (this.limitValue == undefined) {
116
+ this.limitValue = limit;
117
+ }
118
+ let limitString = this.limitValue == undefined ? "" : ` LIMIT ${this.limitValue} `;
119
+ if (this.offsetValue == undefined) {
120
+ this.offsetValue = offset;
121
+ }
122
+ let offsetString = this.offsetValue == undefined ? "" : ` OFFSET ${this.offsetValue} `;
123
+ let counter = 1;
124
+ let queryText = ` ${selectString} ${this.query} ${whereString} ${orderString} ${limitString} ${offsetString} `.replace(/\$/g, () => `$${counter++}`);
125
+ return { queryText: queryText, queryParams: this.params };
126
+ }
127
+ async execute() {
128
+ let { queryText, queryParams } = this.queryBuilder(100, 0);
129
+ try {
130
+ let result = await query(queryText, queryParams);
131
+ if (result == null) {
132
+ return null;
133
+ }
134
+ let dtoList = [];
135
+ result.forEach(e => {
136
+ let dtoMapList = Array.from({ length: this.dtoList.length + 1 }).map(() => ({}));
137
+ Object.keys(e).forEach(k => {
138
+ let index = Number(k.replace("table", "").charAt(0)) - 1;
139
+ if (Number.isNaN(index)) {
140
+ dtoMapList[dtoMapList.length - 1][k] = e[k];
141
+ return;
142
+ }
143
+ let map = dtoMapList[index];
144
+ map[k.replace(`table${index + 1}_`, "")] = e[k];
145
+ dtoMapList[index] = map;
146
+ });
147
+ let dtoRow = [
148
+ ...dtoMapList.filter((_, i) => i != dtoMapList.length - 1).map((v, i) => new this.dtoTypeList[i]().setFromDBObject(v)),
149
+ dtoMapList[dtoMapList.length - 1]
150
+ ];
151
+ dtoList.push(dtoRow);
152
+ });
153
+ this.resetQueryClauses();
154
+ return dtoList;
155
+ }
156
+ catch (err) {
157
+ this.resetQueryClauses();
158
+ console.error('Error in DAO join:', err);
159
+ throw err;
160
+ }
161
+ }
162
+ async paginatedExecute(page = 1, pageSize = 20) {
163
+ let limit = Math.max(1, pageSize);
164
+ let offset = (Math.max(1, page) - 1) * limit;
165
+ let { queryText, queryParams } = this.queryBuilder();
166
+ let countQueryText = `SELECT COUNT(*) FROM (${queryText}) AS CountTable`;
167
+ queryText = ` ${queryText} LIMIT ${limit} OFFSET ${offset} `;
168
+ try {
169
+ const countResult = await query(countQueryText, queryParams);
170
+ if (countResult?.[0]?.count == null) {
171
+ return null;
172
+ }
173
+ let result = await query(queryText, queryParams);
174
+ if (result == null) {
175
+ return null;
176
+ }
177
+ let dtoList = [];
178
+ result.forEach(e => {
179
+ let dtoMapList = Array.from({ length: this.dtoList.length + 1 }).map(() => ({}));
180
+ Object.keys(e).forEach(k => {
181
+ let index = Number(k.replace("table", "").charAt(0)) - 1;
182
+ if (Number.isNaN(index)) {
183
+ dtoMapList[dtoMapList.length - 1][k] = e[k];
184
+ return;
185
+ }
186
+ let map = dtoMapList[index];
187
+ map[k.replace(`table${index + 1}_`, "")] = e[k];
188
+ dtoMapList[index] = map;
189
+ });
190
+ let dtoRow = [
191
+ ...dtoMapList.filter((_, i) => i != dtoMapList.length - 1).map((v, i) => new this.dtoTypeList[i]().setFromDBObject(v)),
192
+ dtoMapList[dtoMapList.length - 1]
193
+ ];
194
+ dtoList.push(dtoRow);
195
+ });
196
+ this.resetQueryClauses();
197
+ return {
198
+ dtoList: dtoList,
199
+ currentPage: page,
200
+ pageSize: pageSize,
201
+ totalEntries: parseInt(countResult[0].count, 10),
202
+ totalPages: Math.ceil(parseInt(countResult[0].count, 10) / pageSize),
203
+ hasMore: page < Math.ceil(parseInt(countResult[0].count, 10) / pageSize)
204
+ };
205
+ }
206
+ catch (err) {
207
+ this.resetQueryClauses();
208
+ console.error('Error in DAO join:', err);
209
+ throw err;
210
+ }
211
+ }
212
+ }
213
+ //# sourceMappingURL=JoinDAO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JoinDAO.js","sourceRoot":"","sources":["../../src/utils/JoinDAO.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare let query: (query: string, params?: any[]) => Promise<any[]>;
2
+ export default query;
3
+ //# sourceMappingURL=Query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../src/utils/Query.ts"],"names":[],"mappings":"AAEA,QAAA,IAAI,KAAK,GAAU,OAAO,MAAM,EAAE,SAAS,GAAG,EAAE,mBAY/C,CAAA;AAED,eAAe,KAAK,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { getPool } from "./DB.js";
2
+ let query = async (query, params) => {
3
+ const pool = getPool();
4
+ const client = await pool.connect();
5
+ try {
6
+ const res = await client.query(query, params);
7
+ return res.rows;
8
+ }
9
+ catch (err) {
10
+ console.error('Unexpected error executing query', err);
11
+ throw err;
12
+ }
13
+ finally {
14
+ client.release();
15
+ }
16
+ };
17
+ export default query;
18
+ //# sourceMappingURL=Query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Query.js","sourceRoot":"","sources":["../../src/utils/Query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEjC,IAAI,KAAK,GAAG,KAAK,EAAE,KAAa,EAAE,MAAc,EAAE,EAAE;IAChD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;IACnC,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC7C,OAAO,GAAG,CAAC,IAAI,CAAA;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAA;QACtD,MAAM,GAAG,CAAA;IACb,CAAC;YAAS,CAAC;QACP,MAAM,CAAC,OAAO,EAAE,CAAA;IACpB,CAAC;AACL,CAAC,CAAA;AAED,eAAe,KAAK,CAAA"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "autoscriptorm",
3
+ "version": "1.0.0",
4
+ "description": "A Typescript ORM for PostgreSQL",
5
+ "license": "ISC",
6
+ "author": "alvi",
7
+ "keywords": [
8
+ "npm",
9
+ "typescript",
10
+ "orm",
11
+ "postgresql"
12
+ ],
13
+ "homepage": "https://github.com/alvi1316/autoscript#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/alvi1316/autoscript/issues"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/alvi1316/autoscript.git"
20
+ },
21
+ "type": "module",
22
+ "main": "./dist/index.js",
23
+ "module": "./dist/index.js",
24
+ "types": "./dist/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "import": "./dist/index.js"
29
+ }
30
+ },
31
+ "files": [
32
+ "dist"
33
+ ],
34
+ "scripts": {
35
+ "clean": "rimraf dist",
36
+ "build": "npm run clean && tsc",
37
+ "prepublishOnly": "npm run build"
38
+ },
39
+ "dependencies": {
40
+ "pg": "^8.17.1"
41
+ },
42
+ "devDependencies": {
43
+ "@types/pg": "^8.16.0",
44
+ "rimraf": "^6.1.2",
45
+ "typescript": "^5.9.3"
46
+ }
47
+ }