Dependency injektion af dbaccess og udvidet healthController og fikset login

This commit is contained in:
Jeas0001 2025-03-20 11:23:16 +01:00
parent f1f5a45232
commit 1d8c23703f
5 changed files with 46 additions and 33 deletions

View File

@ -9,19 +9,18 @@ namespace Api.Controllers
[Route("api/[controller]")] [Route("api/[controller]")]
public class DeviceController : 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] [Authorize]
[HttpGet] [HttpGet]
public async Task<IActionResult> GetDevices(int userId) public async Task<IActionResult> GetDevices(int userId)
{ {
DbAccess dBAccess = new DbAccess(_context); List<Device> devices = await _dbAccess.ReadDevices(userId);
List<Device> devices = await dBAccess.ReadDevices(userId);
if (devices.Count == 0) { return BadRequest(new { error = "There is no devices that belong to this userID" }); } if (devices.Count == 0) { return BadRequest(new { error = "There is no devices that belong to this userID" }); }
return Ok(devices); return Ok(devices);
} }
@ -30,8 +29,7 @@ namespace Api.Controllers
[HttpPost("adddevice/{userId}")] [HttpPost("adddevice/{userId}")]
public async Task<IActionResult> AddDevice([FromBody] Device device, int userId) public async Task<IActionResult> 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" }); } if (!success) { return BadRequest(new { error = "This device already exist" }); }
return Ok(); return Ok();
} }
@ -40,8 +38,7 @@ namespace Api.Controllers
[HttpGet("logs/{deviceId}")] [HttpGet("logs/{deviceId}")]
public async Task<IActionResult> GetLogs(int deviceId) public async Task<IActionResult> GetLogs(int deviceId)
{ {
DbAccess dBAccess = new DbAccess(_context); List<TemperatureLogs> logs = await _dbAccess.ReadLogs(deviceId);
List<TemperatureLogs> logs = await dBAccess.ReadLogs(deviceId);
if (logs.Count == 0) { return BadRequest(new { error = "There is no logs that belong to this deviceId" }); } if (logs.Count == 0) { return BadRequest(new { error = "There is no logs that belong to this deviceId" }); }
return Ok(logs); return Ok(logs);
} }
@ -50,8 +47,7 @@ namespace Api.Controllers
[HttpPut("Edit/{deviceId}")] [HttpPut("Edit/{deviceId}")]
public async Task<IActionResult> EditDevice([FromBody] Device device, int deviceId) public async Task<IActionResult> 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" }); } if (!success) { return BadRequest(new { error = "Device can't be edited" }); }
return Ok(); return Ok();
} }

View File

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Mvc; using Api.DBAccess;
using Microsoft.AspNetCore.Mvc;
namespace Api.Controllers namespace Api.Controllers
{ {
@ -6,7 +7,17 @@ namespace Api.Controllers
[Route("api/[controller]")] [Route("api/[controller]")]
public class HealthController : Controller public class HealthController : Controller
{ {
[HttpGet] private readonly DbAccess _dbAccess;
public async Task<IActionResult> Health() { return Ok(); }
public HealthController(DbAccess dbAccess)
{
_dbAccess = dbAccess;
}
[HttpGet("API")]
public async Task<IActionResult> HealthAPI() { return Ok(true); }
[HttpGet("DB")]
public async Task<IActionResult> HealthDB() { return Ok(_dbAccess.Test()); }
} }
} }

View File

@ -13,21 +13,20 @@ namespace Api.Controllers
[Route("api/[controller]")] [Route("api/[controller]")]
public class UserController : Controller public class UserController : Controller
{ {
private readonly DBContext _context; private readonly DbAccess _dbAccess;
private readonly IConfiguration _configuration; private readonly IConfiguration _configuration;
public UserController(DBContext context, IConfiguration configuration) public UserController(IConfiguration configuration, DbAccess dbAccess)
{ {
_context = context; _dbAccess = dbAccess;
_configuration = configuration; _configuration = configuration;
} }
[HttpPost("Login")] [HttpPost("Login")]
public async Task<IActionResult> Login([FromBody] Login login) public async Task<IActionResult> Login([FromBody] Login login)
{ {
DbAccess dBAccess = new DbAccess(_context); User user = await _dbAccess.Login(login);
var user = await dBAccess.Login(login); if (user == null || user.Id == 0) { return Unauthorized(new { error = "Invalid username or password" }); }
if (user.Id == 0) { return Unauthorized(new { error = "Invalid username or password" }); }
var token = GenerateJwtToken(user); var token = GenerateJwtToken(user);
return Ok(new { token, user.UserName, user.Id }); return Ok(new { token, user.UserName, user.Id });
} }
@ -35,8 +34,7 @@ namespace Api.Controllers
[HttpPost("Create")] [HttpPost("Create")]
public async Task<IActionResult> CreateUser([FromBody] User user) public async Task<IActionResult> 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" }); } if (!success) { return BadRequest(new { error = "User can't be created" }); }
return Ok(); return Ok();
} }
@ -45,8 +43,7 @@ namespace Api.Controllers
[HttpPut("Edit/{userId}")] [HttpPut("Edit/{userId}")]
public async Task<IActionResult> EditUser([FromBody] User user, int userId) public async Task<IActionResult> 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" }); } if (!success) { return BadRequest(new { error = "User can't be edited" }); }
return Ok(); return Ok();
} }
@ -55,8 +52,7 @@ namespace Api.Controllers
[HttpDelete("Delete/{userId}")] [HttpDelete("Delete/{userId}")]
public async Task<IActionResult> DeleteUser(int userId) public async Task<IActionResult> 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" }); } if (!success) { return BadRequest(new { error = "User can't be deleted" }); }
return Ok(); return Ok();
} }

View File

@ -46,11 +46,11 @@ namespace Api.DBAccess
User user = new User(); User user = new User();
if (!login.EmailOrUsrn.Contains("@")) 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 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(); } if (user == null) { return new User(); }
@ -66,7 +66,9 @@ namespace Api.DBAccess
public async Task<bool> UpdateUser(User user, int userId) public async Task<bool> 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; 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); var user = await _context.Users.Include(u => u.Devices).FirstOrDefaultAsync(u => u.Id == userId);
if (user != null) 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) foreach (var item in user.Devices)
{ {
@ -122,7 +124,7 @@ namespace Api.DBAccess
public async Task<bool> UpdateDevice(Device device, int deviceId) public async Task<bool> 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; device1.TempLow = device.TempLow;
@ -146,6 +148,11 @@ namespace Api.DBAccess
return logs; return logs;
} }
public async Task<bool> Test()
{
return _context.Database.CanConnect();
}
private static string ComputeHash(string input, HashAlgorithm algorithm, string salt) private static string ComputeHash(string input, HashAlgorithm algorithm, string salt)
{ {
Byte[] inputBytes = Encoding.UTF8.GetBytes(input); Byte[] inputBytes = Encoding.UTF8.GetBytes(input);

View File

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Authentication.JwtBearer; using Api.DBAccess;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Models;
@ -22,7 +23,9 @@ namespace Api
// Sets the connectionstring to the database so dbcontext can find it // Sets the connectionstring to the database so dbcontext can find it
services.AddDbContext<DBContext>(options => services.AddDbContext<DBContext>(options =>
options.UseSqlite(_configuration.GetConnectionString("Database"))); options.UseSqlite(_configuration.GetConnectionString("Database")));
services.AddScoped<DbAccess>();
services.AddControllers(); services.AddControllers();
services.AddAuthentication(x => services.AddAuthentication(x =>