|
@@ -131,7 +131,7 @@ namespace TEAMModelOS.Controllers
|
|
|
|
|
|
//私人課綱
|
|
|
List<object> syllabus = new List<object>();
|
|
|
- await foreach (var item in client.GetContainer("TEAMModelOSTemp", "Teacher").GetItemQueryStreamIterator(queryText: $"select c.id, c.name, c.classes, c.notice ,c.scope from c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{id}") }))
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOSTemp", "Teacher").GetItemQueryStreamIterator(queryText: $"select c.id, c.name, c.scope from c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{id}") }))
|
|
|
{
|
|
|
using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
@@ -174,9 +174,35 @@ namespace TEAMModelOS.Controllers
|
|
|
var id = jwt.Payload.Sub;
|
|
|
|
|
|
var client = _azureCosmos.GetCosmosClient();
|
|
|
+
|
|
|
+ //權限token
|
|
|
+ jwt.Payload.TryGetValue("name", out object name);
|
|
|
+ jwt.Payload.TryGetValue("picture", out object picture);
|
|
|
+ List<string> roles = new List<string>();
|
|
|
+ List<string> permissions = new List<string>();
|
|
|
+ var response = await client.GetContainer("TEAMModelOSTemp", "School").ReadItemStreamAsync(id, new PartitionKey($"Teacher-{school_code}"));
|
|
|
+ if (response.Status == 200)
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
+ foreach (var obj in json.RootElement.GetProperty("roles").EnumerateArray())
|
|
|
+ {
|
|
|
+ roles.Add(obj.GetString());
|
|
|
+ }
|
|
|
+ foreach (var obj in json.RootElement.GetProperty("permissions").EnumerateArray())
|
|
|
+ {
|
|
|
+ permissions.Add(obj.GetString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(roles.Count == 0)
|
|
|
+ {
|
|
|
+ roles.Add("Teacher");
|
|
|
+ }
|
|
|
+ var auth_token = JwtAuthExtension.CreateAuthToken(_option.HostName, id, name?.ToString(), picture?.ToString(), _option.JwtSecretKey, roles: roles.ToArray(), permissions: permissions.ToArray());
|
|
|
+
|
|
|
+ //學校課程
|
|
|
List<object> courses = new List<object>();
|
|
|
- var query = $"select c.id,c.name,c.period,c.subject,c.notice,c.scope from c where ARRAY_CONTAINS(c.teacherIds, {id} , true)";
|
|
|
- await foreach (var item in client.GetContainer("TEAMModelOSTemp", "School").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Course-{school_code.GetString()}") }))
|
|
|
+ var query = $"SELECT c.id,c.name,c.period,c.subject,c.classes,c.notice,c.scope FROM c WHERE EXISTS( SELECT VALUE t.id FROM t IN c.teachers WHERE t.id = '{id}')";
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOSTemp", "School").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Course-{school_code}") }))
|
|
|
{
|
|
|
using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
@@ -187,7 +213,26 @@ namespace TEAMModelOS.Controllers
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- return Ok(new { courses });
|
|
|
+ //校本課綱
|
|
|
+ List<object> syllabus = new List<object>();
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOSTemp", "School").GetItemQueryStreamIterator(queryText: $"SELECT c.id, c.name, c.scope FROM c WHERE c.teacherId = '{id}'", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Syllabus-{school_code}") }))
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
|
+ {
|
|
|
+ foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
+ {
|
|
|
+ syllabus.Add(obj.ToObject<object>());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //取得Teacher Blob 容器位置及SAS
|
|
|
+ var container = _azureStorage.GetBlobContainerClient(id);
|
|
|
+ await container.CreateIfNotExistsAsync(PublicAccessType.None); //嘗試創建Teacher私有容器,如存在則不做任何事,保障容器一定存在
|
|
|
+ var (blob_uri, blob_sas) = _azureStorage.GetBlobContainerSAS(id, BlobContainerSasPermissions.Write | BlobContainerSasPermissions.Read);
|
|
|
+
|
|
|
+ return Ok(new { auth_token, blob_uri, blob_sas, courses, syllabus });
|
|
|
}
|
|
|
|
|
|
[ProducesDefaultResponseType]
|