FarmMapsLib/projects/common/src/fm/services/item.service.ts

207 lines
9.8 KiB
TypeScript
Raw Normal View History

2019-11-18 08:42:05 +00:00
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { IItemType } from '../models/item.type';
2023-09-11 19:59:34 +00:00
import { IItemLinkType } from '../models/itemlink.type';
import { IUrlType } from '../models/url.type';
2019-11-18 08:42:05 +00:00
import { IItem } from '../models/item';
2020-06-29 14:09:19 +00:00
import { IJsonline } from '../models/json-line';
2019-11-18 08:42:05 +00:00
import { IItemTask } from '../models/itemTask';
2021-02-02 16:09:03 +00:00
import { HttpClient, HttpParams,HttpHeaders } from "@angular/common/http";
2019-11-18 08:42:05 +00:00
import { AppConfig } from "../shared/app.config";
2020-02-11 17:55:43 +00:00
import {ItemTypeService} from './itemtype.service';
2023-05-30 19:16:20 +00:00
import {IListItem} from '../models/list.item';
2019-11-18 08:42:05 +00:00
@Injectable({
providedIn: 'root',
})
export class ItemService {
2020-02-11 17:55:43 +00:00
constructor(public httpClient: HttpClient, public appConfig: AppConfig,private itemTypeService:ItemTypeService) {
2019-11-18 08:42:05 +00:00
}
ApiEndpoint() {
return this.appConfig.getConfig("apiEndPoint");
}
getItemTypes(): Observable<{ [id: string]: IItemType }> {
return this.httpClient.get<{ [id: string]: IItemType }>(`${this.ApiEndpoint()}/api/v1/itemtypes/`);
}
getFeatures(extent: number[], crs: string, searchText?: string, searchTags?:string,startDate?:Date,endDate?:Date,itemType?:string,parentCode?:string,dataFilter?:string,level?:number,indexed?:boolean): Observable<any> {
2023-03-06 13:04:14 +00:00
let params = new HttpParams();
2019-11-18 08:42:05 +00:00
params = params.append("crs", crs);
2020-07-29 06:43:17 +00:00
if (extent) params =params.append("bbox", extent.join(","));
2019-11-18 08:42:05 +00:00
if (searchText) params = params.append("q", searchText);
if (searchTags) params = params.append("t", searchTags);
if (startDate) params = params.append("sd", startDate.toISOString());
if (endDate) params = params.append("ed", endDate.toISOString());
2020-02-11 17:55:43 +00:00
if (itemType) {
params = params.append("it", itemType);
2023-03-06 13:04:14 +00:00
const extraAttributes = this.itemTypeService.getExtraAttributes(itemType);
2020-02-11 17:55:43 +00:00
if(extraAttributes) {
params = params.append("da", extraAttributes);
}
}
2019-11-18 08:42:05 +00:00
if (parentCode) params = params.append("pc", parentCode);
if (dataFilter) params = params.append("df", dataFilter);
2021-03-17 18:33:54 +00:00
if (level) params = params.append("lvl", level.toString());
params = params.append("ind", indexed ?? true);
2019-11-18 08:42:05 +00:00
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/features/`, {params:params});
}
getFeature(code:string, crs: string): Observable<any> {
2023-03-06 13:04:14 +00:00
let params = new HttpParams();
2019-11-18 08:42:05 +00:00
params = params.append("crs", crs);
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/${code}/feature/`, { params: params });
}
2021-01-26 18:53:51 +00:00
getItemFeature(code:string, fid:number, crs: string): Observable<any> {
2023-03-06 13:04:14 +00:00
let params = new HttpParams();
2021-01-26 18:53:51 +00:00
params = params.append("crs", crs);
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/${code}/feature/${fid}`, { params: params });
}
2019-11-18 08:42:05 +00:00
getItem(code: string): Observable<IItem> {
2020-07-07 07:24:45 +00:00
return this.httpClient.get<IItem>(`${this.ApiEndpoint()}/api/v1/items/${code}`);
2019-11-18 08:42:05 +00:00
}
2023-09-11 19:59:34 +00:00
getItemLink(itemLink: IItemLinkType): Observable<any> {
return this.httpClient.post<IItemLinkType>(`${this.ApiEndpoint()}/api/v1/itemlink`,itemLink);
}
2021-02-02 16:09:03 +00:00
getItemData(code: string,start?:number,size?:number): Observable<ArrayBuffer> {
2023-03-06 13:04:14 +00:00
let headers = new HttpHeaders();
2021-02-02 16:38:34 +00:00
if(start !== undefined && size !== undefined) headers=headers.set("Range",`bytes=${start}-${size-1}`);
2021-02-02 16:09:03 +00:00
return this.httpClient.get(`${this.ApiEndpoint()}/api/v1/items/${code}/data`,{ headers: headers,responseType: 'arraybuffer' });
2020-09-22 11:58:33 +00:00
}
2019-11-18 08:42:05 +00:00
getItemByCodeAndType(code: string, itemType: string): Observable<IItem> {
return this.httpClient.get<IItem>(`${this.ApiEndpoint()}/api/v1/items/${code}/${itemType}`);
}
2023-07-31 17:36:57 +00:00
getItemList(itemType?: string, dataFilter?: any, level?: number, atItemLocationItemCode?: string, indexed?: boolean, validToday?: boolean,tags?:string,crs?:string): Observable<IItem[]> {
2023-03-06 13:04:14 +00:00
let params = new HttpParams();
if(itemType) params = params.append("it", itemType);
if(dataFilter) params = params.append("df", JSON.stringify(dataFilter));
if(atItemLocationItemCode) params = params.append("ail",atItemLocationItemCode);
if(indexed) params = params.append("ind",indexed?"true":"false");
if (level) params = params.append("lvl", level.toFixed());
2021-05-06 12:05:43 +00:00
if (validToday) params = params.append("vt", validToday ? "true" : "false");
2023-07-31 17:36:57 +00:00
if (tags) params = params.append("t", tags);
2023-07-31 17:14:13 +00:00
if (crs) params = params.append("crs", crs);
2020-07-07 07:24:45 +00:00
return this.httpClient.get<IItem[]>(`${this.ApiEndpoint()}/api/v1/items/`, { params: params });
2019-11-18 08:42:05 +00:00
}
2023-03-06 13:04:14 +00:00
getChildItemList(parentcode: string, itemType: string, dataFilter?: any, level = 1, deep = true,
2023-05-30 19:16:20 +00:00
startDate?: Date, endDate?: Date, skip?: number, take?: number): Observable<IItem[]> {
2023-03-06 13:04:14 +00:00
let params = new HttpParams();
2020-02-27 17:01:17 +00:00
if(itemType != null) {
params = params.append("it", itemType);
}
2019-11-18 08:42:05 +00:00
if (dataFilter != null) {
params = params.append("df", JSON.stringify(dataFilter));
}
params = params.append("lvl", level.toString());
params = params.append("deep", deep.toString());
if (startDate) params = params.append("sDate", startDate.toISOString());
if (endDate) params = params.append("eDate", endDate.toISOString());
2023-05-30 19:16:20 +00:00
if(skip) params = params.append("skip", skip);
if(take) params = params.append("take", take);
2020-07-07 07:24:45 +00:00
return this.httpClient.get<IItem[]>(`${this.ApiEndpoint()}/api/v1/items/${parentcode}/children`, { params: params });
2019-11-18 08:42:05 +00:00
}
2023-03-06 13:04:14 +00:00
getChildItemListCount(parentcode: string, itemType: string,dataFilter?: any): Observable<number> {
let params = new HttpParams();
params = params.append("it", itemType);
2021-04-29 11:49:38 +00:00
if (dataFilter != null) {
params = params.append("df", JSON.stringify(dataFilter));
}
2023-03-06 13:04:14 +00:00
return this.httpClient.get<number>(`${this.ApiEndpoint()}/api/v1/items/${parentcode}/children/count`, { params: params });
}
2023-03-06 13:04:14 +00:00
getChildItemListByExtent(parentcode: string, itemType: string, extent: number[], crs: string, dataFilter?: any, level = 1): Observable<IItem[]> {
let params = new HttpParams();
2019-11-18 08:42:05 +00:00
params = params.append("it", itemType);
params = params.append("bbox", extent.join(","));
params = params.append("crs", crs);
if (dataFilter != null) {
params = params.append("df", JSON.stringify(dataFilter));
}
params = params.append("lvl", level.toString());
2020-07-07 07:24:45 +00:00
return this.httpClient.get<IItem[]>(`${this.ApiEndpoint()}/api/v1/items/${parentcode}/children`, { params: params });
2019-11-18 08:42:05 +00:00
}
getItemFeatures(code: string, extent: number[], crs: string, layerIndex?:number): Observable<any> {
2023-03-06 13:04:14 +00:00
let params = new HttpParams();
2019-11-18 08:42:05 +00:00
params = params.append("crs", crs);
if(extent != null) {
params = params.append("bbox", extent.join(","));
}
if(layerIndex!=null)
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/${code}/features/layer/${layerIndex}`, { params: params });
else
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/${code}/features`, { params: params });
}
2020-01-28 08:03:29 +00:00
postItem(item:IItem): Observable<IItem> {
2020-01-28 10:39:09 +00:00
return this.httpClient.post<IItem>(`${this.ApiEndpoint()}/api/v1/items`,item);
2020-01-28 08:03:29 +00:00
}
2019-11-18 08:42:05 +00:00
putItem(item:IItem): Observable<IItem> {
return this.httpClient.put<IItem>(`${this.ApiEndpoint()}/api/v1/items/${item.code}`,item);
}
2024-01-29 15:25:56 +00:00
putItemFile(item: IItem, jsonObject: any): Observable<IItem> {
const formData = new FormData();
const file = new File([JSON.stringify(jsonObject)], 'data.dat', {type: 'application/json'});
formData.append('file', file);
return this.httpClient.put<any>(`${this.ApiEndpoint()}/api/v1/items/${item.code}/data`, formData);
}
deleteItem(code: string): Observable<any> {
return this.httpClient.delete<any>(`${this.ApiEndpoint()}/api/v1/items/${code}`);
2020-01-30 12:58:01 +00:00
}
2019-11-18 08:42:05 +00:00
deleteItems(itemCodes:string[]): Observable<any> {
return this.httpClient.post<any>(`${this.ApiEndpoint()}/api/v1/items/delete`, itemCodes);
}
2020-06-29 14:09:19 +00:00
getTemporalLast(code: string): Observable<IJsonline> {
2019-11-18 08:42:05 +00:00
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/${code}/temporal/last`);
}
getTemporal(code: string, startDate?: Date, endDate?: Date): Observable<any> {
2023-03-06 13:04:14 +00:00
let params = new HttpParams();
2019-11-18 08:42:05 +00:00
if (startDate) params = params.append("sd", startDate.toISOString());
if (endDate) params = params.append("ed", endDate.toISOString());
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/${code}/temporal/`, { params: params });
}
postItemTask(item: IItem, task: IItemTask): Observable<IItemTask> {
return this.httpClient.post<IItemTask>(`${this.ApiEndpoint()}/api/v1/items/${item.code}/tasks`, task);
}
2020-03-27 14:53:26 +00:00
getItemTaskList(itemcode: string, unfinishedOnly?: boolean): Observable<IItemTask[]> {
2023-03-06 13:04:14 +00:00
let params = new HttpParams();
2020-03-27 14:53:26 +00:00
if (unfinishedOnly) params = params.append("unfinishedOnly", unfinishedOnly.toString());
2020-07-07 07:24:45 +00:00
return this.httpClient.get<IItemTask[]>(`${this.ApiEndpoint()}/api/v1/items/${itemcode}/tasks`, { params: params });
2020-03-26 13:05:50 +00:00
}
getItemListUsingRelationship(itemType: string, relationshipItemType: string, relationshipDataFilter: any): Observable<IItem[]> {
2023-03-06 13:04:14 +00:00
let params = new HttpParams();
params = params.append("it", itemType);
params = params.append("rsit", relationshipItemType);
params = params.append("rsdf", JSON.stringify(relationshipDataFilter));
return this.httpClient.get<IItem[]>(`${this.ApiEndpoint()}/api/v1/items/userelationship`, { params: params });
}
2021-03-05 10:10:39 +00:00
2023-03-06 13:04:14 +00:00
getLayerValue(itemCode: string, layerIndex:number,x:number,y:number,crs = "EPSG:3857"): Observable<number> {
2021-03-05 10:10:39 +00:00
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/${itemCode}/value/layer/${layerIndex}?c=${x},${y}&crs=${crs}`);
}
2023-05-30 19:16:20 +00:00
getBreadcrumbs(itemCode: string): Observable<IListItem[]> {
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/${itemCode}/breadcrumbs`);
}
}