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