Fixed bug with subscriptions

This commit is contained in:
Saurab-Shrestha 2024-01-21 14:47:26 +05:45
parent 0b79c23f68
commit bcc3f03e25
8 changed files with 70 additions and 10 deletions

View File

@ -0,0 +1,32 @@
"""Remove is_active from subscription
Revision ID: bca1465a100f
Revises: cccea6c7d70d
Create Date: 2024-01-21 12:18:59.279663
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = 'bca1465a100f'
down_revision: Union[str, None] = 'cccea6c7d70d'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# op.create_unique_constraint('unique_user_role', 'user_roles', ['user_id', 'role_id', 'company_id'])
pass
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
# op.drop_constraint('unique_user_role', 'user_roles', type_='unique')
pass
# ### end Alembic commands ###

View File

@ -26,12 +26,12 @@ def create_app(root_injector: Injector) -> FastAPI:
app = FastAPI(dependencies=[Depends(bind_injector_to_request)])
app.include_router(completions_router)
app.include_router(chat_router)
app.include_router(chunks_router)
app.include_router(ingest_router)
app.include_router(embeddings_router)
app.include_router(health_router)
# app.include_router(completions_router)
# app.include_router(chat_router)
# app.include_router(chunks_router)
# app.include_router(ingest_router)
# app.include_router(embeddings_router)
# app.include_router(health_router)
app.include_router(api_router)

View File

@ -124,3 +124,21 @@ async def get_company_name(company_id: int, db: Session = Depends(get_db)) -> st
if not company:
raise HTTPException(status_code=404, detail="Company not found")
return company.name
def get_active_subscription(
current_user: models.User = Depends(get_current_user),
db: Session = Depends(get_db),
):
company_id = current_user.user_role.company_id
if company_id:
company = crud.company.get(db, company_id)
if company and company.subscriptions:
active_subscription = next((sub for sub in company.subscriptions if sub.is_active), None)
if active_subscription:
return company
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Access Forbidden - No Active Subscription",
)

View File

@ -204,4 +204,5 @@ def register_without_company_assignment(
"access_token": security.create_access_token(token_payload, expires_delta=timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)),
"refresh_token": security.create_refresh_token(token_payload, expires_delta=timedelta(minutes=settings.REFRESH_TOKEN_EXPIRE_MINUTES)),
"token_type": "bearer",
}
}

View File

@ -89,7 +89,7 @@ def read_subscriptions_by_company(
status_code=status.HTTP_200_OK,
content={
"message": "Subscriptions retrieved successfully",
"subscriptions": subscriptions_list
"subscriptions": jsonable_encoder(subscriptions)
},
)

View File

@ -204,3 +204,14 @@ def update_user(
content={"message": "User updated successfully", "user": jsonable_encoder(user_data)},
)
@router.get("/")
def home_page(
*,
db: Session = Depends(deps.get_db),
current_user: models.User = Security(
deps.get_active_subscription,
),
):
return JSONResponse(status_code=status.HTTP_200_OK, content={"message": "Welcome to QuickGPT"})

View File

@ -13,7 +13,6 @@ class Subscription(Base):
company_id = Column(Integer, ForeignKey("companies.id"))
start_date = Column(DateTime, default=datetime.utcnow())
end_date = Column(DateTime, default=datetime.utcnow() + timedelta(days=30)) # Example: 30 days subscription period
is_active = Column(Boolean, default=False)
company = relationship("Company", back_populates="subscriptions")

View File

@ -7,7 +7,6 @@ from private_gpt.users.schemas.company import Company
class SubscriptionBase(BaseModel):
start_date: datetime
end_date: datetime
is_active: bool
class SubscriptionCreate(SubscriptionBase):
company_id: int