-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathviews.py
More file actions
56 lines (49 loc) · 2.01 KB
/
views.py
File metadata and controls
56 lines (49 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from pythonpro.dashboard.facade import has_watched_any_topic
from pythonpro.dashboard.forms import TopicInteractionForm
from pythonpro.domain import content_statistics_domain, user_domain
from pythonpro.memberkit.models import Subscription
from pythonpro.modules.models import Topic
@login_required
def certificate(request, module_slug):
module_progresses = content_statistics_domain.calculate_modules_progresses(request.user)
ctx = {}
for module in module_progresses:
if module.slug == module_slug:
ctx['module'] = module
break
return render(request, 'dashboard/certificate.html', ctx)
@login_required
def home(request):
subcriptions = Subscription.objects.filter(
subscriber=request.user
).order_by('-updated_at').prefetch_related('subscription_types').all()
ctx = {'subscriptions': subcriptions}
return render(
request,
'dashboard/home.html',
ctx
)
@login_required
@csrf_exempt
def topic_interaction(request):
data = dict(request.POST.items())
user = request.user
data['user'] = user.id
form = TopicInteractionForm(data)
if form.is_valid():
if not has_watched_any_topic(user):
user_domain.activate_user(user, None)
topic_id = int(request.POST['topic'])
current_topic_duration = Topic.objects.values('duration').get(id=topic_id)['duration']
maybe_new_topic_duration = form.cleaned_data['topic_duration']
if current_topic_duration != maybe_new_topic_duration:
Topic.objects.filter(id=topic_id).update(duration=maybe_new_topic_duration)
form.save()
data = form.cleaned_data
if data['max_watched_time'] >= data['topic_duration']:
content_statistics_domain.tag_newly_completed_contents.delay(user.id, topic_id)
return JsonResponse({'msg': 'ok'})