Count registration also as a login.
This commit is contained in:
		| @@ -337,6 +337,7 @@ class DatabaseInterface(ABC): | |||||||
|                 2. Optionally delete old session (e.g. reset token) if provided |                 2. Optionally delete old session (e.g. reset token) if provided | ||||||
|                 3. Optionally update user's display name |                 3. Optionally update user's display name | ||||||
|                 4. Insert new session referencing the credential |                 4. Insert new session referencing the credential | ||||||
|  |                 5. Update user's last_seen and increment visits (treat as a login) | ||||||
|             """ |             """ | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -414,6 +414,11 @@ class DB(DatabaseInterface): | |||||||
|     ) -> None: |     ) -> None: | ||||||
|         """Atomic credential + (optional old session delete) + (optional rename) + new session.""" |         """Atomic credential + (optional old session delete) + (optional rename) + new session.""" | ||||||
|         async with self.session() as session: |         async with self.session() as session: | ||||||
|  |             # Ensure credential has last_used / last_verified for immediate login semantics | ||||||
|  |             if credential.last_used is None: | ||||||
|  |                 credential.last_used = credential.created_at | ||||||
|  |             if credential.last_verified is None: | ||||||
|  |                 credential.last_verified = credential.last_used | ||||||
|             # Insert credential |             # Insert credential | ||||||
|             session.add( |             session.add( | ||||||
|                 CredentialModel( |                 CredentialModel( | ||||||
| @@ -450,6 +455,12 @@ class DB(DatabaseInterface): | |||||||
|                     info=session_info, |                     info=session_info, | ||||||
|                 ) |                 ) | ||||||
|             ) |             ) | ||||||
|  |             # Login side-effects: update user analytics (last_seen + visits increment) | ||||||
|  |             await session.execute( | ||||||
|  |                 update(UserModel) | ||||||
|  |                 .where(UserModel.uuid == user_uuid.bytes) | ||||||
|  |                 .values(last_seen=credential.last_used, visits=UserModel.visits + 1) | ||||||
|  |             ) | ||||||
|  |  | ||||||
|     async def delete_credential(self, uuid: UUID, user_uuid: UUID) -> None: |     async def delete_credential(self, uuid: UUID, user_uuid: UUID) -> None: | ||||||
|         async with self.session() as session: |         async with self.session() as session: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Leo Vasanko
					Leo Vasanko