commit with Backend arch MYSQL connection done
parent
ddc80f04ac
commit
953f1f868f
|
|
@ -0,0 +1,9 @@
|
||||||
|
MYSQL_HOST=localhost
|
||||||
|
|
||||||
|
MYSQL_PORT=3306
|
||||||
|
|
||||||
|
MYSQL_USER=root
|
||||||
|
|
||||||
|
MYSQL_PASSWORD='AmB@ig123'
|
||||||
|
|
||||||
|
MYSQL_DATABASE=listing_radar
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,44 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
import os
|
||||||
|
from contextlib import asynccontextmanager
|
||||||
|
from typing import AsyncGenerator
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
from qdrant_client import AsyncQdrantClient, models
|
||||||
|
from typing import Annotated
|
||||||
|
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
|
||||||
|
from sqlalchemy.orm import declarative_base
|
||||||
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
# pyrefly: ignore [missing-import]
|
||||||
|
from fastapi import FastAPI, Depends
|
||||||
|
from sqlalchemy.engine.url import URL
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
DATABASE_URL = URL.create(
|
||||||
|
drivername="mysql+asyncmy",
|
||||||
|
username=os.getenv("MYSQL_USER"),
|
||||||
|
password=os.getenv("MYSQL_PASSWORD"),
|
||||||
|
host=os.getenv("MYSQL_HOST"),
|
||||||
|
port=os.getenv("MYSQL_PORT"),
|
||||||
|
database=os.getenv("MYSQL_DATABASE"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def get_qdrant_client()->AsyncGenerator[AsyncQdrantClient,None]:
|
||||||
|
# Replace with your Qdrant URL
|
||||||
|
client = AsyncQdrantClient(url="http://localhost:6333", timeout=60)
|
||||||
|
try:
|
||||||
|
yield client
|
||||||
|
finally:
|
||||||
|
# Properly close the async client
|
||||||
|
await client.close()
|
||||||
|
|
||||||
|
async def get_session():
|
||||||
|
engine = create_async_engine(DATABASE_URL, echo=True)
|
||||||
|
async_session = async_sessionmaker(bind=engine, class_=AsyncSession, expire_on_commit=False)
|
||||||
|
session = async_session()
|
||||||
|
Base = declarative_base()
|
||||||
|
try:
|
||||||
|
yield session
|
||||||
|
finally:
|
||||||
|
await session.close()
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
from fastapi import FastAPI, status
|
||||||
|
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
from db_setup import get_qdrant_client,get_session
|
||||||
|
from mysql_process.views import app_router
|
||||||
|
from vector_db_router.views
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
api = FastAPI(
|
||||||
|
docs_url="/docs",
|
||||||
|
redoc_url="/redocs",
|
||||||
|
)
|
||||||
|
|
||||||
|
api.include_router(app_router,tags=["mysql_process"])
|
||||||
|
api.include_router(vector_db_router,tags=["vector_db"])
|
||||||
Binary file not shown.
|
|
@ -0,0 +1,12 @@
|
||||||
|
from fastapi import FastAPI
|
||||||
|
from sqlmodel import SQLModel, Field
|
||||||
|
|
||||||
|
class Memory(SQLModel,table=True):
|
||||||
|
id: int = Field(default=None,primary_key=True)
|
||||||
|
product_link: str = Field(default=None,index=True)
|
||||||
|
price: float = Field(default=None)
|
||||||
|
product_image: str = Field(default=None)
|
||||||
|
product_name: str = Field(default=None)
|
||||||
|
product_description: str = Field(default=None)
|
||||||
|
product_rating: float = Field(default=None)
|
||||||
|
product_review: str = Field(default=None)
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
from fastapi import FastAPI
|
||||||
|
from pydantic import BaseModel
|
||||||
|
from .models import Memory
|
||||||
|
|
||||||
|
class MemorySerializer(BaseModel):
|
||||||
|
id: int
|
||||||
|
product_link: str
|
||||||
|
price: float
|
||||||
|
product_image: str
|
||||||
|
product_name: str
|
||||||
|
product_description: str
|
||||||
|
product_rating: float
|
||||||
|
product_review: str
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
from typing import Annotated
|
||||||
|
from fastapi import Depends, Header, HTTPException,APIRouter
|
||||||
|
from typing import List,Optional
|
||||||
|
from db_setup import get_session,get_qdrant_client
|
||||||
|
# from .models import Product
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from qdrant_client import AsyncQdrantClient
|
||||||
|
from fastapi.responses import JSONResponse
|
||||||
|
app_router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
|
@app_router.get("/products")
|
||||||
|
async def get_all_products(
|
||||||
|
session: Annotated[AsyncSession, Depends(get_session)],
|
||||||
|
vector_db:Annotated[AsyncQdrantClient, Depends(get_qdrant_client)],
|
||||||
|
):
|
||||||
|
try:
|
||||||
|
return JSONResponse(content={"message": "Hello World"})
|
||||||
|
except Exception as e:
|
||||||
|
raise HTTPException(status_code=500, detail=str(e))
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
from qdrant_client import AsyncQdrantClient, models
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
from db_setup import get_session,get_qdrant_client
|
||||||
|
# from .models import Product
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from qdrant_client import AsyncQdrantClient
|
||||||
Loading…
Reference in New Issue