|
@@ -3458,11 +3458,12 @@ namespace TEAMModelOS.Controllers.Client
|
|
|
//參數驗證
|
|
|
string volumeId = (request.TryGetProperty("volumeId", out JsonElement volumeIdJobj)) ? volumeIdJobj.GetString() : String.Empty;
|
|
|
string syllabusId = (request.TryGetProperty("syllabusId", out JsonElement syllabusIdJobj)) ? syllabusIdJobj.GetString() : String.Empty;
|
|
|
- int display = (request.TryGetProperty("display", out JsonElement displayJobj)) ? displayJobj.GetInt32() : 0;
|
|
|
+ int display = (request.TryGetProperty("display", out JsonElement displayJobj)) ? displayJobj.GetInt32() : 0; //0:預設:列出分支 1:只列出卷
|
|
|
var client = _azureCosmos.GetCosmosClient();
|
|
|
|
|
|
//取得分享內容
|
|
|
- Dictionary<string, string> tmidDic = new Dictionary<string, string>();
|
|
|
+ Dictionary<string, string> tmidDic = new Dictionary<string, string>(); //TMID SAS 對照字典
|
|
|
+ Dictionary<string, string> schoolIdDic = new Dictionary<string, string>(); //學校ID SAS 對照字典
|
|
|
List<Volume> volumeList = new List<Volume>();
|
|
|
StringBuilder queryText = new StringBuilder("SELECT value(c) FROM c WHERE c.type='share' ");
|
|
|
if (!string.IsNullOrWhiteSpace(volumeId))
|
|
@@ -3472,7 +3473,6 @@ namespace TEAMModelOS.Controllers.Client
|
|
|
await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<Share>(queryText: queryText.ToString(),
|
|
|
requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Share-share-{id}") }))
|
|
|
{
|
|
|
-
|
|
|
if (!string.IsNullOrWhiteSpace(syllabusId))
|
|
|
{
|
|
|
if (item.id.Equals(syllabusId))
|
|
@@ -3481,14 +3481,25 @@ namespace TEAMModelOS.Controllers.Client
|
|
|
if (volumeExist == null)
|
|
|
{
|
|
|
Volume volume = new Volume();
|
|
|
+ volume.scope = item.scope;
|
|
|
+ volume.school = item.school;
|
|
|
volume.id = item.volumeId;
|
|
|
volume.name = item.volumeName;
|
|
|
volume.creatorId = item.issuer;
|
|
|
volume.creatorName = item.issuerName;
|
|
|
volume.syllabusIds.Add(item.id);
|
|
|
volumeList.Add(volume);
|
|
|
- var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(item.issuer, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
|
|
|
- if (!tmidDic.ContainsKey(item.issuer)) tmidDic.Add(item.issuer, blob_sas);
|
|
|
+ //SAS字典
|
|
|
+ if (volume.scope.Equals("school") && !string.IsNullOrWhiteSpace(volume.school) && !schoolIdDic.ContainsKey(volume.school)) //學校分享的課綱
|
|
|
+ {
|
|
|
+ var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(volume.school, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
|
|
|
+ if (!schoolIdDic.ContainsKey(volume.school)) schoolIdDic.Add(volume.school, blob_sas);
|
|
|
+ }
|
|
|
+ else if(!tmidDic.ContainsKey(item.issuer)) //個人分享的課綱
|
|
|
+ {
|
|
|
+ var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(item.issuer, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
|
|
|
+ if (!tmidDic.ContainsKey(item.issuer)) tmidDic.Add(item.issuer, blob_sas);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -3502,14 +3513,25 @@ namespace TEAMModelOS.Controllers.Client
|
|
|
if (volumeExist == null)
|
|
|
{
|
|
|
Volume volume = new Volume();
|
|
|
+ volume.scope = item.scope;
|
|
|
+ volume.school = item.school;
|
|
|
volume.id = item.volumeId;
|
|
|
volume.name = item.volumeName;
|
|
|
volume.creatorId = item.issuer;
|
|
|
volume.creatorName = item.issuerName;
|
|
|
volume.syllabusIds.Add(item.id);
|
|
|
volumeList.Add(volume);
|
|
|
- var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(item.issuer, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
|
|
|
- if (!tmidDic.ContainsKey(item.issuer)) tmidDic.Add(item.issuer, blob_sas);
|
|
|
+ //SAS字典
|
|
|
+ if (volume.scope.Equals("school") && !string.IsNullOrWhiteSpace(volume.school) && !schoolIdDic.ContainsKey(volume.school)) //學校分享的課綱
|
|
|
+ {
|
|
|
+ var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(volume.school, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
|
|
|
+ if (!schoolIdDic.ContainsKey(volume.school)) schoolIdDic.Add(volume.school, blob_sas);
|
|
|
+ }
|
|
|
+ else if(!tmidDic.ContainsKey(item.issuer))//個人分享的課綱
|
|
|
+ {
|
|
|
+ var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(item.issuer, BlobContainerSasPermissions.Read | BlobContainerSasPermissions.List);
|
|
|
+ if (!tmidDic.ContainsKey(item.issuer)) tmidDic.Add(item.issuer, blob_sas);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -3525,21 +3547,37 @@ namespace TEAMModelOS.Controllers.Client
|
|
|
List<SyllabusTreeNode> treeNodes = new();
|
|
|
if (!display.Equals(1))
|
|
|
{
|
|
|
- string queryTextSyl = $"SELECT value(c) FROM c WHERE ARRAY_CONTAINS({JsonSerializer.Serialize(volTmp.syllabusIds)}, c.id, true)";
|
|
|
- await foreach (Syllabus items in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<Syllabus>(queryText: queryTextSyl, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{volTmp.creatorId}") }))
|
|
|
+ if(volTmp.scope.Equals("school") && !string.IsNullOrWhiteSpace(volTmp.school))
|
|
|
+ {
|
|
|
+ string queryTextSyl = $"SELECT value(c) FROM c WHERE ARRAY_CONTAINS({JsonSerializer.Serialize(volTmp.syllabusIds)}, c.id, true)";
|
|
|
+ await foreach (Syllabus items in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIteratorSql<Syllabus>(queryText: queryTextSyl, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{volTmp.school}") }))
|
|
|
+ {
|
|
|
+ List<SyllabusTree> trees = SyllabusService.ListToTree(items.children);
|
|
|
+ SyllabusTreeNode tree = new() { id = items.id, scope = items.scope, trees = trees, volumeId = items.volumeId, auth = items.auth, codeval = $"{volTmp.school}" };
|
|
|
+ treeNodes.Add(tree);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- List<SyllabusTree> trees = SyllabusService.ListToTree(items.children);
|
|
|
- SyllabusTreeNode tree = new() { id = items.id, scope = items.scope, trees = trees, volumeId = items.volumeId, auth = items.auth, codeval = $"{volTmp.creatorId}" };
|
|
|
- treeNodes.Add(tree);
|
|
|
+ string queryTextSyl = $"SELECT value(c) FROM c WHERE ARRAY_CONTAINS({JsonSerializer.Serialize(volTmp.syllabusIds)}, c.id, true)";
|
|
|
+ await foreach (Syllabus items in client.GetContainer(Constant.TEAMModelOS, "Teacher").GetItemQueryIteratorSql<Syllabus>(queryText: queryTextSyl, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{volTmp.creatorId}") }))
|
|
|
+ {
|
|
|
+ List<SyllabusTree> trees = SyllabusService.ListToTree(items.children);
|
|
|
+ SyllabusTreeNode tree = new() { id = items.id, scope = items.scope, trees = trees, volumeId = items.volumeId, auth = items.auth, codeval = $"{volTmp.creatorId}" };
|
|
|
+ treeNodes.Add(tree);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
result.Add(new
|
|
|
{
|
|
|
id = volTmp.id,
|
|
|
name = volTmp.name,
|
|
|
+ scope = volTmp.scope,
|
|
|
creatorId = volTmp.creatorId,
|
|
|
creatorName = volTmp.creatorName,
|
|
|
- creatorSas = (tmidDic.ContainsKey(volTmp.creatorId)) ? tmidDic[volTmp.creatorId] : null,
|
|
|
+ creatorSas = (!volTmp.scope.Equals("school") && tmidDic.ContainsKey(volTmp.creatorId)) ? tmidDic[volTmp.creatorId] : null,
|
|
|
+ schoolId = volTmp.school,
|
|
|
+ schoolSas = (volTmp.scope.Equals("school") && schoolIdDic.ContainsKey(volTmp.school)) ? schoolIdDic[volTmp.school] : null,
|
|
|
syllabusIds = volTmp.syllabusIds,
|
|
|
syllabus = treeNodes.ToList(),
|
|
|
|