greenhouseCRUD #7
@ -2,75 +2,106 @@ using Cloud.Models;
|
||||
using Cloud.Requests;
|
||||
using Cloud.Services.Broker;
|
||||
using Cloud.Services.Broker.Support;
|
||||
using Cloud.Services.Domain;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Cloud.Controllers
|
||||
{
|
||||
[ApiController]
|
||||
[Route("api/user/{userId}/farm/{farmId}/greenhouse")]
|
||||
[Route("api/farm/{farmId}/greenhouse")]
|
||||
public class GreenhouseController : ControllerBase
|
||||
{
|
||||
private readonly IBrokerService _brokerService;
|
||||
private readonly ApplicationContext _context;
|
||||
private readonly IConfiguration _config;
|
||||
public GreenhouseController(IConfiguration config, ApplicationContext context,
|
||||
IBrokerService brokerService)
|
||||
private readonly IGreenhouseService _greenhouseService;
|
||||
public GreenhouseController(IGreenhouseService greenhouseService)
|
||||
{
|
||||
_brokerService = brokerService;
|
||||
_context = context;
|
||||
_config = config;
|
||||
_greenhouseService = greenhouseService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает текущую информацию о всех теплицах пользователя
|
||||
*/
|
||||
/// <summary>
|
||||
/// Возвращает текущую информацию о всех теплицах пользователя
|
||||
/// </summary>
|
||||
/// <param name="farmId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public async Task<ActionResult<List<GreenhouseInfo>>> GetAll(int userId, int farmId)
|
||||
public async Task<ActionResult<List<GreenhouseInfo>>> GetAll(int farmId)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
try
|
||||
{
|
||||
var greenhouses = _greenhouseService.GetAll(farmId);
|
||||
return Ok(greenhouses);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return BadRequest(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает текущую информацию о конкретной теплице
|
||||
*/
|
||||
/// <summary>
|
||||
/// Возвращает текущую информацию о конкретной теплице
|
||||
/// </summary>
|
||||
/// <param name="farmId"></param>
|
||||
/// <param name="greenhouseId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{greenhouseId}")]
|
||||
public async Task<ActionResult<GreenhouseInfo>> Get(int userId, int farmId, int greenhouseId)
|
||||
public async Task<ActionResult<GreenhouseInfo>> Get(int farmId, int greenhouseId)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
try
|
||||
{
|
||||
var greenhouses = _greenhouseService.GetGreenhouseInfo(greenhouseId, farmId);
|
||||
return Ok(greenhouses);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return BadRequest(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает сохраненные данные для автоматизации теплицы
|
||||
*/
|
||||
/// <summary>
|
||||
/// Возвращает сохраненные данные для автоматизации теплицы
|
||||
/// </summary>
|
||||
/// <param name="farmId"></param>
|
||||
/// <param name="greenhouseId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{greenhouseId}/settings")]
|
||||
public async Task<ActionResult<Greenhouse>> GetGreenhouse(int userId, int farmId, int greenhouseId)
|
||||
public async Task<ActionResult<Greenhouse>> GetGreenhouse(int farmId, int greenhouseId)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/**
|
||||
* Сохраняет в базе данных API данные для автоматизации теплицы
|
||||
*/
|
||||
/// <summary>
|
||||
/// Сохраняет в базе данных API данные для автоматизации теплицы
|
||||
/// </summary>
|
||||
/// <param name="farmId"></param>
|
||||
/// <param name="greenhouse"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public async Task<ActionResult<Greenhouse>> SaveToDatabase(int userId, int farmId, GreenhouseRequest greenhouse)
|
||||
public async Task<ActionResult<Greenhouse>> SaveToDatabase(int farmId, GreenhouseRequest greenhouse)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновляет в базе данных API данные для автоматизации теплицы
|
||||
*/
|
||||
|
||||
/// <summary>
|
||||
/// Обновляет в базе данных API данные для автоматизации теплицы
|
||||
/// </summary>
|
||||
/// <param name="farmId">ID фермы</param>
|
||||
/// <param name="greenhouseId">ID теплицы</param>
|
||||
/// <param name="greenhouse">Данные для обновления</param>
|
||||
/// <returns>Обновленный объект Greenhouse</returns>
|
||||
[HttpPut("{greenhouseId}/settings")]
|
||||
public async Task<ActionResult<Greenhouse>> Update(int userId, int farmId, int greenhouseId, GreenhouseRequest greenhouse)
|
||||
public async Task<ActionResult<Greenhouse>> Update(int farmId, int greenhouseId, GreenhouseRequest greenhouse)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/**
|
||||
* Удаляет из базы данных API запись настроек автоматизации теплицы
|
||||
*/
|
||||
/// <summary>
|
||||
/// Удаляет из базы данных API запись настроек автоматизации теплицы
|
||||
/// </summary>
|
||||
/// <param name="farmId"></param>
|
||||
/// <param name="greenhouseId"></param>
|
||||
/// <returns></returns>
|
||||
[HttpDelete("{greenhouseId}")]
|
||||
public async Task<ActionResult> Delete(int userId, int farmId, int greenhouseId)
|
||||
public async Task<ActionResult> Delete(int farmId, int greenhouseId)
|
||||
{
|
||||
|
||||
throw new NotImplementedException();
|
||||
|
@ -10,11 +10,14 @@ using StackExchange.Redis;
|
||||
using Cloud.Services.Broker.Implement.Kafka;
|
||||
using Cloud.Services.Broker;
|
||||
using Cloud.Services;
|
||||
using Cloud.Services.Domain.Implement;
|
||||
using Cloud.Services.Domain;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
builder.Services.AddSingleton<IBrokerService, KafkaService>();
|
||||
builder.Services.AddTransient<IBrokerService, KafkaService>();
|
||||
builder.Services.AddTransient<IGreenhouseService, GreenhouseService>();
|
||||
//Redis configuration
|
||||
builder.Services.AddSingleton<IConnectionMultiplexer>(sp =>
|
||||
{
|
||||
@ -22,15 +25,6 @@ builder.Services.AddSingleton<IConnectionMultiplexer>(sp =>
|
||||
return ConnectionMultiplexer.Connect(configuration);
|
||||
});
|
||||
|
||||
//Kafka producer service
|
||||
builder.Services.AddSingleton<ProducerService, ProducerService>();
|
||||
|
||||
//Kafka consumer service
|
||||
builder.Services.AddSingleton<ConsumerService, ConsumerService>();
|
||||
|
||||
//Add the BackgroundWorkerService
|
||||
builder.Services.AddHostedService<BackgroundWorkerService>();
|
||||
|
||||
//Jwt configuration
|
||||
var jwtIssuer = builder.Configuration.GetSection("Jwt:Issuer").Get<string>();
|
||||
var jwtKey = builder.Configuration.GetSection("Jwt:Key").Get<string>();
|
||||
|
45
Cloud/Services/Domain/IGreenhouseService.cs
Normal file
45
Cloud/Services/Domain/IGreenhouseService.cs
Normal file
@ -0,0 +1,45 @@
|
||||
using Cloud.Models;
|
||||
using Cloud.Services.Broker.Support;
|
||||
|
||||
namespace Cloud.Services.Domain;
|
||||
|
||||
public interface IGreenhouseService
|
||||
{
|
||||
/// <summary>
|
||||
/// Возвращает текущую информацию о конкретной теплице из брокера
|
||||
/// </summary>
|
||||
/// <param name="id">ID теплицы</param>
|
||||
/// <param name="farmId">ID фермы, то есть брокера</param>
|
||||
/// <returns>Текущие данные о теплице от менеджера теплицы</returns>
|
||||
public Task<GreenhouseInfo?> GetGreenhouseInfo(int id, int farmId);
|
||||
/// <summary>
|
||||
/// Возвращает сохраненные данные для автоматизации теплицы из базы данных
|
||||
/// </summary>
|
||||
/// <param name="id">ID теплицы</param>
|
||||
/// <returns>Данные для автоматизации теплицы</returns>
|
||||
public Task<Greenhouse?> GetGreenhouse(int id);
|
||||
/// <summary>
|
||||
/// Возвращает список данных о всех теплицах пользователя из брокера
|
||||
/// </summary>
|
||||
/// <param name="farmId">ID фермы</param>
|
||||
/// <returns>Список текущих данных о теплицах</returns>
|
||||
public Task<IEnumerable<GreenhouseInfo>?> GetAll(int farmId);
|
||||
/// <summary>
|
||||
/// Сохраняет данные об автоматизации теплицы в базу данных
|
||||
/// </summary>
|
||||
/// <param name="greenhouse">Данные автоматизации теплицы</param>
|
||||
/// <returns>Созданную сущность из базы данных</returns>
|
||||
public Task<Greenhouse> Create(Greenhouse greenhouse);
|
||||
/// <summary>
|
||||
/// Обновляет данные автоматизации теплицы в базе данных
|
||||
/// </summary>
|
||||
/// <param name="greenhouse">Новая информация об автоматизации теплицы</param>
|
||||
/// <returns>Обновленную сущность из базы данных</returns>
|
||||
public Task<Greenhouse> Update(Greenhouse greenhouse);
|
||||
/// <summary>
|
||||
/// Удаляет данные об автоматизации теплицы из базы данных
|
||||
/// </summary>
|
||||
/// <param name="id">ID данных автоматизации теплицы</param>
|
||||
/// <returns>Возвращает удаленную сущность</returns>
|
||||
public Task<Greenhouse> Delete(int id);
|
||||
}
|
67
Cloud/Services/Domain/Implement/GreenhouseService.cs
Normal file
67
Cloud/Services/Domain/Implement/GreenhouseService.cs
Normal file
@ -0,0 +1,67 @@
|
||||
using Cloud.Models;
|
||||
using Cloud.Services.Broker;
|
||||
using Cloud.Services.Broker.Support;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Cloud.Services.Domain.Implement;
|
||||
|
||||
public class GreenhouseService : IGreenhouseService
|
||||
{
|
||||
private readonly IBrokerService _brokerService;
|
||||
private readonly ApplicationContext _context;
|
||||
|
||||
public GreenhouseService(IBrokerService brokerService, ApplicationContext context)
|
||||
{
|
||||
_context = context;
|
||||
_brokerService = brokerService;
|
||||
}
|
||||
|
||||
public async Task<Greenhouse> Create(Greenhouse greenhouse)
|
||||
{
|
||||
var res = await _context.Greenhouses.AddAsync(greenhouse);
|
||||
await _context.SaveChangesAsync();
|
||||
return res.Entity;
|
||||
}
|
||||
|
||||
public async Task<Greenhouse> Delete(int id)
|
||||
{
|
||||
var greenhouse = await _context.Greenhouses.FirstOrDefaultAsync(x => x.Id == id);
|
||||
|
||||
_context.Greenhouses.Remove(greenhouse);
|
||||
await _context.SaveChangesAsync();
|
||||
return greenhouse;
|
||||
}
|
||||
|
||||
|
||||
public async Task<Greenhouse?> GetGreenhouse(int id)
|
||||
{
|
||||
return await _context.Greenhouses.FirstOrDefaultAsync(x => x.Id == id);
|
||||
}
|
||||
|
||||
public async Task<Greenhouse> Update(Greenhouse greenhouse)
|
||||
{
|
||||
var res = _context.Greenhouses.Update(greenhouse);
|
||||
await _context.SaveChangesAsync();
|
||||
return res.Entity;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<GreenhouseInfo>?> GetAll(int farmId)
|
||||
{
|
||||
await _changeBrokerIp(farmId);
|
||||
return _brokerService.WaitMessages<GreenhouseInfo>("data");
|
||||
}
|
||||
|
||||
public async Task<GreenhouseInfo?> GetGreenhouseInfo(int id, int farmId)
|
||||
{
|
||||
await _changeBrokerIp(farmId);
|
||||
var infos = _brokerService.WaitMessages<GreenhouseInfo>("data");
|
||||
return infos?.FirstOrDefault(x => x.Id == id);
|
||||
}
|
||||
|
||||
private async Task _changeBrokerIp(int farmId)
|
||||
{
|
||||
var farm = await _context.Farms.FirstOrDefaultAsync(x => x.Id == farmId);
|
||||
_brokerService.ChangeBrokerIp(farm.RaspberryIP);
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user