public async Task <string> SignIn(string nickname, string password) { await using var context = dbContextFactory.Create(); var user = await context.Users .Where(x => x.Nickname == nickname) .FirstOrDefaultAsync(); if (user == null) { throw new DatesException("No such user was found"); } if (Hash(password) != user.PasswordHash) { throw new DatesException("Incorrect password"); } return(JwtTool.IssueToken(user.Id)); }
public async Task <string> SignUp(string nickname, string password) { if (string.IsNullOrWhiteSpace(nickname)) { throw new DatesException("Invalid nickname"); } if (string.IsNullOrWhiteSpace(password) || password.Length < 8) { throw new DatesException("Invalid password"); } await using var context = dbContextFactory.Create(); await using var transaction = await context.Database.BeginTransactionAsync(); var userExists = await context.Users .Where(x => x.Nickname == nickname) .AnyAsync(); if (userExists) { throw new DatesException("User already exists"); } var user = new User { Nickname = nickname, PasswordHash = Hash(password) }; context.Users.Add(user); await context.SaveChangesAsync(); await transaction.CommitAsync(); return(JwtTool.IssueToken(user.Id)); }