Skip to content

Commit 9d840cf

Browse files
committed
fix(requests): allow attributePath for onlyIfAttribute, whereAttribute
1 parent a03d2f2 commit 9d840cf

File tree

5 files changed

+44
-27
lines changed

5 files changed

+44
-27
lines changed

src/dynamo/expression/request-expression-builder.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { prepareAndAddUpdateExpressions } from './prepare-and-add-update-express
88
import {
99
ConditionExpressionDefinitionChain,
1010
ConditionExpressionDefinitionChainTyped,
11-
RequestConditionFunction,
11+
RequestConditionFunctionTyped,
1212
} from './type/condition-expression-definition-chain'
1313
import { ConditionExpressionDefinitionFunction } from './type/condition-expression-definition-function'
1414
import { OperatorAlias } from './type/condition-operator-alias.type'
@@ -66,24 +66,21 @@ export function addUpdate<R extends UpdateParamsHost, T, K extends keyof T>(
6666
/**
6767
* return the condition-functions which then can apply a conditionDefinition to the given request.params
6868
* and afterwards will return the request object (which allows chaining)
69-
* @param attributePath
70-
* @param request
71-
* @param metadata
7269
*/
7370
export function addCondition<R extends ConditionalParamsHost, T, K extends keyof T>(
7471
expressionType: ExpressionType,
7572
attributePath: K,
7673
request: R,
7774
metadata?: Metadata<T>,
78-
): RequestConditionFunction<R, T, K> {
75+
): RequestConditionFunctionTyped<R, T, K> {
7976
// f the function to create the condition functions
8077
const f = (operator: ConditionOperator) => {
8178
// return the function the user will call in the end
8279
return (...values: any[]): R => {
8380
return doAddCondition(expressionType, <string>attributePath, request, metadata, operator, ...values)
8481
}
8582
}
86-
return createConditionFunctions<RequestConditionFunction<R, T, K>>(f)
83+
return createConditionFunctions<RequestConditionFunctionTyped<R, T, K>>(f)
8784
}
8885

8986
export function addSortKeyCondition<R extends ConditionalParamsHost>(

src/dynamo/expression/type/condition-expression-definition-chain.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,8 @@ interface ConditionFunctions<T, R> {
2828

2929
export type ConditionExpressionDefinitionChain = ConditionFunctions<any, ConditionExpressionDefinitionFunction>
3030

31-
export type ConditionExpressionDefinitionChainTyped<T, K extends keyof T> = ConditionFunctions<
32-
T[K],
33-
ConditionExpressionDefinitionFunction
34-
>
31+
export type ConditionExpressionDefinitionChainTyped<T, K extends keyof T> = ConditionFunctions<T[K],
32+
ConditionExpressionDefinitionFunction>
3533

36-
export type RequestConditionFunction<R extends ConditionalParamsHost, T, K extends keyof T> = ConditionFunctions<
37-
T[K],
38-
R
39-
>
34+
export type RequestConditionFunctionTyped<R extends ConditionalParamsHost, T, K extends keyof T> = ConditionFunctions<T[K], R>
35+
export type RequestConditionFunction<R extends ConditionalParamsHost, T> = ConditionFunctions<any, R>

src/dynamo/request/read-many.request.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ import { DynamoDbWrapper } from '../dynamo-db-wrapper'
1010
import { and } from '../expression/logical-operator/and.function'
1111
import { addExpression } from '../expression/param-util'
1212
import { addCondition } from '../expression/request-expression-builder'
13-
import { RequestConditionFunction } from '../expression/type/condition-expression-definition-chain'
13+
import {
14+
RequestConditionFunction,
15+
RequestConditionFunctionTyped,
16+
} from '../expression/type/condition-expression-definition-chain'
1417
import { ConditionExpressionDefinitionFunction } from '../expression/type/condition-expression-definition-function'
1518
import { QueryRequest } from './query/query.request'
1619
import { QueryResponse } from './query/query.response'
@@ -86,8 +89,17 @@ export abstract class ReadManyRequest<T,
8689
return <any>this
8790
}
8891

89-
whereAttribute<K extends keyof T>(attributePath: K): RequestConditionFunction<R, T, K> {
90-
return addCondition('FilterExpression', attributePath, <any>this, this.metadata)
92+
93+
/**
94+
* add a condition for propertyPath
95+
* @param attributePath
96+
*/
97+
whereAttribute<K extends keyof T>(attributePath: K): RequestConditionFunctionTyped<R, T, K>
98+
whereAttribute(attributePath: string): RequestConditionFunction<R, T>
99+
whereAttribute<K extends keyof T>(attributePath: string | K): RequestConditionFunction<R, T> | RequestConditionFunctionTyped<R, T, K>
100+
101+
{
102+
return addCondition<R, T, any>('FilterExpression', attributePath, <any>this, this.metadata)
91103
}
92104

93105
where(...conditionDefFns: ConditionExpressionDefinitionFunction[]): R {

src/dynamo/request/write.request.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import { DynamoDbWrapper } from '../dynamo-db-wrapper'
88
import { and } from '../expression/logical-operator/public.api'
99
import { addExpression } from '../expression/param-util'
1010
import { addCondition } from '../expression/request-expression-builder'
11-
import { RequestConditionFunction } from '../expression/type/condition-expression-definition-chain'
11+
import {
12+
RequestConditionFunction,
13+
RequestConditionFunctionTyped,
14+
} from '../expression/type/condition-expression-definition-chain'
1215
import { ConditionExpressionDefinitionFunction } from '../expression/type/condition-expression-definition-function'
1316
import { StandardRequest } from './standard.request'
1417

@@ -31,8 +34,14 @@ export abstract class WriteRequest<T,
3134
return <R>(<any>this)
3235
}
3336

34-
onlyIfAttribute<K extends keyof T>(attributePath: K): RequestConditionFunction<R, T, K> {
35-
return addCondition<R, T, K>('ConditionExpression', attributePath, <any>this, this.metadata)
37+
/**
38+
* add a condition for propertyPath
39+
* @param attributePath
40+
*/
41+
onlyIfAttribute<K extends keyof T>(attributePath: K): RequestConditionFunctionTyped<R, T, K>
42+
onlyIfAttribute(attributePath: string): RequestConditionFunction<R, T>
43+
onlyIfAttribute<K extends keyof T>(attributePath: K | string): RequestConditionFunctionTyped<R, T, K> {
44+
return addCondition<R, T, any>('ConditionExpression', attributePath, <any>this, this.metadata)
3645
}
3746

3847
/**

src/dynamo/transactwrite/transact-base-operation.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@ import { ModelConstructor } from '../../model/model-constructor'
55
import { and } from '../expression/logical-operator/and.function'
66
import { addExpression } from '../expression/param-util'
77
import { addCondition } from '../expression/request-expression-builder'
8-
import { RequestConditionFunction } from '../expression/type/condition-expression-definition-chain'
8+
import {
9+
RequestConditionFunction,
10+
RequestConditionFunctionTyped,
11+
} from '../expression/type/condition-expression-definition-chain'
912
import { ConditionExpressionDefinitionFunction } from '../expression/type/condition-expression-definition-function'
1013
import { getTableName } from '../get-table-name.function'
1114
import { ConditionalParamsHost } from '../operation-params.type'
1215

13-
export abstract class TransactBaseOperation<
14-
T,
16+
export abstract class TransactBaseOperation<T,
1517
I extends DynamoDB.ConditionCheck | DynamoDB.Put | DynamoDB.Update | DynamoDB.Delete,
16-
R extends TransactBaseOperation<T, I, any>
17-
> implements ConditionalParamsHost {
18+
R extends TransactBaseOperation<T, I, any>> implements ConditionalParamsHost {
1819
readonly params: I
1920
readonly metadata: Metadata<T>
2021
readonly modelClazz: ModelConstructor<T>
@@ -37,8 +38,10 @@ export abstract class TransactBaseOperation<
3738
}
3839
}
3940

40-
onlyIfAttribute<K extends keyof T>(attributePath: K): RequestConditionFunction<R, T, K> {
41-
return addCondition('ConditionExpression', attributePath, <R>(<any>this), this.metadata)
41+
onlyIfAttribute<K extends keyof T>(attributePath: K): RequestConditionFunctionTyped<R, T, K>
42+
onlyIfAttribute(attributePath: string): RequestConditionFunction<R, T>
43+
onlyIfAttribute<K extends keyof T>(attributePath: string | K): RequestConditionFunction<R, T> | RequestConditionFunctionTyped<R, T, K> {
44+
return addCondition<R, T, any>('ConditionExpression', attributePath, <R>(<any>this), this.metadata)
4245
}
4346

4447
onlyIf(...conditionDefFns: ConditionExpressionDefinitionFunction[]): R {

0 commit comments

Comments
 (0)