54 lines
1.4 KiB
Plaintext
54 lines
1.4 KiB
Plaintext
from PDAPI import *
|
|
import TempLateAPI.GERP.API.FormAPI.FormData as FormData
|
|
from Utils.Models import GERPUser
|
|
|
|
|
|
def fuzzy_search_users(keyword, limit=5):
|
|
if not keyword or len(keyword.strip()) < 1:
|
|
return []
|
|
|
|
pattern = f"%{keyword.strip()}%"
|
|
users = GERPUser.query.filter(
|
|
db.or_(
|
|
GERPUser.UserName.like(pattern),
|
|
GERPUser.UserEmail.like(pattern)
|
|
)
|
|
).limit(limit).all()
|
|
|
|
results = []
|
|
for user in users:
|
|
matched_by = "name"
|
|
if keyword.strip().lower() in (user.UserEmail or "").lower():
|
|
matched_by = "email"
|
|
results.append({
|
|
"UserUUID": FormData.GetTable("User").KeyToUUIDConversion("UserUUID", user.UserUUID, str),
|
|
"UserName": user.UserName,
|
|
"UserEmail": user.UserEmail or "",
|
|
"UserTele": user.UserTele or "",
|
|
"MatchedBy": matched_by,
|
|
})
|
|
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", 5)), 1), 20)
|
|
|
|
results = fuzzy_search_users(keyword, limit)
|
|
|
|
return {
|
|
"code": 0,
|
|
"data": results,
|
|
"total": len(results)
|
|
}, 200
|