def post(self, request, id): try: employee = Employee.objects.get(user=request.user) lessonOwned = LessonOwned.objects.get(lesson__id=id, owner=employee) if not lessonOwned.isComplete: isComplete = False for i in lessonOwned.stepOwned.all(): if not i.isComplete: isComplete = False break else: isComplete = True lessonOwned.isComplete = isComplete lessonOwned.save() return Response({ "status": status.HTTP_200_OK, "message": "success", "data": { "id": lessonOwned.lesson.id, "is_complete": lessonOwned.isComplete } }) except FieldError as e: return FieldErrorHandler(e) except Exception as e: return ExceptionHandler(e)
def get(self, request, id): try: article = Article.objects.filter(id=id) if id == "": raise FieldError("id input not valid") if not article: raise EmptyResultSet("no result for article id = " + str(id)) else: article = Article.objects.get(id=id) return Response( { "status": status.HTTP_200_OK, "message": "success", "data": { "id": article.id, "title": article.title, "content": article.content } }, status=status.HTTP_200_OK) except FieldError as e: return FieldErrorHandler(e) except EmptyResultSet as e: return EmptyResultSetHandler(e) except Exception as e: return ExceptionHandler(e)
def get(self, request, id): try: forum = Forum.objects.filter(id=id) if not id: raise FieldError("id input not valid") if not forum: raise EmptyResultSet("no result for forum id = " + str(id)) else: forum = Forum.objects.get(id=id) answer = [] for i in forum.answer.all(): isUpvote = False if Employee.objects.get(user=request.user) in i.upvote.all(): isUpvote = True data = { "id": i.id, "username": i.owner.user.username, "answer": i.answer, "upvote": i.upvote.count(), "is_upvote": isUpvote, "created_at": i.createdAt } answer.append(data) isUpvote = False if Employee.objects.get(user=request.user) in forum.upvote.all(): isUpvote = True return Response({ "status": status.HTTP_200_OK, "message": "success", "data": { "id": forum.id, "username": forum.owner.user.username, "title": forum.title, "question": forum.question, "upvote": forum.upvote.count(), "answer": answer, "is_upvote": isUpvote, "created_at": forum.createdAt } }) except FieldError as e: return FieldErrorHandler(e) except EmptyResultSet as e: return EmptyResultSetHandler(e) except Exception as e: return ExceptionHandler(e)
def post(self, request, id): try: forum = Forum.objects.get(id=id) if not id: raise FieldError("id input not valid") if forum == []: raise EmptyResultSet("no result for forum id = ", id) if request.data['is_increase'] == "": raise FieldError("answer is not valid") employee = Employee.objects.get(user=request.user) if request.data['is_increase'] == "true": if employee in forum.upvote.all(): raise Exception("Already upvote") else: forum.upvote.add(employee) else: forum.upvote.remove(employee) isUpvote = False if Employee.objects.get(user=request.user) in forum.upvote.all(): isUpvote = True return Response({ "status": status.HTTP_200_OK, "message": "success", "data": { "id": forum.id, "username": forum.owner.user.username, "title": forum.title, "question": forum.question, "upvote": forum.upvote.count(), "is_upvote": isUpvote, "created_at": forum.createdAt } }) except FieldError as e: return FieldErrorHandler(e) except EmptyResultSet as e: return EmptyResultSetHandler(e) except Exception as e: return ExceptionHandler(e)
def post(self, request, id): try: forum = Forum.objects.get(id=id) if not id: raise FieldError("id input not valid") if forum == []: raise EmptyResultSet("no result for forum id = ", id) if request.data['answer'] == "": raise FieldError("answer is not valid") owner = Employee.objects.get(user=request.user) answer = Answer.objects.create(answer=request.data['answer'], owner=owner) forum.answer.add(answer) isUpvote = False if Employee.objects.get(user=request.user) in answer.upvote.all(): isUpvote = True return Response({ "status": status.HTTP_201_CREATED, "message": "objects created", "data": { "id": answer.id, "username": answer.owner.user.username, "upvote": answer.upvote.count(), "is_upvote": isUpvote, "created_at": answer.createdAt } }) except FieldError as e: return FieldErrorHandler(e) except EmptyResultSet as e: return EmptyResultSetHandler(e) except Exception as e: return ExceptionHandler(e)
def post(self, request, id): try: ''' answer : [ { id : question : answer : { id : answer : } }, { id : question : answer : { id : answer : } }, ] ''' employee = Employee.objects.get(user=request.user) totalPoint = 0 quizSection = QuizSection.objects.get(id=id) quizSectionOwned = QuizSectionOwned.objects.get(owner=employee, quizSection_id=id) if quizSectionOwned.attempt < 3: allPoint = 0 for i in request.data["answer"]: quizOwned = QuizOwned.objects.get(owner=employee, quiz_id=i["id"]) answer = Choice.objects.get(id=i["answer"]["id"]) quizOwned.isRight = answer.isRight quizOwned.save() if quizOwned.isRight: totalPoint += quizOwned.quiz.point allPoint += quizOwned.quiz.point quizSectionOwned.quizResult = (totalPoint / allPoint) * 100 quizSectionOwned.attempt += 1 quizSectionOwned.save() if quizSectionOwned.quizResult >= quizSection.minimumQuizScore and not quizSectionOwned.isComplete: quizSectionOwned.isPassedQuiz = True quizSectionOwned.isComplete = True quizSectionOwned.save() sectionOwned = SectionOwned.objects.filter( quizSectionOwned=quizSectionOwned)[0] courseOwned = CourseOwned.objects.filter( sectionOwned=sectionOwned)[0] courseOwned.lastLesson = None courseOwned.lastStep = None courseOwned.lastQuiz = quizSection courseOwned.totalComplete += 1 courseOwned.save() if courseOwned.totalComplete / courseOwned.course.totalStepAndQuiz == 1.0: employee.pewiraMilesBalance += courseOwned.course.reward employee.save() BalanceHistory.objects.create( owner=employee, description="Hadiah kursus " + courseOwned.course.name, balance=courseOwned.course.reward, type="Kursus") Notification.objects.create( owner=employee, notif= "Kamu mendapatkan hadiah karena menyelesaikan kursus" + courseOwned.course.name, category="Kursus") else: raise PermissionDenied("maximum attempt") return Response( { "status": status.HTTP_200_OK, "message": "success", "data": { "id": quizSection.id, "is_complete": quizSectionOwned.isComplete, "quiz_result": quizSectionOwned.quizResult, "is_passed": quizSectionOwned.isPassedQuiz, "attempt": quizSectionOwned.attempt } }, status=status.HTTP_200_OK) except PermissionDenied as e: return PermissionDeniedHandler(e) except AttributeError as e: return FieldErrorHandler(e) except Exception as e: return ExceptionHandler(e)
def post(self, request, id): try: timestamp = request.data['timestamp'] if not timestamp: raise FieldError("timestamp is not valid") employee = Employee.objects.get(user=request.user) step = Step.objects.get(id=id) stepOwned = StepOwned.objects.get(step__id=id, owner=employee) if not stepOwned.isComplete: stepOwned.isComplete = True if datetime.strptime( timestamp, '%H:%M:%S').time() >= stepOwned.step.timeMinimum else False stepOwned.timeConsume = timestamp stepOwned.save() if stepOwned.isComplete: lessonOwned = LessonOwned.objects.filter( stepOwned=stepOwned)[0] sectionOwned = SectionOwned.objects.filter( lessonOwned=lessonOwned)[0] courseOwned = CourseOwned.objects.filter( sectionOwned=sectionOwned)[0] courseOwned.lastLesson = lessonOwned.lesson courseOwned.lastStep = stepOwned.step courseOwned.lastQuiz = None courseOwned.totalComplete += 1 courseOwned.save() isLessonComplete = False for i in lessonOwned.stepOwned.all(): if i.isComplete: isLessonComplete = True else: isLessonComplete = False break lessonOwned.isComplete = isLessonComplete lessonOwned.save() isSectionComplete = False for i in sectionOwned.lessonOwned.all(): if i.isComplete: isSectionComplete = True else: isSectionComplete = False break for i in sectionOwned.quizSectionOwned.all(): if i.isComplete: isSectionComplete = True else: isSectionComplete = False break sectionOwned.isComplete = isSectionComplete sectionOwned.save() if courseOwned.totalComplete / courseOwned.course.totalStepAndQuiz == 1.0: employee.pewiraMilesBalance += courseOwned.course.reward BalanceHistory.objects.create( owner=employee, description="Hadiah kursus " + courseOwned.course.name, balance=courseOwned.course.reward, type="Kursus") Notification.objects.create( owner=employee, notif= "Kamu mendapatkan hadiah karena menyelesaikan kursus" + courseOwned.course.name, category="Kursus") return Response({ "status": status.HTTP_200_OK, "message": "success", "data": { "id": stepOwned.step.id, "time_consume": stepOwned.timeConsume, "is_complete": stepOwned.isComplete } }) except FieldError as e: return FieldErrorHandler(e) except Exception as e: return ExceptionHandler(e)
def get(self, request): try: search = request.GET.get("search") article = ArticleSection.objects.all() if not search: category = request.GET.get("category") if not category: raise FieldError("category or search input not valid") categoryObject = Topic.objects.get(topic=category) if not categoryObject: raise EmptyResultSet article = ArticleSection.objects.filter(topic=categoryObject) articleSection = [] for i in article: article = [] for j in i.section.all(): article.append({ "id": j.id, "title": j.title, "content": j.content }) articleSection.append({ "id": i.id, "title": i.title, "article": article }) return Response( { "status": status.HTTP_200_OK, "message": "success", "data": { 'section': articleSection, 'count': len(articleSection), } }, status=status.HTTP_200_OK) else: article = Article.objects.filter(title__icontains=search) articles = [] for i in article: articles.append({ 'id': i.id, 'title': i.title, 'content': i.content }) return Response( { "status": status.HTTP_200_OK, "message": "success", "data": { "articles": articles, 'count': len(article) } }, status=status.HTTP_200_OK) except FieldError as e: return FieldErrorHandler(e) except EmptyResultSet as e: return EmptyResultSetHandler(e) except Exception as e: return ExceptionHandler(e)
def post(self, request): try: if request.data['title'] == "": raise FieldError("title is not valid") if request.data['question'] == "": raise FieldError("question is not valid") if request.data['topic'] == "": raise FieldError("topic is not valid") owner = Employee.objects.get(user=request.user) forum = Forum.objects.create(title=request.data['title'], question=request.data['question'], owner=owner) for i in request.data['topic']: topic = Topic.objects.filter(topic=i) if topic.count() == 0: topic = Topic.objects.create(topic=i) else: topic = topic[0] forum.topic.add(topic) answer = [] for i in forum.answer.all(): isUpvote = False if Employee.objects.get(user=request.user) in i.upvote.all(): isUpvote = True data = { "id": i.id, "username": i.owner.user.username, "answer": i.answer, "upvote": i.upvote.count(), "is_upvote": isUpvote } answer.append(data) isUpvote = False if Employee.objects.get(user=request.user) in forum.upvote.all(): isUpvote = True return Response({ "status": status.HTTP_201_CREATED, "message": "object created", "data": { "id": forum.id, "username": forum.owner.user.username, "title": forum.title, "question": forum.question, "upvote": forum.upvote.count(), "answer": answer, "is_upvote": isUpvote, "created_at": forum.createdAt } }) except FieldError as e: return FieldErrorHandler(e) except EmptyResultSet as e: return EmptyResultSetHandler(e) except Exception as e: return ExceptionHandler(e)
def get(self, request): try: category = request.GET.get("category") sortInput = request.GET.get("sort") search = request.GET.get("search") forum = Forum.objects.all() # Validate search if not search: # Validate category and sort if not category: raise FieldError("category or search input not valid") if not sortInput: raise FieldError("sort or search input not valid") # Get topic object based on category categoryObject = Topic.objects.get(topic=category) if not categoryObject: raise EmptyResultSet # Get forum based on category and sort input if sortInput == "date": forum = Forum.objects.filter( topic__in=[categoryObject.id]).order_by("-createdAt") elif sortInput == "vote": forum = Forum.objects.filter( topic__in=[categoryObject.id]).annotate( num_vote=Count('upvote')).order_by('-num_vote') elif sortInput == "answer": forum = Forum.objects.filter( topic__in=[categoryObject.id]).annotate( num_answer=Count('answer')).order_by('-num_answer') else: raise FieldError("sort input not valid") else: # if sort exist forum = Forum.objects.filter(title__icontains=search) # Create list of forum forumList = [] for i in forum: # Check is upvote isUpvote = False if Employee.objects.get(user=request.user) in i.upvote.all(): isUpvote = True # Append forumList.append({ "id": i.id, "username": i.owner.user.username, "title": i.title, "question": i.question, "upvote": i.upvote.count(), "total_answer": i.answer.count(), "created_at": i.createdAt, "is_upvote": isUpvote }) # Response resp = { "status": status.HTTP_200_OK, "message": "success", "data": { "forum": forumList, "count": forum.count() } } return Response(resp, status=status.HTTP_200_OK) except FieldError as e: return FieldErrorHandler(e) except EmptyResultSet as e: return EmptyResultSetHandler(e) except Exception as e: return ExceptionHandler(e)