From 1d8c23703f5764ae67030cedcb09d45a1c26c1ee Mon Sep 17 00:00:00 2001 From: Jeas0001 Date: Thu, 20 Mar 2025 11:23:16 +0100 Subject: [PATCH] Dependency injektion af dbaccess og udvidet healthController og fikset login --- backend/Api/Controllers/DeviceController.cs | 18 +++++++----------- backend/Api/Controllers/HealthController.cs | 17 ++++++++++++++--- backend/Api/Controllers/UserController.cs | 20 ++++++++------------ backend/Api/DBAccess/DBAccess.cs | 17 ++++++++++++----- backend/Api/Startup.cs | 7 +++++-- 5 files changed, 46 insertions(+), 33 deletions(-) diff --git a/backend/Api/Controllers/DeviceController.cs b/backend/Api/Controllers/DeviceController.cs index fa22807..c21a8a8 100644 --- a/backend/Api/Controllers/DeviceController.cs +++ b/backend/Api/Controllers/DeviceController.cs @@ -9,19 +9,18 @@ namespace Api.Controllers [Route("api/[controller]")] public class DeviceController : Controller { - private readonly DBContext _context; + private readonly DbAccess _dbAccess; - public DeviceController(DBContext context) + public DeviceController(DbAccess dbAccess) { - _context = context; + _dbAccess = dbAccess; } [Authorize] [HttpGet] public async Task GetDevices(int userId) { - DbAccess dBAccess = new DbAccess(_context); - List devices = await dBAccess.ReadDevices(userId); + List devices = await _dbAccess.ReadDevices(userId); if (devices.Count == 0) { return BadRequest(new { error = "There is no devices that belong to this userID" }); } return Ok(devices); } @@ -30,8 +29,7 @@ namespace Api.Controllers [HttpPost("adddevice/{userId}")] public async Task AddDevice([FromBody] Device device, int userId) { - DbAccess dBAccess = new DbAccess(_context); - bool success = await dBAccess.CreateDevice(device, userId); + bool success = await _dbAccess.CreateDevice(device, userId); if (!success) { return BadRequest(new { error = "This device already exist" }); } return Ok(); } @@ -40,8 +38,7 @@ namespace Api.Controllers [HttpGet("logs/{deviceId}")] public async Task GetLogs(int deviceId) { - DbAccess dBAccess = new DbAccess(_context); - List logs = await dBAccess.ReadLogs(deviceId); + List logs = await _dbAccess.ReadLogs(deviceId); if (logs.Count == 0) { return BadRequest(new { error = "There is no logs that belong to this deviceId" }); } return Ok(logs); } @@ -50,8 +47,7 @@ namespace Api.Controllers [HttpPut("Edit/{deviceId}")] public async Task EditDevice([FromBody] Device device, int deviceId) { - DbAccess dBAccess = new DbAccess(_context); - bool success = await dBAccess.UpdateDevice(device, deviceId); + bool success = await _dbAccess.UpdateDevice(device, deviceId); if (!success) { return BadRequest(new { error = "Device can't be edited" }); } return Ok(); } diff --git a/backend/Api/Controllers/HealthController.cs b/backend/Api/Controllers/HealthController.cs index ed1c236..ea57ff2 100644 --- a/backend/Api/Controllers/HealthController.cs +++ b/backend/Api/Controllers/HealthController.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc; +using Api.DBAccess; +using Microsoft.AspNetCore.Mvc; namespace Api.Controllers { @@ -6,7 +7,17 @@ namespace Api.Controllers [Route("api/[controller]")] public class HealthController : Controller { - [HttpGet] - public async Task Health() { return Ok(); } + private readonly DbAccess _dbAccess; + + public HealthController(DbAccess dbAccess) + { + _dbAccess = dbAccess; + } + + [HttpGet("API")] + public async Task HealthAPI() { return Ok(true); } + + [HttpGet("DB")] + public async Task HealthDB() { return Ok(_dbAccess.Test()); } } } diff --git a/backend/Api/Controllers/UserController.cs b/backend/Api/Controllers/UserController.cs index ada32de..d28d521 100644 --- a/backend/Api/Controllers/UserController.cs +++ b/backend/Api/Controllers/UserController.cs @@ -13,21 +13,20 @@ namespace Api.Controllers [Route("api/[controller]")] public class UserController : Controller { - private readonly DBContext _context; + private readonly DbAccess _dbAccess; private readonly IConfiguration _configuration; - public UserController(DBContext context, IConfiguration configuration) + public UserController(IConfiguration configuration, DbAccess dbAccess) { - _context = context; + _dbAccess = dbAccess; _configuration = configuration; } [HttpPost("Login")] public async Task Login([FromBody] Login login) { - DbAccess dBAccess = new DbAccess(_context); - var user = await dBAccess.Login(login); - if (user.Id == 0) { return Unauthorized(new { error = "Invalid username or password" }); } + User user = await _dbAccess.Login(login); + if (user == null || user.Id == 0) { return Unauthorized(new { error = "Invalid username or password" }); } var token = GenerateJwtToken(user); return Ok(new { token, user.UserName, user.Id }); } @@ -35,8 +34,7 @@ namespace Api.Controllers [HttpPost("Create")] public async Task CreateUser([FromBody] User user) { - DbAccess dBAccess = new DbAccess(_context); - bool success = await dBAccess.CreateUser(user); + bool success = await _dbAccess.CreateUser(user); if (!success) { return BadRequest(new { error = "User can't be created" }); } return Ok(); } @@ -45,8 +43,7 @@ namespace Api.Controllers [HttpPut("Edit/{userId}")] public async Task EditUser([FromBody] User user, int userId) { - DbAccess dBAccess = new DbAccess(_context); - bool success = await dBAccess.UpdateUser(user, userId); + bool success = await _dbAccess.UpdateUser(user, userId); if (!success) { return BadRequest(new { error = "User can't be edited" }); } return Ok(); } @@ -55,8 +52,7 @@ namespace Api.Controllers [HttpDelete("Delete/{userId}")] public async Task DeleteUser(int userId) { - DbAccess dbAccess = new DbAccess(_context); - bool success = await dbAccess.DeleteUser(userId); + bool success = await _dbAccess.DeleteUser(userId); if (!success) { return BadRequest(new { error = "User can't be deleted" }); } return Ok(); } diff --git a/backend/Api/DBAccess/DBAccess.cs b/backend/Api/DBAccess/DBAccess.cs index 4edaa5a..9a69c6a 100644 --- a/backend/Api/DBAccess/DBAccess.cs +++ b/backend/Api/DBAccess/DBAccess.cs @@ -46,11 +46,11 @@ namespace Api.DBAccess User user = new User(); if (!login.EmailOrUsrn.Contains("@")) { - user = await _context.Users.FirstAsync(u => u.UserName == login.EmailOrUsrn); + user = await _context.Users.FirstOrDefaultAsync(u => u.UserName == login.EmailOrUsrn); } else { - user = await _context.Users.FirstAsync(u => u.Email == login.EmailOrUsrn); + user = await _context.Users.FirstOrDefaultAsync(u => u.Email == login.EmailOrUsrn); } if (user == null) { return new User(); } @@ -66,7 +66,9 @@ namespace Api.DBAccess public async Task UpdateUser(User user, int userId) { - var profile = await _context.Users.FirstAsync(u => u.Id == userId); + var profile = await _context.Users.FirstOrDefaultAsync(u => u.Id == userId); + + if (profile == null) { return false; } profile.UserName = user.UserName; @@ -82,7 +84,7 @@ namespace Api.DBAccess var user = await _context.Users.Include(u => u.Devices).FirstOrDefaultAsync(u => u.Id == userId); if (user != null) { - if (user.Devices != null && user.Devices.Count > 0) + if (user.Devices != null && user.Devices.Count > 0) { foreach (var item in user.Devices) { @@ -122,7 +124,7 @@ namespace Api.DBAccess public async Task UpdateDevice(Device device, int deviceId) { - var device1 = await _context.Devices.FirstAsync(u => u.Id == deviceId); + var device1 = await _context.Devices.FirstOrDefaultAsync(u => u.Id == deviceId); device1.TempLow = device.TempLow; @@ -146,6 +148,11 @@ namespace Api.DBAccess return logs; } + public async Task Test() + { + return _context.Database.CanConnect(); + } + private static string ComputeHash(string input, HashAlgorithm algorithm, string salt) { Byte[] inputBytes = Encoding.UTF8.GetBytes(input); diff --git a/backend/Api/Startup.cs b/backend/Api/Startup.cs index be08ce2..4edb391 100644 --- a/backend/Api/Startup.cs +++ b/backend/Api/Startup.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Authentication.JwtBearer; +using Api.DBAccess; +using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; @@ -22,7 +23,9 @@ namespace Api // Sets the connectionstring to the database so dbcontext can find it services.AddDbContext(options => options.UseSqlite(_configuration.GetConnectionString("Database"))); - + + services.AddScoped(); + services.AddControllers(); services.AddAuthentication(x =>