forked from nickward13/ServerlessOpenHack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCreateRating.cs
84 lines (70 loc) · 2.94 KB
/
CreateRating.cs
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
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System.Net.Http;
using System.Net.Http.Headers;
using Team1.Models;
namespace Team1
{
public static class CreateRating
{
private static readonly HttpClient client = new HttpClient();
[FunctionName("CreateRating")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
[CosmosDB(
databaseName: "ratingsdata",
collectionName: "ratings",
ConnectionStringSetting = "CosmosDBConnection")] out dynamic cosmosDoc,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string requestBody = new StreamReader(req.Body).ReadToEnd();
RatingClass bodyRating = JsonConvert.DeserializeObject<RatingClass>(requestBody);
cosmosDoc = null;
if(bodyRating is null)
return new BadRequestResult();
try{
Task.Run(() => ValidateUserIdAsync(bodyRating.userId));
log.LogInformation($"User validated");
} catch(Exception)
{
log.LogInformation("Couldn't validate user");
return new BadRequestResult();
}
try{
Task.Run(() => ValidateProductIdAsync(bodyRating.productId));
log.LogInformation($"Product validated");
} catch(Exception)
{
log.LogInformation("Couldn't validate product");
return new BadRequestResult();
}
bodyRating.id = Guid.NewGuid().ToString();
bodyRating.timeStamp = DateTime.UtcNow;
if(bodyRating.rating < 0 || bodyRating.rating > 5)
return new BadRequestResult();
cosmosDoc = bodyRating;
log.LogInformation($"Saving rating to CosmosDB: {cosmosDoc}");
return new OkObjectResult(bodyRating);
}
private static async Task<User> ValidateUserIdAsync(string userId)
{
var stringUser = await client.GetStringAsync($"https://serverlessohuser.trafficmanager.net/api/GetUser?userId={userId}");
var user = JsonConvert.DeserializeObject<User>(stringUser);
return user;
}
private static async Task<Product> ValidateProductIdAsync(string productId)
{
var stringProduct = await client.GetStringAsync($"https://serverlessohproduct.trafficmanager.net/api/GetProduct?productId={productId}");
var product = JsonConvert.DeserializeObject<Product>(stringProduct);
return product;
}
}
}