using System; using System.Collections.Generic; using System.Net; using Kreta.Core.Domain; using Kreta.Core.Enum; using Kreta.Resources; namespace Kreta.Core.Exceptions { public class BlException : Exception { public HttpStatusCode StatusCode { get; set; } public BlExceptionType ExceptionType { get; } public BlException(BlExceptionType exceptionType) : base(exceptionType.ToDisplayName() ?? ErrorResource.IsmeretlenHibaTortent) { ExceptionType = exceptionType; } public BlException(string message) : base(message) { } public BlException(string message, HttpStatusCode statusCode) : base(message) { StatusCode = statusCode; } public BlException(string message, Exception exception) : base(message) { UnHandledException = exception; } public BlException(string message, BlExceptionType exceptionType) : base(message) { ExceptionType = exceptionType; } public BlException(string message, BlExceptionType exceptionType, Exception exception) : base(message) { ExceptionType = exceptionType; UnHandledException = exception; } public List ErrorList { get; set; } = new List(); //Exception filter miatt raktam bele, ezeket a hibákat külön leloggolja, ha beleforgatjuk a StatusError-ba public Exception UnHandledException { get; } public bool IsUnHandled => InnerException != null; private static readonly Dictionary ResponseStatusCodeLookUpTable = new Dictionary { { BlExceptionType.NemLetezoEntitas, HttpStatusCode.NotFound }, { BlExceptionType.ModelValidacio, HttpStatusCode.BadRequest }, { BlExceptionType.NincsJogosultsag, HttpStatusCode.Forbidden }, { BlExceptionType.TulSokVisszateresiElem, HttpStatusCode.InternalServerError }, { BlExceptionType.ValtozoErtekeNemLehetNull, HttpStatusCode.InternalServerError }, { BlExceptionType.None, HttpStatusCode.InternalServerError }, { BlExceptionType.ListaNemTartalmazElemet, HttpStatusCode.InternalServerError }, { BlExceptionType.IntezmenyMarTanevetValtott, HttpStatusCode.Conflict }, { BlExceptionType.IntezmenyAzonositoUtkozes, HttpStatusCode.Conflict }, { BlExceptionType.AzonositoUtkozes, HttpStatusCode.Conflict }, { BlExceptionType.ElvartErtekNemTalalhato, HttpStatusCode.InternalServerError }, { BlExceptionType.ListaTobbMint50ElemetTartalmaz, HttpStatusCode.BadRequest }, { BlExceptionType.AMuveletNemVegezhetoElTobbszor, HttpStatusCode.BadRequest }, { BlExceptionType.DuplikaltKulcs, HttpStatusCode.InternalServerError }, { BlExceptionType.NaploZaras, HttpStatusCode.BadRequest }, { BlExceptionType.TaskCancelled, HttpStatusCode.BadRequest }, { BlExceptionType.FunkcioKikapcsolva, HttpStatusCode.BadRequest } }; public HttpStatusCode GetResponseStatusCode() { return StatusCode == 0 ? ResponseStatusCodeLookUpTable.TryGetValue(ExceptionType, out HttpStatusCode statusCode) ? statusCode : HttpStatusCode.InternalServerError : StatusCode; } } }