Spaces:
Running
Running
| from typing import List, Dict, Optional | |
| from tinydb import Query | |
| from backend.app.database.base import BaseDB | |
| from backend.app import schemas | |
| class UserDB(BaseDB): | |
| def __init__(self): | |
| super().__init__() | |
| self.table = self.db.table('users') | |
| self.query = Query() | |
| def get_users(self, user_ids: List[str]) -> List[Dict]: | |
| return self.table.search(self.query.id.one_of(user_ids)) | |
| def get_user(self, user_id: str) -> Optional[Dict]: | |
| return self.table.get(self.query.id == user_id) | |
| def create_users(self, users: List[schemas.UserBase]) -> List[Dict]: | |
| existing_ids = {user['id'] for user in self.get_users([user.id for user in users])} | |
| new_users = [user.dict() for user in users if user.id not in existing_ids] | |
| if new_users: | |
| inserted_ids = self.table.insert_multiple(new_users) | |
| return [self.table.get(doc_id=id) for id in inserted_ids] | |
| return [] | |
| def update_users(self, users: List[schemas.UserBase]) -> List[Dict]: | |
| updated = [] | |
| for user in users: | |
| if self.table.update(user.dict(), self.query.id == user.id): | |
| updated.append(self.table.get(self.query.id == user.id)) | |
| return updated | |
| def delete_users(self, user_ids: List[str]) -> List[str]: | |
| existing_users = self.get_users(user_ids) | |
| existing_ids = [user['id'] for user in existing_users] | |
| if existing_ids: | |
| self.table.remove(self.query.id.one_of(existing_ids)) | |
| return existing_ids |