mirror of
https://bitbucket.org/myhomie/mycorerepository.git
synced 2025-12-06 01:31:19 +00:00
MC Automation controller (WIP)
This commit is contained in:
parent
1b2d7cb87b
commit
db89f0a753
@ -15,6 +15,10 @@ namespace MyCore.Interfaces.Models
|
||||
[BsonRepresentation(BsonType.ObjectId)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[BsonElement("UserId")]
|
||||
[BsonRequired]
|
||||
public string UserId { get; set; }
|
||||
|
||||
[BsonElement("Name")]
|
||||
[BsonRequired]
|
||||
public string Name { get; set; }
|
||||
|
||||
181
MyCore/Controllers/AutomationController.cs
Normal file
181
MyCore/Controllers/AutomationController.cs
Normal file
@ -0,0 +1,181 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Security.Authentication;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using MongoDB.Bson;
|
||||
using Mqtt.Client.AspNetCore.Services;
|
||||
using MyCore.Interfaces.DTO;
|
||||
using MyCore.Interfaces.Models;
|
||||
using MyCore.Services;
|
||||
using MyCore.Services.Devices;
|
||||
using MyCore.Services.MyControlPanel;
|
||||
|
||||
namespace MyCore.Service.Controllers
|
||||
{
|
||||
[Authorize] // TODO Add ROLES (Roles = "Admin")
|
||||
[Route("api/automation")]
|
||||
[ApiController]
|
||||
public class AutomationController : ControllerBase
|
||||
{
|
||||
private UserDatabaseService _UserDatabaseService;
|
||||
private AutomationDatabaseService _AutomationDatabaseService;
|
||||
private readonly IMqttClientService _mqttClientService;
|
||||
private readonly IMqttOnlineClientService _mqttOnlineClientService;
|
||||
|
||||
public AutomationController(UserDatabaseService userDatabaseService, AutomationDatabaseService automationDatabaseService, MqttClientServiceProvider provider, MqttClientOnlineServiceProvider onlineProvider)
|
||||
{
|
||||
this._UserDatabaseService = userDatabaseService;
|
||||
this._AutomationDatabaseService = automationDatabaseService;
|
||||
this._mqttClientService = provider.MqttClientService;
|
||||
this._mqttOnlineClientService = onlineProvider.MqttOnlineClientService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get all automations for the specified user
|
||||
/// </summary>
|
||||
/// <param name="userId">Id of user</param>
|
||||
[ProducesResponseType(typeof(List<RoomSummaryDTO>), 200)]
|
||||
[HttpGet("{userId}")]
|
||||
public ObjectResult GetAll(string userId)
|
||||
{
|
||||
try
|
||||
{
|
||||
List<Automation> Automations = _AutomationDatabaseService.GetAll(userId);
|
||||
|
||||
List<AutomationDTO> automationDTO = Automations.Select(d => d.ToDTO()).ToList();
|
||||
|
||||
return new OkObjectResult(automationDTO);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get detail info of a specified automation
|
||||
/// </summary>
|
||||
/// <param name="automationId">automation id</param>
|
||||
[ProducesResponseType(typeof(RoomDetailDTO), 200)]
|
||||
[HttpGet("detail/{roomId}")]
|
||||
public ObjectResult GetDetail(string automationId)
|
||||
{
|
||||
try
|
||||
{
|
||||
Automation automation = _AutomationDatabaseService.GetById(automationId);
|
||||
|
||||
return new OkObjectResult(automation.ToDTO());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
//// <summary>
|
||||
/// Create an automation
|
||||
/// </summary>
|
||||
/// <param name="automationCreateOrUpdateDetail">Automation to create</param>
|
||||
[ProducesResponseType(typeof(RoomDetailDTO), 200)]
|
||||
[HttpPost]
|
||||
public ObjectResult Create([FromBody] AutomationCreateOrUpdateDetailDTO automationCreateOrUpdateDetail)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (roomCreateOrUpdateDetail == null)
|
||||
throw new KeyNotFoundException("Room is null");
|
||||
|
||||
RoomDetailDTO roomCreated = RoomService.CreateOrUpdate(this._RoomDatabaseService, roomCreateOrUpdateDetail.UserId, roomCreateOrUpdateDetail, true);
|
||||
|
||||
return new OkObjectResult(roomCreated);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update a room
|
||||
/// </summary>
|
||||
/// <param name="roomCreateOrUpdateDetail">room to update</param>
|
||||
[ProducesResponseType(typeof(RoomCreateOrUpdateDetailDTO), 200)]
|
||||
[HttpPut]
|
||||
public ObjectResult Update([FromBody] RoomCreateOrUpdateDetailDTO roomCreateOrUpdateDetail)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!_RoomDatabaseService.IsExist(roomCreateOrUpdateDetail.Id))
|
||||
throw new KeyNotFoundException("Room does not exist");
|
||||
|
||||
RoomDetailDTO roomUpdated = RoomService.CreateOrUpdate(this._RoomDatabaseService, roomCreateOrUpdateDetail.UserId, roomCreateOrUpdateDetail, false);
|
||||
|
||||
return new OkObjectResult(roomUpdated);
|
||||
}
|
||||
catch (KeyNotFoundException ex)
|
||||
{
|
||||
return new BadRequestObjectResult(ex.Message) { StatusCode = 404 };
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||
}
|
||||
}*/
|
||||
|
||||
/// <summary>
|
||||
/// Delete an automation
|
||||
/// </summary>
|
||||
/// <param name="automationId">Id of automation to delete</param>
|
||||
[HttpDelete("{automationId}")]
|
||||
public ObjectResult Delete(string automationId)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (automationId != null)
|
||||
{
|
||||
if (_AutomationDatabaseService.IsExist(automationId))
|
||||
{
|
||||
_AutomationDatabaseService.Remove(automationId);
|
||||
}
|
||||
}
|
||||
|
||||
return new OkObjectResult(201);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Delete all automation for a specified
|
||||
/// </summary>
|
||||
/// <param name="userId">Id of user</param>
|
||||
[HttpDelete("user/{userId}")]
|
||||
public ObjectResult DeleteAllForUser(string userId)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (userId != null)
|
||||
{
|
||||
if (_UserDatabaseService.IsExist(userId))
|
||||
{
|
||||
_AutomationDatabaseService.RemoveForUser(userId);
|
||||
}
|
||||
}
|
||||
|
||||
return new OkObjectResult(201);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return new ObjectResult(ex.Message) { StatusCode = 500 };
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -18,9 +18,9 @@ namespace MyCore.Services.MyControlPanel
|
||||
var database = client.GetDatabase("MyCoreDb");
|
||||
_Automations = database.GetCollection<Automation>("Automations");
|
||||
}
|
||||
public List<Automation> GetAll()
|
||||
public List<Automation> GetAll(string userId)
|
||||
{
|
||||
return _Automations.Find(d => true).ToList();
|
||||
return _Automations.Find(a => a.UserId == userId).ToList();
|
||||
}
|
||||
|
||||
public Automation GetById(string id)
|
||||
@ -33,6 +33,11 @@ namespace MyCore.Services.MyControlPanel
|
||||
return _Automations.Find<Automation>(a => a.Triggers.Any(t => t.ProviderId == id)).FirstOrDefault();
|
||||
}
|
||||
|
||||
public bool IsExist(string id)
|
||||
{
|
||||
return _Automations.Find<Automation>(d => d.Id == id).FirstOrDefault() != null ? true : false;
|
||||
}
|
||||
|
||||
public Automation Create(Automation automation)
|
||||
{
|
||||
_Automations.InsertOne(automation);
|
||||
@ -49,5 +54,10 @@ namespace MyCore.Services.MyControlPanel
|
||||
{
|
||||
_Automations.DeleteOne(automation => automation.Id == id);
|
||||
}
|
||||
|
||||
public void RemoveForUser(string userId)
|
||||
{
|
||||
_Automations.DeleteMany(automation => automation.UserId == userId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user