@mysteryinfosolutions/api-core 1.1.0 → 1.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.
@@ -97,10 +97,11 @@ class BaseService {
97
97
  return this.http.put(`${this.baseUrl}/${id}`, data);
98
98
  }
99
99
  delete(id, method = 'soft') {
100
+ const methodQuery = `?method=${method}`;
100
101
  if (method === 'soft') {
101
- return this.http.put(`${this.baseUrl}/${id}?method=soft`, {});
102
+ return this.http.put(`${this.baseUrl}/${id}${methodQuery}`, {});
102
103
  }
103
- return this.http.delete(`${this.baseUrl}/${id}?method=hard`);
104
+ return this.http.delete(`${this.baseUrl}/${id}${methodQuery}`);
104
105
  }
105
106
  }
106
107
 
@@ -1 +1 @@
1
- {"version":3,"file":"mysteryinfosolutions-api-core.mjs","sources":["../../../projects/api-core/src/lib/api-core.ts","../../../projects/api-core/src/lib/utils/query-utils.ts","../../../projects/api-core/src/lib/models/sort.model.ts","../../../projects/api-core/src/lib/models/filter.model.ts","../../../projects/api-core/src/lib/services/base.service.ts","../../../projects/api-core/src/public-api.ts","../../../projects/api-core/src/mysteryinfosolutions-api-core.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-api-core',\r\n imports: [],\r\n template: `\r\n <p>\r\n api-core works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class ApiCore {\r\n\r\n}\r\n","import { SortItem } from '../models/sort.model';\r\n\r\nexport const sortObjectToString = (sortItems: SortItem[]): string => {\r\n if (!Array.isArray(sortItems) || sortItems.length === 0) return '';\r\n return sortItems.map(s => `${s.field}:${s.order}`).join(',');\r\n};\r\n\r\nexport const jsonToQueryString = (json: any): string => {\r\n if (!json || typeof json !== 'object') return '';\r\n\r\n if (json.hasOwnProperty('sort')) {\r\n json.sort = sortObjectToString(json.sort);\r\n }\r\n\r\n const queryArray = Object.keys(json)\r\n .filter(key => json[key] !== undefined && json[key] !== null)\r\n .map(key => {\r\n if (Array.isArray(json[key])) {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent('[' + json[key].toString() + ']')}`;\r\n } else {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(json[key])}`;\r\n }\r\n });\r\n\r\n return queryArray.length > 0 ? `?${queryArray.join('&')}` : '';\r\n};\r\n\r\nexport const isEmpty = (obj: any): boolean => {\r\n return !obj || Object.keys(obj).length === 0;\r\n};\r\n","export class SortItem {\r\n constructor(\r\n public field: string,\r\n public order: 'ASC' | 'DESC'\r\n ) {}\r\n}\r\n\r\n","import { SortItem } from './sort.model';\r\nimport { SELECT_MODE } from '../enums/selectmodes.enum';\r\n\r\nexport abstract class Filter {\r\n dateRangeColumn?: string;\r\n dateRangeFrom?: string;\r\n dateRangeTo?: string;\r\n\r\n page: number = 1;\r\n pageLength: number = 10;\r\n\r\n sort?: SortItem[] = [];\r\n\r\n search?: string;\r\n searchColumns?: string;\r\n selectColumns?: string;\r\n selectMode?: SELECT_MODE;\r\n\r\n toQueryParams(): Record<string, any> {\r\n const result: any = {};\r\n Object.entries(this).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== '') {\r\n result[key] = value;\r\n }\r\n });\r\n return result;\r\n }\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { jsonToQueryString, isEmpty } from '../utils/query-utils';\r\nimport { IMultiresult, IResponse } from '../models/response.model';\r\n\r\nexport abstract class BaseService<T, TFilter = any> {\r\n constructor(\r\n protected http: HttpClient,\r\n protected baseUrl: string\r\n ) { }\r\n\r\n getAll(filter: TFilter = {} as TFilter): Observable<IResponse<IMultiresult<T>>> {\r\n const query = !isEmpty(filter) ? jsonToQueryString(filter) : '';\r\n return this.http.get<IResponse<IMultiresult<T>>>(`${this.baseUrl}${query}`);\r\n }\r\n\r\n getDetails(id: number): Observable<IResponse<T>> {\r\n return this.http.get<IResponse<T>>(`${this.baseUrl}/${id}`);\r\n }\r\n\r\n create(data: T): Observable<IResponse<T>> {\r\n return this.http.post<IResponse<T>>(this.baseUrl, data);\r\n }\r\n\r\n update(id: number, data: T): Observable<IResponse<T>> {\r\n return this.http.put<IResponse<T>>(`${this.baseUrl}/${id}`, data);\r\n }\r\n\r\n delete(id: number, method: 'soft' | 'hard' = 'soft'): Observable<any> {\r\n if (method === 'soft') {\r\n return this.http.put(`${this.baseUrl}/${id}?method=soft`, {});\r\n }\r\n return this.http.delete(`${this.baseUrl}/${id}?method=hard`);\r\n }\r\n}","/*\r\n * Public API Surface of api-core\r\n */\r\n\r\nexport * from './lib/api-core';\r\nexport * from './lib/utils/query-utils';\r\nexport * from './lib/models/sort.model';\r\nexport * from './lib/models/filter.model';\r\nexport * from './lib/models/response.model';\r\nexport * from './lib/services/base.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mysteryinfosolutions-api-core.mjs","sources":["../../../projects/api-core/src/lib/api-core.ts","../../../projects/api-core/src/lib/utils/query-utils.ts","../../../projects/api-core/src/lib/models/sort.model.ts","../../../projects/api-core/src/lib/models/filter.model.ts","../../../projects/api-core/src/lib/services/base.service.ts","../../../projects/api-core/src/public-api.ts","../../../projects/api-core/src/mysteryinfosolutions-api-core.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-api-core',\r\n imports: [],\r\n template: `\r\n <p>\r\n api-core works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class ApiCore {\r\n\r\n}\r\n","import { SortItem } from '../models/sort.model';\r\n\r\nexport const sortObjectToString = (sortItems: SortItem[]): string => {\r\n if (!Array.isArray(sortItems) || sortItems.length === 0) return '';\r\n return sortItems.map(s => `${s.field}:${s.order}`).join(',');\r\n};\r\n\r\nexport const jsonToQueryString = (json: any): string => {\r\n if (!json || typeof json !== 'object') return '';\r\n\r\n if (json.hasOwnProperty('sort')) {\r\n json.sort = sortObjectToString(json.sort);\r\n }\r\n\r\n const queryArray = Object.keys(json)\r\n .filter(key => json[key] !== undefined && json[key] !== null)\r\n .map(key => {\r\n if (Array.isArray(json[key])) {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent('[' + json[key].toString() + ']')}`;\r\n } else {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(json[key])}`;\r\n }\r\n });\r\n\r\n return queryArray.length > 0 ? `?${queryArray.join('&')}` : '';\r\n};\r\n\r\nexport const isEmpty = (obj: any): boolean => {\r\n return !obj || Object.keys(obj).length === 0;\r\n};\r\n","export class SortItem {\r\n constructor(\r\n public field: string,\r\n public order: 'ASC' | 'DESC'\r\n ) {}\r\n}\r\n\r\n","import { SortItem } from './sort.model';\r\nimport { SELECT_MODE } from '../enums/selectmodes.enum';\r\n\r\nexport abstract class Filter {\r\n dateRangeColumn?: string;\r\n dateRangeFrom?: string;\r\n dateRangeTo?: string;\r\n\r\n page: number = 1;\r\n pageLength: number = 10;\r\n\r\n sort?: SortItem[] = [];\r\n\r\n search?: string;\r\n searchColumns?: string;\r\n selectColumns?: string;\r\n selectMode?: SELECT_MODE;\r\n\r\n toQueryParams(): Record<string, any> {\r\n const result: any = {};\r\n Object.entries(this).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== '') {\r\n result[key] = value;\r\n }\r\n });\r\n return result;\r\n }\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { jsonToQueryString, isEmpty } from '../utils/query-utils';\r\nimport { IMultiresult, IResponse } from '../models/response.model';\r\nimport { Filter } from '../models/filter.model';\r\n\r\nexport abstract class BaseService<\r\n T, // Full model type\r\n TFilter extends Partial<T> & Filter = Partial<T> & Filter, // Filter: model fields + pagination/sorting\r\n TCreate = Partial<T>, // DTO for create\r\n TUpdate = Partial<T> // DTO for update\r\n> {\r\n constructor(\r\n protected http: HttpClient,\r\n protected baseUrl: string\r\n ) { }\r\n\r\n getAll(filter: TFilter = {} as TFilter): Observable<IResponse<IMultiresult<T>>> {\r\n const query = !isEmpty(filter) ? jsonToQueryString(filter) : '';\r\n return this.http.get<IResponse<IMultiresult<T>>>(`${this.baseUrl}${query}`);\r\n }\r\n\r\n getDetails(id: number): Observable<IResponse<T>> {\r\n return this.http.get<IResponse<T>>(`${this.baseUrl}/${id}`);\r\n }\r\n\r\n create(data: TCreate): Observable<IResponse<T>> {\r\n return this.http.post<IResponse<T>>(this.baseUrl, data);\r\n }\r\n\r\n update(id: number, data: TUpdate): Observable<IResponse<T>> {\r\n return this.http.put<IResponse<T>>(`${this.baseUrl}/${id}`, data);\r\n }\r\n\r\n delete(id: number, method: 'soft' | 'hard' = 'soft'): Observable<any> {\r\n const methodQuery = `?method=${method}`;\r\n if (method === 'soft') {\r\n return this.http.put(`${this.baseUrl}/${id}${methodQuery}`, {});\r\n }\r\n return this.http.delete(`${this.baseUrl}/${id}${methodQuery}`);\r\n }\r\n}\r\n","/*\r\n * Public API Surface of api-core\r\n */\r\n\r\nexport * from './lib/api-core';\r\nexport * from './lib/utils/query-utils';\r\nexport * from './lib/models/sort.model';\r\nexport * from './lib/models/filter.model';\r\nexport * from './lib/models/response.model';\r\nexport * from './lib/services/base.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -67,14 +67,17 @@ interface IResponse<T> {
67
67
  type PagedResponse<T> = IResponse<IMultiresult<T>>;
68
68
  type SingleResponse<T> = IResponse<T>;
69
69
 
70
- declare abstract class BaseService<T, TFilter = any> {
70
+ declare abstract class BaseService<T, // Full model type
71
+ TFilter extends Partial<T> & Filter = Partial<T> & Filter, // Filter: model fields + pagination/sorting
72
+ TCreate = Partial<T>, // DTO for create
73
+ TUpdate = Partial<T>> {
71
74
  protected http: HttpClient;
72
75
  protected baseUrl: string;
73
76
  constructor(http: HttpClient, baseUrl: string);
74
77
  getAll(filter?: TFilter): Observable<IResponse<IMultiresult<T>>>;
75
78
  getDetails(id: number): Observable<IResponse<T>>;
76
- create(data: T): Observable<IResponse<T>>;
77
- update(id: number, data: T): Observable<IResponse<T>>;
79
+ create(data: TCreate): Observable<IResponse<T>>;
80
+ update(id: number, data: TUpdate): Observable<IResponse<T>>;
78
81
  delete(id: number, method?: 'soft' | 'hard'): Observable<any>;
79
82
  }
80
83
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mysteryinfosolutions/api-core",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.0.0",
6
6
  "@angular/core": "^20.0.0",
@@ -1,116 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { Component } from '@angular/core';
3
-
4
- class ApiCore {
5
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ApiCore, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.2", type: ApiCore, isStandalone: true, selector: "lib-api-core", ngImport: i0, template: `
7
- <p>
8
- api-core works!
9
- </p>
10
- `, isInline: true, styles: [""] });
11
- }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: ApiCore, decorators: [{
13
- type: Component,
14
- args: [{ selector: 'lib-api-core', imports: [], template: `
15
- <p>
16
- api-core works!
17
- </p>
18
- ` }]
19
- }] });
20
-
21
- const sortObjectToString = (sortItems) => {
22
- if (!Array.isArray(sortItems) || sortItems.length === 0)
23
- return '';
24
- return sortItems.map(s => `${s.field}:${s.order}`).join(',');
25
- };
26
- const jsonToQueryString = (json) => {
27
- if (!json || typeof json !== 'object')
28
- return '';
29
- if (json.hasOwnProperty('sort')) {
30
- json.sort = sortObjectToString(json.sort);
31
- }
32
- const queryArray = Object.keys(json)
33
- .filter(key => json[key] !== undefined && json[key] !== null)
34
- .map(key => {
35
- if (Array.isArray(json[key])) {
36
- return `${encodeURIComponent(key)}=${encodeURIComponent('[' + json[key].toString() + ']')}`;
37
- }
38
- else {
39
- return `${encodeURIComponent(key)}=${encodeURIComponent(json[key])}`;
40
- }
41
- });
42
- return queryArray.length > 0 ? `?${queryArray.join('&')}` : '';
43
- };
44
- const isEmpty = (obj) => {
45
- return !obj || Object.keys(obj).length === 0;
46
- };
47
-
48
- class SortItem {
49
- field;
50
- order;
51
- constructor(field, order) {
52
- this.field = field;
53
- this.order = order;
54
- }
55
- }
56
-
57
- class Filter {
58
- dateRangeColumn;
59
- dateRangeFrom;
60
- dateRangeTo;
61
- page = 1;
62
- pageLength = 10;
63
- sort = [];
64
- search;
65
- searchColumns;
66
- selectColumns;
67
- selectMode;
68
- toQueryParams() {
69
- const result = {};
70
- Object.entries(this).forEach(([key, value]) => {
71
- if (value !== undefined && value !== null && value !== '') {
72
- result[key] = value;
73
- }
74
- });
75
- return result;
76
- }
77
- }
78
-
79
- class BaseService {
80
- http;
81
- baseUrl;
82
- constructor(http, baseUrl) {
83
- this.http = http;
84
- this.baseUrl = baseUrl;
85
- }
86
- getAll(filter = {}) {
87
- const query = !isEmpty(filter) ? jsonToQueryString(filter) : '';
88
- return this.http.get(`${this.baseUrl}${query}`);
89
- }
90
- getDetails(id) {
91
- return this.http.get(`${this.baseUrl}/${id}`);
92
- }
93
- create(data) {
94
- return this.http.post(this.baseUrl, data);
95
- }
96
- update(id, data) {
97
- return this.http.put(`${this.baseUrl}/${id}`, data);
98
- }
99
- delete(id, method = 'soft') {
100
- if (method === 'soft') {
101
- return this.http.put(`${this.baseUrl}/${id}?method=soft`, {});
102
- }
103
- return this.http.delete(`${this.baseUrl}/${id}?method=hard`);
104
- }
105
- }
106
-
107
- /*
108
- * Public API Surface of api-core
109
- */
110
-
111
- /**
112
- * Generated bundle index. Do not edit.
113
- */
114
-
115
- export { ApiCore, BaseService, Filter, SortItem, isEmpty, jsonToQueryString, sortObjectToString };
116
- //# sourceMappingURL=api-core.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-core.mjs","sources":["../../../projects/api-core/src/lib/api-core.ts","../../../projects/api-core/src/lib/utils/query-utils.ts","../../../projects/api-core/src/lib/models/sort.model.ts","../../../projects/api-core/src/lib/models/filter.model.ts","../../../projects/api-core/src/lib/services/base.service.ts","../../../projects/api-core/src/public-api.ts","../../../projects/api-core/src/api-core.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-api-core',\r\n imports: [],\r\n template: `\r\n <p>\r\n api-core works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class ApiCore {\r\n\r\n}\r\n","import { SortItem } from '../models/sort.model';\r\n\r\nexport const sortObjectToString = (sortItems: SortItem[]): string => {\r\n if (!Array.isArray(sortItems) || sortItems.length === 0) return '';\r\n return sortItems.map(s => `${s.field}:${s.order}`).join(',');\r\n};\r\n\r\nexport const jsonToQueryString = (json: any): string => {\r\n if (!json || typeof json !== 'object') return '';\r\n\r\n if (json.hasOwnProperty('sort')) {\r\n json.sort = sortObjectToString(json.sort);\r\n }\r\n\r\n const queryArray = Object.keys(json)\r\n .filter(key => json[key] !== undefined && json[key] !== null)\r\n .map(key => {\r\n if (Array.isArray(json[key])) {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent('[' + json[key].toString() + ']')}`;\r\n } else {\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(json[key])}`;\r\n }\r\n });\r\n\r\n return queryArray.length > 0 ? `?${queryArray.join('&')}` : '';\r\n};\r\n\r\nexport const isEmpty = (obj: any): boolean => {\r\n return !obj || Object.keys(obj).length === 0;\r\n};\r\n","export class SortItem {\r\n constructor(\r\n public field: string,\r\n public order: 'ASC' | 'DESC'\r\n ) {}\r\n}\r\n\r\n","import { SortItem } from './sort.model';\r\nimport { SELECT_MODE } from '../enums/selectmodes.enum';\r\n\r\nexport abstract class Filter {\r\n dateRangeColumn?: string;\r\n dateRangeFrom?: string;\r\n dateRangeTo?: string;\r\n\r\n page: number = 1;\r\n pageLength: number = 10;\r\n\r\n sort?: SortItem[] = [];\r\n\r\n search?: string;\r\n searchColumns?: string;\r\n selectColumns?: string;\r\n selectMode?: SELECT_MODE;\r\n\r\n toQueryParams(): Record<string, any> {\r\n const result: any = {};\r\n Object.entries(this).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null && value !== '') {\r\n result[key] = value;\r\n }\r\n });\r\n return result;\r\n }\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { jsonToQueryString, isEmpty } from '../utils/query-utils';\r\n\r\nexport abstract class BaseService<T, TFilter = any> {\r\n constructor(\r\n protected http: HttpClient,\r\n protected baseUrl: string\r\n ) { }\r\n\r\n getAll(filter: TFilter = {} as TFilter): Observable<T[]> {\r\n const query = !isEmpty(filter) ? jsonToQueryString(filter) : '';\r\n return this.http.get<T[]>(`${this.baseUrl}${query}`);\r\n }\r\n\r\n getDetails(id: number): Observable<T> {\r\n return this.http.get<T>(`${this.baseUrl}/${id}`);\r\n }\r\n\r\n create(data: T): Observable<T> {\r\n return this.http.post<T>(this.baseUrl, data);\r\n }\r\n\r\n update(id: number, data: T): Observable<T> {\r\n return this.http.put<T>(`${this.baseUrl}/${id}`, data);\r\n }\r\n\r\n delete(id: number, method: 'soft' | 'hard' = 'soft'): Observable<any> {\r\n if (method === 'soft') {\r\n return this.http.put(`${this.baseUrl}/${id}?method=soft`, {});\r\n }\r\n return this.http.delete(`${this.baseUrl}/${id}?method=hard`);\r\n }\r\n}","/*\r\n * Public API Surface of api-core\r\n */\r\n\r\nexport * from './lib/api-core';\r\nexport * from './lib/utils/query-utils';\r\nexport * from './lib/models/sort.model';\r\nexport * from './lib/models/filter.model';\r\nexport * from './lib/models/response.model';\r\nexport * from './lib/services/base.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}