2023-04-25 04:16:15 +04:00
using SoftwareInstallationClientApp.Models ;
using SoftwareInstallationClientApp ;
using SoftwareInstallationContracts.BindingModels ;
using SoftwareInstallationContracts.ViewModels ;
using Microsoft.AspNetCore.Mvc ;
using System.Diagnostics ;
2023-05-09 02:56:52 +04:00
using System.Text ;
using SoftwareInstallationContracts.SearchModels ;
using Microsoft.AspNetCore.Mvc.Rendering ;
using SoftwareInstallationContracts.ViewModels ;
2023-04-25 04:16:15 +04:00
namespace SoftwareInstallationClientApp.Controllers
{
public class HomeController : Controller
{
private readonly ILogger < HomeController > _logger ;
public HomeController ( ILogger < HomeController > logger )
{
_logger = logger ;
}
public IActionResult Index ( )
{
if ( APIClient . Client = = null )
{
return Redirect ( "~/Home/Enter" ) ;
}
return View ( APIClient . GetRequest < List < OrderViewModel > > ( $"api/main/getorders?clientId={APIClient.Client.Id}" ) ) ;
}
[HttpGet]
public IActionResult Privacy ( )
{
if ( APIClient . Client = = null )
{
return Redirect ( "~/Home/Enter" ) ;
}
return View ( APIClient . Client ) ;
}
[HttpPost]
public void Privacy ( string login , string password , string fio )
{
if ( APIClient . Client = = null )
{
throw new Exception ( "Вы как суда попали? Суда вход только авторизованным" ) ;
}
if ( string . IsNullOrEmpty ( login ) | | string . IsNullOrEmpty ( password ) | | string . IsNullOrEmpty ( fio ) )
{
throw new Exception ( "Введите логин, пароль и ФИО" ) ;
}
APIClient . PostRequest ( "api/client/updatedata" , new ClientBindingModel
{
Id = APIClient . Client . Id ,
ClientFIO = fio ,
Email = login ,
Password = password
} ) ;
APIClient . Client . ClientFIO = fio ;
APIClient . Client . Email = login ;
APIClient . Client . Password = password ;
Response . Redirect ( "Index" ) ;
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error ( )
{
return View ( new ErrorViewModel { RequestId = Activity . Current ? . Id ? ? HttpContext . TraceIdentifier } ) ;
}
[HttpGet]
public IActionResult Enter ( )
{
return View ( ) ;
}
[HttpPost]
public void Enter ( string login , string password )
{
if ( string . IsNullOrEmpty ( login ) | | string . IsNullOrEmpty ( password ) )
{
throw new Exception ( "Введите логин и пароль" ) ;
}
APIClient . Client = APIClient . GetRequest < ClientViewModel > ( $"api/client/login?login={login}&password={password}" ) ;
if ( APIClient . Client = = null )
{
throw new Exception ( "Неверный логин/пароль" ) ;
}
Response . Redirect ( "Index" ) ;
}
[HttpGet]
public IActionResult Register ( )
{
return View ( ) ;
}
[HttpPost]
public void Register ( string login , string password , string fio )
{
if ( string . IsNullOrEmpty ( login ) | | string . IsNullOrEmpty ( password ) | | string . IsNullOrEmpty ( fio ) )
{
throw new Exception ( "Введите логин, пароль и ФИО" ) ;
}
APIClient . PostRequest ( "api/client/register" , new ClientBindingModel
{
ClientFIO = fio ,
Email = login ,
Password = password
} ) ;
Response . Redirect ( "Enter" ) ;
return ;
}
[HttpGet]
public IActionResult Create ( )
{
ViewBag . Packages = APIClient . GetRequest < List < PackageViewModel > > ( "api/main/getpackagelist" ) ;
return View ( ) ;
}
[HttpPost]
public void Create ( int package , int count )
{
if ( APIClient . Client = = null )
{
throw new Exception ( "Вы как суда попали? Суда вход только авторизованным" ) ;
}
if ( count < = 0 )
{
throw new Exception ( "Количество и сумма должны быть больше 0" ) ;
}
APIClient . PostRequest ( "api/main/createorder" , new OrderBindingModel
{
ClientId = APIClient . Client . Id ,
PackageId = package ,
Count = count ,
Sum = Calc ( count , package )
} ) ;
Response . Redirect ( "Index" ) ;
}
[HttpPost]
public double Calc ( int count , int package )
{
var prod = APIClient . GetRequest < PackageViewModel > ( $"api/main/getpackage?packageId={package}" ) ;
return count * ( prod ? . Price ? ? 1 ) ;
}
2023-05-09 02:56:52 +04:00
[HttpGet]
public IActionResult Mails ( )
{
if ( APIClient . Client = = null )
{
return Redirect ( "~/Home/Enter" ) ;
}
return View ( ) ;
}
/// <summary>
/// Switches the page.
/// </summary>
/// <returns>Возвращает кортеж с таблицой в html, текущей страницей писем, выключать ли кнопку пред. страницы, выключать ли кнопку след. страницы</returns>
[HttpGet]
public Tuple < string? , string? , bool , bool > ? SwitchPage ( bool isNext )
{
if ( isNext )
{
APIClient . CurrentPage + + ;
}
else
{
if ( APIClient . CurrentPage = = 1 )
{
return null ;
}
APIClient . CurrentPage - - ;
}
var res = APIClient . GetRequest < List < MessageInfoViewModel > > ( $"api/client/getmessages?clientId={APIClient.Client!.Id}&page={APIClient.CurrentPage}" ) ;
if ( isNext & & ( res = = null | | res . Count = = 0 ) )
{
APIClient . CurrentPage - - ;
return Tuple . Create < string? , string? , bool , bool > ( null , null , APIClient . CurrentPage ! = 1 , false ) ;
}
StringBuilder htmlTable = new ( ) ;
foreach ( var mail in res )
{
htmlTable . Append ( "<tr>" +
$"<td>{mail.DateDelivery}</td>" +
$"<td>{mail.Subject}</td>" +
$"<td>{mail.Body}</td>" +
"<td>" + ( mail . HasRead ? "Прочитано" : "Непрочитано" ) + "</td>" +
$"<td>{mail.Reply}</td>" +
"</tr>" ) ;
}
return Tuple . Create < string? , string? , bool , bool > ( htmlTable . ToString ( ) , APIClient . CurrentPage . ToString ( ) , APIClient . CurrentPage ! = 1 , true ) ;
}
2023-04-25 04:16:15 +04:00
}
}