jwt&dbの操作 実装
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
from fastapi import APIRouter, UploadFile,HTTPException,File
|
from fastapi import Request,Depends, APIRouter, UploadFile,HTTPException,File
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
import typing as t
|
import typing as t
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
@@ -7,6 +7,7 @@ import httpx
|
|||||||
import deepdiff
|
import deepdiff
|
||||||
import app.core.config as c
|
import app.core.config as c
|
||||||
|
|
||||||
|
|
||||||
kinton_router = r = APIRouter()
|
kinton_router = r = APIRouter()
|
||||||
|
|
||||||
def getfieldsfromexcel(df):
|
def getfieldsfromexcel(df):
|
||||||
|
|||||||
67
backend/app/api/api_v1/routers/platform.py
Normal file
67
backend/app/api/api_v1/routers/platform.py
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
from fastapi import Request,Depends, APIRouter, UploadFile,HTTPException,File
|
||||||
|
from app.db import Base,engine
|
||||||
|
from app.db.session import get_db
|
||||||
|
from app.db.crud import *
|
||||||
|
from app.db.schemas import AppBase, AppEdit, App,Kintone
|
||||||
|
|
||||||
|
platform_router = r = APIRouter()
|
||||||
|
|
||||||
|
@r.get(
|
||||||
|
"/appsettings/{id}",
|
||||||
|
response_model=App,
|
||||||
|
response_model_exclude_none=True,
|
||||||
|
)
|
||||||
|
async def appsetting_details(
|
||||||
|
request: Request,
|
||||||
|
id: int,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
app = get_appsetting(db, id)
|
||||||
|
return app
|
||||||
|
|
||||||
|
|
||||||
|
@r.post("/appsettings", response_model=App, response_model_exclude_none=True)
|
||||||
|
async def appsetting_create(
|
||||||
|
request: Request,
|
||||||
|
app: AppBase,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
return create_appsetting(db, app)
|
||||||
|
|
||||||
|
|
||||||
|
@r.put(
|
||||||
|
"/appsettings/{id}", response_model=App, response_model_exclude_none=True
|
||||||
|
)
|
||||||
|
async def appsetting_edit(
|
||||||
|
request: Request,
|
||||||
|
id: int,
|
||||||
|
app: AppEdit,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
return edit_appsetting(db, id, app)
|
||||||
|
|
||||||
|
|
||||||
|
@r.delete(
|
||||||
|
"/appsettings/{id}", response_model=App, response_model_exclude_none=True
|
||||||
|
)
|
||||||
|
async def appsettings_delete(
|
||||||
|
request: Request,
|
||||||
|
id: int,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
|
||||||
|
return delete_appsetting(db, id)
|
||||||
|
|
||||||
|
|
||||||
|
@r.get(
|
||||||
|
"/kintone/{type}",
|
||||||
|
response_model=t.List[Kintone],
|
||||||
|
response_model_exclude_none=True,
|
||||||
|
)
|
||||||
|
async def kintone_data(
|
||||||
|
request: Request,
|
||||||
|
type: int,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
kintone = get_kintones(db, type)
|
||||||
|
return kintone
|
||||||
@@ -2,7 +2,7 @@ import os
|
|||||||
|
|
||||||
PROJECT_NAME = "KintoneAppBuilder"
|
PROJECT_NAME = "KintoneAppBuilder"
|
||||||
|
|
||||||
SQLALCHEMY_DATABASE_URI = os.getenv("DATABASE_URL")
|
SQLALCHEMY_DATABASE_URI = "mssql+pymssql://maxz64@maxzdb:m@xz1205@maxzdb.database.windows.net/alloc"
|
||||||
|
|
||||||
BASE_URL = "https://mfu07rkgnb7c.cybozu.com"
|
BASE_URL = "https://mfu07rkgnb7c.cybozu.com"
|
||||||
|
|
||||||
@@ -15,3 +15,4 @@ API_V1_AUTH_VALUE = "TVhaOm1heHoxMjA1"
|
|||||||
KINTONE_USER = "MXZ"
|
KINTONE_USER = "MXZ"
|
||||||
|
|
||||||
KINTONE_FIELD_TYPE=["GROUP","GROUP_SELECT","CHECK_BOX","SUBTABLE","DROP_DOWN","USER_SELECT","RADIO_BUTTON","RICH_TEXT","LINK","REFERENCE_TABLE","CALC","TIME","NUMBER","ORGANIZATION_SELECT","FILE","DATETIME","DATE","MULTI_SELECT","SINGLE_LINE_TEXT","MULTI_LINE_TEXT"]
|
KINTONE_FIELD_TYPE=["GROUP","GROUP_SELECT","CHECK_BOX","SUBTABLE","DROP_DOWN","USER_SELECT","RADIO_BUTTON","RICH_TEXT","LINK","REFERENCE_TABLE","CALC","TIME","NUMBER","ORGANIZATION_SELECT","FILE","DATETIME","DATE","MULTI_SELECT","SINGLE_LINE_TEXT","MULTI_LINE_TEXT"]
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
from app.db.session import *
|
||||||
|
from app.db.models import *
|
||||||
@@ -67,3 +67,52 @@ def edit_user(
|
|||||||
db.commit()
|
db.commit()
|
||||||
db.refresh(db_user)
|
db.refresh(db_user)
|
||||||
return db_user
|
return db_user
|
||||||
|
|
||||||
|
|
||||||
|
def get_appsetting(db: Session, id: int):
|
||||||
|
app = db.query(models.AppSetting).get(id)
|
||||||
|
if not app:
|
||||||
|
raise HTTPException(status_code=404, detail="App not found")
|
||||||
|
return app
|
||||||
|
|
||||||
|
def create_appsetting(db: Session, app: schemas.AppBase):
|
||||||
|
db_app = models.AppSetting(
|
||||||
|
appid=app.appid,
|
||||||
|
setting=app.setting,
|
||||||
|
)
|
||||||
|
db.add(db_app)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_app)
|
||||||
|
return db_app
|
||||||
|
|
||||||
|
def delete_appsetting(db: Session, id: int):
|
||||||
|
app = get_appsetting(db, id)
|
||||||
|
if not app:
|
||||||
|
raise HTTPException(status.HTTP_404_NOT_FOUND, detail="App not found")
|
||||||
|
db.delete(app)
|
||||||
|
db.commit()
|
||||||
|
return app
|
||||||
|
|
||||||
|
|
||||||
|
def edit_appsetting(
|
||||||
|
db: Session, id: int, app: schemas.AppBase
|
||||||
|
) -> schemas.App:
|
||||||
|
db_app = get_appsetting(db, id)
|
||||||
|
if not db_app:
|
||||||
|
raise HTTPException(status.HTTP_404_NOT_FOUND, detail="App not found")
|
||||||
|
update_data = app.dict(exclude_unset=True)
|
||||||
|
|
||||||
|
for key, value in update_data.items():
|
||||||
|
setattr(db_app, key, value)
|
||||||
|
|
||||||
|
db.add(db_app)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_app)
|
||||||
|
return db_app
|
||||||
|
|
||||||
|
|
||||||
|
def get_kintones(db: Session, type: int):
|
||||||
|
kintones = db.query(models.Kintone).filter(models.Kintone.type == type).all()
|
||||||
|
if not kintones:
|
||||||
|
raise HTTPException(status_code=404, detail="Data not found")
|
||||||
|
return kintones
|
||||||
@@ -7,9 +7,25 @@ class User(Base):
|
|||||||
__tablename__ = "user"
|
__tablename__ = "user"
|
||||||
|
|
||||||
id = Column(Integer, primary_key=True, index=True)
|
id = Column(Integer, primary_key=True, index=True)
|
||||||
email = Column(String, unique=True, index=True, nullable=False)
|
email = Column(String(50), unique=True, index=True, nullable=False)
|
||||||
first_name = Column(String)
|
first_name = Column(String(100))
|
||||||
last_name = Column(String)
|
last_name = Column(String(100))
|
||||||
hashed_password = Column(String, nullable=False)
|
hashed_password = Column(String(200), nullable=False)
|
||||||
is_active = Column(Boolean, default=True)
|
is_active = Column(Boolean, default=True)
|
||||||
is_superuser = Column(Boolean, default=False)
|
is_superuser = Column(Boolean, default=False)
|
||||||
|
|
||||||
|
class AppSetting(Base):
|
||||||
|
__tablename__ = "appsetting"
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True, index=True)
|
||||||
|
appid = Column(String(100), index=True, nullable=False)
|
||||||
|
setting = Column(String(1000))
|
||||||
|
|
||||||
|
class Kintone(Base):
|
||||||
|
__tablename__ = "kintone"
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True, index=True)
|
||||||
|
type = Column(Integer, index=True, nullable=False)
|
||||||
|
name = Column(String(100), nullable=False)
|
||||||
|
desc = Column(String(500))
|
||||||
|
content = Column(String(2000))
|
||||||
@@ -43,3 +43,29 @@ class Token(BaseModel):
|
|||||||
class TokenData(BaseModel):
|
class TokenData(BaseModel):
|
||||||
email: str = None
|
email: str = None
|
||||||
permissions: str = "user"
|
permissions: str = "user"
|
||||||
|
|
||||||
|
|
||||||
|
class AppEdit(BaseModel):
|
||||||
|
setting: str = None
|
||||||
|
|
||||||
|
class AppBase(BaseModel):
|
||||||
|
appid: str
|
||||||
|
setting: str = None
|
||||||
|
|
||||||
|
|
||||||
|
class App(AppBase):
|
||||||
|
id: int
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
||||||
|
|
||||||
|
|
||||||
|
class Kintone(BaseModel):
|
||||||
|
id: int
|
||||||
|
type: int
|
||||||
|
name: str = None
|
||||||
|
desc: str = None
|
||||||
|
content: str = None
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
||||||
@@ -2,32 +2,22 @@ from fastapi import FastAPI, Depends
|
|||||||
from starlette.requests import Request
|
from starlette.requests import Request
|
||||||
import uvicorn
|
import uvicorn
|
||||||
from app.api.api_v1.routers.kintone import kinton_router
|
from app.api.api_v1.routers.kintone import kinton_router
|
||||||
# from app.api.api_v1.routers.users import users_router
|
from app.api.api_v1.routers.users import users_router
|
||||||
# from app.api.api_v1.routers.auth import auth_router
|
from app.api.api_v1.routers.auth import auth_router
|
||||||
|
from app.api.api_v1.routers.platform import platform_router
|
||||||
from app.core import config
|
from app.core import config
|
||||||
# from app.db.session import SessionLocal
|
from app.db import Base,engine
|
||||||
# from app.core.auth import get_current_active_user
|
from app.core.auth import get_current_active_user
|
||||||
from app.core.celery_app import celery_app
|
from app.core.celery_app import celery_app
|
||||||
from app import tasks
|
from app import tasks
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
|
||||||
|
|
||||||
|
Base.metadata.create_all(bind=engine)
|
||||||
|
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
title=config.PROJECT_NAME, docs_url="/api/docs", openapi_url="/api"
|
title=config.PROJECT_NAME, docs_url="/api/docs", openapi_url="/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
origins = [
|
|
||||||
"http://localhost:9000",
|
|
||||||
"http://localhost",
|
|
||||||
"http://localhost:8080",
|
|
||||||
]
|
|
||||||
|
|
||||||
app.add_middleware(
|
|
||||||
CORSMiddleware,
|
|
||||||
allow_origins=origins,
|
|
||||||
allow_credentials=True,
|
|
||||||
allow_methods=["*"],
|
|
||||||
allow_headers=["*"],
|
|
||||||
)
|
|
||||||
|
|
||||||
# @app.middleware("http")
|
# @app.middleware("http")
|
||||||
# async def db_session_middleware(request: Request, call_next):
|
# async def db_session_middleware(request: Request, call_next):
|
||||||
@@ -50,14 +40,15 @@ async def example_task():
|
|||||||
|
|
||||||
|
|
||||||
# Routers
|
# Routers
|
||||||
# app.include_router(
|
app.include_router(
|
||||||
# users_router,
|
users_router,
|
||||||
# prefix="/api/v1",
|
prefix="/api/v1",
|
||||||
# tags=["users"],
|
tags=["users"],
|
||||||
# dependencies=[Depends(get_current_active_user)],
|
dependencies=[Depends(get_current_active_user)],
|
||||||
# )
|
)
|
||||||
# app.include_router(auth_router, prefix="/api", tags=["auth"])
|
app.include_router(auth_router, prefix="/api", tags=["auth"])
|
||||||
app.include_router(kinton_router,prefix="/api/v1")
|
app.include_router(kinton_router,prefix="/api/v1",tags=["kintone"])
|
||||||
|
app.include_router(platform_router,prefix="/api",tags=["platform"])
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
uvicorn.run("main:app", host="0.0.0.0", reload=True, port=8888)
|
uvicorn.run("main:app", host="0.0.0.0", reload=True, port=8888)
|
||||||
|
|||||||
@@ -20,3 +20,4 @@ pyjwt==1.7.1
|
|||||||
pandas==2.0.3
|
pandas==2.0.3
|
||||||
openpyxl==3.1.2
|
openpyxl==3.1.2
|
||||||
deepdiff==6.3.1
|
deepdiff==6.3.1
|
||||||
|
pymssql==2.2.7
|
||||||
Reference in New Issue
Block a user