from typing import Any, Dict, Optional, Union from fastapi.encoders import jsonable_encoder from sqlalchemy.orm import Session from crud.base import CRUDBase from models.authority import Authority from schemas import AuthorityCreate, AuthorityUpdate class CRUDAuthority(CRUDBase[Authority, AuthorityCreate, AuthorityUpdate]): def create_with_authority( self, db: Session, *, obj_in: AuthorityCreate, user_id: int ) -> Authority: obj_in_data = jsonable_encoder(obj_in) db_obj = self.model(**obj_in_data, user_id=user_id) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj def get_my_dashboard(self, db: Session, project_id: int, user_id: int): dashboards = db.query(Authority).filter(Authority.project_id == project_id, Authority.user_id == user_id).all() res = {'kanban': dict(), 'space': dict()} for item in dashboards: # 是空间的 dashboard = item.dashboard folder = item.folder space = item.space if space: s = res['space'].setdefault(space.id, {'dashboard': [], 'folder': {}}) s['name'] = space.name s['id'] = space.id if folder: f = s['folder'].setdefault(folder.id, {'dashboard': []}) f['name'] = folder.name f['id'] = folder.id if dashboard: f['dashboard'].append({ 'name': dashboard.name, 'id': dashboard.id }) elif dashboard: d = s['dashboard'] d.append({ 'name': dashboard.name, 'id': dashboard.id }) else: # 是看板的文件夹 folder = item.folder f = res['kanban'].setdefault(folder.id, {'dashboard': []}) f['name'] = folder.name f['id'] = folder.id if dashboard: f['dashboard'].append({ 'name': dashboard.name, 'id': dashboard.id }) return res # return { # 'kanban': list(res['kanban'].values()), # 'space': list(res['space'].values()) # } authority = CRUDAuthority(Authority)