MukeshKapoor25 commited on
Commit
7426dce
·
1 Parent(s): 57100c8

feat(system_users): Complete staff mobile OTP login implementation with token generation

Browse files

- Add necessary imports for datetime, logging, and service dependencies
- Implement access token creation with configurable expiration from settings
- Add token payload with user credentials (user_id, username, role, merchant details)
- Convert user model to UserInfoResponse for response serialization
- Return StaffMobileOTPLoginResponse with access token, token type, and expiration
- Add login endpoint stub for standard authentication flow
- Organize imports at module level for better code structure and maintainability

app/system_users/controllers/router.py CHANGED
@@ -1,6 +1,22 @@
1
  from pydantic import BaseModel, Field
2
  from fastapi import APIRouter, Depends, HTTPException, status, Request
3
  from fastapi.security import HTTPAuthorizationCredentials
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  # Router must be defined before any usage
6
  router = APIRouter(
@@ -39,7 +55,35 @@ async def staff_login_mobile_otp(
39
  # Only allow staff/employee roles (not admin/super_admin)
40
  if user.role in ("admin", "super_admin"):
41
  raise HTTPException(status_code=403, detail="Admin login not allowed via staff OTP login")
42
- # ...existing code...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  request: Request,
44
  login_data: LoginRequest,
45
  user_service: SystemUserService = Depends(get_system_user_service)
 
1
  from pydantic import BaseModel, Field
2
  from fastapi import APIRouter, Depends, HTTPException, status, Request
3
  from fastapi.security import HTTPAuthorizationCredentials
4
+ from datetime import timedelta
5
+ from typing import Optional
6
+ import logging
7
+
8
+ from app.system_users.services.service import SystemUserService
9
+ from app.system_users.schemas.schema import (
10
+ LoginRequest, LoginResponse, CreateUserRequest, UpdateUserRequest,
11
+ ChangePasswordRequest, ForgotPasswordRequest, VerifyResetTokenRequest,
12
+ ResetPasswordRequest, UserInfoResponse, UserListResponse, UserListRequest,
13
+ StandardResponse, UserStatus
14
+ )
15
+ from app.system_users.models.model import SystemUserModel
16
+ from app.dependencies.auth import get_current_user, require_admin_role, get_system_user_service
17
+ from app.core.config import settings
18
+
19
+ logger = logging.getLogger(__name__)
20
 
21
  # Router must be defined before any usage
22
  router = APIRouter(
 
55
  # Only allow staff/employee roles (not admin/super_admin)
56
  if user.role in ("admin", "super_admin"):
57
  raise HTTPException(status_code=403, detail="Admin login not allowed via staff OTP login")
58
+
59
+ # Create access token for staff user
60
+ from datetime import timedelta
61
+ from app.core.config import settings
62
+
63
+ access_token_expires = timedelta(hours=settings.TOKEN_EXPIRATION_HOURS)
64
+ access_token = user_service.create_access_token(
65
+ data={
66
+ "sub": user.user_id,
67
+ "username": user.username,
68
+ "role": user.role,
69
+ "merchant_id": user.merchant_id,
70
+ "merchant_type": user.merchant_type
71
+ },
72
+ expires_delta=access_token_expires
73
+ )
74
+
75
+ user_info = user_service.convert_to_user_info_response(user)
76
+
77
+ return StaffMobileOTPLoginResponse(
78
+ access_token=access_token,
79
+ token_type="bearer",
80
+ expires_in=int(access_token_expires.total_seconds()),
81
+ user_info=user_info
82
+ )
83
+
84
+
85
+ @router.post("/login", response_model=LoginResponse)
86
+ async def login(
87
  request: Request,
88
  login_data: LoginRequest,
89
  user_service: SystemUserService = Depends(get_system_user_service)