Преглед изворни кода

add user.schemas/models/crud

conradlan пре 3 година
родитељ
комит
18490f38ba
4 измењених фајлова са 75 додато и 14 уклоњено
  1. 6 1
      .vscode/launch.json
  2. 28 11
      main.py
  3. 13 1
      sql/models.py
  4. 28 1
      sql/schemas.py

+ 6 - 1
.vscode/launch.json

@@ -10,7 +10,12 @@
             "request": "launch",
             "request": "launch",
             "module": "uvicorn",
             "module": "uvicorn",
             "args": [
             "args": [
-                "main:app"
+                "main:app",
+                "--host",
+                "0.0.0.0",
+                "--port",
+                "8887",
+                "--reload"
             ],
             ],
             "jinja": true
             "jinja": true
         }
         }

+ 28 - 11
main.py

@@ -1,10 +1,8 @@
+from re import U
 import uuid
 import uuid
 import os
 import os
-import logging
-import dotenv
 from typing import Optional
 from typing import Optional
-from fastapi import FastAPI, Form
-from fastapi.params import Depends
+from fastapi import FastAPI, Form, Depends, HTTPException, status
 from fastapi.templating import Jinja2Templates
 from fastapi.templating import Jinja2Templates
 from dotenv import load_dotenv
 from dotenv import load_dotenv
 from os.path import join, dirname
 from os.path import join, dirname
@@ -13,18 +11,37 @@ from pydantic.networks import EmailStr
 from starlette.responses import HTMLResponse
 from starlette.responses import HTMLResponse
 from sqlalchemy.orm import Session
 from sqlalchemy.orm import Session
 from fastapi.encoders import jsonable_encoder
 from fastapi.encoders import jsonable_encoder
+from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
 
 
 from sql.database import get_db_session
 from sql.database import get_db_session
-from sql.crud import create_order, get_order, get_orders
+from sql.crud import create_order, get_user
 from sql.models import order_info_linepay
 from sql.models import order_info_linepay
 from sql.schemas import order_info_linepay as orderSechmas
 from sql.schemas import order_info_linepay as orderSechmas
+from sql.schemas import User
+
+from jose import JWTError, jwt
+from passlib.context import CryptContext
+
+# TBD load_env
+SECRET_KEY = "df2f77bd544240801a048bd4293afd8eeb7fff3cb7050e42c791db4b83ebadcd"
+ALGORITHM = "HS256"
+ACCESS_TOKEN_EXPIRE_DAYS = 5
+pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
+oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
+
+
+def verify_password(plain_password, hashed_password):
+    return pwd_context.verify(plain_password, hashed_password)
+
+def get_password_hash(password):
+    return pwd_context.hash(password)
 
 
 
 
 
 
 
 
 # dotenv
 # dotenv
-# dotenv_path = join(dirname(__file__),'./env/.env')
-dotenv_path = join(dirname(__file__),'./env/test.env') ## sandbox
+dotenv_path = join(dirname(__file__),'./env/.env')
+# dotenv_path = join(dirname(__file__),'./env/test.env') ## sandbox
 load_dotenv(dotenv_path)
 load_dotenv(dotenv_path)
 
 
 # logger (TBD)
 # logger (TBD)
@@ -36,18 +53,18 @@ templates = Jinja2Templates(directory="templates")
 LINE_PAY_CHANNEL_ID = os.environ.get("LINE_PAY_CHANNEL_ID")
 LINE_PAY_CHANNEL_ID = os.environ.get("LINE_PAY_CHANNEL_ID")
 LINE_PAY_CHANNEL_SECRET = os.environ.get("LINE_PAY_CHANNEL_SECRET")
 LINE_PAY_CHANNEL_SECRET = os.environ.get("LINE_PAY_CHANNEL_SECRET")
 LINE_PAY_REQEST_BASE_URL = "https://{}".format(os.environ.get("HOST_NAME"))
 LINE_PAY_REQEST_BASE_URL = "https://{}".format(os.environ.get("HOST_NAME"))
-# line = LinePayApi(LINE_PAY_CHANNEL_ID, LINE_PAY_CHANNEL_SECRET, is_sandbox=False)
-line = LinePayApi(LINE_PAY_CHANNEL_ID, LINE_PAY_CHANNEL_SECRET, is_sandbox=True)
+line = LinePayApi(LINE_PAY_CHANNEL_ID, LINE_PAY_CHANNEL_SECRET, is_sandbox=False)
+# line = LinePayApi(LINE_PAY_CHANNEL_ID, LINE_PAY_CHANNEL_SECRET, is_sandbox=True)
 
 
 # CACHE
 # CACHE
 CACHE = {}
 CACHE = {}
 
 
 # Fastapi
 # Fastapi
 app = FastAPI()
 app = FastAPI()
-
+oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
 
 
 @app.get('/')
 @app.get('/')
-def hello():
+def hello(token: str = Depends(oauth2_scheme)):
     index = {}
     index = {}
     index["product"] = "早鳥方案"
     index["product"] = "早鳥方案"
     index["amount"] = 1200
     index["amount"] = 1200

+ 13 - 1
sql/models.py

@@ -1,4 +1,4 @@
-from sqlalchemy import Column, Integer, String, DateTime
+from sqlalchemy import Column, Integer, String, DateTime, Text
 from sqlalchemy.engine.base import Transaction
 from sqlalchemy.engine.base import Transaction
 
 
 from .database import Base
 from .database import Base
@@ -16,5 +16,17 @@ class order_info_linepay(Base):
     transaction_date = Column(DateTime, nullable=False, default=datetime.now())
     transaction_date = Column(DateTime, nullable=False, default=datetime.now())
 
 
 
 
+class User(Base):
+    __tablename__ = "users"
+    id = Column(Integer, primary_key=True, nullable= False)
+    username = Column(String(45))
+    email = Column(String(60))
+    password = Column(String(128))
+    token = Column(String(256), default=None)
+    left_time = Column(Integer, default=None)
+    last_stored = Column(datetime, default=None)
+    line_token = Column(String(256), default=None)
+    veri_url = Column(Text, default=None)
+    invite_code = Column(Text, default=None)
 
 
 ## this is for ORM model  define database model
 ## this is for ORM model  define database model

+ 28 - 1
sql/schemas.py

@@ -1,11 +1,38 @@
+from logging import disable
 from typing import Optional
 from typing import Optional
 
 
 from pydantic import BaseModel, validator, EmailStr
 from pydantic import BaseModel, validator, EmailStr
 from datetime import datetime
 from datetime import datetime
 
 
+from sqlalchemy.sql.expression import text
+
+
+class UserSchema(BaseModel):
+    """[summary]
+
+    Args:
+        BaseModel ([type]): [description]
+    """
+    id: int
+    email: EmailStr
+    username: str
+    password: str
+    token: Optional[str] = None
+    left_time: Optional[int] = None
+    last_stored: Optional[datetime] = None
+    line_token: Optional[str] = None
+    veri_url: Optional[str] = None
+    class Config:
+        orm_mode = True
+
+
 
 
-# UserInfo
 class order_info_linepay(BaseModel):
 class order_info_linepay(BaseModel):
+    """[summary]
+
+    Args:
+        BaseModel ([type]): [description]
+    """
     id: int
     id: int
     # UUID4 validation???
     # UUID4 validation???
     orderid: str
     orderid: str