kreta/Kreta.BusinessLogic/Classes/MobileApi/Naplo/V2/SubqueriesRepo/Post/ErtekelesPostSubqueries.cs
2024-03-13 00:33:46 +01:00

91 lines
3.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Kreta.BusinessLogic.Classes.MobileApi.Common.Co;
using Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.Co.Post.Ertekeles;
using Kreta.BusinessLogic.Helpers;
using Kreta.Core.ConnectionType;
using Kreta.Core.Validation.Exceptions;
using Kreta.Core.Validation.Exceptions.Enum;
using Kreta.Framework.Entities;
using Kreta.Resources;
namespace Kreta.BusinessLogic.Classes.MobileApi.Naplo.V2.SubqueriesRepo.Post
{
public static class ErtekelesPostSubqueries
{
public static List<ErtekelesResponseCo> CreateOsztalyCsoportErtekeles(int teacherId, DefaultConnectionParameters defaultConnectionParameters, List<OsztalyCsoportErtekelesRequestCo> request)
{
var response = new List<ErtekelesResponseCo>();
if (IsRequestContainsDuplicatedItem(request))
{
response.Add(new ErtekelesResponseCo()
{
Exception = new ValidationException("A kérés többször tartalmazza ugyanazt az értékelést!")
});
return response;
}
var helper = new TanuloErtekelesHelper(new MobileConnectionType(teacherId, defaultConnectionParameters.IntezmenyId, defaultConnectionParameters.IntezmenyAzonosito, defaultConnectionParameters.TanevId));
foreach (var osztalyCsoportErtekeles in request)
{
try
{
helper.SaveTanuloErtekelesListMobilV2(teacherId, osztalyCsoportErtekeles);
}
catch (ValidationException execption)
{
response.Add(new ErtekelesResponseCo()
{
Exception = execption
});
}
catch (EntityNotFoundException)
{
response.Add(new ErtekelesResponseCo()
{
Exception = CreateMobileExeption(osztalyCsoportErtekeles.TanuloLista, ErrorResource.AzElemNemTalalhatoVagyToroltek)
});
}
catch (Exception)
{
response.Add(new ErtekelesResponseCo()
{
Exception = CreateMobileExeption(osztalyCsoportErtekeles.TanuloLista, ErrorResource.Hiba)
});
}
}
return response;
}
private static ValidationException CreateMobileExeption(List<TanuloForOsztalyCsoportErtekelesRequestCo> tanuloList, string message)
{
var ex = new ValidationException(ValidationErrorType.Undefined, TanuloErtekelesResource.HibasErtekeles);
foreach (var item in tanuloList)
{
ex.AddValidationItem(item.MobilId.ToString(), message);
}
return ex;
}
private static bool IsRequestContainsDuplicatedItem(List<OsztalyCsoportErtekelesRequestCo> request)
{
var requestUniqueItems = new List<(DateTime datum, int tantargyId, string tema, int tanuloErtekelesHashCode)>();
foreach (var item in request)
{
int tanuloErtekelesHashCode = item.TanuloLista.Select(x => $"{x.TanuloId} + {x.Ertekeles.OsztalyzatTipus} + {x.Ertekeles.Szazalek} + {x.Ertekeles.Szoveg}").Aggregate((a, b) => a + b).GetHashCode();
var requestItem = (item.Datum, item.TantargyId, item.Tema, tanuloErtekelesHashCode);
if (requestUniqueItems.Contains(requestItem))
{
return true;
}
requestUniqueItems.Add(requestItem);
}
return false;
}
}
}