Skip to content
Snippets Groups Projects
APIController.cs 2.63 KiB
Newer Older
using Microsoft.AspNetCore.Mvc;
using Public_API.Server.DAL;
using Public_API.Shared.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860

namespace Public_API.Server.Controllers
{
    [Route("[controller]")]
    [ApiController]
    public class APIController : ControllerBase
    {

        ApiContext db = new ApiContext();

        public Sensor? getSensorByUID(string sensorUID)
        {
            return db.Sensor.Where(s => s.sensorUID.Equals(sensorUID)).FirstOrDefault();
        }


        // GET: api/<APIController>
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // TODO Post
        // TODO Auth required
        // GET api/sensor/logValue/...
        [HttpGet("sensor/logValue/{sensorID}/{temperature}/{humidity}/{co2}/{ppm25}")]
        public HttpResponseMessage Get(int sensorID, string temperature, string humidity, string co2, string ppm25)
            //SensorValue sensorValue = new SensorValue(sensorID, decimal.Parse(temperature), decimal.Parse(humidity), decimal.Parse(co2), decimal.Parse(ppm25));
            //db.SensorValue.Add(sensorValue);
            //db.SaveChanges();
            return new HttpResponseMessage(HttpStatusCode.OK);
        // POST api/sensor/reading (With POST JSON Data)
        [HttpPost("sensor/reading")]
        public HttpResponseMessage Post([FromBody] SensorResponse response)
            var sensor = getSensorByUID(response.sensorMetadata.uid);
            if (sensor == null) {
                return new HttpResponseMessage(HttpStatusCode.NotFound);
            }
            //// TODO Error Handling!
            SensorValue sensorValue = new SensorValue(
                sensor.sensorID,
                DateTimeOffset.FromUnixTimeSeconds(response.sensorMetadata.sampleTime).DateTime,
                (decimal)response.sensorReading.sht.temperature, // SHT
                (decimal)response.sensorReading.sht.humidity, // SHT
                0, // TODO C02
                (decimal)response.sensorReading.ppm.p25 // PPM TODO ppm10 and ppm100
            );

            db.SensorValue.Add(sensorValue);
            db.SaveChanges();

            return new HttpResponseMessage(HttpStatusCode.OK);
        // DELETE api/<APIController>/5
        [HttpDelete("{id}")]
        public void Delete(int id)
        {
        }
    }
}