Added user actions services

This commit is contained in:
Felipe Martín 2015-09-08 22:42:50 +02:00
parent 9628ac7422
commit 0d89481d02
5 changed files with 117 additions and 11 deletions

View File

@ -26,9 +26,9 @@ def user_amiibo(request):
wishlisted = []
trading = []
if request.user.is_authenticated():
owned = UserAmiibo.objects.filter(own=True).values_list('id', flat=True)
wishlisted = UserAmiibo.objects.filter(want=True).values_list('id', flat=True)
trading = UserAmiibo.objects.filter(trade=True).values_list('id', flat=True)
owned = UserAmiibo.objects.filter(own=True).values_list('_amiibo__id', flat=True)
wishlisted = UserAmiibo.objects.filter(want=True).values_list('_amiibo__id', flat=True)
trading = UserAmiibo.objects.filter(trade=True).values_list('_amiibo__id', flat=True)
return {
'USER_AMIIBO_OWNED': owned,

View File

@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
from . import models
def user_add_owned(user, amiibo):
relation, created = models.UserAmiibo.objects.get_or_create(
_amiibo=amiibo, user=user)
relation.own = True
relation.want = False
relation.save()
def user_remove_owned(user, amiibo):
relation, created = models.UserAmiibo.objects.get_or_create(
_amiibo=amiibo, user=user)
relation.own = False
relation.save()
def user_add_wishlist(user, amiibo):
relation, created = models.UserAmiibo.objects.get_or_create(
_amiibo=amiibo, user=user)
relation.own = False
relation.want = True
relation.save()
def user_remove_wishlist(user, amiibo):
relation, created = models.UserAmiibo.objects.get_or_create(
_amiibo=amiibo, user=user)
relation.want = False
relation.save()
def user_add_trade(user, amiibo):
relation, created = models.UserAmiibo.objects.get_or_create(
_amiibo=amiibo, user=user)
relation.trade = True
relation.save()
def user_remove_trade(user, amiibo):
relation, created = models.UserAmiibo.objects.get_or_create(
_amiibo=amiibo, user=user)
relation.trade = False
relation.save()
def user_toggle_trade(user, amiibo):
relation, created = models.UserAmiibo.objects.get_or_create(
_amiibo=amiibo, user=user)
relation.trade = not relation.trade
relation.save()

View File

@ -7,7 +7,8 @@ from django.utils.translation import ugettext_lazy as _
# home
from .views import (
AmiiboView, AmiiboCardView, AmiiboFigureView,
CollectionView, CollectionCardView, CollectionFigureView
CollectionView, CollectionCardView, CollectionFigureView,
UserAmiiboView
)
urlpatterns = patterns(
@ -31,4 +32,8 @@ urlpatterns = patterns(
url(_(r'^figures/(?P<collection>[\w\d\-]+)/(?P<amiibo>[\w\d\-]+)$'),
AmiiboFigureView.as_view(),
name='figure-detail'),
url(_(r'^amiibo/(?P<amiibo>\d+)/(?P<action>[\w\+\-\=]+)$'),
UserAmiiboView.as_view(),
name='user-action'),
)

View File

@ -2,16 +2,17 @@
# django
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render, get_object_or_404
from django.views.generic.base import View
from django.utils.translation import ugettext as _
# amiibo
from amiibofindr.apps.amiibo.models import (
from .models import (
Collection, Amiibo,
AmiiboFigure, AmiiboCard
)
from . import services
class HomeModel:
def get_absolute_url(self):
@ -76,3 +77,55 @@ class AmiiboCardView(AmiiboView):
template = 'amiibo/amiibo-card.html'
type = Amiibo.CARD
model = AmiiboCard
class UserAmiiboView(View):
actions = {
'+owned': 'add_owned',
'-owned': 'remove_owned',
'+wishlist': 'add_wishlist',
'-wishlist': 'remove_wishlist',
'+trade': 'add_trade',
'-trade': 'remove_trade',
'=trade': 'toggle_trade',
}
def get(self, request, amiibo, action):
obj = get_object_or_404(Amiibo, pk=amiibo)
amiibo = obj.as_type()
if action in self.actions:
method = getattr(self, self.actions[action], None)
if method:
result = method(request, amiibo)
if result:
return result
return HttpResponseRedirect(amiibo.get_absolute_url())
def add_wishlist(self, request, amiibo):
services.user_add_wishlist(request.user, amiibo)
# TODO: Add message
def remove_wishlist(self, request, amiibo):
services.user_remove_wishlist(request.user, amiibo)
# TODO: Add message
def add_trade(self, request, amiibo):
services.user_add_trade(request.user, amiibo)
# TODO: Add message
def remove_trade(self, request, amiibo):
services.user_remove_trade(request.user, amiibo)
# TODO: Add message
def toggle_trade(self, request, amiibo):
services.user_toggle_trade(request.user, amiibo)
# TODO: Add message
def add_owned(self, request, amiibo):
services.user_add_owned(request.user, amiibo)
# TODO: Add message
def remove_owned(self, request, amiibo):
services.user_remove_owned(request.user, amiibo)
# TODO: Add message

View File

@ -39,19 +39,19 @@ AMIIBO FIGURE
</div>
<div class="eight wide column right aligned">
{% if amiibo.pk in USER_AMIIBO_OWNED %}
<a href="#" class="ui button {% if amiibo.pk in USER_AMIIBO_TRADE %}teal{% endif %}">
<a href="{% url 'amiibo:user-action' amiibo=amiibo.pk action='=trade' %}" class="ui button {% if amiibo.pk in USER_AMIIBO_TRADE %}teal{% endif %}">
<i class="{% if amiibo.pk in USER_AMIIBO_TRADE %}check{% else %}cancel{% endif %} icon"></i> Available for trade
</a>
<a href="#" class="ui button red">I do not have it</a>
<a href="{% url 'amiibo:user-action' amiibo=amiibo.pk action='-owned' %}" class="ui button red">I do not have it</a>
{% else %}
<div class="ui buttons">
{% if amiibo.pk in USER_AMIIBO_WISHLIST %}
<a class="ui button yellow">I do not want this</a>
<a href="{% url 'amiibo:user-action' amiibo=amiibo.pk action='-wishlist' %}" class="ui button yellow">I do not want this</a>
{% else %}
<a class="ui button">I want this</a>
<a href="{% url 'amiibo:user-action' amiibo=amiibo.pk action='+wishlist' %}" class="ui button">I want this</a>
{% endif %}
<div class="or" data-text="{% trans 'or' %}"></div>
<a class="ui positive button">I have this</a>
<a href="{% url 'amiibo:user-action' amiibo=amiibo.pk action='+owned' %}" class="ui positive button">I have this</a>
{% endif %}
</div>
</div>