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 ReadUser(int userId) { return await _context.Users.FirstOrDefaultAsync(u => u.Id == userId); } // Reads all the users from the database public async Task> ReadAllUsers() { return await _context.Users.ToListAsync(); } // Searches for a user with the username public async Task 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 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 ReadUserByRefreshToken(string refreshToken) { return await _context.Users.FirstOrDefaultAsync(u => u.RefreshToken == refreshToken); } // Gets all the data for a user public async Task 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 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 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 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 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 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" }); } } }