temperature-alarm/backend/Api/BusinessLogic/DeviceLogic.cs

98 lines
4.4 KiB
C#

using Api.DBAccess;
using Api.Models;
using Microsoft.AspNetCore.Mvc;
namespace Api.BusinessLogic
{
public class DeviceLogic
{
private readonly DbAccess _dbAccess;
private readonly IConfiguration _configuration;
public DeviceLogic(IConfiguration configuration, DbAccess dbAccess)
{
_dbAccess = dbAccess;
_configuration = configuration;
}
/// <summary>
/// Gets the user from dbaccess using the userId and checks if the user exists
/// Gets all devices that match the userId and checks if there are any devices connected to the user
/// </summary>
/// <param name="userId">UserId that matches a user that owns the devices</param>
/// <returns>returns the devices in a OkObjectResult and if there is some error it returns a ConflictObjectResult and a message that explain the reason</returns>
public async Task<IActionResult> GetDevices(int userId)
{
var profile = await _dbAccess.ReadUser(userId);
if (profile == null) { return new ConflictObjectResult(new { message = "Could not find user" }); }
var devices = await _dbAccess.ReadDevices(userId);
if (devices.Count == 0) { return new ConflictObjectResult(new { message = "Could not find any devices connected to the user" }); }
return new OkObjectResult(devices);
}
/// <summary>
/// Checks if the user that the device is trying to be added to exists
/// Then it is send to dbaccess
/// </summary>
/// <param name="device">The new device</param>
/// <param name="userId">The user that owns the device</param>
/// <returns>returns true in a OkObjectResult and if there is some error it returns a ConflictObjectResult and a message that explain the reason</returns>
public async Task<IActionResult> AddDevice(Device device, int userId)
{
var profile = await _dbAccess.ReadUser(userId);
if (profile == null) { return new ConflictObjectResult(new { message = "Could not find user" }); }
return await _dbAccess.CreateDevice(device, userId);
}
/// <summary>
/// Checks if the device exist that is trying to be read from
/// Gets the logs and checks if there are any in the list
/// Checks if the datetimeRange have 2 values that are the same bc that means they want all logs
/// Then it makes a new list with all data that are in the range of the 2 datetimes
/// </summary>
/// <param name="deviceId">The deviceId that you want from the logs</param>
/// <returns>returns the logs in a OkObjectResult and if there is some error it returns a ConflictObjectResult and a message that explain the reason</returns>
public async Task<IActionResult> GetLogs(DateTimeRange dateTimeRange, int deviceId)
{
var device = await _dbAccess.ReadDevice(deviceId);
if (device == null) { return new ConflictObjectResult(new { message = "Could not find device" }); }
var logs = await _dbAccess.ReadLogs(deviceId);
if (logs.Count == 0) { return new ConflictObjectResult(new { message = "Could not find any logs connected to the device" }); }
if (dateTimeRange.DateTimeStart == dateTimeRange.DateTimeEnd) { return new OkObjectResult(logs); }
List<TemperatureLogs> rangedLogs = new List<TemperatureLogs>();
foreach (var log in logs)
{
if (log.Date <= dateTimeRange.DateTimeStart && log.Date >= dateTimeRange.DateTimeEnd) { rangedLogs.Add(log); }
}
return new OkObjectResult(rangedLogs);
}
/// <summary>
/// Checks if the deviceId matches a device
/// </summary>
/// <param name="device">The updated info</param>
/// <param name="deviceId">The device to be edited</param>
/// <returns>returns the updated device in a OkObjectResult and if there is some error it returns a ConflictObjectResult and a message that explain the reason</returns>
public async Task<IActionResult> EditDevice(Device device, int deviceId)
{
var device1 = _dbAccess.ReadDevice(deviceId);
if (device1 == null) { return new ConflictObjectResult(new { message = "Could not find device" }); }
return await _dbAccess.UpdateDevice(device, deviceId);
}
}
}