Skip to content

Commit

Permalink
Serialization Refactor
Browse files Browse the repository at this point in the history
- Pagination moved to http Header
- Merged Create/List group in one view
- Changed Expense.member to Expense.user
  • Loading branch information
thspinto committed Aug 3, 2015
1 parent 3775d1f commit 0a1d823
Show file tree
Hide file tree
Showing 8 changed files with 197 additions and 123 deletions.
3 changes: 2 additions & 1 deletion MosesWebservice/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,5 +130,6 @@
MEDIA_URL = NGINX_SERVER_URL + os.sep + 'media' + os.sep

REST_FRAMEWORK = {
'PAGINATE_BY': 1000000
'DEFAULT_PAGINATION_CLASS': 'MosesWebserviceApp.pagination.LinkHeaderPagination',
'PAGE_SIZE': 1000000
}
2 changes: 1 addition & 1 deletion MosesWebservice/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
url(r'^currencies/$',
views.CurrenciesCRUD.as_view(),
name='currenciesCRUD'),

)) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += patterns('', url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),)
40 changes: 40 additions & 0 deletions MosesWebserviceApp/migrations/0002_auto_20150802_2048.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('MosesWebserviceApp', '0001_initial'),
]

operations = [
migrations.CreateModel(
name='Expense',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('amount', models.FloatField(null=True)),
('relation', models.CharField(default='debtor', choices=[('debtor', 'debtor'), ('taker', 'taker')], max_length=10)),
('status', models.CharField(default='not paid', choices=[('paid', 'Paid'), ('not paid', 'Not paid')], max_length=10)),
('payed_date', models.DateTimeField(blank=True, null=True)),
('bill', models.ForeignKey(to='MosesWebserviceApp.Bill', null=True, related_name='bill')),
('member', models.ForeignKey(to='MosesWebserviceApp.User', related_name='member')),
],
options={
'ordering': ('member',),
},
),
migrations.RemoveField(
model_name='userexpense',
name='bill',
),
migrations.RemoveField(
model_name='userexpense',
name='member',
),
migrations.DeleteModel(
name='UserExpense',
),
]
33 changes: 33 additions & 0 deletions MosesWebserviceApp/migrations/0003_auto_20150802_2058.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations


class Migration(migrations.Migration):

dependencies = [
('MosesWebserviceApp', '0002_auto_20150802_2048'),
]

operations = [
migrations.AlterModelOptions(
name='expense',
options={'ordering': ('user',)},
),
migrations.RemoveField(
model_name='expense',
name='member',
),
migrations.AddField(
model_name='expense',
name='user',
field=models.ForeignKey(to='MosesWebserviceApp.User', related_name='expense_user', default=-3),
preserve_default=False,
),
migrations.AlterField(
model_name='groupuser',
name='user',
field=models.ForeignKey(related_name='group_user', to='MosesWebserviceApp.User'),
),
]
10 changes: 5 additions & 5 deletions MosesWebserviceApp/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,10 @@ def __str__(self):
class Meta:
ordering = ('amount', )

class UserExpense(models.Model):
class Expense(models.Model):
bill = models.ForeignKey(Bill, blank=False, null=True, related_name='bill')
amount = models.FloatField(blank=False, null=True)
member = models.ForeignKey(User, blank=False, related_name='member')
user = models.ForeignKey(User, blank=False, related_name='expense_user')
relation = models.CharField(choices=BILL_RELATION,
max_length=10,
blank=False,
Expand All @@ -89,14 +89,14 @@ class UserExpense(models.Model):
payed_date = models.DateTimeField(blank=True, null=True)

def __str__(self):
return "%s;%s;%s;%s" % (self.bill, self.member, self.relation, self.status)
return "%s;%s;%s;%s" % (self.bill, self.user, self.relation, self.status)

class Meta:
ordering = ('member', )
ordering = ('user', )


class GroupUser(models.Model):
user = models.ForeignKey(User, blank=False, related_name='user')
user = models.ForeignKey(User, blank=False, related_name='group_user')
group = models.ForeignKey(Group, blank=False, related_name='group')
administrator = models.BooleanField(blank=False, default=False)

Expand Down
22 changes: 22 additions & 0 deletions MosesWebserviceApp/pagination.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from rest_framework import pagination
from rest_framework.response import Response

# Pagination
class LinkHeaderPagination(pagination.PageNumberPagination):
def get_paginated_response(self, data):
next_url = self.get_next_link()
previous_url = self.get_previous_link()

if next_url is not None and previous_url is not None:
link = '<{next_url}; rel="next">, <{previous_url}; rel="prev">'
elif next_url is not None:
link = '<{next_url}; rel="next">'
elif previous_url is not None:
link = '<{previous_url}; rel="prev">'
else:
link = ''

link = link.format(next_url=next_url, previous_url=previous_url)
headers = {'Link': link} if link else {}

return Response(data, headers=headers)
Loading

0 comments on commit 0a1d823

Please sign in to comment.