Przeglądaj źródła

modify nft model duplicatd problem

conradlan 3 lat temu
rodzic
commit
c980b1d8f1

+ 1 - 1
app/api/api_v1/api.py

@@ -6,4 +6,4 @@ api_router = APIRouter()
 api_router.include_router(login.router, tags=["login"])
 api_router.include_router(users.router, prefix="/user", tags=["user"])
 api_router.include_router(nft.router, prefix="/nft", tags=["nft"])
-api_router.include_router(line.router,prefix="/line", tags=["line"])
+api_router.include_router(line.router, prefix="/line", tags=["line"])

+ 2 - 0
app/api/api_v1/endpoints/line.py

@@ -1,3 +1,5 @@
+import pymysql
+pymysql.install_as_MySQLdb()
 import uvicorn
 import fastapi
 from fastapi.middleware.cors import CORSMiddleware

+ 4 - 3
app/api/api_v1/endpoints/nft.py

@@ -9,18 +9,19 @@ from app.api import deps
 router = APIRouter()
 
 
-@router.get("/", response_model=List[schemas.NftBase])
+@router.get("/", response_model=schemas.NftPrint)
+# @router.get("/")
 def read_items(
     db: Session = Depends(deps.get_db),
     skip: int = 0,
     limit: int = 100,
-    current_user: models.users = Depends(deps.get_current_active_user),
+    current_user: models.users = Depends(deps.get_current_active_superuser),
 ) -> Any:
     """
     Retrieve items.
     """
     if crud.user.is_superuser(current_user):
-        nfts = crud.nft.get_multi(db, skip=skip, limit=limit)
+        nfts = crud.nft.get_group_by_title(db, skip=skip, limit=limit)
     else:
         nfts = crud.nft.get_multi_by_owner(
             db=db, owner_id=current_user.userid, skip=skip, limit=limit

+ 13 - 7
app/crud/crud_nft.py

@@ -1,21 +1,27 @@
 from typing import Any, Dict, List, Optional, Union
 
 from sqlalchemy.orm import Session
+from sqlalchemy import func
 
 from app.core.security import get_password_hash, verify_password
 from app.crud.base import CRUDBase
-from app.models.nft import nft
+from app.models.nft import Nft
 from app.schemas.nft import NftBase, NftCreate, NftUpdate
 
 
-class CRUDUser(CRUDBase[nft, NftBase, NftCreate]):
+class CRUDNft(CRUDBase[Nft, NftBase, NftCreate]):
     def get_multi_by_owner(
         self, db: Session, *, skip: int = 0, limit: int = 100, owner_id: str
-    ) -> List[nft]:
-        return db.query(nft).filter(nft.userid==owner_id).offset(skip).limit(limit).all()
+    ) -> List[Nft]:
+        return db.query(Nft).filter(Nft.userid==owner_id).offset(skip).limit(limit).all()
 
-    def create_with_owner(self, db: Session, *, obj_in: NftCreate, owner_id:str) -> nft:
-        db_obj = nft(
+    def get_group_by_title(
+        self, db: Session, *, skip: int = 0, limit: int = 100
+    ) -> List[Nft]:
+        return db.query(Nft, func.count(Nft.userid)).group_by(Nft.title)#.offset(skip).limit(limit).all()
+
+    def create_with_owner(self, db: Session, *, obj_in: NftCreate, owner_id:str) -> Nft:
+        db_obj = Nft(
             hash=obj_in.hash,
             imgurl=obj_in.imgurl,
             userid=owner_id,
@@ -31,4 +37,4 @@ class CRUDUser(CRUDBase[nft, NftBase, NftCreate]):
 
 
 
-nft = CRUDUser(nft)
+nft = CRUDNft(Nft)

+ 2 - 1
app/main.py

@@ -12,7 +12,8 @@ app = FastAPI(
 if settings.BACKEND_CORS_ORIGINS:
     app.add_middleware(
         CORSMiddleware,
-        allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS],
+        # allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS],
+        allow_origins=["*"],
         allow_credentials=True,
         allow_methods=["*"],
         allow_headers=["*"],

+ 1 - 1
app/models/__init__.py

@@ -1,2 +1,2 @@
 from .user import users
-from .nft import nft
+from .nft import Nft

+ 1 - 1
app/models/nft.py

@@ -3,7 +3,7 @@ from sqlalchemy.sql.sqltypes import Integer
 from app.db.base_class import Base
 
 
-class nft(Base):
+class Nft(Base):
     id = Column(Integer, primary_key=True, nullable=False)
     hash = Column(String(200), unique=True)
     imgurl = Column(String(200))

+ 6 - 0
app/schemas/nft.py

@@ -16,6 +16,12 @@ class NftBase(BaseModel):
         orm_mode = True
 
 
+class NftPrint(NftBase):
+    count: Optional[int] = None
+
+    class Config:
+        orm_mode = True
+
 class NftCreate(NftBase):
     pass