|
@@ -386,32 +386,68 @@ namespace TEAMModelOS.Controllers
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 取得學校所有列表
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="request"></param>
|
|
|
+ /// <returns></returns>
|
|
|
[ProducesDefaultResponseType]
|
|
|
//[AuthToken(Roles = "teacher")]
|
|
|
[HttpPost("get-school-list")]
|
|
|
- public async Task<IActionResult> GetSchoolList()
|
|
|
+ public async Task<IActionResult> GetSchoolList(JsonElement request)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- var client = _azureCosmos.GetCosmosClient();
|
|
|
+ //輸入值
|
|
|
+ string sqlSchoolId = (request.TryGetProperty("schoolId", out JsonElement reqSchoolId)) ? reqSchoolId.GetString() : string.Empty;
|
|
|
+ bool sqlHasManager = (request.TryGetProperty("manager", out JsonElement reqHasManager)) ? reqHasManager.GetBoolean() : false;
|
|
|
+ bool sqlHasMBaseModule = (request.TryGetProperty("base", out JsonElement reqHasBaseModule)) ? reqHasBaseModule.GetBoolean() : false;
|
|
|
|
|
|
+ var client = _azureCosmos.GetCosmosClient();
|
|
|
//有管理者的學校
|
|
|
- List<string> managerSchList = new List<string>();
|
|
|
- await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: $"SELECT DISTINCT REPLACE(c.code, 'Teacher-', '') AS schoolId FROM c WHERE ARRAY_CONTAINS(c.roles, 'admin', true) AND c.pk = 'Teacher' AND c.status = 'join'", requestOptions: new QueryRequestOptions() {} ))
|
|
|
+ Dictionary<string, List<Dictionary<string, string>>> managerSchDic = new Dictionary<string, List<Dictionary<string, string>>>();
|
|
|
+ string managerWhereOption = (!string.IsNullOrWhiteSpace(sqlSchoolId)) ? $" AND c.code = 'Teacher-{sqlSchoolId}'" : string.Empty;
|
|
|
+ string managerSql = $"SELECT DISTINCT REPLACE(c.code, 'Teacher-', '') AS schoolId, c.id, c.name FROM c WHERE ARRAY_CONTAINS(c.roles, 'admin', true) AND c.pk = 'Teacher' AND c.status = 'join'{managerWhereOption}";
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: managerSql, requestOptions: new QueryRequestOptions() {} ))
|
|
|
{
|
|
|
using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
{
|
|
|
- if(obj.TryGetProperty("schoolId", out JsonElement schoolId))
|
|
|
+ string id = obj.GetProperty("id").GetString(); //管理者ID
|
|
|
+ string name = obj.GetProperty("name").GetString(); //管理者姓名
|
|
|
+ string schoolId = obj.GetProperty("schoolId").GetString(); //學校ID
|
|
|
+ Dictionary<string, string> managerDic = new Dictionary<string, string>();
|
|
|
+ managerDic.Add("id", id);
|
|
|
+ managerDic.Add("name", name);
|
|
|
+ if (managerSchDic.ContainsKey(schoolId))
|
|
|
+ {
|
|
|
+ managerSchDic[schoolId].Add(managerDic);
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- managerSchList.Add(schoolId.GetString());
|
|
|
+ List<Dictionary<string, string>> managerList = new List<Dictionary<string, string>>();
|
|
|
+ managerList.Add(managerDic);
|
|
|
+ managerSchDic.Add(schoolId, managerList);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ //有管理模組的學校
|
|
|
+ List<string> baseModuleSchList = new List<string>();
|
|
|
+ string baseModuleWhereOption = (!string.IsNullOrWhiteSpace(sqlSchoolId)) ? $" AND c.id = '{sqlSchoolId}'" : string.Empty;
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: $"SELECT c.id FROM c JOIN serviceProduct IN c.service.product WHERE serviceProduct.prodCode = 'IPDYZYLC'{baseModuleWhereOption}", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Product") }))
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
+ foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
+ {
|
|
|
+ string schoolId = obj.GetProperty("id").GetString(); //學校ID
|
|
|
+ baseModuleSchList.Add(schoolId);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
//學校資料
|
|
|
List<object> schools = new List<object>();
|
|
|
- await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: $"SELECT c.id, c.name, c.region, c.province, c.city, c.picture FROM c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
|
|
|
+ string schoolWhereOption = (!string.IsNullOrWhiteSpace(sqlSchoolId)) ? $" WHERE c.id = '{sqlSchoolId}'" : string.Empty;
|
|
|
+ await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: $"SELECT c.id, c.name, c.region, c.province, c.city, c.picture FROM c {schoolWhereOption}", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
|
|
|
{
|
|
|
var jsons = await JsonDocument.ParseAsync(item.ContentStream);
|
|
|
if (jsons.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
|
|
@@ -419,15 +455,40 @@ namespace TEAMModelOS.Controllers
|
|
|
foreach (var obj in jsons.RootElement.GetProperty("Documents").EnumerateArray())
|
|
|
{
|
|
|
dynamic schoolExtobj = new ExpandoObject();
|
|
|
- schoolExtobj.id = obj.GetProperty("id").GetString();
|
|
|
+ schoolExtobj.id = obj.GetProperty("id").GetString(); //學校ID
|
|
|
schoolExtobj.name = obj.GetProperty("name");
|
|
|
schoolExtobj.region = obj.GetProperty("region");
|
|
|
schoolExtobj.province = obj.GetProperty("province");
|
|
|
schoolExtobj.city = obj.GetProperty("city");
|
|
|
schoolExtobj.picture = obj.GetProperty("picture");
|
|
|
- var match = managerSchList.FirstOrDefault(x => x.Contains(schoolExtobj.id));
|
|
|
- schoolExtobj.manager = (match != null) ? true : false;
|
|
|
- schools.Add(schoolExtobj);
|
|
|
+ if (managerSchDic.ContainsKey(schoolExtobj.id))
|
|
|
+ {
|
|
|
+ schoolExtobj.hasManager = true;
|
|
|
+ schoolExtobj.managers = managerSchDic[schoolExtobj.id];
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ schoolExtobj.hasManager = false;
|
|
|
+ schoolExtobj.managers = new List<object>();
|
|
|
+ }
|
|
|
+ schoolExtobj.hasBaseModule = (baseModuleSchList.Contains(schoolExtobj.id)) ? true : false;
|
|
|
+ //學校輸出結果加入篩選
|
|
|
+ if( (sqlHasManager && sqlHasMBaseModule) && (schoolExtobj.hasManager && schoolExtobj.hasBaseModule) )
|
|
|
+ {
|
|
|
+ schools.Add(schoolExtobj);
|
|
|
+ }
|
|
|
+ else if(sqlHasManager && schoolExtobj.hasManager)
|
|
|
+ {
|
|
|
+ schools.Add(schoolExtobj);
|
|
|
+ }
|
|
|
+ else if(sqlHasMBaseModule && schoolExtobj.hasBaseModule)
|
|
|
+ {
|
|
|
+ schools.Add(schoolExtobj);
|
|
|
+ }
|
|
|
+ else if(!sqlHasManager && !sqlHasMBaseModule)
|
|
|
+ {
|
|
|
+ schools.Add(schoolExtobj);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -440,7 +501,6 @@ namespace TEAMModelOS.Controllers
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 申請或同意邀請加入學校
|
|
|
/// </summary>
|