feat(activity): implement user activity logging system
Summary
- Adds
ActivityLogmodel andactivitylogtable to persist user activity events - Implements
ActionTypeenum (stored as VARCHAR) covering 10 action types:LOGIN,LOGIN_OTP,LOGIN_FAILED,SIGNUP,PASSWORD_CHANGED,PASSWORD_RESET,ROLE_ASSIGNED,ROLE_REVOKED,USER_ACTIVATED,USER_DEACTIVATED - Adds
log_activity()service helper used across endpoint hooks - Hooks into
auth.py: password/OTP login, signup, password change and admin reset - Hooks into
users.py: role assignment/revocation, user activation/deactivation - Adds
GET /activity-logs/endpoint (admin only) with filters:user_id,action,from_date,to_date,skip,limit - Adds Alembic migration
f1a2b3c4d5e6
Test plan
-
POST /auth/loginwith correct credentials — confirmLOGINentry logged withuser_idandip_address -
POST /auth/loginwith wrong password — confirmLOGIN_FAILEDentry logged withuser_id: nulland phone inevent_data -
GET /activity-logs/— confirm logs returned newest first (admin token required) -
GET /activity-logs/?action=LOGIN_FAILED— confirm action filter works -
PUT /users/{id}/roles/add— confirmROLE_ASSIGNEDlogged withtarget_user_idandrole_id -
DELETE /users/{id}/roles/{role_id}— confirmROLE_REVOKEDlogged -
PUT /users/{id}withis_active: false— confirmUSER_DEACTIVATEDlogged -
PUT /users/{id}withis_active: true— confirmUSER_ACTIVATEDlogged -
Run alembic upgrade f1a2b3c4d5e6— confirmactivitylogtable created cleanly
Closes #53
Edited by Gunaputra Nagendra Pavan Yedida