ngx-core-business
Version:
A comprehensive solution designed to streamline the development of enterprise-level Angular applications.
1 lines • 12.4 kB
Source Map (JSON)
{"version":3,"file":"ngx-core-business-http.mjs","sources":["../../../projects/ngx-core-business/http/src/http-collection.service.ts","../../../projects/ngx-core-business/http/src/base-rest-service.ts","../../../projects/ngx-core-business/http/src/public_api.ts","../../../projects/ngx-core-business/http/src/ngx-core-business-http.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { CollectionQueryParams } from './collection-query-params';\r\nimport { QueryFilter } from './query-filter';\r\nimport { QuerySorter } from './query-sorter';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class HttpCollectionService {\r\n private pageParam = 'page';\r\n private limitParam = 'limit';\r\n private queryParam = 'query';\r\n private sortParam = 'sort';\r\n private filterParam = 'filter';\r\n private fieldsParam = '$fields';\r\n constructor(private http: HttpClient) { }\r\n /**\r\n * Realiza una petición GET\r\n */\r\n get<T>(\r\n url: string,\r\n options: CollectionQueryParams = {\r\n page: 1,\r\n limit: 25,\r\n }\r\n ): Observable<T> {\r\n const me = this;\r\n const queryParams = [];\r\n if (options.page) {\r\n queryParams.push(`${me.pageParam}=${options.page}`);\r\n }\r\n if (options.limit) {\r\n queryParams.push(`${me.limitParam}=${options.limit}`);\r\n }\r\n if (options.query) {\r\n queryParams.push(`${me.queryParam}=${options.query}`);\r\n }\r\n if (options.sorters) {\r\n queryParams.push(\r\n `${me.sortParam}=${me.encodeSorters(options.sorters)}`\r\n );\r\n }\r\n if (options.filters) {\r\n queryParams.push(\r\n `${me.filterParam}=${me.encodeFilters(options.filters)}`\r\n );\r\n }\r\n if (options.fields) {\r\n queryParams.push(`${me.fieldsParam}=${options.fields}`);\r\n }\r\n url = me.urlAppend(url, queryParams.join('&'));\r\n return me.http.get<T>(url);\r\n }\r\n\r\n private urlAppend(url: string, str: string) {\r\n if (str) {\r\n return url + (url.indexOf('?') == -1 ? '?' : '&') + str;\r\n }\r\n return url;\r\n }\r\n\r\n private encodeSorters(sorters: QuerySorter[]) {\r\n return encodeURI(JSON.stringify(sorters));\r\n }\r\n\r\n private encodeFilters(filters: QueryFilter[]) {\r\n return encodeURI(\r\n JSON.stringify(\r\n filters.map((filter) => {\r\n return {\r\n type: filter.type,\r\n field: filter.field,\r\n operator: filter.operator,\r\n value: filter.value,\r\n };\r\n })\r\n )\r\n );\r\n }\r\n\r\n}\r\n","import { Injector, Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Router } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { HttpCollectionService } from './http-collection.service';\r\nimport { CollectionResponse } from './collection-response';\r\nimport { CollectionQueryParams } from './collection-query-params';\r\n\r\n@Injectable()\r\nexport abstract class BaseRestService {\r\n\r\n protected apiUrl: string | undefined;\r\n /**\r\n * Collection Path\r\n *\r\n * Ruta relativa de la lista de recursos.\r\n *\r\n * Ejemplo: api/users\r\n *\r\n */\r\n protected collectionPath!: string;\r\n protected collectionUrl: string = '';\r\n /**\r\n * Usa estrictamene la url señalada.\r\n */\r\n strictApiUrl: string = '';\r\n\r\n protected http: HttpClient;\r\n protected httpList: HttpCollectionService;\r\n protected router: Router;\r\n constructor(injector: Injector) {\r\n this.http = injector.get(HttpClient);\r\n this.router = injector.get(Router);\r\n this.httpList = injector.get(HttpCollectionService);\r\n }\r\n\r\n abstract getApiUrl(): string;\r\n\r\n protected getCollectionUrl() {\r\n const me = this;\r\n return (\r\n me.collectionUrl ||\r\n (me.collectionUrl = `${me.getApiUrl()}/${me.collectionPath}`)\r\n );\r\n }\r\n\r\n /**\r\n * GET List\r\n */\r\n list<T>(options?: CollectionQueryParams): Observable<CollectionResponse<T[]>> {\r\n return this.httpList.get(this.getCollectionUrl(), options);\r\n }\r\n\r\n /**\r\n * GET\r\n * @param id The resource ID\r\n */\r\n get(id: number | string): Observable<any> {\r\n const me = this;\r\n\r\n return me.http\r\n .get<any>(`${me.getCollectionUrl()}/${id}`)\r\n .pipe(map((res) => res.data));\r\n }\r\n\r\n /**\r\n * POST\r\n */\r\n create<T>(model: T): Observable<T> {\r\n const me = this;\r\n return me.http\r\n .post<CollectionResponse<T>>(`${me.getCollectionUrl()}`, model)\r\n .pipe(map((res) => res.data));\r\n }\r\n\r\n /**\r\n * PUT\r\n */\r\n update<T>(model: any, id?: string | number): Observable<T> {\r\n const me = this;\r\n return me.http\r\n .put<CollectionResponse<T>>(`${me.getCollectionUrl()}/${id || model.id}`, model)\r\n .pipe(map((res) => res.data));\r\n }\r\n\r\n save<T>(model: any, id?: string | number) {\r\n return id || model.id ? this.update<T>(model, id) : this.create<T>(model);\r\n }\r\n\r\n /**\r\n * DELETE\r\n */\r\n delete(id: number | string) {\r\n const me = this;\r\n return me.http.delete(`${me.getCollectionUrl()}/${id}`);\r\n }\r\n\r\n buildUrl(segments: any[], baseUrl: string = this.getCollectionUrl()) {\r\n return baseUrl + this.router.createUrlTree(segments).toString();\r\n }\r\n\r\n getBlob(url: string) {\r\n const me = this;\r\n return me.http\r\n .get(url, {\r\n observe: 'response',\r\n responseType: 'blob',\r\n })\r\n .pipe(map((res) => res.body));\r\n }\r\n\r\n getFile(url: string) {\r\n const me = this;\r\n return me.http\r\n .get(url, {\r\n observe: 'response',\r\n responseType: 'blob',\r\n })\r\n .pipe(map((res) => {\r\n res.body\r\n if (res.body) {\r\n // Get the file name from the response.\r\n const fileName = res.headers.get('Content-Disposition')?.split('filename=')[1];\r\n if (!fileName) {\r\n console.error('El servidor no ha devuelto el nombre del archivo. en la cabecera Content-Disposition, Access-Control-Expose-Headers tambien debe ser añadido.');\r\n return;\r\n }\r\n return {\r\n file: res.body,\r\n fileName,\r\n }\r\n }\r\n return res.body;\r\n }));\r\n }\r\n\r\n getCollectionPath() {\r\n return this.collectionPath;\r\n }\r\n\r\n}\r\n","/*\n * Public API Surface of ngx-core-business\n */\nexport * from './base-rest-service';\nexport * from './http-collection.service';\nexport * from './collection-query-params';\nexport * from './collection-response';\nexport * from './query-filter';\nexport * from './query-sorter';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}