|
@@ -36,7 +36,7 @@ namespace TEAMModelOS.Controllers
|
|
|
_option = option?.Value; ;
|
|
|
}
|
|
|
/// <summary>
|
|
|
- /// 查询所有话题
|
|
|
+ /// 查询话题
|
|
|
/// </summary>
|
|
|
/// <param name="request"></param>
|
|
|
/// <returns></returns>
|
|
@@ -54,8 +54,9 @@ namespace TEAMModelOS.Controllers
|
|
|
{
|
|
|
if (!request.TryGetProperty("debateId", out JsonElement _debateId)) { return BadRequest(); }
|
|
|
if (!request.TryGetProperty("debateCode", out JsonElement _debateCode)) { return BadRequest(); }
|
|
|
+ string debateCode = $"{_debateCode}".StartsWith("Debate-") ? $"{_debateCode}" : $"Debate-{_debateCode}";
|
|
|
List<dynamic> debates = new List<dynamic>();
|
|
|
- Debate debate = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Debate>($"{_debateId}", new PartitionKey($"{_debateCode}"));
|
|
|
+ Debate debate = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Debate>($"{_debateId}", new PartitionKey($"{debateCode}"));
|
|
|
return Ok(new { debate = debate , replyCount = debate.replies!=null ?debate.replies.Count:0});
|
|
|
}
|
|
|
catch (Exception ex)
|
|
@@ -83,7 +84,7 @@ namespace TEAMModelOS.Controllers
|
|
|
{
|
|
|
if (!request.TryGetProperty("debateId", out JsonElement _debateId)) { return BadRequest(); }
|
|
|
if (!request.TryGetProperty("debateCode", out JsonElement _debateCode)) { return BadRequest(); }
|
|
|
- List<dynamic> debates = new List<dynamic>();
|
|
|
+ string debateCode = $"{_debateCode}".StartsWith("Debate-") ? $"{_debateCode}" : $"Debate-{_debateCode}";
|
|
|
await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").DeleteItemAsync<Debate>($"{_debateId}", new PartitionKey($"{_debateCode}"));
|
|
|
return Ok(new { status=200});
|
|
|
}
|
|
@@ -116,7 +117,7 @@ namespace TEAMModelOS.Controllers
|
|
|
request.TryGetProperty("comid", out JsonElement _comid);
|
|
|
if (request.TryGetProperty("code", out JsonElement code))
|
|
|
{
|
|
|
- StringBuilder stringBuilder = new StringBuilder($"select c.id,c.code,c.tmdid,c.tmdname,c.title,c.comment,c.time,c.comid,c.likeCount,c.school,c.likes,c.wordCount,c.timeoutReply,c.expire,c.source,c.pk, ARRAY_LENGTH( c.replies ) as replyCount from c where c.pk='Debate' ");
|
|
|
+ StringBuilder stringBuilder = new StringBuilder($"select c.id,c.code,c.tmdid,c.userType,c.tmdname,c.title,c.comment,c.time,c.comid,c.likeCount,c.school,c.wordCount,c.timeoutReply,c.expire,c.source,c.pk, ARRAY_LENGTH( c.replies ) as replyCount from c where c.pk='Debate' ");
|
|
|
if (!string.IsNullOrEmpty($"{_source}")) {
|
|
|
stringBuilder.Append($" and c.source='{_source}'");
|
|
|
}
|
|
@@ -176,14 +177,15 @@ namespace TEAMModelOS.Controllers
|
|
|
[ProducesDefaultResponseType]
|
|
|
[HttpPost("reply")]
|
|
|
[Authorize(Roles = "IES")]
|
|
|
- [AuthToken(Roles = "admin,teacher")]
|
|
|
+ [AuthToken(Roles = "admin,teacher,student")]
|
|
|
public async Task<IActionResult> reply(JsonElement request) {
|
|
|
var (userid, _, _, school) = HttpContext.GetAuthTokenInfo();
|
|
|
if (!request.TryGetProperty("opt", out JsonElement _opt)) { return BadRequest(); }
|
|
|
if (!request.TryGetProperty("debateId", out JsonElement _debateId)) { return BadRequest(); }
|
|
|
if (!request.TryGetProperty("debateCode", out JsonElement _debateCode)) { return BadRequest(); }
|
|
|
- if (!request.TryGetProperty("reply", out JsonElement _reply)) { return BadRequest(); }
|
|
|
+
|
|
|
DebateReply reply = null;
|
|
|
+ string debateCode = $"{_debateCode}".StartsWith("Debate-") ? $"{_debateCode}" : $"Debate-{_debateCode}";
|
|
|
if (!string.IsNullOrEmpty($"{_debateId}") && !string.IsNullOrEmpty($"{_debateCode}") && !string.IsNullOrEmpty($"{_opt}"))
|
|
|
{
|
|
|
switch ($"{_opt}")
|
|
@@ -191,25 +193,76 @@ namespace TEAMModelOS.Controllers
|
|
|
case "add":
|
|
|
try
|
|
|
{
|
|
|
- Debate debate = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Debate>($"{_debateId}", new PartitionKey($"{_debateCode}"));
|
|
|
+ if (!request.TryGetProperty("reply", out JsonElement _reply)) { return BadRequest(); }
|
|
|
+ Debate debate = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Debate>($"{_debateId}", new PartitionKey($"{debateCode}"));
|
|
|
reply = _reply.ToObject<DebateReply>();
|
|
|
reply.pid = string.IsNullOrEmpty(reply.pid) ? $"{_debateId}" : reply.pid;
|
|
|
reply.id = string.IsNullOrEmpty(reply.id) ? Guid.NewGuid().ToString() : reply.id;
|
|
|
reply.time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
debate.replies.Add(reply);
|
|
|
- await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Debate>(debate, $"{_debateId}", new PartitionKey($"{_debateCode}"));
|
|
|
+ debate.likeCount = debate.replies.SelectMany(z => z.likes).Count();
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Debate>(debate, $"{_debateId}", new PartitionKey($"{debateCode}"));
|
|
|
return Ok(new { reply , replyCount = debate.replies.Count });
|
|
|
}
|
|
|
catch (CosmosException ex)
|
|
|
{
|
|
|
return BadRequest();
|
|
|
}
|
|
|
+ case "like":
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Debate debate = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Debate>($"{_debateId}", new PartitionKey($"{debateCode}"));
|
|
|
+ if (!request.TryGetProperty("likeData", out JsonElement _likeData)) { return BadRequest(); }
|
|
|
+ LikeRcd likeRcd = _likeData.ToObject<LikeRcd>();
|
|
|
+ if (likeRcd != null && !string.IsNullOrWhiteSpace(likeRcd.replyId))
|
|
|
+ {
|
|
|
+ var replyData = debate.replies.Find(x => $"{likeRcd.replyId}".Equals(x.id));
|
|
|
+ var like = replyData.likes.FindAll(c => !string.IsNullOrWhiteSpace(c.tmdid) && c.tmdid.Equals(likeRcd.tmdid) && !string.IsNullOrWhiteSpace(c.userType) && c.userType.Equals(likeRcd.userType));
|
|
|
+ if (like.IsEmpty())
|
|
|
+ {
|
|
|
+ replyData.likes.Add(likeRcd);
|
|
|
+ }
|
|
|
+ debate.likeCount = debate.replies.SelectMany(z => z.likes).Count();
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Debate>(debate, $"{_debateId}", new PartitionKey($"{debateCode}"));
|
|
|
+ return Ok(new { reply, replyCount = debate.replies.Count });
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return BadRequest();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (CosmosException ex)
|
|
|
+ {
|
|
|
+ return BadRequest();
|
|
|
+ }
|
|
|
+ case "unlike":
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Debate debate = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Debate>($"{_debateId}", new PartitionKey($"{debateCode}"));
|
|
|
+ if (!request.TryGetProperty("likeData", out JsonElement _likeData)) { return BadRequest(); }
|
|
|
+ LikeRcd likeRcd = _likeData.ToObject<LikeRcd>();
|
|
|
+ if (likeRcd != null && !string.IsNullOrWhiteSpace(likeRcd.replyId))
|
|
|
+ {
|
|
|
+ var replyData = debate.replies.Find(x => $"{likeRcd.replyId}".Equals(x.id) );
|
|
|
+ replyData.likes.RemoveAll(c => !string.IsNullOrWhiteSpace(c.tmdid) && c.tmdid.Equals(likeRcd.tmdid) && !string.IsNullOrWhiteSpace(c.userType) && c.userType.Equals(likeRcd.userType));
|
|
|
+ debate.likeCount = debate.replies.SelectMany(z => z.likes).Count();
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Debate>(debate, $"{_debateId}", new PartitionKey($"{debateCode}"));
|
|
|
+ return Ok(new { reply, replyCount = debate.replies.Count });
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return BadRequest();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (CosmosException ex)
|
|
|
+ {
|
|
|
+ return BadRequest();
|
|
|
+ }
|
|
|
case "del":
|
|
|
try
|
|
|
{
|
|
|
- Debate debate = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Debate>($"{_debateId}", new PartitionKey($"{_debateCode}"));
|
|
|
- reply = _reply.ToObject<DebateReply>();
|
|
|
- var findall = debate.replies.FindAll(x => reply.id .Equals(x.id));
|
|
|
+ Debate debate = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Debate>($"{_debateId}", new PartitionKey($"{debateCode}"));
|
|
|
+ if (!request.TryGetProperty("replyId", out JsonElement _replyId)) { return BadRequest(); }
|
|
|
+ var findall = debate.replies.FindAll(x => $"{_replyId}" .Equals(x.id));
|
|
|
if (findall.IsNotEmpty())
|
|
|
{
|
|
|
foreach (var find in findall)
|
|
@@ -223,7 +276,8 @@ namespace TEAMModelOS.Controllers
|
|
|
return Ok(new { status = 2, replyCount = debate.replies.Count });
|
|
|
}
|
|
|
}
|
|
|
- await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Debate>(debate, $"{_debateId}", new PartitionKey($"{_debateCode}"));
|
|
|
+ debate.likeCount = debate.replies.SelectMany(z => z.likes).Count();
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReplaceItemAsync<Debate>(debate, $"{_debateId}", new PartitionKey($"{debateCode}"));
|
|
|
//删除成功
|
|
|
return Ok(new { status = 0 , replyCount = debate.replies.Count });
|
|
|
}
|
|
@@ -314,8 +368,6 @@ namespace TEAMModelOS.Controllers
|
|
|
///保证记录回复记录和点赞记录正常
|
|
|
debate.replies = _DBdebate.replies;
|
|
|
debate.likeCount = _DBdebate.likeCount;
|
|
|
- debate.likes = _DBdebate.likes;
|
|
|
- debate.replies = _DBdebate.replies;
|
|
|
await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReplaceItemAsync(debate, debate.id, new PartitionKey(debate.code));
|
|
|
}
|
|
|
catch (CosmosException ex) {
|