concurrency-fix #15
@@ -10,6 +10,8 @@ from typing import Sequence, Union
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
from alpine_bits_python.const import WebhookStatus
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision: str = 'e7ee03d8f430'
|
||||
@@ -66,13 +68,12 @@ def upgrade() -> None:
|
||||
sa.Column('payload_hash', sa.String(length=64), nullable=False),
|
||||
sa.Column('webhook_endpoint_id', sa.Integer(), nullable=True),
|
||||
sa.Column('hotel_id', sa.String(length=50), nullable=True),
|
||||
sa.Column('status', sa.String(length=20), nullable=False, default='pending'),
|
||||
sa.Column('status', sa.String(length=20), nullable=False, default=WebhookStatus.PENDING.value),
|
||||
sa.Column('processing_started_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('processing_completed_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('retry_count', sa.Integer(), nullable=True, default=0),
|
||||
sa.Column('last_error', sa.String(length=2000), nullable=True),
|
||||
sa.Column('payload_json', sa.JSON(), nullable=True),
|
||||
sa.Column('payload_size_bytes', sa.Integer(), nullable=True),
|
||||
sa.Column('purged_at', sa.DateTime(timezone=True), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(timezone=True), nullable=False),
|
||||
sa.Column('source_ip', sa.String(length=45), nullable=True),
|
||||
|
||||
@@ -4,6 +4,8 @@ import os
|
||||
from collections.abc import AsyncGenerator, Callable
|
||||
from typing import TypeVar
|
||||
|
||||
from .const import WebhookStatus
|
||||
|
||||
from sqlalchemy import (
|
||||
JSON,
|
||||
Boolean,
|
||||
@@ -751,8 +753,8 @@ class WebhookRequest(Base):
|
||||
hotel_id = Column(String(50), ForeignKey("hotels.hotel_id"), nullable=True, index=True)
|
||||
|
||||
# Processing tracking
|
||||
status = Column(String(20), nullable=False, default='pending', index=True)
|
||||
# Status values: 'pending', 'processing', 'completed', 'failed'
|
||||
status = Column(String(20), nullable=False, default=WebhookStatus.PENDING.value, index=True)
|
||||
# Status values: 'pending', 'processing', 'completed', 'failed' set by Enum WebhookStatus
|
||||
|
||||
processing_started_at = Column(DateTime(timezone=True), nullable=True)
|
||||
processing_completed_at = Column(DateTime(timezone=True), nullable=True)
|
||||
@@ -763,7 +765,6 @@ class WebhookRequest(Base):
|
||||
|
||||
# Payload storage
|
||||
payload_json = Column(JSON, nullable=True) # NULL after purge, kept for retries
|
||||
payload_size_bytes = Column(Integer, nullable=True) # Track original size
|
||||
purged_at = Column(DateTime(timezone=True), nullable=True) # When JSON was purged
|
||||
|
||||
# Metadata
|
||||
|
||||
Reference in New Issue
Block a user