Coverage for app / moodleTasks.py: 92%

36 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-26 21:50 +0000

1from typing import List 

2from datetime import datetime, timedelta 

3 

4from fastapi import APIRouter, Depends, HTTPException 

5from sqlalchemy.orm import Session 

6 

7from app.database import get_db 

8from app.models.moodleTask import MoodleTask 

9from app.models.task import Task 

10 

11router = APIRouter() 

12 

13 

14@router.get("") # default /moodletasks endpoint 

15def get_tasks(db: Session = Depends(get_db)): 

16 moodleTasks = ( 

17 db.query(MoodleTask).filter( 

18 MoodleTask.user_id == 2, 

19 MoodleTask.approved == None 

20 ).all() 

21 ) # Hard coded user 2, until users are implemented 

22 

23 if not moodleTasks: 

24 raise HTTPException(status_code=404, detail="No Tasks Found") 

25 

26 else: 

27 return moodleTasks 

28 

29 

30@router.post("/{task_id}/approve") 

31def approve_task(task_id: int, db: Session = Depends(get_db)): 

32 moodleTask = ( 

33 db.query(MoodleTask) 

34 .filter(MoodleTask.id == task_id, MoodleTask.user_id == 2) 

35 .first() 

36 ) 

37 

38 if not moodleTask: 

39 raise HTTPException(status_code=404, detail="Task Not Found") 

40 

41 if moodleTask.approved: 

42 raise HTTPException(status_code=400, detail="Task already approved") 

43 

44 new_task = Task( 

45 user_id=1, 

46 title=moodleTask.title, 

47 description=f"{moodleTask.course_name} | {moodleTask.activity}", 

48 length=20, 

49 importance=5, 

50 due_at=( 

51 moodleTask.due_at 

52 if moodleTask.due_at 

53 else datetime.now() + timedelta(days=1) 

54 ), 

55 reference_url=moodleTask.reference_url, 

56 ) 

57 

58 moodleTask.approved = True 

59 moodleTask.approved_at = datetime.now() 

60 

61 db.add(new_task) 

62 db.commit() 

63 db.refresh(new_task) 

64 

65 return {"detail": "Task approved", "task_id": new_task.id} 

66 

67 

68@router.post("/{task_id}/reject") 

69def reject_task(task_id: int, db: Session = Depends(get_db)): 

70 moodleTask = ( 

71 db.query(MoodleTask) 

72 .filter(MoodleTask.id == task_id, MoodleTask.user_id == 2) 

73 .first() 

74 ) 

75 

76 if not moodleTask: 

77 raise HTTPException(status_code=404, detail="Task Not Found") 

78 

79 moodleTask.approved = False 

80 db.commit() 

81 

82 return {"detail": "Task rejected"}