SES-91 Utworzenie modelu zwrotek AP oraz zajmowanie się domyślnymi exceptionami #22
@ -1,26 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text.Json;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace SessionCompanion.Extensions.ApiErrors
|
|
||||||
{
|
|
||||||
public class ErrorDetails
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Kod błędu
|
|
||||||
/// </summary>
|
|
||||||
public int StatusCode { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Wiadomość błędu do pokazania
|
|
||||||
/// </summary>
|
|
||||||
public string Message { get; set; }
|
|
||||||
|
|
||||||
public override string ToString()
|
|
||||||
{
|
|
||||||
return JsonSerializer.Serialize(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,29 +4,58 @@ namespace SessionCompanion.Extensions.EitherType
|
|||||||
{
|
{
|
||||||
public class Either<TL, TR>
|
public class Either<TL, TR>
|
||||||
{
|
{
|
||||||
private readonly TL left;
|
/// <summary>
|
||||||
|
/// Kontruktor dla lewej zmiennej
|
||||||
private readonly TR right;
|
/// </summary>
|
||||||
|
/// <param name="left">Wartość lewej zmiennej</param>
|
||||||
private readonly bool isLeft;
|
|
||||||
|
|
||||||
public Either(TL left)
|
public Either(TL left)
|
||||||
{
|
{
|
||||||
this.left = left;
|
this.Left = left;
|
||||||
this.isLeft = true;
|
this.IsLeft = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Konstruktor dla prawej zmiennej
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="right">Wartość prawej zmiennej</param>
|
||||||
public Either(TR right)
|
public Either(TR right)
|
||||||
{
|
{
|
||||||
this.right = right;
|
this.Right = right;
|
||||||
this.isLeft = false;
|
this.IsLeft = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Lewa zmienna
|
||||||
|
/// </summary>
|
||||||
|
public TL Left { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Prawa zmienna
|
||||||
|
/// </summary>
|
||||||
|
public TR Right { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Zmienna informujaca czy wykorzystana zostąła zmienna lewa czy prawa
|
||||||
|
/// </summary>
|
||||||
|
public bool IsLeft { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tworzy obiekt typu Either wykorzystując zmienną lewą
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="left">Wartość lewej zmiennej</param>
|
||||||
|
public static implicit operator Either<TL, TR>(TL left) => new Either<TL, TR>(left);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tworzy obiekt typu Either wykorzystując zmienną prawą
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="right">Wartosć prawej zmiennej</param>
|
||||||
|
public static implicit operator Either<TL, TR>(TR right) => new Either<TL, TR>(right);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Bazowa metoda dopasowania wzorów.
|
/// Bazowa metoda dopasowania wzorów.
|
||||||
/// Jeśli podana jest wartość lewa, to Match zwróci wynik lewej funkcji, w przeciwnym razie wynik prawej funkcji.
|
/// Jeśli podana jest wartość lewa, to Match zwróci wynik lewej funkcji, w przeciwnym razie wynik prawej funkcji.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T">Typ zwracanej wartości</typeparam>
|
||||||
/// <param name="leftFunc">Lewa funkcja </param>
|
/// <param name="leftFunc">Lewa funkcja </param>
|
||||||
/// <param name="rightFunc">Prawa funkcja</param>
|
/// <param name="rightFunc">Prawa funkcja</param>
|
||||||
/// <returns>Wynik prawej/lewej funkcji</returns>
|
/// <returns>Wynik prawej/lewej funkcji</returns>
|
||||||
@ -42,28 +71,21 @@ namespace SessionCompanion.Extensions.EitherType
|
|||||||
throw new ArgumentNullException(nameof(rightFunc));
|
throw new ArgumentNullException(nameof(rightFunc));
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.isLeft ? leftFunc(this.left) : rightFunc(this.right);
|
return this.IsLeft ? leftFunc(this.Left) : rightFunc(this.Right);
|
||||||
}
|
|
||||||
|
|
||||||
public void DoRight(Action<TR> rightAction)
|
|
||||||
{
|
|
||||||
if (rightAction == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(rightAction));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.isLeft)
|
|
||||||
{
|
|
||||||
rightAction(this.right);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Funkcja ustala czy uzyta została lewa zmienna, jesli tak to zwraca jej wartość inaczej zwraca defaultowy obiekt
|
||||||
|
/// o typie takim jak lewa zmienna
|
||||||
|
/// </summary>
|
||||||
|
/// <returns> Wartosć lewej zmiennej lub defaultową wartość o typie lewej zmiennej</returns>
|
||||||
public TL LeftOrDefault() => this.Match(l => l, r => default(TL));
|
public TL LeftOrDefault() => this.Match(l => l, r => default(TL));
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Funkcja ustala czy uzyta została prawa zmienna, jesli tak to zwraca jej wartość inaczej zwraca defaultowy obiekt
|
||||||
|
/// o typie takim jak lewa zmienna
|
||||||
|
/// </summary>
|
||||||
|
/// <returns> Wartosć lewej zmiennej lub defaultową wartość o typie prawej zmiennej</returns>
|
||||||
public TR RightOrDefault() => this.Match(l => default(TR), r => r);
|
public TR RightOrDefault() => this.Match(l => default(TR), r => r);
|
||||||
|
|
||||||
public static implicit operator Either<TL, TR>(TL left) => new Either<TL, TR>(left);
|
|
||||||
|
|
||||||
public static implicit operator Either<TL, TR>(TR right) => new Either<TL, TR>(right);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using SessionCompanion.ViewModels.ApiResponses;
|
||||||
|
|
||||||
namespace SessionCompanion.Configurations
|
namespace SessionCompanion.Configurations
|
||||||
{
|
{
|
||||||
@ -33,7 +34,7 @@ namespace SessionCompanion.Configurations
|
|||||||
{
|
{
|
||||||
context.Response.ContentType = "application/json";
|
context.Response.ContentType = "application/json";
|
||||||
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
|
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
|
||||||
return context.Response.WriteAsync(new ErrorDetails()
|
return context.Response.WriteAsync(new ErrorResponse()
|
||||||
{
|
{
|
||||||
StatusCode = context.Response.StatusCode,
|
StatusCode = context.Response.StatusCode,
|
||||||
Message = exception.Message
|
Message = exception.Message
|
||||||
|
@ -2,10 +2,11 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using SessionCompanion.Services.Interfaces;
|
using SessionCompanion.Services.Interfaces;
|
||||||
using SessionCompanion.ViewModels.CharacterViewModels;
|
using SessionCompanion.ViewModels.CharacterViewModels;
|
||||||
using SessionCompanion.ApiReturn;
|
|
||||||
|
|
||||||
namespace SessionCompanion.Controllers
|
namespace SessionCompanion.Controllers
|
||||||
{
|
{
|
||||||
|
using SessionCompanion.Extensions.EitherType;
|
||||||
|
|
||||||
[Route("api/character")]
|
[Route("api/character")]
|
||||||
[ApiController]
|
[ApiController]
|
||||||
public class CharacterController : Controller
|
public class CharacterController : Controller
|
||||||
@ -23,7 +24,7 @@ namespace SessionCompanion.Controllers
|
|||||||
/// <param name="id">Identyfikator postaci</param>
|
/// <param name="id">Identyfikator postaci</param>
|
||||||
/// <returns>ViewModel Postaci</returns>
|
/// <returns>ViewModel Postaci</returns>
|
||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public async Task<Either<string,CharacterViewModel>> Get(int id)
|
public async Task<CharacterViewModel> Get(int id)
|
||||||
{
|
{
|
||||||
return await _service.Get(id);
|
return await _service.Get(id);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user