Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…m2-server into Feature/#18
  • Loading branch information
yuri-0415 committed Jan 5, 2021
2 parents d127ff6 + 49c7d17 commit d9ba747
Show file tree
Hide file tree
Showing 13 changed files with 450 additions and 37 deletions.
10 changes: 10 additions & 0 deletions .github/workflows/django.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,16 @@ jobs:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

redis:
image: redis
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 6379:6379

strategy:
max-parallel: 4
matrix:
Expand Down
Binary file modified requirements.txt
Binary file not shown.
52 changes: 51 additions & 1 deletion wadium/story/admin.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,53 @@
from django.contrib import admin

# Register your models here.
from .models import Story


class TrendingListFilter(admin.SimpleListFilter):
title = 'Trending'

parameter_name = 'trending'

def lookups(self, request, model_admin):
return (
('true', 'is trending'),
('false', 'is not trending'),
)

def queryset(self, request, queryset):
if self.value() == 'true':
return queryset.filter(trending_order__gte=1,
trending_order__lte=6).order_by('trending_order')
if self.value() == 'false':
return queryset.filter(trending_order=None)


class MainListFilter(admin.SimpleListFilter):
title = 'Main'

parameter_name = 'main'

def lookups(self, request, model_admin):
return (
('true', 'is main'),
('false', 'is not main'),
)

def queryset(self, request, queryset):
if self.value() == 'true':
return queryset.filter(main_order__gte=1,
main_order__lte=6).order_by('trending_order')
if self.value() == 'false':
return queryset.filter(main_order=None)


class StoryAdmin(admin.ModelAdmin):
list_display = ('id', 'writer_id', 'writer', 'title', 'main_order', 'trending_order', 'published_at')
list_display_links = ('title',)
list_editable = ('main_order', 'trending_order')
list_filter = (MainListFilter, TrendingListFilter)
ordering = ('-published_at',)
search_fields = ['writer__username', 'writer__userprofile__name']


admin.site.register(Story, StoryAdmin)
23 changes: 23 additions & 0 deletions wadium/story/migrations/0006_auto_20210102_1558.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 3.1.3 on 2021-01-02 17:53

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('story', '0005_auto_20210101_1728'),
]

operations = [
migrations.AddField(
model_name='story',
name='main_order',
field=models.PositiveSmallIntegerField(blank=True, choices=[(1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5')], null=True),
),
migrations.AddField(
model_name='story',
name='trending_order',
field=models.PositiveSmallIntegerField(blank=True, choices=[(1, '1'), (2, '2'), (3, '3'), (4, '4'), (5, '5'), (6, '6')], null=True),
),
]
15 changes: 12 additions & 3 deletions wadium/story/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from django.contrib.auth.models import User
from django.utils import timezone


class Story(models.Model):
writer = models.ForeignKey(User, related_name='stories', on_delete=models.CASCADE)
title = models.CharField(max_length=100, db_index=True)
Expand All @@ -13,29 +12,39 @@ class Story(models.Model):
updated_at = models.DateTimeField(auto_now=True)
published = models.BooleanField(default=False)
published_at = models.DateTimeField(null=True)
MAIN_ORDER_CHOICES = list(zip(range(1, 6), map(str, range(1, 6))))
TRENDING_ORDER_CHOICES = list(zip(range(1, 7), map(str, range(1, 7))))
main_order = models.PositiveSmallIntegerField(null=True, blank=True, choices=MAIN_ORDER_CHOICES)
trending_order = models.PositiveSmallIntegerField(null=True, blank=True, choices=TRENDING_ORDER_CHOICES)
# blank set to integer fields to pass validation in admin site


class StoryComment(models.Model):
story = models.ForeignKey(Story, related_name='comments', on_delete=models.CASCADE)
writer = models.ForeignKey(User, related_name='comments', on_delete=models.CASCADE)
body = models.TextField() # is there text field
body = models.TextField() # is there text field
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)



class Tag(models.Model):
name = models.CharField(max_length=100, unique=True)


class StoryTag(models.Model):
story = models.ForeignKey(Story, related_name='story_tag', on_delete=models.CASCADE)
tag = models.ForeignKey(Tag, related_name='story_tag', on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)

class Meta:
unique_together = ['story', 'tag']


class StoryRead(models.Model):
story = models.ForeignKey(Story, related_name='story_read', on_delete=models.CASCADE)
user = models.ForeignKey(User, related_name='story_read', on_delete=models.CASCADE)
count = models.PositiveSmallIntegerField()
read_at = models.DateTimeField()

class Meta:
unique_together = ['story', 'user']
17 changes: 17 additions & 0 deletions wadium/story/paginators.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response


class StoryPagination(PageNumberPagination):
page_size = 10

def get_paginated_response(self, data):
return Response(self.get_paginated_data(data))

def get_paginated_data(self, data):
return {
'count': self.page.paginator.count,
'next': self.get_next_link(),
'previous': self.get_previous_link(),
'stories': data
}
48 changes: 45 additions & 3 deletions wadium/story/serializers.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from rest_framework import serializers
from .models import Story
from .models import Story, StoryComment
from user.serializers import UserSerializer



class StorySerializer(serializers.ModelSerializer):
writer = UserSerializer(read_only=True)
title = serializers.CharField(max_length=100, allow_blank=True)
Expand All @@ -13,7 +15,7 @@ class StorySerializer(serializers.ModelSerializer):
published = serializers.BooleanField(default=False, read_only=True)
published_at = serializers.DateTimeField(allow_null=True, default=None, read_only=True)

class Meta:
class Meta:
model = Story
fields = (
'id',
Expand All @@ -27,7 +29,7 @@ class Meta:
'published',
'published_at',
)

def validate(self, data):
return data

Expand All @@ -47,3 +49,43 @@ def update(self, instance, validated_data):

story = super(StorySerializer, self).update(instance, validated_data)
return story


class SimpleStorySerializer(serializers.ModelSerializer):
writer = UserSerializer(read_only=True)

class Meta:
model = Story
fields = (
'id',
'writer',
'title',
'subtitle',
'featured_image',
'created_at',
'published_at',
)
read_only_fields = fields

class CommentSerializer(serializers.ModelSerializer):
writer = UserSerializer(read_only=True)
story_id = serializers.IntegerField(source='story.id', read_only=True)

class Meta:
model = StoryComment
fields = (
'id',
'story_id',
'writer',
'body',
'created_at',
'updated_at',
)
read_only_fields = ('created_at', 'updated_at',)

def create(self, validated_data):
validated_data['writer'] = self.context['user']
validated_data['story'] = self.context['story']
story = super(CommentSerializer, self).create(validated_data)
return story

6 changes: 3 additions & 3 deletions wadium/story/urls.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.urls import include, path
from rest_framework.routers import SimpleRouter
from django.urls import include, path
from rest_framework.routers import SimpleRouter
from .views import StoryViewSet

app_name = 'story'
Expand All @@ -9,4 +9,4 @@

urlpatterns = [
path('', include((router.urls))),
]
]
Loading

0 comments on commit d9ba747

Please sign in to comment.