Skip to content

Commit

Permalink
Merge 8adabe4 into e707163
Browse files Browse the repository at this point in the history
  • Loading branch information
kafuuma committed Dec 20, 2018
2 parents e707163 + 8adabe4 commit e8343df
Show file tree
Hide file tree
Showing 16 changed files with 715 additions and 32 deletions.
Binary file modified .DS_Store
Binary file not shown.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ celerybeat-schedule
# virtualenv
venv/
ENV/
ATHENA/

# Spyder project settings
.spyderproject
Expand All @@ -96,3 +97,4 @@ db.sqlite3
.vscode/
.DS_Store
*.swp
# migrations/
96 changes: 96 additions & 0 deletions authors/apps/articles/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Generated by Django 2.1.3 on 2018-12-20 13:18

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Article',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(db_index=True, max_length=255)),
('body', models.TextField(db_index=True)),
('description', models.CharField(db_index=True, max_length=255, null=True)),
('slug', models.SlugField(max_length=255, unique=True)),
('published', models.BooleanField(default=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('favourited', models.BooleanField(default=False)),
('favouriteCount', models.IntegerField(default=0)),
('likes_count', models.IntegerField(default=0)),
('read_time', models.IntegerField(default=0)),
('view_count', models.IntegerField(default=0)),
('read_count', models.IntegerField(default=0)),
],
options={
'ordering': ['-created_at', '-updated_at'],
},
),
migrations.CreateModel(
name='ArticleImg',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('image_url', models.URLField(blank=True, null=True)),
('description', models.CharField(db_index=True, max_length=255)),
('position_in_body_before', models.IntegerField(null=True)),
],
),
migrations.CreateModel(
name='ComentLikes',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('like', models.BooleanField()),
],
),
migrations.CreateModel(
name='Comments',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('comment_body', models.TextField()),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now_add=True)),
('likes_count', models.IntegerField(default=0)),
],
options={
'get_latest_by': ['created_at'],
},
),
migrations.CreateModel(
name='Favourites',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('favourite', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='Likes',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('like', models.BooleanField()),
],
),
migrations.CreateModel(
name='Readings',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('read_count', models.IntegerField(default=0)),
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='articles.Article')),
],
),
migrations.CreateModel(
name='Tag',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('tag', models.CharField(max_length=255)),
('slug', models.SlugField(unique=True)),
],
),
]
84 changes: 84 additions & 0 deletions authors/apps/articles/migrations/0002_auto_20181220_1318.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Generated by Django 2.1.3 on 2018-12-20 13:18

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

initial = True

dependencies = [
('profiles', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('articles', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='readings',
name='author',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='likes',
name='article',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='articles.Article'),
),
migrations.AddField(
model_name='likes',
name='profile',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='profiles.Profile'),
),
migrations.AddField(
model_name='favourites',
name='article',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='article_id', to='articles.Article'),
),
migrations.AddField(
model_name='favourites',
name='profile',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='profiles.Profile'),
),
migrations.AddField(
model_name='comments',
name='article',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='articles.Article'),
),
migrations.AddField(
model_name='comments',
name='author',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='comments',
name='parent',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='articles.Comments'),
),
migrations.AddField(
model_name='comentlikes',
name='comment',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='articles.Comments'),
),
migrations.AddField(
model_name='comentlikes',
name='profile',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='profiles.Profile'),
),
migrations.AddField(
model_name='articleimg',
name='article',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='articles.Article'),
),
migrations.AddField(
model_name='article',
name='author',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='profiles.Profile'),
),
migrations.AddField(
model_name='article',
name='tags',
field=models.ManyToManyField(related_name='articles', to='articles.Tag'),
),
]
29 changes: 29 additions & 0 deletions authors/apps/articles/migrations/0003_reportarticle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Generated by Django 2.1.3 on 2018-12-20 13:51

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('profiles', '0001_initial'),
('articles', '0002_auto_20181220_1318'),
]

operations = [
migrations.CreateModel(
name='ReportArticle',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('reason', models.CharField(db_index=True, max_length=255)),
('reported_at', models.DateTimeField(auto_now_add=True)),
('article_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='articles.Article')),
('article_slug', models.ForeignKey(db_column='slug', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='a_slug', to='articles.Article', to_field='slug')),
('reported_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='profiles.Profile')),
],
options={
'ordering': ['-reported_at'],
},
),
]
18 changes: 18 additions & 0 deletions authors/apps/articles/migrations/0004_auto_20181220_1406.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 2.1.3 on 2018-12-20 14:06

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('articles', '0003_reportarticle'),
]

operations = [
migrations.AlterField(
model_name='article',
name='published',
field=models.BooleanField(default=True),
),
]
24 changes: 24 additions & 0 deletions authors/apps/articles/migrations/0005_bookmarks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 2.1.3 on 2018-12-20 15:30

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('profiles', '0001_initial'),
('articles', '0004_auto_20181220_1406'),
]

operations = [
migrations.CreateModel(
name='Bookmarks',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('article_slug', models.CharField(max_length=225)),
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='articles.Article')),
('profile', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='profiles.Profile')),
],
),
]
18 changes: 17 additions & 1 deletion authors/apps/articles/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class Article(models.Model):
Published is like a draft field, helps authors to wor
and save them to draft before publishing them
"""
published = models.BooleanField(default=False)
published = models.BooleanField(default=True)

"""
An article can have many tags and the reverse is true
Expand Down Expand Up @@ -162,3 +162,19 @@ class Bookmarks(models.Model):
profile = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True)
article = models.ForeignKey(Article, on_delete=models.CASCADE)
article_slug = models.CharField(max_length=225)

class ReportArticle(models.Model):
"""This class implements a model report articles that violate
terms of agreement
"""
article_id = models.ForeignKey(Article, on_delete=models.CASCADE)
article_slug = models.ForeignKey(
Article, to_field="slug", db_column="slug", related_name='a_slug', on_delete=models.CASCADE, null=True)
reported_by = models.ForeignKey(Profile, on_delete=models.CASCADE)
reason = models.CharField(db_index=True, null=False, max_length=255)
reported_at = models.DateTimeField(auto_now_add=True)

objects = models.Manager()

class Meta:
ordering = ['-reported_at']
26 changes: 26 additions & 0 deletions authors/apps/articles/renderers.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,29 @@ def render(self, data, media_type=None, renderer_context=None):
})


class ArticleReportJSONRenderer(JSONRenderer):
charset = 'utf-8'

def render(self, data, media_type=None, renderer_context=None):

errors = data.get('errors', None)

if errors is not None:

return super(ArticleReportJSONRenderer, self).render(data)

return json.dumps({
'reported': data
})


class ArticleListReportJSONRenderer(JSONRenderer):
charset = 'utf-8'

def render(self, data, media_type=None, renderer_context=None):

return json.dumps({
'reported': data
})


21 changes: 16 additions & 5 deletions authors/apps/articles/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
Tag,
Favourites, Likes,
Readings,
Bookmarks
Bookmarks,
ReportArticle
)


Expand All @@ -30,9 +31,9 @@ class Meta:
List all of the fields that could possibly be included in a request
or response, this includes fields specified explicitly above.
"""
fields = ['title', 'body', 'description', 'tagList',
'author', 'slug', 'published', 'created_at', 'favourited','favouriteCount',
'updated_at', 'read_time', 'view_count', 'likes_count', 'read_count' ]
fields = ['id','title', 'body', 'description', 'tagList',
'author', 'slug', 'published', 'created_at', 'updated_at','favourited','favouriteCount'
,'read_time', 'view_count', 'likes_count', 'read_count' ]

def create(self, validated_data):
tags = validated_data.pop('tags', [])
Expand Down Expand Up @@ -79,7 +80,7 @@ class Meta:
List all of the fields that could possibly be included in a request
or response, this includes fields specified explicitly above.
"""
fields = ['title', 'body', 'description',
fields = ['id','title', 'body', 'description',
'author', 'slug', 'published', 'created_at', 'updated_at', ]


Expand Down Expand Up @@ -137,3 +138,13 @@ def to_representation(self, instance):
class Meta:
model = Bookmarks
fields = ['id', 'article', 'profile', 'article_slug']

class ReportArticleSerializer(serializers.ModelSerializer):
reported_by = ProfileSerializer(read_only=True)
reported_at = serializers.DateTimeField(read_only=True)
reason = serializers.CharField()

class Meta:
model = ReportArticle
fields = ['article_id', 'article_slug',
'reported_by', 'reason', 'reported_at', ]
14 changes: 14 additions & 0 deletions authors/apps/articles/test/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,20 @@ def setUp(self):
}
}

self.report_article_data = {

"report": {
"reason": "article contains porn"
}
}

self.report_article_data_empty_reason = {

"report": {
"reason": ""
}
}

self.updated_article = {

"article": {
Expand Down
Loading

0 comments on commit e8343df

Please sign in to comment.