This commit is contained in:
Azeez Muibi
2025-04-15 16:43:39 +01:00
parent 453a34a628
commit aafb9a9b41
4 changed files with 74 additions and 4 deletions
+13 -3
View File
@@ -1,7 +1,9 @@
from flask import Blueprint, request, jsonify, send_from_directory
from app.api.services import (
AuthorizationService,
TransactionService, LoanService,
TransactionService,
LoanService,
AuthService
)
from app.utils.logger import logger
from app.api.middlewares import enforce_json, require_auth
@@ -36,9 +38,17 @@ def serve_paths(filename):
return send_from_directory(swagger_dir, filename)
# Login endpoint
@api.route("/login", methods=["POST"])
def login():
data = request.get_json()
response = AuthService.login(data)
return response
# Get All Transactions Endpoint
@api.route("/transactions", methods=["GET"])
# @jwt_required()
@jwt_required()
def get_transactions():
# Extract query parameters for filtering
filters = {
@@ -56,7 +66,7 @@ def get_transactions():
# Get All Loans Endpoint
@api.route("/loans", methods=["GET"])
# @jwt_required()
@jwt_required()
def get_loans():
# Extract query parameters for filtering
filters = {
+1
View File
@@ -3,3 +3,4 @@ from app.api.services.customer_consent import CustomerConsentService
from app.api.services.authorization import AuthorizationService
from app.api.services.transaction import TransactionService
from app.api.services.loan import LoanService
from app.api.services.auth_service import AuthService
+58
View File
@@ -0,0 +1,58 @@
from flask import jsonify
from app.utils.logger import logger
from app.api.services.base_service import BaseService
from app.models.user import User
from flask_jwt_extended import create_access_token
from datetime import timedelta
class AuthService(BaseService):
@staticmethod
def login(data):
"""
Process the login request.
Args:
data (dict): Login credentials including username and password.
Returns:
dict: A standardized response with JWT token and user information.
"""
try:
# Extract credentials
username = data.get('username')
password = data.get('password')
# Validate input
if not username or not password:
return jsonify({
"message": "Username and password are required"
}), 400
# Get user by username
user = User.get_user_by_username(username)
# Check if user exists and password is correct
if not user or not user.check_password(password):
return jsonify({
"message": "Invalid username or password"
}), 401
# Create JWT token with 15 minute expiration
access_token = create_access_token(
identity=user.username,
expires_delta=timedelta(minutes=15),
additional_claims={"name": user.name}
)
# Return token and user information
return {
"jwt_token": access_token,
"name": user.name
}
except Exception as e:
logger.error(f"An error occurred during login: {str(e)}", exc_info=True)
return jsonify({
"message": "Internal Server Error"
}), 500
+2 -1
View File
@@ -2,5 +2,6 @@ from .customer import Customer
from .account import Account
from .loan import Loan
from .transaction import Transaction
from .user import User
__all__ = ['Customer', 'Account', 'Loan', 'Transaction']
__all__ = ['Customer', 'Account', 'Loan', 'Transaction', User]