Skip to content

Commit 02342a8

Browse files
authored
read cosmos db schema and resolver from file (#35)
This PR only has changes for the Cosmos DB service: - read cosmos db config (schema and resolvers) from file - removed rest apis for setting (schema and resolver)
1 parent 7b66ad2 commit 02342a8

File tree

12 files changed

+74
-288
lines changed

12 files changed

+74
-288
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using System.Collections.Generic;
2+
using Cosmos.GraphQL.Service.Models;
3+
using Cosmos.GraphQL.Services;
4+
5+
namespace Cosmos.GraphQL.Service.Tests
6+
{
7+
public class MetadataStoreProviderForTest : IMetadataStoreProvider
8+
{
9+
private string _graphQLSchema;
10+
private IDictionary<string, MutationResolver> _mutationResolvers = new Dictionary<string, MutationResolver>();
11+
private IDictionary<string, GraphQLQueryResolver> _queryResolvers = new Dictionary<string, GraphQLQueryResolver>();
12+
13+
public void StoreGraphQLSchema(string schema)
14+
{
15+
_graphQLSchema = schema;
16+
}
17+
18+
public string GetGraphQLSchema()
19+
{
20+
return _graphQLSchema;
21+
}
22+
23+
public MutationResolver GetMutationResolver(string name)
24+
{
25+
MutationResolver result;
26+
_mutationResolvers.TryGetValue(name, out result);
27+
return result;
28+
}
29+
30+
public GraphQLQueryResolver GetQueryResolver(string name)
31+
{
32+
GraphQLQueryResolver result;
33+
_queryResolvers.TryGetValue(name, out result);
34+
return result;
35+
}
36+
37+
public void StoreMutationResolver(MutationResolver mutationResolver)
38+
{
39+
_mutationResolvers.Add(mutationResolver.id, mutationResolver);
40+
}
41+
42+
public void StoreQueryResolver(GraphQLQueryResolver queryResolver)
43+
{
44+
_queryResolvers.Add(queryResolver.id, queryResolver);
45+
}
46+
}
47+
}

Cosmos.GraphQL.Service/Cosmos.GraphQL.Service.Tests/MutationTests.cs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,18 @@ namespace Cosmos.GraphQL.Service.Tests
77
[TestClass, TestCategory(TestCategory.Cosmos)]
88
public class MutationTests : TestBase
99
{
10-
11-
1210
[TestMethod]
1311
public async Task TestMutationRun()
1412
{
15-
1613
// Add mutation resolver
17-
this.controller.addMutationResolver(TestHelper.SampleMutationResolver());
14+
_metadataStoreProvider.StoreMutationResolver(TestHelper.SampleMutationResolver());
1815

1916
// Run mutation;
20-
controller.ControllerContext.HttpContext = GetHttpContextWithBody(TestHelper.SampleMutation);
21-
JsonDocument response = await controller.Post();
17+
_controller.ControllerContext.HttpContext = GetHttpContextWithBody(TestHelper.SampleMutation);
18+
JsonDocument response = await _controller.PostAsync();
2219

2320
// Validate results
2421
Assert.IsFalse(response.ToString().Contains("Error"));
2522
}
26-
27-
/* [ClassInitialize]
28-
public void Init()
29-
{
30-
31-
}
32-
*/
33-
3423
}
3524
}

Cosmos.GraphQL.Service/Cosmos.GraphQL.Service.Tests/QueryTests.cs

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,18 @@ namespace Cosmos.GraphQL.Service.Tests
77
[TestClass, TestCategory(TestCategory.Cosmos)]
88
public class QueryTests : TestBase
99
{
10-
11-
1210
[TestMethod]
1311
public async Task TestSimpleQuery()
1412
{
15-
1613
// Add query resolver
17-
this.controller.addResolver(TestHelper.SampleQueryResolver());
14+
_metadataStoreProvider.StoreQueryResolver(TestHelper.SampleQueryResolver());
1815

1916
// Run query
20-
controller.ControllerContext.HttpContext = GetHttpContextWithBody(TestHelper.SampleQuery);
21-
JsonDocument response = await controller.Post();
17+
_controller.ControllerContext.HttpContext = GetHttpContextWithBody(TestHelper.SampleQuery);
18+
JsonDocument response = await _controller.PostAsync();
2219

2320
// Validate results
2421
Assert.IsFalse(response.ToString().Contains("Error"));
2522
}
26-
27-
28-
/* [ClassInitialize]
29-
public void Init()
30-
{
31-
32-
}
33-
*/
34-
3523
}
3624
}

Cosmos.GraphQL.Service/Cosmos.GraphQL.Service.Tests/SchemaTests.cs

Lines changed: 0 additions & 48 deletions
This file was deleted.

Cosmos.GraphQL.Service/Cosmos.GraphQL.Service.Tests/TestBase.cs

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ namespace Cosmos.GraphQL.Service.Tests
1212
{
1313
public class TestBase
1414
{
15-
internal GraphQLService graphQLService;
16-
internal CosmosClientProvider clientProvider;
17-
internal IMetadataStoreProvider metadataStoreProvider;
18-
internal CosmosQueryEngine queryEngine;
19-
internal CosmosMutationEngine mutationEngine;
20-
internal GraphQLController controller;
15+
protected GraphQLService _graphQLService;
16+
protected CosmosClientProvider _clientProvider;
17+
protected IMetadataStoreProvider _metadataStoreProvider;
18+
protected CosmosQueryEngine _queryEngine;
19+
protected CosmosMutationEngine _mutationEngine;
20+
protected GraphQLController _controller;
2121

2222
public TestBase()
2323
{
@@ -28,17 +28,17 @@ public TestBase()
2828
private void Init()
2929
{
3030
TestHelper.LoadConfig();
31-
clientProvider = new CosmosClientProvider();
31+
_clientProvider = new CosmosClientProvider();
3232
string uid = Guid.NewGuid().ToString();
3333
dynamic sourceItem = TestHelper.GetItem(uid);
34-
clientProvider.GetClient().GetContainer(TestHelper.DB_NAME, TestHelper.COL_NAME).CreateItemAsync(sourceItem, new PartitionKey(uid));
35-
metadataStoreProvider = new CachedMetadataStoreProvider(new DocumentMetadataStoreProvider(clientProvider));
3634

37-
queryEngine = new CosmosQueryEngine(clientProvider, metadataStoreProvider);
38-
mutationEngine = new CosmosMutationEngine(clientProvider, metadataStoreProvider);
39-
graphQLService = new GraphQLService(queryEngine, mutationEngine, metadataStoreProvider);
40-
graphQLService.parseAsync(TestHelper.GraphQLTestSchema);
41-
controller = new GraphQLController(null, queryEngine, mutationEngine, graphQLService);
35+
_clientProvider.GetClient().GetContainer(TestHelper.DB_NAME, TestHelper.COL_NAME).CreateItemAsync(sourceItem, new PartitionKey(uid));
36+
_metadataStoreProvider = new MetadataStoreProviderForTest();
37+
_queryEngine = new CosmosQueryEngine(_clientProvider, _metadataStoreProvider);
38+
_mutationEngine = new CosmosMutationEngine(_clientProvider, _metadataStoreProvider);
39+
_graphQLService = new GraphQLService(_queryEngine, _mutationEngine, _metadataStoreProvider);
40+
_graphQLService.parseAsync(TestHelper.GraphQLTestSchema);
41+
_controller = new GraphQLController(null, _queryEngine, _mutationEngine, _graphQLService);
4242
}
4343

4444
internal static DefaultHttpContext GetHttpContextWithBody(string data)
@@ -53,7 +53,5 @@ internal static DefaultHttpContext GetHttpContextWithBody(string data)
5353
};
5454
return httpContext;
5555
}
56-
57-
5856
}
5957
}

Cosmos.GraphQL.Service/Cosmos.GraphQL.Service/Controllers/GraphQLController.cs

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
using Microsoft.AspNetCore.Mvc;
22
using Microsoft.Extensions.Logging;
3-
using System;
43
using System.Threading.Tasks;
5-
using Cosmos.GraphQL.Service.Models;
64
using System.IO;
75
using System.Text.Json;
86
using Cosmos.GraphQL.Services;
@@ -25,48 +23,15 @@ public class GraphQLController : ControllerBase
2523
private readonly GraphQLService _schemaManager;
2624

2725
public GraphQLController(ILogger<GraphQLController> logger, IQueryEngine queryEngine, IMutationEngine mutationEngine, GraphQLService schemaManager)
28-
2926
{
3027
_logger = logger;
3128
_queryEngine = queryEngine;
3229
_mutationEngine = mutationEngine;
3330
_schemaManager = schemaManager;
3431
}
3532

36-
[Route("addResolver")]
37-
[HttpPost]
38-
public void addResolver(GraphQLQueryResolver resolver)
39-
{
40-
_queryEngine.RegisterResolver(resolver);
41-
}
42-
43-
[Route("addMutationResolver")]
44-
[HttpPost]
45-
public void addMutationResolver(MutationResolver resolver)
46-
{
47-
_mutationEngine.RegisterResolver(resolver);
48-
}
49-
50-
[Route("schema")]
51-
[HttpPost]
52-
public async void Schema()
53-
{
54-
string data;
55-
using (StreamReader reader = new StreamReader(this.HttpContext.Request.Body))
56-
{
57-
data = await reader.ReadToEndAsync();
58-
}
59-
if (!String.IsNullOrEmpty(data))
60-
{
61-
this._schemaManager.parseAsync(data);
62-
return;
63-
}
64-
65-
throw new InvalidDataException();
66-
}
67-
6833
[HttpPost]
69-
public async Task<JsonDocument> Post()
34+
public async Task<JsonDocument> PostAsync()
7035
{
7136
string requestBody;
7237
using (StreamReader reader = new StreamReader(this.HttpContext.Request.Body))

Cosmos.GraphQL.Service/Cosmos.GraphQL.Service/Resolvers/CosmosMutationEngine.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,10 @@ public CosmosMutationEngine(CosmosClientProvider clientProvider, IMetadataStoreP
2828
/// <param name="resolver">The given mutation resolver.</param>
2929
public void RegisterResolver(MutationResolver resolver)
3030
{
31-
// TODO: add into system container/rp
32-
this._metadataStoreProvider.StoreMutationResolver(resolver);
31+
// TODO no op for now. remove me
3332
}
3433

35-
private async Task<JObject> executeAsync(IDictionary<string, object> inputDict, MutationResolver resolver)
34+
private async Task<JObject> ExecuteAsync(IDictionary<string, object> inputDict, MutationResolver resolver)
3635
{
3736
// TODO: add support for all mutation types
3837
// we only support CreateOrUpdate (Upsert) for now
@@ -73,7 +72,7 @@ public async Task<JsonDocument> ExecuteAsync(string graphQLMutationName,
7372

7473
// TODO: we are doing multiple round of serialization/deserialization
7574
// fixme
76-
JObject jObject = await executeAsync(parameters, resolver);
75+
JObject jObject = await ExecuteAsync(parameters, resolver);
7776
return JsonDocument.Parse(jObject.ToString());
7877
}
7978
}

Cosmos.GraphQL.Service/Cosmos.GraphQL.Service/Resolvers/SqlQueryEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Cosmos.GraphQL.Service.Resolvers
1313
//</summary>
1414
public class SqlQueryEngine : IQueryEngine
1515
{
16-
private IMetadataStoreProvider _metadataStoreProvider;
16+
private readonly IMetadataStoreProvider _metadataStoreProvider;
1717
private readonly IQueryExecutor _queryExecutor;
1818
private readonly IQueryBuilder _queryBuilder;
1919

Cosmos.GraphQL.Service/Cosmos.GraphQL.Service/Services/CachedMetadataStoreProvider.cs

Lines changed: 0 additions & 76 deletions
This file was deleted.

0 commit comments

Comments
 (0)