Comparing version 0.0.8-alpha.1 to 0.0.8-alpha.2
@@ -11,4 +11,5 @@ import { ApiQuery } from "./ApiQuery"; | ||
private buildReadQuery; | ||
private buildChangeQuery; | ||
private buildCreateQuery; | ||
build: (request: ApiRequest) => ApiQuery; | ||
} |
@@ -175,3 +175,47 @@ "use strict"; | ||
query.unshift(new QueryEdgeQueryStep(baseQuery)); | ||
if (request.body) | ||
query.unshift(new ExtendContextQueryStep(request.context)); | ||
if (lastSegment instanceof ApiRequest_1.EntryPathSegment) { | ||
query.unshift(new ExtendContextQueryStep(new ApiEdgeQueryContext_1.ApiEdgeQueryContext(lastSegment.id))); | ||
} | ||
else if (lastSegment instanceof ApiRequest_1.RelatedFieldPathSegment) { | ||
query.unshift(new ProvideIdQueryStep(lastSegment.relation.relationId)); | ||
} | ||
else { | ||
} | ||
var readMode = true; | ||
for (var i = segments.length - 2; i >= 0; i--) { | ||
var currentSegment = segments[i]; | ||
var relation = segments[i + 1].relation; | ||
if (relation && !(relation instanceof OneToOneRelation_1.OneToOneRelation)) { | ||
query.unshift(new RelateQueryStep(relation)); | ||
} | ||
if (readMode) { | ||
readMode = _this.buildReadStep(query, currentSegment); | ||
} | ||
else { | ||
readMode = _this.buildCheckStep(query, currentSegment); | ||
} | ||
} | ||
return query; | ||
}; | ||
this.buildChangeQuery = function (request) { | ||
var query = new ApiQuery_1.ApiQuery(); | ||
var segments = request.path.segments, lastSegment = segments[segments.length - 1]; | ||
var baseQuery; | ||
if (lastSegment instanceof ApiRequest_1.EdgePathSegment) { | ||
if (request.type === ApiRequest_1.ApiRequestType.Update) { | ||
baseQuery = new ApiEdgeQuery_1.ApiEdgeQuery(lastSegment.edge, ApiEdgeQueryType_1.ApiEdgeQueryType.Update); | ||
} | ||
else { | ||
baseQuery = new ApiEdgeQuery_1.ApiEdgeQuery(lastSegment.edge, ApiEdgeQueryType_1.ApiEdgeQueryType.Delete); | ||
} | ||
} | ||
else if (lastSegment instanceof ApiRequest_1.RelatedFieldPathSegment) { | ||
baseQuery = new ApiEdgeQuery_1.ApiEdgeQuery(lastSegment.relation.to, ApiEdgeQueryType_1.ApiEdgeQueryType.Get); | ||
} | ||
else { | ||
baseQuery = new ApiEdgeQuery_1.ApiEdgeQuery(lastSegment.edge, ApiEdgeQueryType_1.ApiEdgeQueryType.Get); | ||
} | ||
query.unshift(new QueryEdgeQueryStep(baseQuery)); | ||
if (request.type === ApiRequest_1.ApiRequestType.Update) | ||
query.unshift(new SetBodyQueryStep(request.body)); | ||
@@ -216,5 +260,6 @@ query.unshift(new ExtendContextQueryStep(request.context)); | ||
case ApiRequest_1.ApiRequestType.Read: | ||
return _this.buildReadQuery(request); | ||
case ApiRequest_1.ApiRequestType.Update: | ||
case ApiRequest_1.ApiRequestType.Delete: | ||
return _this.buildReadQuery(request); | ||
return _this.buildChangeQuery(request); | ||
case ApiRequest_1.ApiRequestType.Create: | ||
@@ -221,0 +266,0 @@ return _this.buildCreateQuery(request); |
{ | ||
"name": "api-core", | ||
"version": "0.0.8-alpha.1", | ||
"version": "0.0.8-alpha.2", | ||
"description": "Core classes for building dynamic model based multi-level APIs for any provider.", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
@@ -261,3 +261,2 @@ import {QueryStep, QueryScope, ApiQuery} from "./ApiQuery"; | ||
//STEP 2: Provide context for the base query. | ||
if(request.body) query.unshift(new SetBodyQueryStep(request.body)); | ||
query.unshift(new ExtendContextQueryStep(request.context)); | ||
@@ -300,2 +299,66 @@ | ||
private buildChangeQuery = (request: ApiRequest): ApiQuery => { | ||
let query = new ApiQuery(); | ||
let segments = request.path.segments, | ||
lastSegment = segments[segments.length-1]; | ||
//STEP 1: Create the base query which will provide the final data. | ||
let baseQuery: ApiEdgeQuery; | ||
if(lastSegment instanceof EdgePathSegment) { | ||
if(request.type === ApiRequestType.Update) { | ||
baseQuery = new ApiEdgeQuery(lastSegment.edge, ApiEdgeQueryType.Update); | ||
} | ||
else { | ||
baseQuery = new ApiEdgeQuery(lastSegment.edge, ApiEdgeQueryType.Delete); | ||
} | ||
} | ||
else if(lastSegment instanceof RelatedFieldPathSegment) { | ||
baseQuery = new ApiEdgeQuery(lastSegment.relation.to, ApiEdgeQueryType.Get); | ||
} | ||
//TODO: Add support for method calls | ||
else { | ||
baseQuery = new ApiEdgeQuery(lastSegment.edge, ApiEdgeQueryType.Get); | ||
} | ||
query.unshift(new QueryEdgeQueryStep(baseQuery)); | ||
//STEP 2: Provide context for the base query. | ||
if(request.type === ApiRequestType.Update) query.unshift(new SetBodyQueryStep(request.body)); | ||
query.unshift(new ExtendContextQueryStep(request.context)); | ||
//STEP 3: Provide ID for the base query. | ||
if(lastSegment instanceof EntryPathSegment) { | ||
query.unshift(new ExtendContextQueryStep(new ApiEdgeQueryContext(lastSegment.id))) | ||
} | ||
else if(lastSegment instanceof RelatedFieldPathSegment) { | ||
query.unshift(new ProvideIdQueryStep(lastSegment.relation.relationId)) | ||
} | ||
else { | ||
//TODO: Add support for method calls | ||
} | ||
//STEP 4: Provide filters and validation for the base query. | ||
let readMode = true; | ||
for(let i = segments.length-2; i >= 0; i--) { | ||
let currentSegment = segments[i]; | ||
//STEP 1: Relate to the current query. | ||
let relation = segments[i+1].relation; | ||
if(relation && !(relation instanceof OneToOneRelation)) { | ||
query.unshift(new RelateQueryStep(relation)); | ||
} | ||
//STEP 2: Read or Check | ||
if(readMode) { | ||
readMode = this.buildReadStep(query, currentSegment) | ||
} | ||
else { | ||
readMode = this.buildCheckStep(query, currentSegment) | ||
} | ||
} | ||
//STEP 5: Return the completed query. | ||
return query | ||
}; | ||
private buildCreateQuery = (request: ApiRequest): ApiQuery => { | ||
@@ -326,5 +389,6 @@ let query = new ApiQuery(); | ||
case ApiRequestType.Read: | ||
return this.buildReadQuery(request); | ||
case ApiRequestType.Update: | ||
case ApiRequestType.Delete: | ||
return this.buildReadQuery(request); | ||
return this.buildChangeQuery(request); | ||
case ApiRequestType.Create: | ||
@@ -331,0 +395,0 @@ return this.buildCreateQuery(request); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
317278
4471