Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 30 additions & 4 deletions backend/backend/definitions/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,10 @@ def search_teacher_by_name(self, name: str):
return matched_teachers

#Tajdang commit
def get_user_by_name(self, name: str):
def get_users_by_name(self, name: str):
matched_users: List[User] = []
for user in self.__users:
if name in user.get_name():
if name == user.get_name():
matched_users.append(user)
return matched_users

Expand All @@ -103,9 +103,35 @@ def get_teacher_by_id(self, teacher_id: UUID4):
return "Error: Teacher not found"

def study_latest_video_from_course(self, user_name: str):
user = self.get_user_by_name(user_name)[0]
if self.get_users_by_name(user_name) == []:
return None#Name Not found
user = self.get_users_by_name(user_name)[0]
if isinstance(user, User):
return user.get_latest_video_from_user()
else:
return f"Error: User with ID {user_name} not found "


#From Taj, cannot view by url because string is too long
def view_video_by_url(self, user_name: str, url: str):
if self.get_users_by_name(user_name) == []:
return None#Name Not found
user = self.get_users_by_name(user_name)[0]
if user == None:
return "Error: Your username was not found"
if isinstance(user,User):
return user.view_video_by_url(url)

def view_video_by_name(self, user_name:str, video_name: str):
if self.get_users_by_name(user_name) == []:
return None#Name Not found
user = self.get_users_by_name(user_name)[0]
if isinstance(user,User):
return user.view_video_by_name(video_name)


def view_my_learning(self, user_name:str):
if self.get_users_by_name(user_name) == []:
return None#Name Not found
user = self.get_users_by_name(user_name)[0]
if isinstance(user,User):
return user.view_my_learning()
10 changes: 9 additions & 1 deletion backend/backend/definitions/progress.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ def __init__(self,video : CourseMaterialVideo) -> None:
super().__init__(video.get_url(),video.get_name(),video.get_description())
self.__learned = False


class Progress:
def __init__(self, course : Course) -> None:
self.__course = course
Expand All @@ -26,6 +25,13 @@ def get_latest_video(self):
def get_name(self):
return self.__name

def search_video_by_url(self, url : str):
for video in self.__progress_videos:
if isinstance(video, ProgressVideo):
if video.get_url() == url:
return video
return None

def search_video_by_name(self, name : str):
for video in self.__progress_videos:
if isinstance(video, ProgressVideo):
Expand All @@ -40,11 +46,13 @@ def initialize(self,course : Course):
for quiz in course.get_quizes():
if(isinstance(quiz, CourseMaterialQuiz)):
self.__progress_quizes.append(ProgressQuiz(quiz))

def set_latest_video(self, video : ProgressVideo):
if not isinstance(video, ProgressVideo):
return "Invalid, set_latest_video input is not ProgressVideo"
self.__latest_video = video


class ProgressQuiz(CourseMaterialQuiz):
def __init__(self,quiz : CourseMaterialQuiz) -> None:
super().__init__(quiz.get_name(), quiz.get_description())
Expand Down
32 changes: 25 additions & 7 deletions backend/backend/definitions/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,37 +5,55 @@
from backend.definitions.progress import Progress

class User:
# Constants
FETCH_SEARCH_MAX = 10

def __init__(self, name: str) -> None:
self.__id = uuid.uuid4()
self.__name = name
self.__my_progresses: List[Progress] = []
#Question from Taj to Phak: should I collect latest course in self? if not? what should I do?
self.__latest_progress : Union[Progress, None] = None
self.__latest_progress: Union[Progress, None] = None

def get_id(self):
return self.__id

def get_name(self):
return self.__name

def get_latest_video_from_user(self):
if self.__latest_progress == None:
if self.__latest_progress is None:
return None
latest_progress_video = self.__latest_progress.get_latest_video()
return latest_progress_video

def search_progress_by_name(self, name: str):
for progress in self.__my_progresses:
if(progress.get_name() == name):
if progress.get_name() == name:
return progress
return None


def set_latest_progress(self, progress : Progress):
def set_latest_progress(self, progress: Progress):
self.__latest_progress = progress

def add_progress(self, progress: Progress):
self.__my_progresses.append(progress)

def view_my_learning(self):
# Fetch at most FETCH_SEARCH_MAX progress items
return self.__my_progresses[:User.FETCH_SEARCH_MAX]

def view_video_by_url(self, url : str):
for progress in self.__my_progresses:
video = progress.search_video_by_url(url)
if video != None:
return video
def view_video_by_name(self, name: str):
for progress in self.__my_progresses:
video = progress.search_video_by_name(name)
if video != None:
return video
return None#"Video not found please check your input"

class Teacher(User):
def __init__(self, name: str) -> None:
super().__init__(name)
Expand All @@ -48,4 +66,4 @@ def add_my_teaching(self, course: Course):
if(isinstance(course, Course)):
self.__my_teachings.append(course)
return True
return False
return False
4 changes: 3 additions & 1 deletion backend/backend/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@
from fastapi.middleware.cors import CORSMiddleware

from backend.config import config
from backend.routers import example, info, authentication, create_course
from backend.routers import example, info, authentication, create_course, view_my_learning, view_video, study_latest_video

app = FastAPI()

app.include_router(example.router)
app.include_router(info.router)
app.include_router(authentication.router)
app.include_router(create_course.router)
app.include_router(view_my_learning.router)
app.include_router(view_video.router)
app.include_router(study_latest_video.router)

origins = [
Expand Down
8 changes: 8 additions & 0 deletions backend/backend/routers/learn_course.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from fastapi import APIRouter, Body
from backend.definitions.course import *
router = APIRouter()

@router.get("/learn_course/")
async def learn_course():
return "course"
course = Course("Tajdang sud lhor", "This course you will leran how to scam", 300000)
2 changes: 1 addition & 1 deletion backend/backend/routers/study_latest_video.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

@router.get("/study_latest_video/{user_name}")
async def study_latest_course(user_name : str):
user = controller.get_user_by_name(user_name)[0]
user = controller.get_users_by_name(user_name)[0]
latest_video = user.get_latest_video_from_user()
return {
"latest_video":latest_video
Expand Down
9 changes: 9 additions & 0 deletions backend/backend/routers/view_my_learning.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from fastapi import APIRouter, Body
from backend.controller_instance import controller
router = APIRouter()

@router.get("/view_my_learning/{user_name}")
async def view_my_learning(user_name : str):
my_progresses = controller.view_my_learning(user_name)
return {"my_learning": my_progresses}

9 changes: 9 additions & 0 deletions backend/backend/routers/view_video.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from fastapi import APIRouter, Body
from backend.controller_instance import controller
router = APIRouter()

@router.get("/view_video/{user_name}/{video_name}")
async def view_video(user_name : str,video_name : str):
video = controller.view_video_by_name(user_name, video_name)
return {"video": video
}