add tests to email

This commit is contained in:
2025-11-26 23:33:12 -03:00
parent 5859248781
commit ab7e4ea38b
9 changed files with 1040 additions and 718 deletions

View File

@@ -68,8 +68,8 @@ def add(
)
transact.put(
item={
'id': 'EMAIL_VERIFICATION',
'sk': uuid4(),
'id': user_id,
'sk': f'EMAIL_VERIFICATION#{uuid4()}',
'name': name,
'email': email,
'user_id': user_id,
@@ -81,6 +81,27 @@ def add(
return JSONResponse(status_code=HTTPStatus.CREATED)
@router.post('/<user_id>/emails/<email>/request-verification')
def request_verification(user_id: str, email: Annotated[EmailStr, Path]):
now_ = now()
name = dyn.collection.get_item(
KeyPair(user_id, SortKey('0', path_spec='name')),
raise_on_error=False,
)
dyn.put_item(
item={
'id': user_id,
'sk': f'EMAIL_VERIFICATION#{uuid4()}',
'name': name,
'email': email,
'user_id': user_id,
'ttl': ttl(start_dt=now_, days=30),
'created_at': now_,
}
)
return JSONResponse(status_code=HTTPStatus.NO_CONTENT)
class EmailVerificationNotFoundError(NotFoundError): ...
@@ -88,15 +109,18 @@ class EmailVerificationNotFoundError(NotFoundError): ...
def verify(user_id: str, hash: str):
email = dyn.collection.get_item(
KeyPair(
pk='EMAIL_VERIFICATION',
sk=SortKey(hash, path_spec='email'),
pk=user_id,
sk=SortKey(f'EMAIL_VERIFICATION#{hash}', path_spec='email'),
),
exc_cls=EmailVerificationNotFoundError,
)
with dyn.transact_writer() as transact:
transact.delete(key=KeyPair('EMAIL_VERIFICATION', hash))
transact.delete(
key=KeyPair(user_id, f'EMAIL_VERIFICATION#{hash}'),
)
transact.update(
# Post-migration (users): rename `emails` to `EMAIL`
key=KeyPair(user_id, f'emails#{email}'),
update_expr='SET email_verified = :true, updated_at = :now',
expr_attr_values={