From 886dc7eb4519aa33cfdbb8c1c58c1db9fe64a1f8 Mon Sep 17 00:00:00 2001 From: TKroenert Date: Sat, 5 Mar 2011 04:55:16 +0100 Subject: [PATCH] API fuer den store --- k4ever/api/__init__.py | 0 k4ever/api/models.py | 3 ++ k4ever/api/tests.py | 23 ++++++++++++++ k4ever/api/urls.py | 9 ++++++ k4ever/api/views.py | 72 ++++++++++++++++++++++++++++++++++++++++++ k4ever/urls.py | 1 + 6 files changed, 108 insertions(+) create mode 100644 k4ever/api/__init__.py create mode 100644 k4ever/api/models.py create mode 100644 k4ever/api/tests.py create mode 100644 k4ever/api/urls.py create mode 100644 k4ever/api/views.py diff --git a/k4ever/api/__init__.py b/k4ever/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/k4ever/api/models.py b/k4ever/api/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/k4ever/api/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/k4ever/api/tests.py b/k4ever/api/tests.py new file mode 100644 index 0000000..2247054 --- /dev/null +++ b/k4ever/api/tests.py @@ -0,0 +1,23 @@ +""" +This file demonstrates two different styles of tests (one doctest and one +unittest). These will both pass when you run "manage.py test". + +Replace these with more appropriate tests for your application. +""" + +from django.test import TestCase + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.failUnlessEqual(1 + 1, 2) + +__test__ = {"doctest": """ +Another way to test that 1 + 1 is equal to 2. + +>>> 1 + 1 == 2 +True +"""} + diff --git a/k4ever/api/urls.py b/k4ever/api/urls.py new file mode 100644 index 0000000..5434be8 --- /dev/null +++ b/k4ever/api/urls.py @@ -0,0 +1,9 @@ +from django.conf.urls.defaults import * + +#/api/ +urlpatterns = patterns('', + (r'^store/$', 'api.views.showItems'), + (r'^store/show/(\d+)/$', 'api.views.showItem'), + (r'^store/buy/(\d+)/(|with/deposit|only/deposit)/?$', 'api.views.buyItem'), + (r'^store/history/?$', 'api.views.history'), +) diff --git a/k4ever/api/views.py b/k4ever/api/views.py new file mode 100644 index 0000000..364c227 --- /dev/null +++ b/k4ever/api/views.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +from django.contrib.auth.decorators import login_required +from django.http import HttpResponse + +import datetime +from buyable.models import Buyable, Purchase, Order +from django.core import serializers + + +@login_required +def showItems(request): + # FIXME: Implement pagination here + items = Buyable.objects.all() + + #return json-container + container = serializers.serialize('json', items) + return HttpResponse(container,'application/javascript') + +@login_required +def showItem(request, itemid): + try: + item = Buyable.objects.get(id=itemid) + except Buyable.DoesNotExist: + # baww, kein item mit der id :( (oder mutax trollt rum) + return HttpResponse(status=400) + + #return json-container + container = serializers.serialize('json', item) + return HttpResponse(container,'application/javascript') + + +@login_required +def buyItem(request, itemid, buymode=""): + user = request.user + try: + item = Buyable.objects.get(id=itemid) + except Buyable.DoesNotExist: + # oh no! kein item mit der id :( mutax trollt rum) + return HttpResponseRedirect("/store/buy/") + """ tristate variable buymode: + "" only item + "with/deposit" item and deposit + "only/deposit" only deposit + """ + order = Order() + order.create(user) + order.save() # for the id! + if buymode == "" or buymode == "with/deposit": + p = Purchase.create(order, item, isDeposit=False) + p.order = order + p.save() + # TANNEK! if buymode == "with/dopsit" or buymode == "only/deposit": + if buymode == "with/deposit" or buymode == "only/deposit": + p = Purchase.create(order, item, isDeposit=True) + p.order = order + p.save() + order.updatePrice(commit=True) + order.save() + + #return json-container + #container = serializers.serialize('json', items) + #return HttpResponse(container,'application/javascript') + return HttpResponse(status=200) + #return HttpResponseRedirect("/store/bought/%s/" % (order.id)) + +@login_required +def history(request): + hist = Order.objects.filter(user=request.user.id).order_by("-dateTime") + #return json-container + container = serializers.serialize('json', hist) + return HttpResponse(container,'application/javascript') + diff --git a/k4ever/urls.py b/k4ever/urls.py index a5469ca..ab668b5 100644 --- a/k4ever/urls.py +++ b/k4ever/urls.py @@ -13,6 +13,7 @@ urlpatterns = patterns('', # (r'^admin/doc/', include('django.contrib.admindocs.urls')), # user stuff? go to main (r'^$', 'main.views.startpage'), + (r'^api/', include('api.urls')), (r'^user/', include('main.urls')), (r'^transaction/', include('transaction.urls')), (r'^store/', include('buyable.urls')),