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 CreateOsztalyCsoportErtekeles(int teacherId, DefaultConnectionParameters defaultConnectionParameters, List request) { var response = new List(); 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 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 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; } } }