From 953f1f868fbd610acb305752e9632559ca516cf4 Mon Sep 17 00:00:00 2001 From: ambag12 Date: Thu, 7 May 2026 20:01:24 +0500 Subject: [PATCH] commit with Backend arch MYSQL connection done --- dev_backend/.env | 9 ++++ .../__pycache__/db_setup.cpython-313.pyc | Bin 0 -> 2327 bytes dev_backend/__pycache__/main.cpython-313.pyc | Bin 0 -> 679 bytes dev_backend/db_setup.py | 44 ++++++++++++++++++ dev_backend/main.py | 15 ++++++ .../__pycache__/views.cpython-313.pyc | Bin 0 -> 1044 bytes .../mysql_process/enums.py | 0 dev_backend/mysql_process/models.py | 12 +++++ dev_backend/mysql_process/serializers.py | 16 +++++++ dev_backend/mysql_process/views.py | 20 ++++++++ dev_backend/vector_db_router/enums.py | 0 dev_backend/vector_db_router/models.py | 1 + dev_backend/vector_db_router/serializers.py | 0 dev_backend/vector_db_router/views.py | 4 ++ model_export/README.md | 0 dataset.py => model_export/dataset.py | 0 .../dino_image_matching.py | 0 .../download_images.py | 0 .../generate_pairs_csv.py | 0 inference.py => model_export/inference.py | 0 model.py => model_export/model.py | 0 p_hash.py => model_export/p_hash.py | 0 .../requirements.txt | 0 train.py => model_export/train.py | 0 24 files changed, 121 insertions(+) create mode 100644 dev_backend/.env create mode 100644 dev_backend/__pycache__/db_setup.cpython-313.pyc create mode 100644 dev_backend/__pycache__/main.cpython-313.pyc create mode 100644 dev_backend/db_setup.py create mode 100644 dev_backend/main.py create mode 100644 dev_backend/mysql_process/__pycache__/views.cpython-313.pyc rename README.md => dev_backend/mysql_process/enums.py (100%) create mode 100644 dev_backend/mysql_process/models.py create mode 100644 dev_backend/mysql_process/serializers.py create mode 100644 dev_backend/mysql_process/views.py create mode 100644 dev_backend/vector_db_router/enums.py create mode 100644 dev_backend/vector_db_router/models.py create mode 100644 dev_backend/vector_db_router/serializers.py create mode 100644 dev_backend/vector_db_router/views.py create mode 100644 model_export/README.md rename dataset.py => model_export/dataset.py (100%) rename dino_image_matching.py => model_export/dino_image_matching.py (100%) rename download_images.py => model_export/download_images.py (100%) rename generate_pairs_csv.py => model_export/generate_pairs_csv.py (100%) rename inference.py => model_export/inference.py (100%) rename model.py => model_export/model.py (100%) rename p_hash.py => model_export/p_hash.py (100%) rename requirements.txt => model_export/requirements.txt (100%) rename train.py => model_export/train.py (100%) diff --git a/dev_backend/.env b/dev_backend/.env new file mode 100644 index 0000000..7d6e8e1 --- /dev/null +++ b/dev_backend/.env @@ -0,0 +1,9 @@ +MYSQL_HOST=localhost + +MYSQL_PORT=3306 + +MYSQL_USER=root + +MYSQL_PASSWORD='AmB@ig123' + +MYSQL_DATABASE=listing_radar diff --git a/dev_backend/__pycache__/db_setup.cpython-313.pyc b/dev_backend/__pycache__/db_setup.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cdc274ac3fe2e87e92347ad41e5ee15458c4f2af GIT binary patch literal 2327 zcma)7&2Jk;6rcU@di}Ast8RmP@6oZD7*@+fcr72sW|;Z7vh6yIAuM(y%pAu`rE#?kaX12!tjZ zYfeL~>Q}rN5(X}tI-Fmb#@d+fVAwgj#fGQBLEUll=T6b!0Ip%nV5bWsrPH%Yb;h}B z9`rV@&d~6gOX~U4+K76hL}LwnF0ZN=&XxxJwfD}d!#+NDwlwV94djRO$MfomtVF{G zfmn#8S22~R93Rzm$NAVM1{Ei5$E9M;CN7l?-PKvtW%lL$0hNOU9xCN)0Q*n|s%3ON zhY(ba%Bw;zZ=nt}f{u#Q=r)%DR1$pm&9|Sor=Y?nVSSprEer*su;T=h(NJK||M3%j zKN&I4arCzE3L58*3gcW>9GXo}x^As6mox3MZnCTOz17px^RyqLfD90(h)IKPrHbt- zH_MYCsA-^V+8$9-*-HwCT`oiWa#hRC8M)IH$E{csT1hu_k~169Vd6;!o(7i7SAfNw zF{U}#ovL-$W@ys{cD1WsqG^pyNhfUD3Xj7=d5Y%H6Q$$szP{g%FDWPI23L78(7qB& z%|}-y6i+XhpPBR4eYtH}ZhLlPd_%k^w>@{dVT0?De3bhl(2c%q2JkI+NW3Ef_#u@K z35z_J56Fvx#BfLe^%goMaQEnZ0^r|tj`E=N1|ycyI?Cwx#t0f^zTQv;RqPckZiL%x zM;1RC^4EQ;EdkPk-$)C-6!9%K-@ffj(qenRm!(BuXc$UN#N|nQ5Q5f(gA*t7?xtVpHx)}U-@1~j-{@l-qx z#pFP2C?BCH~28M|GU9o`|rN5Eu}u3 zJM$pcI&aUNd>Cn6j$&{v+)sgg68+o^Xfe#?6XIe-VmO(~9~Kt(bNQ^i*d;N1SO7iLi$ox!i8b5hwZ4tk zI_ilpHqt|xA=|SlQoS7*AR`FDHYy<&TeHRxeP(bx-SHmNo^i?Nm9I5b}! z7>~0(6HJwU!MMR^H?#@T#MY$7kAO-*8vI1a0p`UB^O*Y{tpP+0UgduHmrR-X7Zs!p>Zzl)N9f`bx>!dC>!|Bb)LBQb!qNj2`BZrv zPcF>foLz}`tSIq?OE)jw`ea$@T*r5JbS*2dt%M>AyKe5f)xR9dY{3nOhS6V2Fu~77 R|4s$D_O+zUb&z8a(LcT~FSq~z literal 0 HcmV?d00001 diff --git a/dev_backend/__pycache__/main.cpython-313.pyc b/dev_backend/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1c6fc21e13e11ec32dce2ac9d2d686ce431ff2b GIT binary patch literal 679 zcmYLH&ubGw7@ghC{>Uai$`+m&#n3)BEkJP&U`44+%AoNp{v*j$n z?7adXQH)}vgCYZr$ON;gx!JLz3REH+>^ZkOPUM0+$CZv3RiPUB;Lo|;sYP|DH_?u} zif%1hD`u>s*oocP+b|*63A$I#uK$1T)Z=RGhell6u$pL4Zw0?}uw_d35$58-))VP) zfknxc)Y!zFKHlEmdd3Jz=^h3uSGsgmQZBlb7kS3%!;BO;%S6kNwKT^hA-SO0SXG}N zP?3xX;7la_l+jGcnwB`_oaLD+@NrQjke7nO#12W`=My&ss)4Ha^qG{9%IaLxaAJky zb!m>*Rop3n?y}diBJhAeZ=I9wu5y4229|OJ6}8DrN`RCKLEFQB9@;%+3v8XF-$gp7 zBZI4nM|x^PQ5N9ogsRpq4EOmcO$x~SYWDV+(LE0Ov8AQ1lS?e?rzN2aD__t|g^;`* z4l@yw@G0YhWrL)P35GB|WjA2X2puOq+>LUL2vTQ*`qPtsSG<+u+y<4uj>xrIp{d<(hA-6CW9sAE@ySH9p+^^zvZ& P!1;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() \ No newline at end of file diff --git a/dev_backend/main.py b/dev_backend/main.py new file mode 100644 index 0000000..741c77e --- /dev/null +++ b/dev_backend/main.py @@ -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"]) \ No newline at end of file diff --git a/dev_backend/mysql_process/__pycache__/views.cpython-313.pyc b/dev_backend/mysql_process/__pycache__/views.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2019e2d21e49160cf263f1ae64cbdb240a5ce2de GIT binary patch literal 1044 zcmY*Y&rj2E6#w?e)@@w}BQnq+si-lN$c%!7A2A_GLL5^^& znAQ|fB0XNrXl>9I=~A&>%R*KqrFb71YNdvbQpfzQ7WnU_Cx*CFs3%KYNht|^q?9_d z4e~K`>M8WJMIQO0XHeATE99kkp5;;{omY-oz&sZwCmhEOjDT8sF_b2$M;*%#N-fCdou5?1r+jpC_b(FL7140T!xJnxk7`oPkoOyf$w#e@kNq2v~yz{J~ zj_%204RP#`&-#3q&TupN&M+R-J*)r(w1v`&;Rl9S1;zk&Eg;T>#6*G#cFV(rwTx>D z);wUp1IWyl!vYQ4d_imV0lEJ{dnG>LI!JlN1g}{{gxE zUCDi1+De_o37`JZ`?hym-sgHwc##|brsTHYd|BLC+P^u{=o;BmMo$DZA7#24-TB?& d#{J3t{;5Xy)L!OsGlq_)K=`Y_*q5MU)_)%e4^{vG literal 0 HcmV?d00001 diff --git a/README.md b/dev_backend/mysql_process/enums.py similarity index 100% rename from README.md rename to dev_backend/mysql_process/enums.py diff --git a/dev_backend/mysql_process/models.py b/dev_backend/mysql_process/models.py new file mode 100644 index 0000000..2f1976c --- /dev/null +++ b/dev_backend/mysql_process/models.py @@ -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) \ No newline at end of file diff --git a/dev_backend/mysql_process/serializers.py b/dev_backend/mysql_process/serializers.py new file mode 100644 index 0000000..7f90fd4 --- /dev/null +++ b/dev_backend/mysql_process/serializers.py @@ -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 \ No newline at end of file diff --git a/dev_backend/mysql_process/views.py b/dev_backend/mysql_process/views.py new file mode 100644 index 0000000..16b73a1 --- /dev/null +++ b/dev_backend/mysql_process/views.py @@ -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)) \ No newline at end of file diff --git a/dev_backend/vector_db_router/enums.py b/dev_backend/vector_db_router/enums.py new file mode 100644 index 0000000..e69de29 diff --git a/dev_backend/vector_db_router/models.py b/dev_backend/vector_db_router/models.py new file mode 100644 index 0000000..61b061e --- /dev/null +++ b/dev_backend/vector_db_router/models.py @@ -0,0 +1 @@ +from qdrant_client import AsyncQdrantClient, models diff --git a/dev_backend/vector_db_router/serializers.py b/dev_backend/vector_db_router/serializers.py new file mode 100644 index 0000000..e69de29 diff --git a/dev_backend/vector_db_router/views.py b/dev_backend/vector_db_router/views.py new file mode 100644 index 0000000..172c859 --- /dev/null +++ b/dev_backend/vector_db_router/views.py @@ -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 diff --git a/model_export/README.md b/model_export/README.md new file mode 100644 index 0000000..e69de29 diff --git a/dataset.py b/model_export/dataset.py similarity index 100% rename from dataset.py rename to model_export/dataset.py diff --git a/dino_image_matching.py b/model_export/dino_image_matching.py similarity index 100% rename from dino_image_matching.py rename to model_export/dino_image_matching.py diff --git a/download_images.py b/model_export/download_images.py similarity index 100% rename from download_images.py rename to model_export/download_images.py diff --git a/generate_pairs_csv.py b/model_export/generate_pairs_csv.py similarity index 100% rename from generate_pairs_csv.py rename to model_export/generate_pairs_csv.py diff --git a/inference.py b/model_export/inference.py similarity index 100% rename from inference.py rename to model_export/inference.py diff --git a/model.py b/model_export/model.py similarity index 100% rename from model.py rename to model_export/model.py diff --git a/p_hash.py b/model_export/p_hash.py similarity index 100% rename from p_hash.py rename to model_export/p_hash.py diff --git a/requirements.txt b/model_export/requirements.txt similarity index 100% rename from requirements.txt rename to model_export/requirements.txt diff --git a/train.py b/model_export/train.py similarity index 100% rename from train.py rename to model_export/train.py