-
Notifications
You must be signed in to change notification settings - Fork 2
/
AzureCosmosRepository.ts
108 lines (99 loc) · 3.83 KB
/
AzureCosmosRepository.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import { QueryContext } from 'js-frontend-repository/models/QueryContext';
import { Result } from 'js-frontend-repository/models/Result';
import { ResultArray } from 'js-frontend-repository/models/ResultArray';
import { RepositoryHttpBase } from 'js-frontend-repository/RepositoryHttpBase';
import { BaseFetchParamDefualt, UpdateFetchParamDefault } from 'react-native-azure-cosmos';
import { AzureFetchEntityMetaData } from './AzureFetchEntityMetaData';
export class AzureCosmosRepository<TEntity> extends RepositoryHttpBase<TEntity> {
metaData: AzureFetchEntityMetaData;
constructor(entityType: new () => TEntity, metaData: AzureFetchEntityMetaData) {
super(entityType);
this.metaData = metaData;
}
async getById(id: string, options?: any): Promise<Result<TEntity>> {
if (options?.partitionKey) throw Error('partitionKey is null or empty');
const response = await this.metaData.networking.fetch(
new UpdateFetchParamDefault(
this.metaData.context.col,
undefined,
'ById',
options!.partitionKey,
`${this.metaData.context.entityType}.${id}.${options!.partitionKey}`,
id,
this.metaData.context.dbName,
),
);
const entity = await this.map(response);
return this.first(entity);
}
async all(options?: any): Promise<ResultArray<TEntity>> {
if (options?.partitionKey) throw Error('partitionKey is null or empty');
const response = await this.metaData.networking.fetch(
new BaseFetchParamDefualt(
this.metaData.context.col,
undefined,
'AllCols',
options!.partitionKey,
`All${this.metaData.context.col}`,
this.metaData.context.dbName,
),
);
const entities = this.map(response);
return entities;
}
async query(context: QueryContext, options?: any): Promise<ResultArray<TEntity>> {
if (options.partitionKey) throw Error('options.partitionKey is not defiend');
if (options.actionname) throw Error('options.actionname is not defiend');
const response = await this.metaData.networking.fetch(
new BaseFetchParamDefualt(
this.metaData.context.col,
{
query: context.query,
parameters: context.parameters,
},
'Query',
options.partitionKey,
options.actionname,
this.metaData.context.dbName,
),
);
const entities = this.map(response);
return entities;
}
async add(entity: TEntity, options?: any): Promise<Result<TEntity>> {
if (options.partitionKey) throw Error('options.partitionKey is null or not defiend');
const response = await this.metaData.networking.fetch(
new BaseFetchParamDefualt(
this.metaData.context.col,
entity,
'Insert',
options.partitionKey,
'',
this.metaData.context.dbName,
),
);
const result = new Result<TEntity>();
const resData = await response.json();
result.status = response.status;
result.ok = response.ok;
result.message = JSON.stringify(resData);
return result;
}
async update(entity: TEntity, options?: any): Promise<Result<TEntity>> {
if (options.partitionKey) throw Error('options.partitionKey is null or not defiend');
if (options.id) throw Error('options.partitionKey is null or not defiend');
const response = await this.metaData.networking.fetch(
new UpdateFetchParamDefault(
this.metaData.context.col,
entity,
'Update',
options.partitionKey,
'',
options.id,
this.metaData.context.dbName,
),
);
const mapped = await this.map(response);
return this.first(mapped);
}
}