using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using TEAMModelOS.Filter;
using TEAMModelOS.SDK.Extension;
using TEAMModelOS.SDK.Models;
using TEAMModelOS.SDK.Models.Cosmos.BI.BINormal;
using TEAMModelOS.SDK.Models.Service;
namespace TEAMModelOS.SDK.DI
{
public class WebHookHttpTrigger
{
private readonly AzureCosmosFactory _azureCosmos;
private readonly DingDing _dingDing;
private readonly AzureStorageFactory _azureStorage;
private readonly AzureRedisFactory _azureRedis;
private readonly IHttpClientFactory _httpClient;
public WebHookHttpTrigger(IHttpClientFactory httpClient, AzureCosmosFactory azureCosmos, DingDing dingDing, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis)
{
_azureCosmos = azureCosmos;
_dingDing = dingDing;
_azureStorage = azureStorage;
_azureRedis = azureRedis;
_httpClient = httpClient;
}
///
/// 学校数据授权变更,学校基础信息 10开头
///
///
///
[Function("school-auth-change")]
[ApiToken(Auth = "1001", Name = "学校数据授权变更", TName = "變更學校數據授權", EName = "School Auth Changes", RWN = "N")]
public async Task NoticeSchoolAuthChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/school-auth-change")] HttpRequestData request)
{
var response = request.CreateResponse(HttpStatusCode.OK);
string datastr = await new StreamReader(request.Body).ReadToEndAsync();
var json = JsonDocument.Parse(datastr).RootElement;
SchoolAuthChange data = null;
if (json.TryGetProperty("data", out JsonElement _data))
{
data = _data.ToObject();
}
(List businessConfigs, List<(List urls, string head, string token, BizConfig config)> webhooks) = await WebHookService.GetRequestData(_data, _azureCosmos, _azureRedis, _azureStorage);
if (webhooks.IsNotEmpty())
{
foreach (var webhook in webhooks)
{
foreach (var url in webhook.urls)
{
await WebHookService.Send(new
{
data.addSchools,
data.rmvSchools
}, (url, webhook.head, webhook.token, webhook.config), "school-auth-change",_httpClient,_dingDing);
}
}
}
return response;
}
///
/// 名单变更通知,名单类12开头
///
///
///
[Function("group-member-change")]
[ApiToken(Auth = "1201", Name = "名单成员变更", TName = "變更名單成員資料", EName = "Name List Member Changes", RWN = "N")]
public async Task NoticeGroupChange([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "webhook/group-member-change")] HttpRequestData request)
{
var response = request.CreateResponse(HttpStatusCode.OK);
string datastr = await new StreamReader(request.Body).ReadToEndAsync();
var json = JsonDocument.Parse(datastr).RootElement;
GroupChange data = null;
if (json.TryGetProperty("data", out JsonElement _data)){
data= _data.ToObject();
data.client="web";
}
(List businessConfigs, List<(List urls, string head, string token, BizConfig config)> webhooks ) = await WebHookService.GetRequestData(_data, _azureCosmos,_azureRedis,_azureStorage);
if (webhooks.IsNotEmpty() && !string.IsNullOrWhiteSpace(data.school))
{
foreach (var webhook in webhooks)
{
foreach (var url in webhook.urls)
{
await WebHookService.Send(new
{
data.name,
data.client,
data.status,
data.type,
data.listid,
data.tmdjoin,
data.tmdleave,
data.stujoin,
data.stuleave,
data.tchjoin,
data.tchleave,
data.school,
data.periodId
}, (url, webhook.head, webhook.token, webhook.config), "group-member-change", _httpClient, _dingDing);
}
}
}
return response;
}
}
}