public async Task <long> Register(RegisterRequest request)
        {
            // checking if username already exists before anything.
            var usernameCount = await _context.Specialists
                                .Where(s => s.Username == request.Username)
                                .CountAsync();

            if (usernameCount > 0)
            {
                return(-1);
            }

            // this will be put to the db
            var saltAndHash = EncryptionHelpter.Encrypt(request.Password);

            var insertedPassword = new SpecialistPassword(saltAndHash.Salt, saltAndHash.Hash);

            _context.Passwords.Add(insertedPassword);
            await _context.SaveChangesAsync();

            var user = new Specialist(
                request.Username, request.Name, request.Surname, insertedPassword.Id);

            _context.Specialists.Add(user);
            await _context.SaveChangesAsync();

            return(user.Id);
        }
        public async Task <AuthResponse> Authenticate(AuthRequest request)
        {
            if (request == null)
            {
                return(null);
            }

            var user = await GetByUsername(request.Username);

            if (user == null)
            {
                return(null);
            }

            // checking if the password is correct by hashing it and comparing to hashed pass from db
            var hashed = EncryptionHelpter.Encrypt(request.Password, user.Password.Salt);

            if (hashed != user.Password.Hash)
            {
                return(null);
            }
            else
            {
                var token = GenerateJwtToken(user);
                return(new AuthResponse(user, token));
            }
        }