- None => {
- let token = generate_token();
- let hashed_password = hash(password).map_err(|e| DBError::from_dyn_error(e))?;
- tx.execute("INSERT INTO [User] ([email], [validation_token], [creation_datetime], [password]) VALUES (?1, ?2, ?3, ?4)", params![email, token, datetime, hashed_password])?;
- token
- },
- };
+ )
+ .optional()?
+ {
+ Some((id, validation_token)) => {
+ if validation_token.is_none() {
+ return Ok(SignUpResult::UserAlreadyExists);
+ }
+ let token = generate_token();
+ let hashed_password = hash(password).map_err(|e| DBError::from_dyn_error(e))?;
+ tx.execute(
+ "UPDATE [User]
+ SET [validation_token] = ?2, [creation_datetime] = ?3, [password] = ?4
+ WHERE [id] = ?1",
+ params![id, token, datetime, hashed_password],
+ )?;
+ token
+ }
+ None => {
+ let token = generate_token();
+ let hashed_password = hash(password).map_err(|e| DBError::from_dyn_error(e))?;
+ tx.execute(
+ "INSERT INTO [User]
+ ([email], [validation_token], [creation_datetime], [password])
+ VALUES (?1, ?2, ?3, ?4)",
+ params![email, token, datetime, hashed_password],
+ )?;
+ token
+ }
+ };