Improve auth process 4

This commit is contained in:
Urtzi Alfaro
2025-07-20 09:18:08 +02:00
parent 0b1e67a76c
commit 608585c72c
6 changed files with 59 additions and 43 deletions

View File

@@ -119,6 +119,37 @@ fi
echo "" echo ""
# ================================================================
# STEP 5: TENANT REGISTRATION (OPTIONAL)
# ================================================================
log_step "Step 5: Registering a bakery/tenant"
BAKERY_RESPONSE=$(curl -s -X POST "$API_BASE/api/v1/tenants/bakeries" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"Test Bakery $(date +%H%M)\",
\"business_type\": \"bakery\",
\"address\": \"Calle Test 123\",
\"city\": \"Madrid\",
\"postal_code\": \"28001\",
\"phone\": \"+34600123456\"
}")
echo "Bakery Registration Response:"
echo "$BAKERY_RESPONSE" | jq '.'
if echo "$BAKERY_RESPONSE" | jq -e '.id' > /dev/null; then
TENANT_ID=$(echo "$BAKERY_RESPONSE" | jq -r '.id')
log_success "Bakery registration successful! Tenant ID: $TENANT_ID"
else
log_warning "Bakery registration endpoint may not be fully implemented"
fi
echo ""
# ================================================================ # ================================================================
# STEP 2: USER LOGIN # STEP 2: USER LOGIN
# ================================================================ # ================================================================
@@ -237,36 +268,6 @@ fi
echo "" echo ""
# ================================================================
# STEP 5: TENANT REGISTRATION (OPTIONAL)
# ================================================================
log_step "Step 5: Registering a bakery/tenant"
BAKERY_RESPONSE=$(curl -s -X POST "$API_BASE/api/v1/tenants/bakeries" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"Test Bakery $(date +%H%M)\",
\"business_type\": \"bakery\",
\"address\": \"Calle Test 123\",
\"city\": \"Madrid\",
\"postal_code\": \"28001\",
\"phone\": \"+34600123456\"
}")
echo "Bakery Registration Response:"
echo "$BAKERY_RESPONSE" | jq '.'
if echo "$BAKERY_RESPONSE" | jq -e '.id' > /dev/null; then
TENANT_ID=$(echo "$BAKERY_RESPONSE" | jq -r '.id')
log_success "Bakery registration successful! Tenant ID: $TENANT_ID"
else
log_warning "Bakery registration endpoint may not be fully implemented"
fi
echo ""
# ================================================================ # ================================================================
# STEP 6: TOKEN REFRESH # STEP 6: TOKEN REFRESH
# ================================================================ # ================================================================

View File

@@ -113,9 +113,16 @@ class AuthService:
tenant_memberships = await AuthService._get_user_tenants(str(user.id)) tenant_memberships = await AuthService._get_user_tenants(str(user.id))
# Create tokens # Create tokens
access_token = SecurityManager.create_access_token(user) access_token = SecurityManager.create_access_token(
user_data={
"user_id": str(user.id),
"email": user.email,
"full_name": user.full_name,
"tenants": tenant_memberships # Include tenant info in token
}
)
refresh_token_value = SecurityManager.create_refresh_token(data={"user_id": str(user.id)}) refresh_token_value = SecurityManager.create_refresh_token(user_data={"user_id": str(user.id)})
# Store refresh token in database # Store refresh token in database
refresh_token = RefreshToken( refresh_token = RefreshToken(
@@ -198,7 +205,14 @@ class AuthService:
tenant_memberships = await AuthService._get_user_tenants(str(user.id)) tenant_memberships = await AuthService._get_user_tenants(str(user.id))
# Create new access token # Create new access token
access_token = SecurityManager.create_access_token(user) access_token = SecurityManager.create_access_token(
user_data={
"user_id": str(user.id),
"email": user.email,
"full_name": user.full_name,
"tenants": tenant_memberships
}
)
return { return {
"access_token": access_token, "access_token": access_token,

View File

@@ -8,7 +8,7 @@ from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from app.core.config import settings from app.core.config import settings
from app.core.database import engine from app.core.database import database_manager
from app.api import tenants from app.api import tenants
from shared.monitoring.logging import setup_logging from shared.monitoring.logging import setup_logging
from shared.monitoring.metrics import MetricsCollector from shared.monitoring.metrics import MetricsCollector
@@ -51,7 +51,7 @@ async def startup_event():
async def shutdown_event(): async def shutdown_event():
"""Cleanup on shutdown""" """Cleanup on shutdown"""
logger.info("Shutting down Tenant Service...") logger.info("Shutting down Tenant Service...")
await engine.dispose() await database_manager.engine.dispose()
@app.get("/health") @app.get("/health")
async def health_check(): async def health_check():

View File

@@ -4,7 +4,7 @@ Tenant models for bakery management - FIXED
Removed cross-service User relationship to eliminate circular dependencies Removed cross-service User relationship to eliminate circular dependencies
""" """
from sqlalchemy import Column, String, Boolean, DateTime, Float, ForeignKey, Text from sqlalchemy import Column, String, Boolean, DateTime, Float, ForeignKey, Text, Integer
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from datetime import datetime, timezone from datetime import datetime, timezone

View File

@@ -2,17 +2,19 @@
""" """
Tenant service messaging for event publishing Tenant service messaging for event publishing
""" """
from shared.messaging.rabbitmq import RabbitMQClient
from app.core.config import settings
import structlog import structlog
from shared.messaging.rabbitmq import RabbitMQPublisher
logger = structlog.get_logger() logger = structlog.get_logger()
# Single global instance
data_publisher = RabbitMQClient(settings.RABBITMQ_URL, "data-service")
async def publish_tenant_created(tenant_id: str, owner_id: str, tenant_name: str): async def publish_tenant_created(tenant_id: str, owner_id: str, tenant_name: str):
"""Publish tenant created event""" """Publish tenant created event"""
try: try:
publisher = RabbitMQPublisher() await data_publisher.publish_event(
await publisher.publish_event(
"tenant.created", "tenant.created",
{ {
"tenant_id": tenant_id, "tenant_id": tenant_id,
@@ -27,8 +29,7 @@ async def publish_tenant_created(tenant_id: str, owner_id: str, tenant_name: str
async def publish_member_added(tenant_id: str, user_id: str, role: str): async def publish_member_added(tenant_id: str, user_id: str, role: str):
"""Publish member added event""" """Publish member added event"""
try: try:
publisher = RabbitMQPublisher() await data_publisher.publish_event(
await publisher.publish_event(
"tenant.member.added", "tenant.member.added",
{ {
"tenant_id": tenant_id, "tenant_id": tenant_id,

View File

@@ -13,7 +13,7 @@ import uuid
import json import json
from app.models.tenants import Tenant, TenantMember from app.models.tenants import Tenant, TenantMember
from app.schemas.tenants import BakeryRegistration, TenantResponse, TenantAccessResponse, TenantUpdate from app.schemas.tenants import BakeryRegistration, TenantResponse, TenantAccessResponse, TenantUpdate, TenantMemberResponse
from app.services.messaging import publish_tenant_created, publish_member_added from app.services.messaging import publish_tenant_created, publish_member_added
logger = structlog.get_logger() logger = structlog.get_logger()