Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 15cc48cd40 | |||
| dd814993f1 |
@@ -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)
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
28
backend/app/core/operation.py
Normal file
28
backend/app/core/operation.py
Normal 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
|
||||
@@ -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
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user