Spaces:
Build error
Build error
| from typing import Any, List | |
| from fastapi import APIRouter, Depends | |
| from sqlalchemy.orm import Session | |
| from utils import deps | |
| from cruds import crud_personal_note | |
| from schemas import PersonalNote, PersonalNoteUpdate, PersonalNoteCreate | |
| from models import User | |
| from core import settings | |
| from fastapi import HTTPException | |
| router = APIRouter() | |
| # get personal note: | |
| # student: get only theirs | |
| # teacher: get only theirs | |
| # admin: none | |
| # super admin: all | |
| def get_personal_note( | |
| db: Session = Depends(deps.get_db), | |
| skip: int = 0, | |
| limit: int = 100, | |
| current_user: User = Depends(deps.get_current_active_user), | |
| ) -> Any: | |
| if not current_user: | |
| # user not found! | |
| raise HTTPException(status_code=404, detail="Error ID: 116") | |
| if current_user.user_type >= settings.UserType.TEACHER.value: | |
| personal_note_list = [] | |
| personal_notes = current_user.personalnote | |
| for note in personal_notes: | |
| personal_note = crud_personal_note.get(db, id=note.id) | |
| personal_note_list.append(personal_note) | |
| return personal_note_list | |
| if current_user.user_type == settings.UserType.ADMIN.value: | |
| raise HTTPException( | |
| status_code=403, | |
| detail="Error ID: 117", | |
| ) # user has no authorization for retrieving personal notes, cause they personal fam! | |
| if current_user.user_type == settings.UserType.SUPERADMIN.value: | |
| personal_note = crud_personal_note.get_multi(db, skip=skip, limit=limit) | |
| return personal_note | |
| # Create new personal note | |
| # student: can create only theirs | |
| # teacher: can create only theirs | |
| # admin: no create previlege | |
| # superadmin: can create all | |
| def create_personal_note( | |
| db: Session = Depends(deps.get_db), | |
| *, | |
| obj_in: PersonalNoteCreate, | |
| current_user: User = Depends(deps.get_current_active_user), | |
| ) -> Any: | |
| if not current_user: | |
| # user not found! | |
| raise HTTPException(status_code=404, detail="Error ID: 119") | |
| if current_user.user_type >= settings.UserType.TEACHER.value: | |
| if obj_in.user_id != current_user.id: | |
| raise HTTPException( | |
| status_code=403, | |
| detail="Error ID: 118", | |
| ) # user has no authorization to create personal note for another user | |
| else: | |
| personal_note = crud_personal_note.create(db, obj_in=obj_in) | |
| return personal_note | |
| if current_user.user_type == settings.UserType.ADMIN.value: | |
| raise HTTPException( | |
| status_code=403, | |
| detail="Error ID: 120", | |
| ) # user has no authorization to create personal notes | |
| if current_user.user_type == settings.UserType.SUPERADMIN.value: | |
| personal_note = crud_personal_note.create(db, obj_in=obj_in) | |
| return personal_note | |
| # get specific personal note, | |
| # student and teacher can only get that specific note if they own it | |
| # admin can has no permission | |
| # superadmin can get it | |
| def get_specific_personal_note( | |
| db: Session = Depends(deps.get_db), | |
| *, | |
| id: int, | |
| current_user: User = Depends(deps.get_current_active_user), | |
| ) -> Any: | |
| if not current_user: | |
| # user not found! | |
| raise HTTPException(status_code=404, detail="Error ID: 121") | |
| if current_user.user_type == settings.UserType.ADMIN.value: | |
| raise HTTPException( | |
| status_code=403, | |
| detail="Error ID: 122", | |
| ) # user has no authorization to get personal notes | |
| if current_user.user_type >= settings.UserType.TEACHER.value: | |
| personal_notes = get_personal_note(db, current_user=current_user) | |
| for notes in personal_notes: | |
| if id == notes.id: | |
| personal_note = crud_personal_note.get(db, id) | |
| return personal_note | |
| raise HTTPException( | |
| status_code=403, | |
| detail="Error ID: 123", | |
| ) # user has no authorization to get other user's personal notes | |
| if current_user.user_type == settings.UserType.SUPERADMIN.value: | |
| personal_note = crud_personal_note.get(db, id) | |
| return personal_note | |
| def update_personal_note( | |
| db: Session = Depends(deps.get_db), | |
| *, | |
| id: int, | |
| obj_in: PersonalNoteUpdate, | |
| current_user: User = Depends(deps.get_current_active_user), | |
| ) -> Any: | |
| if not current_user: | |
| # user not found! | |
| raise HTTPException(status_code=404, detail="Error ID: 124") | |
| if current_user.user_type == settings.UserType.ADMIN.value: | |
| raise HTTPException( | |
| status_code=403, | |
| detail="Error ID: 125", | |
| ) # user has no authorization to edit personal notes | |
| if current_user.user_type >= settings.UserType.TEACHER.value: | |
| if obj_in.user_id == current_user.id: | |
| personal_note = crud_personal_note.get(db, id) | |
| return crud_personal_note.update(db, db_obj=personal_note, obj_in=obj_in) | |
| else: | |
| raise HTTPException( | |
| status_code=403, | |
| detail="Error ID: 126", | |
| ) # user has no authorization to get other user's personal notes | |
| if current_user.user_type == settings.UserType.SUPERADMIN.value: | |
| personal_note = crud_personal_note.get(db, id) | |
| return crud_personal_note.update(db, db_obj=personal_note, obj_in=obj_in) | |
| # XXX: For deleting all, is this needed? | |
| # @router.delete("/{}") | |
| # def deletePersonalNotes( | |
| # db: Session = Depends(deps.get_db), | |
| # *, | |
| # current_user: User = Depends(deps.get_current_active_superuser); | |
| # )->Any: | |
| # crud_personal_note.delete | |
| def deleteSpecificPersonalNote( | |
| db: Session = Depends(deps.get_db), | |
| *, | |
| id: int, | |
| current_user: User = Depends(deps.get_current_active_user), | |
| ) -> Any: | |
| if current_user.user_type == settings.UserType.SUPERADMIN.value: | |
| personalNote = crud_personal_note.remove(db, id=id) | |
| return personalNote | |
| if current_user.user_type == settings.UserType.ADMIN.value: | |
| raise HTTPException( | |
| status_code=403, | |
| detail="Error ID: 142", # user has no authorization to delete notes of other users | |
| ) | |
| personalNote = get_specific_personal_note(db, id=id, current_user=current_user) | |
| personalNote = crud_personal_note.remove(db, id=personalNote.id) | |
| return personalNote | |