From d21a759ef44bfc1176cbc94254857819c15d8759 Mon Sep 17 00:00:00 2001 From: Reimar Date: Wed, 19 Mar 2025 14:33:11 +0100 Subject: [PATCH 1/5] Use correct DBContext class --- backend/Api/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/Api/Program.cs b/backend/Api/Program.cs index 02c216a..5802836 100644 --- a/backend/Api/Program.cs +++ b/backend/Api/Program.cs @@ -22,7 +22,7 @@ class Program public static async void RunMigrations(IWebHost app) { await using var scope = app.Services.CreateAsyncScope(); - await using var db = scope.ServiceProvider.GetService(); + await using var db = scope.ServiceProvider.GetService(); if (db != null) { await db.Database.MigrateAsync(); From 11967bfa59cbce274c7fc9b41f8a9e5c4bbff2ce Mon Sep 17 00:00:00 2001 From: LilleBRG Date: Wed, 19 Mar 2025 16:02:59 +0100 Subject: [PATCH 2/5] init --- .../mockdata/temperature-logs.mockdata.js | 54 +++++++++---------- frontend/pages/home/home.css | 41 ++++++++++++++ frontend/pages/home/home.html | 13 +++++ frontend/pages/home/home.js | 33 ++++++++++-- frontend/pages/login/login.css | 45 ++++++++++++++++ frontend/pages/login/login.html | 33 ++++++++++++ frontend/pages/register/register.css | 46 ++++++++++++++++ frontend/pages/register/register.html | 30 +++++++++++ 8 files changed, 265 insertions(+), 30 deletions(-) diff --git a/frontend/mockdata/temperature-logs.mockdata.js b/frontend/mockdata/temperature-logs.mockdata.js index eaef375..e6056ae 100644 --- a/frontend/mockdata/temperature-logs.mockdata.js +++ b/frontend/mockdata/temperature-logs.mockdata.js @@ -1,28 +1,28 @@ export const mockTemperatureLogs = [ - { Id: 1, Temperature: 18.9, Date: "2025-03-19T17:00:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 19.1, Date: "2025-03-19T17:10:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 19.5, Date: "2025-03-19T17:20:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 19.8, Date: "2025-03-19T17:30:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 20.1, Date: "2025-03-19T17:40:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 20.3, Date: "2025-03-19T17:50:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 20.6, Date: "2025-03-19T18:00:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 20.9, Date: "2025-03-19T18:10:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 20.8, Date: "2025-03-19T18:20:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 20.7, Date: "2025-03-19T18:30:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 20.5, Date: "2025-03-19T18:40:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 20.3, Date: "2025-03-19T18:50:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 20.1, Date: "2025-03-19T19:00:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 18.9, Date: "2025-03-19T20:00:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 19.1, Date: "2025-03-19T20:10:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 19.5, Date: "2025-03-19T20:20:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 19.8, Date: "2025-03-19T20:30:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 20.1, Date: "2025-03-19T20:40:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 20.3, Date: "2025-03-19T20:50:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 22.6, Date: "2025-03-19T21:00:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 22.9, Date: "2025-03-19T21:10:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 22.8, Date: "2025-03-19T21:20:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 22.7, Date: "2025-03-19T21:30:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 22.5, Date: "2025-03-19T21:40:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 23.3, Date: "2025-03-19T21:50:00Z", TempHigh: 22.0, TempLow: 18.0 }, - { Id: 1, Temperature: 24.1, Date: "2025-03-19T22:00:00Z", TempHigh: 22.0, TempLow: 18.0 }, -]; + { id: 1, temperature: 18.9, date: "2025-03-19T17:00:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 19.1, date: "2025-03-19T17:10:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 19.5, date: "2025-03-19T17:20:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 19.8, date: "2025-03-19T17:30:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 20.1, date: "2025-03-19T17:40:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 20.3, date: "2025-03-19T17:50:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 20.6, date: "2025-03-19T18:00:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 20.9, date: "2025-03-19T18:10:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 20.8, date: "2025-03-19T18:20:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 20.7, date: "2025-03-19T18:30:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 20.5, date: "2025-03-19T18:40:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 20.3, date: "2025-03-19T18:50:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 20.1, date: "2025-03-19T19:00:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 18.9, date: "2025-03-19T20:00:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 19.1, date: "2025-03-19T20:10:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 19.5, date: "2025-03-19T20:20:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 19.8, date: "2025-03-19T20:30:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 20.1, date: "2025-03-19T20:40:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 20.3, date: "2025-03-19T20:50:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 22.6, date: "2025-03-19T21:00:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 22.9, date: "2025-03-19T21:10:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 22.8, date: "2025-03-19T21:20:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 22.7, date: "2025-03-19T21:30:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 22.5, date: "2025-03-19T21:40:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 23.3, date: "2025-03-19T21:50:00Z", tempHigh: 22.0, tempLow: 18.0 }, + { id: 1, temperature: 24.1, date: "2025-03-19T22:00:00Z", tempHigh: 22.0, tempLow: 18.0 }, +] diff --git a/frontend/pages/home/home.css b/frontend/pages/home/home.css index 1f47ee0..4900e43 100644 --- a/frontend/pages/home/home.css +++ b/frontend/pages/home/home.css @@ -25,4 +25,45 @@ body { .topnav a.active { background-color: #04AA6D; color: white; + } + + table { + font-family: arial, sans-serif; + border-collapse: collapse; + width: 100%; + } + + td, th { + border: 1px solid #dddddd; + text-align: left; + padding: 8px; + } + + tr:nth-child(even) { + background-color: #dddddd; + } + + .tempHigh{ + color: #ff0000; + width: 20px; + } + + .tempMidHigh{ + color: #fffb00; + width: 20px; + } + + .tempNormal{ + color: #02ed26; + width: 20px; + } + + .tempMidLow{ + color: #16fae7 ; + width: 20px; + } + + .tempLow{ + color: #0004ff; + width: 20px; } \ No newline at end of file diff --git a/frontend/pages/home/home.html b/frontend/pages/home/home.html index f06efff..2f5fec6 100644 --- a/frontend/pages/home/home.html +++ b/frontend/pages/home/home.html @@ -15,6 +15,19 @@ + + + + + + + + + + + + +
NameTemperatureDateTempHighTempLow
diff --git a/frontend/pages/home/home.js b/frontend/pages/home/home.js index 6f739c7..53a909c 100644 --- a/frontend/pages/home/home.js +++ b/frontend/pages/home/home.js @@ -1,8 +1,8 @@ import { mockTemperatureLogs } from "../../mockdata/temperature-logs.mockdata.js"; // Import data -const xValues = mockTemperatureLogs.map(log => new Date(log.Date).toLocaleString()); // Full Date labels -const yValues = mockTemperatureLogs.map(log => log.Temperature); // Temperature values - +const xValues = mockTemperatureLogs.map(log => new Date(log.date).toLocaleString()); // Full Date labels +const yValues = mockTemperatureLogs.map(log => log.temperature); // Temperature values +buildTable(mockTemperatureLogs); new Chart("myChart", { type: "line", data: { @@ -28,3 +28,30 @@ new Chart("myChart", { } } }); + +function buildTable(data){ + var table = document.getElementById(`TemperatureTable`) + data.forEach(log => { + var averageTemp = (log.tempHigh + log.tempLow) / 2.0; + var color; + if (log.temperature > log.tempHigh) { + color = 'tempHigh'; + } else if (log.temperature < log.tempHigh && log.temperature > averageTemp) { + color = 'tempMidHigh'; + } else if (log.temperature < log.tempLow) { + color = 'tempLow'; + } else if (log.temperature > log.tempLow && log.temperature < averageTemp) { + color = 'tempMidLow'; + } else { + color = 'tempNormal'; + } + var row =` + Name + ${log.temperature} + ${log.date} + ${log.tempHigh} + ${log.tempLow} + ` + table.innerHTML += row + }) +} diff --git a/frontend/pages/login/login.css b/frontend/pages/login/login.css index e69de29..8b129cc 100644 --- a/frontend/pages/login/login.css +++ b/frontend/pages/login/login.css @@ -0,0 +1,45 @@ +body {font-family: Arial, Helvetica, sans-serif;} + +.container{ + display: flex; + justify-content: center; +} + +/* Full-width input fields */ +input[type=text], input[type=password] { + width: 100%; + padding: 12px 20px; + margin: 8px 0; + display: inline-block; + border: 1px solid #ccc; + box-sizing: border-box; +} + +/* Set a style for all buttons */ +button { + background-color: #04AA6D; + color: white; + padding: 14px 20px; + margin: 8px 0; + border: none; + cursor: pointer; + width: 100%; +} + +button:hover { + opacity: 0.8; +} + +img.avatar { + width: 40%; + border-radius: 50%; +} + +.form-container { + padding: 16px; +} + +.registerText{ + display: flex; + justify-content: space-between; +} \ No newline at end of file diff --git a/frontend/pages/login/login.html b/frontend/pages/login/login.html index e69de29..0ab40fa 100644 --- a/frontend/pages/login/login.html +++ b/frontend/pages/login/login.html @@ -0,0 +1,33 @@ + + + + + + + + +
+
+
+ + + + + + + +
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/frontend/pages/register/register.css b/frontend/pages/register/register.css index e69de29..4f633cf 100644 --- a/frontend/pages/register/register.css +++ b/frontend/pages/register/register.css @@ -0,0 +1,46 @@ +body {font-family: Arial, Helvetica, sans-serif;} + +.container{ + display: flex; + justify-content: center; + align-items: center; +} + +/* Full-width input fields */ +input[type=text], input[type=password] { + width: 100%; + padding: 12px 20px; + margin: 8px 0; + display: inline-block; + border: 1px solid #ccc; + box-sizing: border-box; +} + +/* Set a style for all buttons */ +button { + background-color: #04AA6D; + color: white; + padding: 14px 20px; + margin: 8px 0; + border: none; + cursor: pointer; + width: 100%; +} + +button:hover { + opacity: 0.8; +} + +img.avatar { + width: 40%; + border-radius: 50%; +} + +.form-container { + padding: 16px; +} + +.loginText{ +display: flex; +justify-content: flex-end; +} \ No newline at end of file diff --git a/frontend/pages/register/register.html b/frontend/pages/register/register.html index e69de29..45c0196 100644 --- a/frontend/pages/register/register.html +++ b/frontend/pages/register/register.html @@ -0,0 +1,30 @@ + + + + + + + + +
+
+
+ + + + + + + +
+ +
+
+
+
+ + + + \ No newline at end of file From 6ba82bc72750a7c8797961ed21d3bd6b8f11e604 Mon Sep 17 00:00:00 2001 From: LilleBRG Date: Wed, 19 Mar 2025 17:56:17 +0100 Subject: [PATCH 3/5] login, register and table have content --- frontend/pages/home/home.css | 168 ++++++++++++++++---------- frontend/pages/home/home.html | 46 +++---- frontend/pages/home/home.js | 115 +++++++++++------- frontend/pages/login/login.css | 18 ++- frontend/pages/login/login.html | 11 +- frontend/pages/login/login.js | 13 ++ frontend/pages/register/register.css | 13 +- frontend/pages/register/register.html | 21 +++- frontend/pages/register/register.js | 14 +++ frontend/services/users.service.js | 13 +- 10 files changed, 270 insertions(+), 162 deletions(-) diff --git a/frontend/pages/home/home.css b/frontend/pages/home/home.css index 4900e43..d0c75f3 100644 --- a/frontend/pages/home/home.css +++ b/frontend/pages/home/home.css @@ -1,69 +1,113 @@ body { - margin: 0; - font-family: Arial, Helvetica, sans-serif; - } - - .topnav { - overflow: hidden; - background-color: #333; - } - - .topnav a { - float: left; - color: #f2f2f2; - text-align: center; - padding: 14px 16px; - text-decoration: none; - font-size: 17px; - } - - .topnav a:hover { - background-color: #ddd; - color: black; - } - - .topnav a.active { - background-color: #04AA6D; - color: white; - } + margin: 0; + font-family: Arial, Helvetica, sans-serif; +} - table { - font-family: arial, sans-serif; - border-collapse: collapse; - width: 100%; - } - - td, th { - border: 1px solid #dddddd; - text-align: left; - padding: 8px; - } - - tr:nth-child(even) { - background-color: #dddddd; - } +#container { + background-color: white; + opacity: 100%; +} - .tempHigh{ - color: #ff0000; - width: 20px; - } +.topnav { + overflow: hidden; + background-color: #333; +} - .tempMidHigh{ - color: #fffb00; - width: 20px; - } +.topnav a { + float: left; + color: #f2f2f2; + text-align: center; + padding: 14px 16px; + text-decoration: none; + font-size: 17px; +} - .tempNormal{ - color: #02ed26; - width: 20px; - } +.topnav a:hover { + background-color: #ddd; + color: black; +} - .tempMidLow{ - color: #16fae7 ; - width: 20px; - } +.topnav a.active { + background-color: #04aa6d; + color: white; +} - .tempLow{ - color: #0004ff; - width: 20px; - } \ No newline at end of file +table { + font-family: arial, sans-serif; + border-collapse: collapse; + width: 100%; +} + +td, +th { + border: 1px solid #dddddd; + text-align: left; + padding: 8px; +} + +tr:nth-child(even) { + background-color: #dddddd; +} + +.tempHigh { + color: #ff0000; + width: 20px; +} + +.tempMidHigh { + color: #fffb00; + width: 20px; +} + +.tempNormal { + color: #02ed26; + width: 20px; +} + +.tempMidLow { + color: #16fae7; + width: 20px; +} + +.tempLow { + color: #0004ff; + width: 20px; +} + +/* The Modal (background) */ +.modal { + display: none; /* Hidden by default */ + position: fixed; /* Stay in place */ + z-index: 1; /* Sit on top */ + left: 0; + top: 0; + width: 100%; /* Full width */ + height: 100%; /* Full height */ + background-color: rgb(0, 0, 0); /* Fallback color */ + background-color: rgba(0, 0, 0, 0.6); /* Black w/ opacity */ +} + +/* Modal Content/Box */ +.modal-content { + border-radius: 20px; + background-color: #fefefe; + margin: 15% auto; /* 15% from the top and centered */ + padding: 20px; + border: 1px solid #888; + width: 80%; /* Could be more or less, depending on screen size */ +} + +/* The Close Button */ +.close { + color: #aaa; + float: right; + font-size: 28px; + font-weight: bold; +} + +.close:hover, +.close:focus { + color: black; + text-decoration: none; + cursor: pointer; +} diff --git a/frontend/pages/home/home.html b/frontend/pages/home/home.html index 2f5fec6..c3727a5 100644 --- a/frontend/pages/home/home.html +++ b/frontend/pages/home/home.html @@ -1,22 +1,27 @@ - - - + + + Temperature-Alarm-Web - - -
- Home - News - Contact - About -
- - + - + +
+ + + + +
@@ -24,11 +29,10 @@ - - - +
Name TemperatureTempHigh TempLow
- - - - \ No newline at end of file + + + + + diff --git a/frontend/pages/home/home.js b/frontend/pages/home/home.js index 53a909c..d8f59dc 100644 --- a/frontend/pages/home/home.js +++ b/frontend/pages/home/home.js @@ -1,57 +1,84 @@ import { mockTemperatureLogs } from "../../mockdata/temperature-logs.mockdata.js"; // Import data -const xValues = mockTemperatureLogs.map(log => new Date(log.date).toLocaleString()); // Full Date labels -const yValues = mockTemperatureLogs.map(log => log.temperature); // Temperature values +const xValues = mockTemperatureLogs.map((log) => + new Date(log.date).toLocaleString() +); // Full Date labels +const yValues = mockTemperatureLogs.map((log) => log.temperature); // Temperature values buildTable(mockTemperatureLogs); new Chart("myChart", { - type: "line", - data: { - labels: xValues, - datasets: [{ - fill: false, - lineTension: 0.4, - backgroundColor: "rgba(0,0,255,1.0)", - borderColor: "rgba(0,0,255,0.1)", - data: yValues - }] + type: "line", + data: { + labels: xValues, + datasets: [ + { + fill: false, + lineTension: 0.4, + backgroundColor: "rgba(0,0,255,1.0)", + borderColor: "rgba(0,0,255,0.1)", + data: yValues, + }, + ], + }, + options: { + tooltips: { + callbacks: { + title: function (tooltipItem) { + return `Date: ${tooltipItem[0].label}`; + }, + label: function (tooltipItem) { + return `Temperature: ${tooltipItem.value}°C`; + }, + }, }, - options: { - tooltips: { - callbacks: { - title: function(tooltipItem) { - return `Date: ${tooltipItem[0].label}`; - }, - label: function(tooltipItem) { - return `Temperature: ${tooltipItem.value}°C`; - }, - } - } - } + }, }); -function buildTable(data){ - var table = document.getElementById(`TemperatureTable`) - data.forEach(log => { - var averageTemp = (log.tempHigh + log.tempLow) / 2.0; - var color; - if (log.temperature > log.tempHigh) { - color = 'tempHigh'; - } else if (log.temperature < log.tempHigh && log.temperature > averageTemp) { - color = 'tempMidHigh'; - } else if (log.temperature < log.tempLow) { - color = 'tempLow'; - } else if (log.temperature > log.tempLow && log.temperature < averageTemp) { - color = 'tempMidLow'; - } else { - color = 'tempNormal'; - } - var row =` +function buildTable(data) { + var table = document.getElementById(`TemperatureTable`); + data.forEach((log) => { + var averageTemp = (log.tempHigh + log.tempLow) / 2.0; + var color; + if (log.temperature > log.tempHigh) { + color = "tempHigh"; + } else if ( + log.temperature < log.tempHigh && + log.temperature > averageTemp + ) { + color = "tempMidHigh"; + } else if (log.temperature < log.tempLow) { + color = "tempLow"; + } else if (log.temperature > log.tempLow && log.temperature < averageTemp) { + color = "tempMidLow"; + } else { + color = "tempNormal"; + } + var row = ` Name ${log.temperature} ${log.date} ${log.tempHigh} ${log.tempLow} - ` - table.innerHTML += row - }) + `; + table.innerHTML += row; + }); } + +// Get the modal +var modal = document.getElementById("chartModal"); +var btn = document.getElementById("myBtn"); +var span = document.getElementsByClassName("close")[0]; +btn.onclick = function () { + modal.style.display = "block"; +}; + +// When the user clicks on (x), close the modal +span.onclick = function () { + modal.style.display = "none"; +}; + +// When the user clicks anywhere outside of the modal, close it +window.onclick = function (event) { + if (event.target == modal) { + modal.style.display = "none"; + } +}; diff --git a/frontend/pages/login/login.css b/frontend/pages/login/login.css index 8b129cc..ad00dbe 100644 --- a/frontend/pages/login/login.css +++ b/frontend/pages/login/login.css @@ -1,12 +1,12 @@ body {font-family: Arial, Helvetica, sans-serif;} .container{ - display: flex; - justify-content: center; + display: flex; + justify-content: center; } /* Full-width input fields */ -input[type=text], input[type=password] { +input[type=text], input[type=password], input[type=email] { width: 100%; padding: 12px 20px; margin: 8px 0; @@ -30,16 +30,12 @@ button:hover { opacity: 0.8; } -img.avatar { - width: 40%; - border-radius: 50%; -} - -.form-container { +.form-container { + width: 800px; padding: 16px; } .registerText{ - display: flex; - justify-content: space-between; +display: flex; +justify-content: space-between; } \ No newline at end of file diff --git a/frontend/pages/login/login.html b/frontend/pages/login/login.html index 0ab40fa..c0d7fe6 100644 --- a/frontend/pages/login/login.html +++ b/frontend/pages/login/login.html @@ -7,13 +7,15 @@
-
+
- - +

Login

+ + + - +
@@ -29,5 +31,6 @@
+ \ No newline at end of file diff --git a/frontend/pages/login/login.js b/frontend/pages/login/login.js index e69de29..55e303b 100644 --- a/frontend/pages/login/login.js +++ b/frontend/pages/login/login.js @@ -0,0 +1,13 @@ +import { login } from "../../services/users.service.js"; + +document.getElementById("loginForm").addEventListener("submit", function(event) { + event.preventDefault(); // Prevents default form submission + + // Get form values + const emailOrUsername = document.getElementById("emailorusn").value; + const password = document.getElementById("psw").value; + + + // Call function with form values + login(emailOrUsername, password); +}); \ No newline at end of file diff --git a/frontend/pages/register/register.css b/frontend/pages/register/register.css index 4f633cf..ed7bcfc 100644 --- a/frontend/pages/register/register.css +++ b/frontend/pages/register/register.css @@ -1,13 +1,12 @@ body {font-family: Arial, Helvetica, sans-serif;} .container{ - display: flex; - justify-content: center; - align-items: center; + display: flex; + justify-content: center; } /* Full-width input fields */ -input[type=text], input[type=password] { +input[type=text], input[type=password], input[type=email] { width: 100%; padding: 12px 20px; margin: 8px 0; @@ -31,12 +30,8 @@ button:hover { opacity: 0.8; } -img.avatar { - width: 40%; - border-radius: 50%; -} - .form-container { + width: 800px; padding: 16px; } diff --git a/frontend/pages/register/register.html b/frontend/pages/register/register.html index 45c0196..cc8e996 100644 --- a/frontend/pages/register/register.html +++ b/frontend/pages/register/register.html @@ -4,18 +4,25 @@ -
- -
+ +
+

Create Account

+ + + + - + - + - + + + +
+ + \ No newline at end of file diff --git a/frontend/pages/register/register.js b/frontend/pages/register/register.js index e69de29..c61efa6 100644 --- a/frontend/pages/register/register.js +++ b/frontend/pages/register/register.js @@ -0,0 +1,14 @@ +import { create } from "../../services/users.service.js"; + +document.getElementById("registerForm").addEventListener("submit", function(event) { + event.preventDefault(); // Prevents default form submission + + // Get form values + const email = document.getElementById("email").value; + const username = document.getElementById("uname").value; + const password = document.getElementById("psw").value; + const repeatPassword = document.getElementById("rpsw").value; + + // Call function with form values + create(email, username, password, repeatPassword); +}); \ No newline at end of file diff --git a/frontend/services/users.service.js b/frontend/services/users.service.js index 4b7d530..d53f238 100644 --- a/frontend/services/users.service.js +++ b/frontend/services/users.service.js @@ -1,32 +1,35 @@ const address = "http://10.135.51.116/temperature-alarm-webapi/users" -function login(username, password) { +export function login(usernameOrEmail, password) { + console.log(usernameOrEmail); + console.log(password); + fetch(`${address}/login`, { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({username: username, password: password}) + body: JSON.stringify({usernameOrEmail: usernameOrEmail, password: password}) }) .then(response => response.json()) .then(data => console.log("Success:", data)) .catch(error => console.error("Error:", error)); } -function create(email, username, password){ +export function create(email, username, password, repeatPassword){ fetch(`${address}/create`, { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({email: email, username: username, password: password}) + body: JSON.stringify({email: email, username: username, password: password, repeatPassword: repeatPassword}) }) .then(response => response.json()) .then(data => console.log("Success:", data)) .catch(error => console.error("Error:", error)); } -function update(email, username, password){ +export function update(email, username, password){ fetch(`${address}/update`, { method: "PATCH", headers: { From 62ff08c6545794a9471ded7b147fc0cd384b4f46 Mon Sep 17 00:00:00 2001 From: Reimar Date: Thu, 20 Mar 2025 08:25:46 +0100 Subject: [PATCH 4/5] Clean temperature code --- iot/main.c | 6 +++--- iot/temperature.c | 27 +++++++++++++++------------ iot/temperature.h | 6 ++++-- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/iot/main.c b/iot/main.c index 06b99d6..8430bb3 100644 --- a/iot/main.c +++ b/iot/main.c @@ -10,12 +10,12 @@ void *watch_temperature(void *arg) { - init_temperature(); + temperature_handle_t temp_handle = init_temperature(); - get_temperature(); + get_temperature(temp_handle); while (true) { - double temperature = get_temperature(); + double temperature = get_temperature(temp_handle); char *str = malloc(snprintf(NULL, 0, "%lf", temperature) + 1); sprintf(str, "%lf", temperature); diff --git a/iot/temperature.c b/iot/temperature.c index 7f8348e..1719733 100644 --- a/iot/temperature.c +++ b/iot/temperature.c @@ -9,6 +9,8 @@ #include #include +#include "temperature.h" + #define MPC9808_BUS "/dev/i2c-2" #define MPC9808_ADR 0x18 @@ -21,14 +23,12 @@ #define DEVID_REG 0x07 #define RES_REG 0x08 -int file; - uint8_t get_byte_in_integer(int num, int n) { return (num >> (8*n)) & 0xff; } -double get_temperature() +double get_temperature(temperature_handle_t file) { double temperature; int32_t reg32; @@ -51,9 +51,10 @@ double get_temperature() return temperature; } -void init_temperature(void) +temperature_handle_t init_temperature(void) { - file = open(MPC9808_BUS, O_RDWR); + int file = open(MPC9808_BUS, O_RDWR); + if (file < 0) { fprintf(stderr, "Error opening temperature sensor device (%s): %s\n", MPC9808_BUS, strerror(errno)); exit(1); @@ -71,24 +72,26 @@ void init_temperature(void) // Read manufactorer ID reg32 = i2c_smbus_read_word_data(file, MANID_REG); - if ( reg32 < 0 ) { + if (reg32 < 0) { fprintf(stderr, "ERROR: Read failed on i2c bus register %d - %s\n", MANID_REG,strerror(errno)); exit(1); } if (bswap_16(reg16poi[0]) != 0x0054) { - fprintf(stderr, "Manufactorer ID wrong is 0x%x should be 0x54\n",__bswap_16(reg16poi[0])); - exit(1); + fprintf(stderr, "Manufactorer ID wrong is 0x%x should be 0x54\n",__bswap_16(reg16poi[0])); + exit(1); } // Read device ID and revision reg32 = i2c_smbus_read_word_data(file, DEVID_REG); if (reg32 < 0) { - fprintf(stderr, "ERROR: Read failed on i2c bus register %d - %s\n", DEVID_REG,strerror(errno) ); - exit(1); + fprintf(stderr, "ERROR: Read failed on i2c bus register %d - %s\n", DEVID_REG,strerror(errno) ); + exit(1); } if (reg8poi[0] != 0x04) { - fprintf(stderr, "Manufactorer ID OK but device ID wrong is 0x%x should be 0x4\n",reg8poi[0]); - exit(1); + fprintf(stderr, "Manufactorer ID OK but device ID wrong is 0x%x should be 0x4\n",reg8poi[0]); + exit(1); } + + return file; } diff --git a/iot/temperature.h b/iot/temperature.h index 8bd0a39..e1f1471 100644 --- a/iot/temperature.h +++ b/iot/temperature.h @@ -1,4 +1,6 @@ -void init_temperature(); +typedef int temperature_handle_t; -double get_temperature(); +temperature_handle_t init_temperature(); + +double get_temperature(temperature_handle_t handle); From e63309e5e39841034037d038643e4b86cc69c917 Mon Sep 17 00:00:00 2001 From: Reimar Date: Thu, 20 Mar 2025 09:35:12 +0100 Subject: [PATCH 5/5] Add deploy script --- deploy.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 deploy.sh diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..fbe12ea --- /dev/null +++ b/deploy.sh @@ -0,0 +1,16 @@ +#!/usr/bin + +BASEPATH=/home/developers/temperature-alarm + +# Fetch changes +git -C $BASEPATH pull + +# Update frontend +cp $BASEPATH/frontend/* -r /var/www/html +chown www-data:www-data -R /var/www/html + +# Update backend +docker stop api +docker build --tag api $BASEPATH/backend/Api +docker run -d -p 8080:80 -p 8081:443 -p 5000:5000 --name api --rm api +