This commit is contained in:
Mikhail Kuznetsov
2023-06-16 15:00:11 +10:00
parent 73a824057b
commit 57fe9eff09
37 changed files with 1151 additions and 504 deletions

View File

@@ -1,9 +1,49 @@
using PARR.API.Controllers.V1.Base;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using PARR.API.Contracts.V1;
using PARR.API.Contracts.V1.Responses;
using PARR.API.Contracts.V1.Responses.Base;
using PARR.API.Controllers.V1.Base;
using System.Reflection;
namespace PARR.API.Controllers.V1
{
public class ApiStatusController : BaseApiController
{
//TODO:
/// <summary>
/// Получить версию и окружение
/// </summary>
/// <returns></returns>
[AllowAnonymous]
[HttpGet(ApiRoutes.ApiStatus.Version)]
public IActionResult GetVersion()
{
var version = Assembly.GetEntryAssembly()?.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion;
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var response = new ApiVersionResponse
{
Environment = environment,
Version = version
};
return Ok(new Response<ApiVersionResponse>(response, true));
}
/// <summary>
/// Проверка доступности системы
/// </summary>
/// <returns></returns>
[AllowAnonymous]
[HttpGet(ApiRoutes.ApiStatus.Health)]
public IActionResult GetHealth()
{
//Так же можно реализовать проверку связи с БД
//Проверка доступности хранилищ
var response = new ApiHealthResponse { };
return Ok(new Response<ApiHealthResponse>(response, true));
}
}
}

View File

@@ -1,26 +0,0 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using PARR.DAL.Services.Interfaces;
namespace PARR.API.Controllers.V1
{
public class HomeController : Controller
{
private readonly IHostService hostService;
public HomeController(IHostService hostService)
{
this.hostService = hostService;
}
[HttpGet("test")]
public async Task<IActionResult> Index()
{
var hosts = await hostService.Get().ToListAsync();
//foreach (var host in hosts) { logger.LogInformation($"{host.HostName}"); }
//return View();
return Ok(hosts.Select(t => new { t.HostName, t.IP, t.Id }));
}
}
}

View File

@@ -0,0 +1,78 @@
using Microsoft.AspNetCore.Mvc;
using PARR.API.Contracts.V1.Requests.Queries;
using PARR.API.Contracts.V1;
using PARR.API.Controllers.V1.Base;
using AutoMapper;
using PARR.DAL.DomainModels;
using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces;
using Microsoft.EntityFrameworkCore;
using PARR.API.Contracts.V1.Responses;
using PARR.API.Contracts.V1.Responses.Base;
using PARR.API.Extensions;
using System.Runtime.CompilerServices;
using PARR.API.Services.Interfaces;
namespace PARR.API.Controllers.V1
{
public class ShchedullerController : BaseApiController
{
private readonly IMapper mapper;
private readonly ISchedulerService schedulerService;
private readonly IClientService clientService;
public ShchedullerController(
IMapper mapper,
ISchedulerService schedulerService,
IClientService clientService
)
{
this.mapper = mapper;
this.schedulerService = schedulerService;
this.clientService = clientService;
}
/// <summary>
/// Список всех планировщиков постранично в соотвествии с фильтрами
/// </summary>
/// <param name="paginationQuery"></param>
/// <returns></returns>
[HttpGet(ApiRoutes.Scheduler.GetAll)]
public async Task<IActionResult> GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] SchedulerGetAllQuery filter)
{
var paginationFilter = mapper.Map<PaginationFilter>(paginationQuery);
IQueryable<Scheduler> query = schedulerService.Get().OrderBy(s => s.StartAt);
if (filter.IsEnabled.HasValue)
query = query.Where(t => t.IsEnabled == filter.IsEnabled);
if (filter.StartDatePlanned.HasValue)
query = query.Where(t => t.StartAt.DateTime.Date <= filter.StartDatePlanned.Value.DateTime.Date); ;
var schedulers = await schedulerService.GetPage(query, paginationFilter).ToListAsync();
if (!schedulers.Any())
return NoContent();
var schedulerResponse = mapper.Map<List<SchedulerGetAllResponse>>(schedulers);
var paginationResponse = new PagedResponse<SchedulerGetAllResponse>(schedulerResponse, true).GetPaginatedProps(paginationFilter, query);
return Ok(paginationResponse);
}
[HttpGet(ApiRoutes.Scheduler.GetByIp)]
public async Task<IActionResult> GetByClientIP([FromQuery] SchedulerGetByIpQuery requestQuery)
{
var ip = requestQuery.Ip ?? clientService.GetClientIp()?.ToString();
if (string.IsNullOrEmpty(ip))
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Client IP address is null." } }));
// TODO;
return Ok();
}
}
}