/// <summary> /// Registers a user and returns his ID. /// <para>Returns -1 if the email is already taken.</para> /// </summary> /// <param name="email"></param> /// <param name="password"></param> /// <param name="fullName"></param> /// <param name="role"></param> /// <param name="credits"></param> /// <returns></returns> public static async Task <long> RegisterUser(string email, string password, string fullName, int role, string address = "", int credits = 0) { Monitor.Enter(coherenceLock); if (await EmailTaken(email)) { Monitor.Exit(coherenceLock); return(-1); } string salt = GenerateSalt(); string passwordHash = GetPasswordHash(password, salt); InsertQuery query = new InsertQuery("users"); query.Value("email", email) .Value("password", passwordHash) .Value("salt", salt) .Value("full_name", fullName) .Value("role", role) .Value("address", address) .Value("credits", credits); NonQueryResult result = await Program.MySql().ExecuteNonQuery(query); if (result.RowsAffected != 1) { Console.WriteLine("Tried to register user and got rows affected: " + result.RowsAffected); Console.WriteLine(query.QueryString()); } Monitor.Exit(coherenceLock); return(result.LastInsertedId); }