118 lines
4.0 KiB
C#
118 lines
4.0 KiB
C#
using API.Models.UserModels;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace API.DBAccess
|
|
{
|
|
public class UserDBAccess
|
|
{
|
|
private readonly DBContext _context;
|
|
|
|
public UserDBAccess(DBContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
// Reads the user from the database
|
|
public async Task<User> ReadUser(int userId)
|
|
{
|
|
return await _context.Users.FirstOrDefaultAsync(u => u.Id == userId);
|
|
}
|
|
|
|
// Reads all the users from the database
|
|
public async Task<List<User>> ReadAllUsers()
|
|
{
|
|
return await _context.Users.ToListAsync();
|
|
}
|
|
|
|
// Searches for a user with the username
|
|
public async Task<bool> UserNameInUse(string username)
|
|
{
|
|
var user = await _context.Users.FirstOrDefaultAsync(u => u.UserName == username);
|
|
if (user == null || user.UserName == null || user.UserName != username) { return false; }
|
|
return true;
|
|
}
|
|
|
|
// Searches for a user with the email
|
|
public async Task<bool> EmailInUse(string email)
|
|
{
|
|
var user = await _context.Users.FirstOrDefaultAsync(u => u.UserName == email);
|
|
if (user == null || user.Email == null || user.Email != email) { return false; }
|
|
return true;
|
|
}
|
|
|
|
// Searches for a user with refreshtoken and returns that user
|
|
public async Task<User> ReadUserByRefreshToken(string refreshToken)
|
|
{
|
|
return await _context.Users.FirstOrDefaultAsync(u => u.RefreshToken == refreshToken);
|
|
}
|
|
|
|
// Gets all the data for a user
|
|
public async Task<User> ReadUserForDelete(int userId)
|
|
{
|
|
return await _context.Users.Include(u => u.Recipes).ThenInclude(r => r.Ingredients).Include(u => u.Recipes).ThenInclude(r => r.Directions).Include(u => u.ShoppingList).FirstOrDefaultAsync(u => u.Id == userId);
|
|
}
|
|
|
|
// Gets a user according to either the email or username
|
|
public async Task<User> ReadUserForLogin(string emailOrUsername)
|
|
{
|
|
if (emailOrUsername.Contains("@"))
|
|
{
|
|
return await _context.Users.FirstOrDefaultAsync(u => u.Email == emailOrUsername);
|
|
}
|
|
else
|
|
{
|
|
return await _context.Users.FirstOrDefaultAsync(u => u.UserName == emailOrUsername);
|
|
}
|
|
}
|
|
|
|
// Adds a new user to the database
|
|
public async Task<IActionResult> CreateUser(User user)
|
|
{
|
|
_context.Users.Add(user);
|
|
|
|
bool saved = await _context.SaveChangesAsync() >= 1;
|
|
|
|
if (saved) { return new OkObjectResult(true); }
|
|
|
|
return new ConflictObjectResult(new { message = "Could not save to database" });
|
|
|
|
}
|
|
|
|
// Updates the user in the database
|
|
public async Task<IActionResult> UpdateUser(User user)
|
|
{
|
|
_context.Entry(user).State = EntityState.Modified;
|
|
|
|
bool saved = await _context.SaveChangesAsync() == 1;
|
|
|
|
if (saved) { return new OkObjectResult(true); }
|
|
|
|
return new ConflictObjectResult(new { message = "Could not save to database" });
|
|
}
|
|
|
|
// Updates the password in the database
|
|
public async Task<IActionResult> UpdatePassword(User user)
|
|
{
|
|
_context.Entry(user).State = EntityState.Modified;
|
|
|
|
bool saved = await _context.SaveChangesAsync() == 1;
|
|
|
|
if (saved) { return new OkObjectResult(user); }
|
|
|
|
return new ConflictObjectResult(new { message = "Could not save to database" });
|
|
}
|
|
|
|
// Deletes the user from the database
|
|
public async Task<IActionResult> DeleteUser(User user)
|
|
{
|
|
_context.Users.Remove(user);
|
|
bool saved = await _context.SaveChangesAsync() >= 0;
|
|
|
|
if (saved) { return new OkObjectResult(saved); }
|
|
|
|
return new ConflictObjectResult(new { message = "Could not save to database" });
|
|
}
|
|
}
|
|
}
|