|
@@ -14,13 +14,13 @@ using TEAMModelOS.SDK.DI;
|
|
|
using TEAMModelOS.SDK.Extension;
|
|
|
using TEAMModelOS.SDK.Models.Cosmos;
|
|
|
using TEAMModelOS.SDK.Models.Cosmos.Common;
|
|
|
-
|
|
|
+using TEAMModelOS.SDK;
|
|
|
|
|
|
namespace TEAMModelOS.Controllers
|
|
|
{
|
|
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
|
|
[ProducesResponseType(StatusCodes.Status400BadRequest)]
|
|
|
- //
|
|
|
+ // 收藏结构
|
|
|
[Route("teacher/favorite")]
|
|
|
[ApiController]
|
|
|
public class FavoriteController: ControllerBase
|
|
@@ -38,45 +38,32 @@ namespace TEAMModelOS.Controllers
|
|
|
_option = option?.Value;
|
|
|
}
|
|
|
/// <summary>
|
|
|
- /// 保存或更新
|
|
|
+ /// 保存或更新 收藏
|
|
|
/// </summary>
|
|
|
/// <param name="request"></param>
|
|
|
/// <returns></returns>
|
|
|
[ProducesDefaultResponseType]
|
|
|
[HttpPost("upsert")]
|
|
|
[Authorize(Roles = "IES")]
|
|
|
- [AuthToken(Roles = "teacher")]
|
|
|
- public async Task<IActionResult> Upsert(Favorite request)
|
|
|
+ [AuthToken(Roles = "teacher,admin")]
|
|
|
+ public async Task<IActionResult> Upsert(JsonElement data )
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
+ if (!data.TryGetProperty("favorite", out JsonElement _favorite)) return BadRequest() ;
|
|
|
+ Favorite request = _favorite.ToObject<Favorite>();
|
|
|
+ var val = request.IsValid();
|
|
|
+ if (!val.isVaild || string.IsNullOrEmpty(request.id)) {
|
|
|
+ return BadRequest(val);
|
|
|
+ }
|
|
|
var client = _azureCosmos.GetCosmosClient();
|
|
|
request.pk = "Favorite";
|
|
|
- request.code = request.pk + "-" + request.code;
|
|
|
+ request.code = request.code.StartsWith("Favorite-") ? request.code : request.pk + "-" + request.code;
|
|
|
request.ttl = -1;
|
|
|
long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
request.createTime = now;
|
|
|
- if (string.IsNullOrEmpty(request.id))
|
|
|
- {
|
|
|
-
|
|
|
- request.id = Guid.NewGuid().ToString();
|
|
|
- request = await client.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync(request, new PartitionKey($"{request.code}"));
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- var response = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync(request.id, new PartitionKey($"{request.code}"));
|
|
|
- if (response.Status == 200)
|
|
|
- {
|
|
|
- using var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
- var info = json.ToObject<Favorite>();
|
|
|
- request = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(request, info.id, new PartitionKey($"{info.code}"));
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- request = await client.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync(request, new PartitionKey($"{request.code}"));
|
|
|
- }
|
|
|
- }
|
|
|
- return Ok(new { room = request });
|
|
|
+ request = await client.GetContainer(Constant.TEAMModelOS, "Teacher").UpsertItemAsync(request, new PartitionKey($"{request.code}"));
|
|
|
+ return Ok(new { favorite = request });
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
@@ -90,7 +77,7 @@ namespace TEAMModelOS.Controllers
|
|
|
/// <param name="requert"></param>
|
|
|
/// <returns></returns>
|
|
|
[ProducesDefaultResponseType]
|
|
|
- [AuthToken(Roles = "teacher")]
|
|
|
+ [AuthToken(Roles = "teacher,admin")]
|
|
|
[HttpPost("find")]
|
|
|
public async Task<IActionResult> Find(JsonElement request)
|
|
|
{
|
|
@@ -99,7 +86,6 @@ namespace TEAMModelOS.Controllers
|
|
|
List<Favorite> favorites = new List<Favorite>();
|
|
|
if (!request.TryGetProperty("code", out JsonElement code)) { return BadRequest(); }
|
|
|
var client = _azureCosmos.GetCosmosClient();
|
|
|
-
|
|
|
await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIterator<Favorite>(queryText: $"select value(c) from c ",
|
|
|
requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Favorite-{code}") }))
|
|
|
{
|
|
@@ -121,17 +107,16 @@ namespace TEAMModelOS.Controllers
|
|
|
[ProducesDefaultResponseType]
|
|
|
[HttpPost("delete")]
|
|
|
[Authorize(Roles = "IES")]
|
|
|
+ [AuthToken(Roles = "teacher,admin")]
|
|
|
public async Task<IActionResult> Delete(JsonElement requert)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
var client = _azureCosmos.GetCosmosClient();
|
|
|
- //id
|
|
|
if (!requert.TryGetProperty("id", out JsonElement id)) return BadRequest();
|
|
|
- //
|
|
|
if (!requert.TryGetProperty("code", out JsonElement code)) return BadRequest();
|
|
|
var room = await client.GetContainer(Constant.TEAMModelOS, "Teacher").DeleteItemAsync<Favorite>(id.GetString(), new PartitionKey($"Favorite-{code}"));
|
|
|
- return Ok();
|
|
|
+ return Ok(new { status=200});
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|