| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | 
                        - #
 - #  Copyright 2024 The InfiniFlow Authors. All Rights Reserved.
 - #
 - #  Licensed under the Apache License, Version 2.0 (the "License");
 - #  you may not use this file except in compliance with the License.
 - #  You may obtain a copy of the License at
 - #
 - #      http://www.apache.org/licenses/LICENSE-2.0
 - #
 - #  Unless required by applicable law or agreed to in writing, software
 - #  distributed under the License is distributed on an "AS IS" BASIS,
 - #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 - #  See the License for the specific language governing permissions and
 - #  limitations under the License.
 - #
 - from datetime import datetime
 - 
 - from peewee import fn
 - 
 - from api.db import StatusEnum
 - from api.db.db_models import DB, Search, User
 - from api.db.services.common_service import CommonService
 - from api.utils import current_timestamp, datetime_format
 - 
 - 
 - class SearchService(CommonService):
 -     model = Search
 - 
 -     @classmethod
 -     def save(cls, **kwargs):
 -         kwargs["create_time"] = current_timestamp()
 -         kwargs["create_date"] = datetime_format(datetime.now())
 -         kwargs["update_time"] = current_timestamp()
 -         kwargs["update_date"] = datetime_format(datetime.now())
 -         obj = cls.model.create(**kwargs)
 -         return obj
 - 
 -     @classmethod
 -     @DB.connection_context()
 -     def accessible4deletion(cls, search_id, user_id) -> bool:
 -         search = (
 -             cls.model.select(cls.model.id)
 -             .where(
 -                 cls.model.id == search_id,
 -                 cls.model.created_by == user_id,
 -                 cls.model.status == StatusEnum.VALID.value,
 -             )
 -             .first()
 -         )
 -         return search is not None
 - 
 -     @classmethod
 -     @DB.connection_context()
 -     def get_detail(cls, search_id):
 -         fields = [
 -             cls.model.id,
 -             cls.model.avatar,
 -             cls.model.tenant_id,
 -             cls.model.name,
 -             cls.model.description,
 -             cls.model.created_by,
 -             cls.model.search_config,
 -             cls.model.update_time,
 -             User.nickname,
 -             User.avatar.alias("tenant_avatar"),
 -         ]
 -         search = (
 -             cls.model.select(*fields)
 -             .join(User, on=((User.id == cls.model.tenant_id) & (User.status == StatusEnum.VALID.value)))
 -             .where((cls.model.id == search_id) & (cls.model.status == StatusEnum.VALID.value))
 -             .first()
 -             .to_dict()
 -         )
 -         return search
 - 
 -     @classmethod
 -     @DB.connection_context()
 -     def get_by_tenant_ids(cls, joined_tenant_ids, user_id, page_number, items_per_page, orderby, desc, keywords):
 -         fields = [
 -             cls.model.id,
 -             cls.model.avatar,
 -             cls.model.tenant_id,
 -             cls.model.name,
 -             cls.model.description,
 -             cls.model.created_by,
 -             cls.model.status,
 -             cls.model.update_time,
 -             cls.model.create_time,
 -             User.nickname,
 -             User.avatar.alias("tenant_avatar"),
 -         ]
 -         query = (
 -             cls.model.select(*fields)
 -             .join(User, on=(cls.model.tenant_id == User.id))
 -             .where(((cls.model.tenant_id.in_(joined_tenant_ids)) | (cls.model.tenant_id == user_id)) & (cls.model.status == StatusEnum.VALID.value))
 -         )
 - 
 -         if keywords:
 -             query = query.where(fn.LOWER(cls.model.name).contains(keywords.lower()))
 -         if desc:
 -             query = query.order_by(cls.model.getter_by(orderby).desc())
 -         else:
 -             query = query.order_by(cls.model.getter_by(orderby).asc())
 - 
 -         count = query.count()
 - 
 -         if page_number and items_per_page:
 -             query = query.paginate(page_number, items_per_page)
 - 
 -         return list(query.dicts()), count
 
 
  |