Compare commits

...

2 Commits

Author SHA1 Message Date
15cc48cd40 test 2024-11-17 18:42:22 +09:00
dd814993f1 flow domainid->domainurl add app flowhistory 2024-11-09 15:56:13 +09:00
6 changed files with 138 additions and 15 deletions

View File

@@ -1,4 +1,5 @@
from fastapi import Query, Request,Depends, APIRouter, UploadFile,HTTPException,File
from app.core.operation import log_operation
from app.db import Base,engine
from app.db.session import get_db
from app.db.crud import *
@@ -7,6 +8,9 @@ from typing import List, Optional
from app.core.auth import get_current_active_user,get_current_user
from app.core.apiexception import APIException
import httpx
import app.core.config as config
platform_router = r = APIRouter()
@@ -17,11 +21,40 @@ platform_router = r = APIRouter()
)
async def apps_list(
request: Request,
user = Depends(get_current_user),
db=Depends(get_db),
):
try:
app = get_apps(db)
return app
platformapps = get_apps(db)
domain = get_activedomain(db, user.id)
kintoneevn = config.KINTONE_ENV(domain)
headers={config.API_V1_AUTH_KEY:kintoneevn.API_V1_AUTH_VALUE}
url = f"{kintoneevn.BASE_URL}{config.API_V1_STR}/apps.json"
offset = 0
limit = 100
all_apps = []
while True:
r = httpx.get(f"{url}?limit={limit}&offset={offset}", headers=headers)
json_data = r.json()
apps = json_data.get("apps",[])
all_apps.extend(apps)
if len(apps)<limit:
break
offset += limit
tempapps = platformapps.copy()
for papp in tempapps:
exist = False
for kapp in all_apps:
if kapp['appId'] == papp.appid:
exist = True
break
if not exist:
platformapps.remove(papp)
return platformapps
except Exception as e:
raise APIException('platform:apps',request.url._url,f"Error occurred while get apps:",e)
@@ -158,7 +191,7 @@ async def flow_list(
try:
domain = get_activedomain(db, user.id)
print("domain=>",domain)
flows = get_flows_by_app(db, domain.id, appid)
flows = get_flows_by_app(db, domain.url, appid)
return flows
except Exception as e:
raise APIException('platform:flow',request.url._url,f"Error occurred while get flow by appid:",e)
@@ -173,7 +206,7 @@ async def flow_create(
):
try:
domain = get_activedomain(db, user.id)
return create_flow(db, domain.id, flow)
return create_flow(db, domain.url, flow)
except Exception as e:
raise APIException('platform:flow',request.url._url,f"Error occurred while create flow:",e)

View File

@@ -5,7 +5,7 @@ import base64
PROJECT_NAME = "KintoneAppBuilder"
#SQLALCHEMY_DATABASE_URI = "postgres://kabAdmin:P@ssw0rd!@kintonetooldb.postgres.database.azure.com/dev"
SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://kabAdmin:P%40ssw0rd!@kintonetooldb.postgres.database.azure.com/postgres"
SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://kabAdmin:P%40ssw0rd!@kintonetooldb.postgres.database.azure.com/dev_v2"
#SQLALCHEMY_DATABASE_URI = "postgres://kabAdmin:P@ssw0rd!@kintonetooldb.postgres.database.azure.com/test"
#SQLALCHEMY_DATABASE_URI = "postgres://kabAdmin:P@ssw0rd!@ktune-prod-db.postgres.database.azure.com/postgres"
API_V1_STR = "/k/v1"

View File

@@ -0,0 +1,28 @@
from functools import wraps
from app.db.crud import create_operationlog
from app.db.schemas import OperationCreate
from fastapi.encoders import jsonable_encoder
def log_operation(operation):
def decorator(func):
@wraps(func)
async def wrapper(*args,**kwargs):
db = kwargs.get('db')
request = kwargs.get('request')
result = await func(*args,**kwargs)
detial = f"Request: {request.method} {request.url}\
Request Headers: {request.headers}\
Request Body: {request.body()}\
Result: {jsonable_encoder(result,exclude_unset=True)}"
function = func.__name__
db_operation = OperationCreate(tenantid ="t",
domainurl="d",
userid=3,
operation=operation,
function=function,
detail=detial)
create_operationlog(db,db_operation)
return result
return wrapper
return decorator

View File

@@ -79,16 +79,33 @@ def update_appversion(db: Session, appedit: schemas.AppVersion,userid:int):
if app:
app.version = app.version + 1
db_app = app
appver = app.version
else:
appver = 1
db_app = models.App(
domainurl = appedit.domainurl,
appid=appedit.appid,
appname=appedit.appname,
version = 1,
updateuser= userid
)
)
db.add(db_app)
flows = db.query(models.Flow).filter(and_(models.Flow.domainurl == appedit.domainurl,models.App.appid == appedit.appid))
for flow in flows:
db_flowhistory = models.FlowHistory(
flowid = flow.flowid,
appid = flow.appid,
eventid = flow.eventid,
domainurl = flow.domainurl,
name = flow.name,
content = flow.content,
createuser = userid,
version = appver
)
db.add(db_flowhistory)
db.commit()
db.refresh(db_app)
return db_app
@@ -148,12 +165,12 @@ def get_actions(db: Session):
return actions
def create_flow(db: Session, domainid: int, flow: schemas.FlowBase):
def create_flow(db: Session, domainurl: str, flow: schemas.FlowBase):
db_flow = models.Flow(
flowid=flow.flowid,
appid=flow.appid,
eventid=flow.eventid,
domainid=domainid,
domainurl=domainurl,
name=flow.name,
content=flow.content
)
@@ -200,8 +217,8 @@ def get_flow(db: Session, flowid: str):
raise HTTPException(status_code=404, detail="Data not found")
return flow
def get_flows_by_app(db: Session, domainid: int, appid: str):
flows = db.query(models.Flow).filter(and_(models.Flow.domainid == domainid,models.Flow.appid == appid)).all()
def get_flows_by_app(db: Session,domainurl: str, appid: str):
flows = db.query(models.Flow).filter(and_(models.Flow.domainurl == domainurl,models.Flow.appid == appid)).all()
if not flows:
raise Exception("Data not found")
return flows
@@ -347,4 +364,18 @@ def create_log(db: Session, error:schemas.ErrorCreate):
def get_kintoneformat(db: Session):
formats = db.query(models.KintoneFormat).order_by(models.KintoneFormat.id).all()
return formats
return formats
def create_operationlog(db: Session, log: schemas.OperationCreate):
db_log = models.OperationLog(
tenantid=log.tenantid,
domainurl=log.domainurl,
userid = log.userid,
operation = log.operation,
function = log.function,
detail = log.detail
)
db.add(db_log)
db.commit()
db.refresh(db_log)
return db_log

View File

@@ -62,10 +62,22 @@ class Flow(Base):
flowid = Column(String(100), index=True, nullable=False)
appid = Column(String(100), index=True, nullable=False)
eventid = Column(String(100), index=True, nullable=False)
domainid = Column(Integer,ForeignKey("domain.id"))
domainurl = Column(String(200))
name = Column(String(200))
content = Column(String)
class FlowHistory(Base):
__tablename__ = "flowhistory"
flowid = Column(String(100), index=True, nullable=False)
appid = Column(String(100), index=True, nullable=False)
eventid = Column(String(100), index=True, nullable=False)
domainurl = Column(String(200))
name = Column(String(200))
content = Column(String)
createuser = Column(Integer,ForeignKey("user.id"))
version = Column(Integer)
class Tenant(Base):
__tablename__ = "tenant"
@@ -119,6 +131,17 @@ class ErrorLog(Base):
location = Column(String(500))
content = Column(String(5000))
class OperationLog(Base):
__tablename__ = "operationlog"
tenantid = Column(String(100))
domainurl = Column(String(200))
userid = Column(Integer,ForeignKey("user.id"))
operation = Column(String(200))
function = Column(String(200))
detail = Column(String(200))
user = relationship('User')
class KintoneFormat(Base):
__tablename__ = "kintoneformat"

View File

@@ -118,7 +118,7 @@ class Flow(Base):
flowid: str
appid: str
eventid: str
domainid: int
domainurl: str
name: str = None
content: str = None
@@ -162,4 +162,12 @@ class Event(Base):
class ErrorCreate(BaseModel):
title:str
location:str
content:str
content:str
class OperationCreate(BaseModel):
tenantid:str
domainurl:str
userid:int
operation:str
function:str
detail:str