54 lines
1.5 KiB
Plaintext
54 lines
1.5 KiB
Plaintext
from PDAPI import *
|
|
import TempLateAPI.GERP.API.FormAPI.FormData as FormData
|
|
from Utils.Models import GERPCompany
|
|
|
|
|
|
def fuzzy_search_companies(keyword, limit=5):
|
|
if not keyword or len(keyword.strip()) < 1:
|
|
return []
|
|
|
|
pattern = f"%{keyword.strip()}%"
|
|
companies = GERPCompany.query.filter(
|
|
db.or_(
|
|
GERPCompany.CompanyName.like(pattern),
|
|
GERPCompany.CompanyShort.like(pattern)
|
|
)
|
|
).limit(limit).all()
|
|
|
|
results = []
|
|
for company in companies:
|
|
matched_by = "name"
|
|
if keyword.strip().lower() in (company.CompanyShort or "").lower():
|
|
matched_by = "short"
|
|
results.append({
|
|
"CompanyUUID": FormData.GetTable("Company").KeyToUUIDConversion("CompanyUUID", company.CompanyUUID, str),
|
|
"CompanyName": company.CompanyName,
|
|
"CompanyShort": company.CompanyShort or "",
|
|
"CompanyStatus": company.CompanyStatus,
|
|
"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_companies(keyword, limit)
|
|
|
|
return {
|
|
"code": 0,
|
|
"data": results,
|
|
"total": len(results)
|
|
}, 200
|