jwt&dbの操作 実装

This commit is contained in:
2023-07-25 09:15:51 +00:00
parent 97e22fe7c3
commit 0ac1a5f2ee
9 changed files with 187 additions and 33 deletions

View File

@@ -1,4 +1,4 @@
from fastapi import APIRouter, UploadFile,HTTPException,File
from fastapi import Request,Depends, APIRouter, UploadFile,HTTPException,File
from io import BytesIO
import typing as t
import pandas as pd
@@ -7,6 +7,7 @@ import httpx
import deepdiff
import app.core.config as c
kinton_router = r = APIRouter()
def getfieldsfromexcel(df):

View 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

View File

@@ -2,7 +2,7 @@ import os
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"
@@ -15,3 +15,4 @@ API_V1_AUTH_VALUE = "TVhaOm1heHoxMjA1"
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"]

View File

@@ -0,0 +1,2 @@
from app.db.session import *
from app.db.models import *

View File

@@ -67,3 +67,52 @@ def edit_user(
db.commit()
db.refresh(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

View File

@@ -7,9 +7,25 @@ class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True, nullable=False)
first_name = Column(String)
last_name = Column(String)
hashed_password = Column(String, nullable=False)
email = Column(String(50), unique=True, index=True, nullable=False)
first_name = Column(String(100))
last_name = Column(String(100))
hashed_password = Column(String(200), nullable=False)
is_active = Column(Boolean, default=True)
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))

View File

@@ -43,3 +43,29 @@ class Token(BaseModel):
class TokenData(BaseModel):
email: str = None
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

View File

@@ -2,32 +2,22 @@ from fastapi import FastAPI, Depends
from starlette.requests import Request
import uvicorn
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.auth import auth_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.platform import platform_router
from app.core import config
# from app.db.session import SessionLocal
# from app.core.auth import get_current_active_user
from app.db import Base,engine
from app.core.auth import get_current_active_user
from app.core.celery_app import celery_app
from app import tasks
from fastapi.middleware.cors import CORSMiddleware
Base.metadata.create_all(bind=engine)
app = FastAPI(
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")
# async def db_session_middleware(request: Request, call_next):
@@ -50,14 +40,15 @@ async def example_task():
# Routers
# app.include_router(
# users_router,
# prefix="/api/v1",
# tags=["users"],
# dependencies=[Depends(get_current_active_user)],
# )
# app.include_router(auth_router, prefix="/api", tags=["auth"])
app.include_router(kinton_router,prefix="/api/v1")
app.include_router(
users_router,
prefix="/api/v1",
tags=["users"],
dependencies=[Depends(get_current_active_user)],
)
app.include_router(auth_router, prefix="/api", tags=["auth"])
app.include_router(kinton_router,prefix="/api/v1",tags=["kintone"])
app.include_router(platform_router,prefix="/api",tags=["platform"])
if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", reload=True, port=8888)