diff --git a/backend/app/api/api_v1/routers/kintone.py b/backend/app/api/api_v1/routers/kintone.py index 516fb67..b8a98bc 100644 --- a/backend/app/api/api_v1/routers/kintone.py +++ b/backend/app/api/api_v1/routers/kintone.py @@ -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): diff --git a/backend/app/api/api_v1/routers/platform.py b/backend/app/api/api_v1/routers/platform.py new file mode 100644 index 0000000..358aaab --- /dev/null +++ b/backend/app/api/api_v1/routers/platform.py @@ -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 \ No newline at end of file diff --git a/backend/app/core/config.py b/backend/app/core/config.py index 16f64dd..437a350 100644 --- a/backend/app/core/config.py +++ b/backend/app/core/config.py @@ -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"] + diff --git a/backend/app/db/__init__.py b/backend/app/db/__init__.py index e69de29..713f2be 100644 --- a/backend/app/db/__init__.py +++ b/backend/app/db/__init__.py @@ -0,0 +1,2 @@ +from app.db.session import * +from app.db.models import * \ No newline at end of file diff --git a/backend/app/db/crud.py b/backend/app/db/crud.py index f11b363..08614f4 100644 --- a/backend/app/db/crud.py +++ b/backend/app/db/crud.py @@ -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 \ No newline at end of file diff --git a/backend/app/db/models.py b/backend/app/db/models.py index 4744d4c..b841b7a 100644 --- a/backend/app/db/models.py +++ b/backend/app/db/models.py @@ -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)) \ No newline at end of file diff --git a/backend/app/db/schemas.py b/backend/app/db/schemas.py index 0dfcc45..5d106c7 100644 --- a/backend/app/db/schemas.py +++ b/backend/app/db/schemas.py @@ -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 \ No newline at end of file diff --git a/backend/app/main.py b/backend/app/main.py index aade6f0..b792b7f 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -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) diff --git a/backend/requirements.txt b/backend/requirements.txt index 863db2c..dce6dd7 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -19,4 +19,5 @@ python-multipart==0.0.5 pyjwt==1.7.1 pandas==2.0.3 openpyxl==3.1.2 -deepdiff==6.3.1 \ No newline at end of file +deepdiff==6.3.1 +pymssql==2.2.7 \ No newline at end of file