|
import json
|
|
|
|
from snek.system.service import BaseService
|
|
|
|
|
|
class UserPropertyService(BaseService):
|
|
mapper_name = "user_property"
|
|
|
|
async def set(self, user_uid, name, value):
|
|
prop = await self.get(user_uid=user_uid, name=name)
|
|
if not prop:
|
|
prop = await self.new()
|
|
prop["user_uid"] = user_uid
|
|
prop["name"] = name
|
|
|
|
prop["value"] = json.dumps(value, default=str)
|
|
return await self.save(prop)
|
|
|
|
async def get(self, user_uid, name):
|
|
try:
|
|
return json.loads((await self.get(user_uid=user_uid, name=name)).value)
|
|
except:
|
|
return None
|
|
|
|
async def search(self, query, **kwargs):
|
|
query = query.strip().lower()
|
|
if not query:
|
|
raise []
|
|
results = []
|
|
async for result in self.find(name={"ilike": "%" + query + "%"}, **kwargs):
|
|
results.append(result)
|
|
return results
|