using Grpc.Core;
using Grpc.Extension.Abstract;
using Microsoft.AspNetCore.Authorization;
using System.Collections.Generic;
using System.Threading.Tasks;
using TEAMModelGrpc.Models;
using TEAMModelOS.Models.SchoolInfo;
using TEAMModelOS.Models.StudentInfo;
using TEAMModelOS.SDK.DI;
using TEAMModelOS.SDK.Helper.Common.CollectionHelper;
namespace TEAMModelGrpc.Services
{
public class ClassroomService : IGrpcService
{
public readonly AzureCosmosFactory _azureCosmos;
public ClassroomService(AzureCosmosFactory azureCosmos)
{
_azureCosmos = azureCosmos;
}
///
/// 保存教室
///
///
///
///
///
[Authorize]
public async Task SaveOrUpdateVolume(IAsyncStreamReader requestStream, IServerStreamWriter responseStream, ServerCallContext context)
{
List classrooms = new List();
await foreach (Classroom classroom in requestStream.ReadAllAsync())
{
if (classroom.id != null)
{
classrooms.Add( await _azureCosmos.SaveOrUpdate(classroom));
}
else
{
ClassStudent students = new ClassStudent();
students.code = classroom.code;
students.id = classroom.classroomCode;
await _azureCosmos.SaveOrUpdate(students);
classrooms.Add(await _azureCosmos.SaveOrUpdate(classroom));
}
}
classrooms.ForEach(x => {
responseStream.WriteAsync(x);
});
}
///
/// 查询教室
///
///
///
///
///
[Authorize]
public async Task FindVolume(Dict request, IServerStreamWriter responseStream, ServerCallContext context)
{
Dictionary dict = request.ToDict();
List syllabusVolumes = await _azureCosmos.FindByDict(dict);
syllabusVolumes.ForEach(x => {
responseStream.WriteAsync(x);
});
}
///
/// 删除教室
///
///
///
///
[Authorize]
public async Task Delete(ListPid listPid, ServerCallContext context)
{
await _azureCosmos.DeleteAll(listPid.idPks);
if (listPid.idPks.IsNotEmpty())
{
List students = new List();
foreach (IdPk classroom in listPid.idPks)
{
List ClassStudents = await _azureCosmos.FindByDict(new Dictionary { { "id", classroom.id }, { "code", classroom.pk } });
students.AddRange(ClassStudents);
}
if (students.Count > 0)
{
await _azureCosmos.DeleteAll(students);
}
listPid.idPks = await _azureCosmos.DeleteAll(listPid.idPks);
}
return listPid;
}
}
}