|
@@ -397,24 +397,156 @@ namespace TEAMModelOS.Controllers.Learn
|
|
|
[AuthToken(Roles = "teacher,student,admin")]
|
|
|
public async Task<IActionResult> Interact(JsonElement request)
|
|
|
{
|
|
|
-
|
|
|
+ if (!HttpContext.Items.TryGetValue("Scope", out object _scope)) return BadRequest();
|
|
|
+ var client = _azureCosmos.GetCosmosClient();
|
|
|
+ var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
|
|
|
+ long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
if (!request.TryGetProperty("opt", out JsonElement _opt)) return BadRequest();
|
|
|
- if (!request.TryGetProperty("tmdid", out JsonElement _tmdid)) return BadRequest();
|
|
|
+ if (!request.TryGetProperty("id", out JsonElement _id)) return BadRequest();
|
|
|
+ if (!request.TryGetProperty("code", out JsonElement _code)) return BadRequest();
|
|
|
+ if (!request.TryGetProperty("targetType", out JsonElement _targetType)) return BadRequest();
|
|
|
+ string tbname = "Student";
|
|
|
+ if ($"{_targetType}".Equals("research", StringComparison.OrdinalIgnoreCase))
|
|
|
+ {
|
|
|
+ tbname = "Teacher";
|
|
|
+
|
|
|
+ }
|
|
|
+ else if ($"{_targetType}".Equals("student", StringComparison.OrdinalIgnoreCase))
|
|
|
+ {
|
|
|
+ tbname = "Student";
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
try
|
|
|
{
|
|
|
switch (true)
|
|
|
- {
|
|
|
- //提交答案
|
|
|
+ {
|
|
|
+ //作答记录
|
|
|
+ case bool when $"{_opt}".Equals("AnswerRecord", StringComparison.OrdinalIgnoreCase):
|
|
|
+ if (!request.TryGetProperty("userid", out JsonElement _userid)) return BadRequest();
|
|
|
+ if (!request.TryGetProperty("userType", out JsonElement _userType)) return BadRequest();
|
|
|
+
|
|
|
+ string partition = $"HomeworkRecord-{userid}";
|
|
|
+ if ($"{_userType}".Equals("student"))
|
|
|
+ {
|
|
|
+ request.TryGetProperty("userSchool", out JsonElement _userSchool);
|
|
|
+ partition = $"HomeworkRecord-{_userSchool}-{userid}";
|
|
|
+ }
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ HomeworkRecord record = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemAsync<HomeworkRecord>($"{_id}", new PartitionKey(partition));
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, tbname).ReplaceItemAsync<HomeworkRecord>(record, $"{_id}", new PartitionKey(partition));
|
|
|
+ return Ok(new { record });
|
|
|
+ }
|
|
|
+ catch (CosmosException ex) {
|
|
|
+ return Ok(new {error=404 });
|
|
|
+ }
|
|
|
+ //提交答案
|
|
|
case bool when $"{_opt}".Equals("SubmitAnswer", StringComparison.OrdinalIgnoreCase):
|
|
|
+ if (!request.TryGetProperty("content", out JsonElement _content)) return BadRequest();
|
|
|
+ string partitionKey = $"HomeworkRecord-{userid}";
|
|
|
+ if ($"{_scope}".Equals(Constant.ScopeStudent))
|
|
|
+ {
|
|
|
+ partitionKey = $"HomeworkRecord-{school}-{userid}";
|
|
|
+ }
|
|
|
+ Content content = _content.ToObject<Content>();
|
|
|
+ int taskStatus = -1;
|
|
|
+ byte msgid = 0;
|
|
|
+ if (content != null)
|
|
|
+ {
|
|
|
|
|
|
-
|
|
|
- break;
|
|
|
- //评论
|
|
|
+ try
|
|
|
+ {
|
|
|
+ HomeworkRecord record = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemAsync<HomeworkRecord>($"{_id}", new PartitionKey(partitionKey));
|
|
|
+ record.content = content;
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, tbname).ReplaceItemAsync<HomeworkRecord>(record, $"{_id}", new PartitionKey(partitionKey));
|
|
|
+ taskStatus = 1;
|
|
|
+ msgid = 1;
|
|
|
+ }
|
|
|
+ catch (CosmosException ex)
|
|
|
+ {
|
|
|
+ if (ex.Status == 404)
|
|
|
+ {
|
|
|
+ HomeworkRecord record = new HomeworkRecord
|
|
|
+ {
|
|
|
+ teacher = $"{_code}",
|
|
|
+ school = school,
|
|
|
+ id = $"{_id}",
|
|
|
+ code = partitionKey,
|
|
|
+ content = content,
|
|
|
+ pk = "HomeworkRecord",
|
|
|
+ ttl = -1,
|
|
|
+ time = now
|
|
|
+ };
|
|
|
+ record = await client.GetContainer(Constant.TEAMModelOS, tbname).CreateItemAsync<HomeworkRecord>(record, new PartitionKey(partitionKey));
|
|
|
+ taskStatus = 1;
|
|
|
+ msgid = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if ($"{_scope}".Equals(Constant.ScopeStudent)) {
|
|
|
+ StuActivity activity = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Student").ReadItemAsync<StuActivity>($"{_id}", new PartitionKey($"Activity-{school}-{userid}"));
|
|
|
+ activity.taskStatus = taskStatus;
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Student").ReplaceItemAsync<StuActivity>(activity, $"{_id}", new PartitionKey($"Activity-{school}-{userid}"));
|
|
|
+ }
|
|
|
+ if ($"{_scope}".Equals(Constant.ScopeTmdUser))
|
|
|
+ {
|
|
|
+ StuActivity activity = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Student").ReadItemAsync<StuActivity>($"{_id}", new PartitionKey($"Activity-{userid}"));
|
|
|
+ activity.taskStatus = taskStatus;
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Student").ReplaceItemAsync<StuActivity>(activity, $"{_id}", new PartitionKey($"Activity-{userid}"));
|
|
|
+ }
|
|
|
+ if ($"{_scope}".Equals(Constant.ScopeTeacher))
|
|
|
+ {
|
|
|
+ StuActivity activity = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<StuActivity>($"{_id}", new PartitionKey($"Activity-{userid}"));
|
|
|
+ activity.taskStatus = taskStatus;
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<StuActivity>(activity, $"{_id}", new PartitionKey($"Activity-{userid}"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (CosmosException ex)
|
|
|
+ {
|
|
|
+ taskStatus = -1;
|
|
|
+ }
|
|
|
+ return Ok(new { msgid, taskStatus });
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return Ok(new { msgid, taskStatus ,error =400});
|
|
|
+ }
|
|
|
+ //评论
|
|
|
case bool when $"{_opt}".Equals("Comment", StringComparison.OrdinalIgnoreCase):
|
|
|
- break;
|
|
|
- //打分
|
|
|
- case bool when $"{_opt}".Equals("Score", StringComparison.OrdinalIgnoreCase):
|
|
|
- break;
|
|
|
+ try
|
|
|
+ {
|
|
|
+ string partitionkey = "";
|
|
|
+ HomeworkRecord record = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemAsync<HomeworkRecord>($"{_id}", new PartitionKey(partitionkey));
|
|
|
+ return Ok(new { error = 404 });
|
|
|
+ }
|
|
|
+ catch (CosmosException ex)
|
|
|
+ {
|
|
|
+ return Ok(new { error = 404 });
|
|
|
+ }
|
|
|
+ catch (Exception ex) {
|
|
|
+ return BadRequest(new { error = 400 });
|
|
|
+ }
|
|
|
+ //打分
|
|
|
+ case bool when $"{_opt}".Equals("MarkScore", StringComparison.OrdinalIgnoreCase):
|
|
|
+ try
|
|
|
+ {
|
|
|
+ string pkey = "";
|
|
|
+ HomeworkRecord record = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemAsync<HomeworkRecord>($"{_id}", new PartitionKey(pkey));
|
|
|
+ if (!request.TryGetProperty("score", out JsonElement _score)) return BadRequest();
|
|
|
+ record.score = double.Parse($"{_score}");
|
|
|
+ await client.GetContainer(Constant.TEAMModelOS, tbname).ReplaceItemAsync<HomeworkRecord>(record, $"{_id}", new PartitionKey(pkey));
|
|
|
+ return Ok(new { status = true });
|
|
|
+ }
|
|
|
+ catch (CosmosException ex)
|
|
|
+ {
|
|
|
+ return Ok(new { error = 404 });
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ return BadRequest(new { error = 400 });
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
catch (CosmosException ex)
|