version-0.1 (#1)
Squash and merge of version-0.1 Co-authored-by: James Wampler <james@wamp.dev> Co-committed-by: James Wampler <james@wamp.dev>
This commit was merged in pull request #1.
This commit is contained in:
44
src/api/MicCheck.Api/Users/UserService.cs
Executable file
44
src/api/MicCheck.Api/Users/UserService.cs
Executable file
@@ -0,0 +1,44 @@
|
||||
using MicCheck.Api.Data;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace MicCheck.Api.Users;
|
||||
|
||||
public class UserService(MicCheckDbContext db, IPasswordHasher<User> passwordHasher)
|
||||
{
|
||||
public async Task<User?> FindByIdAsync(int userId, CancellationToken ct = default) =>
|
||||
await db.Users.FirstOrDefaultAsync(u => u.Id == userId && u.IsActive, ct);
|
||||
|
||||
public async Task<(User? User, bool EmailConflict)> UpdateProfileAsync(
|
||||
int userId, string firstName, string lastName, string email, CancellationToken ct = default)
|
||||
{
|
||||
var user = await db.Users.FirstOrDefaultAsync(u => u.Id == userId && u.IsActive, ct);
|
||||
if (user is null) return (null, false);
|
||||
|
||||
if (!string.Equals(user.Email, email, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var emailTaken = await db.Users.AnyAsync(u => u.Email == email && u.Id != userId, ct);
|
||||
if (emailTaken) return (null, true);
|
||||
}
|
||||
|
||||
user.FirstName = firstName;
|
||||
user.LastName = lastName;
|
||||
user.Email = email;
|
||||
await db.SaveChangesAsync(ct);
|
||||
return (user, false);
|
||||
}
|
||||
|
||||
public async Task<bool> ChangePasswordAsync(
|
||||
int userId, string currentPassword, string newPassword, CancellationToken ct = default)
|
||||
{
|
||||
var user = await db.Users.FirstOrDefaultAsync(u => u.Id == userId && u.IsActive, ct);
|
||||
if (user is null) return false;
|
||||
|
||||
var result = passwordHasher.VerifyHashedPassword(user, user.PasswordHash, currentPassword);
|
||||
if (result == PasswordVerificationResult.Failed) return false;
|
||||
|
||||
user.PasswordHash = passwordHasher.HashPassword(user, newPassword);
|
||||
await db.SaveChangesAsync(ct);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user