Added user actions services
This commit is contained in:
parent
9628ac7422
commit
0d89481d02
|
@ -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,
|
||||
|
|
|
@ -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()
|
|
@ -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'),
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue