50 lines
1.2 KiB
Plaintext
50 lines
1.2 KiB
Plaintext
from PDAPI import *
|
|
import TempLateAPI.GERP.API.FormAPI.FormData as FormData
|
|
from Utils.Models import GERPMenu
|
|
|
|
|
|
def fuzzy_search_menus(keyword, limit=10):
|
|
if not keyword or len(keyword.strip()) < 1:
|
|
return []
|
|
|
|
pattern = f"%{keyword.strip()}%"
|
|
menus = GERPMenu.query.filter(
|
|
db.or_(
|
|
GERPMenu.MenuName.like(pattern),
|
|
GERPMenu.MenuTitle.like(pattern)
|
|
)
|
|
).limit(limit).all()
|
|
|
|
results = []
|
|
for menu in menus:
|
|
results.append({
|
|
"MenuUUID": FormData.GetTable("Menu").KeyToUUIDConversion("MenuUUID", menu.MenuUUID, str),
|
|
"MenuName": menu.MenuName,
|
|
"MenuTitle": menu.MenuTitle,
|
|
"MenuLink": menu.MenuLink or "",
|
|
})
|
|
return results
|
|
|
|
|
|
__metadata__ = {
|
|
"route": "{DEFAULT_ROUTE}",
|
|
"methods": ["GET"],
|
|
"blueprint": "GERP",
|
|
"permission": 1.0,
|
|
"attributes": [],
|
|
"limit": "10 per second"
|
|
}
|
|
|
|
|
|
def HandleRequest(_CleanedData):
|
|
keyword = flask.request.args.get("keyword", "").strip()
|
|
limit = min(max(int(flask.request.args.get("limit", 10)), 1), 20)
|
|
|
|
results = fuzzy_search_menus(keyword, limit)
|
|
|
|
return {
|
|
"code": 0,
|
|
"data": results,
|
|
"total": len(results)
|
|
}, 200
|