Skip to content

Commit

Permalink
A Series is an ordered list of zPages (ZcashFoundation#169)
Browse files Browse the repository at this point in the history
  • Loading branch information
skyl authored Jul 2, 2023
1 parent 7b97caf commit 2c1ebcf
Show file tree
Hide file tree
Showing 21 changed files with 765 additions and 27 deletions.
3 changes: 3 additions & 0 deletions py/dj/apps/comments/management/commands/tweet_comments.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,9 @@ def callback(message):
try:
if pcomment.author.twitter_profile.is_public:
parent_author = f" @{pcomment.author.twitter_profile.username}"
# don't double ping
if parent_author == page_author:
parent_author = ""
except TwitterProfile.DoesNotExist:
pass

Expand Down
4 changes: 0 additions & 4 deletions py/dj/apps/dyte/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,12 +184,8 @@ def post(self, request, *args, **kwargs):
)

resp = dc.add_participant(request.user, cm.meeting_id)
print("PARTICIPANT ADDED", resp.json())
print(resp.text)
logger.info(resp.text)
logger.info("PARTICIPANT ADDED", resp.json())
# return Response(resp.json())
# print(resp.text)
auth_token = resp.json()['data']['authResponse']['authToken']

return Response({
Expand Down
18 changes: 18 additions & 0 deletions py/dj/apps/events/migrations/0009_alter_event_type.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2023-06-28 02:58

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('events', '0008_alter_event_receiving_user'),
]

operations = [
migrations.AlterField(
model_name='event',
name='type',
field=models.CharField(choices=[['AISCORE_COMMENT', 'AISCORE_COMMENT'], ['MADE_COMMENT', 'MADE_COMMENT'], ['NEW_REPLY', 'NEW_REPLY'], ['PAGE_UPDATE', 'PAGE_UPDATE'], ['DONATION_RECEIVED', 'DONATION_RECEIVED'], ['DONATION_SENT', 'DONATION_SENT'], ['SUBSCRIPTION_RECEIVED', 'SUBSCRIPTION_RECEIVED'], ['SUBSCRIPTION_SENT', 'SUBSCRIPTION_SENT']], max_length=32),
),
]
22 changes: 18 additions & 4 deletions py/dj/apps/g12f/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,17 @@
from django.http import HttpRequest
from django.utils.html import format_html
from django.forms import ModelForm
from django.db import models

import taggit

from taggit.forms import TagField

from dj.apps.g12f.models.viewed import ViewedTransaction
from dj.apps.g12f.models.poll import Poll
from dj.apps.g12f.models.comment import PageComment


from dj.apps.g12f.models import (
zPage, Creator, Transaction, Address, Subscription
zPage, Creator, Transaction, Address, Subscription,
Series, PageOrder
)


Expand Down Expand Up @@ -137,3 +136,18 @@ class AddressAdmin(admin.ModelAdmin):
@admin.register(PageComment)
class PageAdmin(admin.ModelAdmin):
list_diplay = ['tx', 'zpage']


class PageOrderInline(admin.TabularInline):
model = PageOrder
extra = 1


class SeriesAdmin(admin.ModelAdmin):
list_display = ('id', 'name', 'creator', 'created_at', 'updated_at')
inlines = [
PageOrderInline,
]


admin.site.register(Series, SeriesAdmin)
47 changes: 47 additions & 0 deletions py/dj/apps/g12f/migrations/0070_auto_20230628_0258.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Generated by Django 3.2.12 on 2023-06-28 02:58

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


class Migration(migrations.Migration):

dependencies = [
('g12f', '0069_creator_strikes'),
]

operations = [
migrations.CreateModel(
name='PageOrder',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('order', models.PositiveIntegerField()),
('page', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='g12f.zpage')),
],
options={
'ordering': ['order'],
},
),
migrations.CreateModel(
name='Series',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('name', models.CharField(max_length=200)),
('slug', models.SlugField(editable=False, max_length=200)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('pages', models.ManyToManyField(through='g12f.PageOrder', to='g12f.zPage')),
],
options={
'unique_together': {('slug', 'creator')},
},
),
migrations.AddField(
model_name='pageorder',
name='series',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='g12f.series'),
),
]
25 changes: 25 additions & 0 deletions py/dj/apps/g12f/migrations/0071_auto_20230629_0724.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Generated by Django 3.2.12 on 2023-06-29 07:24

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('g12f', '0070_auto_20230628_0258'),
]

operations = [
migrations.AlterModelOptions(
name='series',
options={'verbose_name_plural': "Series'"},
),
migrations.AlterUniqueTogether(
name='series',
unique_together=set(),
),
migrations.RemoveField(
model_name='series',
name='slug',
),
]
18 changes: 18 additions & 0 deletions py/dj/apps/g12f/migrations/0072_creator_updated_at.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2023-07-02 00:58

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('g12f', '0071_auto_20230629_0724'),
]

operations = [
migrations.AddField(
model_name='creator',
name='updated_at',
field=models.DateTimeField(auto_now=True),
),
]
1 change: 1 addition & 0 deletions py/dj/apps/g12f/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@
from .comment import PageComment
from .poll import Poll
from .viewed import ViewedTransaction
from .series import Series, PageOrder
1 change: 1 addition & 0 deletions py/dj/apps/g12f/models/creator.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class Creator(AbstractUser):
"""
Shared user model between free2z and inner circle 0-0.
"""
updated_at = models.DateTimeField(auto_now=True)

# TODO: overhaul?
is_verified = models.BooleanField(
Expand Down
35 changes: 35 additions & 0 deletions py/dj/apps/g12f/models/series.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""
A Series is an ordered collection of zPages.
"""

from django.db import models
from dj.apps.g12f.models import zPage, Creator
import uuid


class Series(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=200)
pages = models.ManyToManyField(zPage, through='PageOrder')
creator = models.ForeignKey(Creator, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

class Meta:
verbose_name_plural = "Series'"

def __str__(self):
return self.name


class PageOrder(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
page = models.ForeignKey(zPage, on_delete=models.CASCADE)
series = models.ForeignKey(Series, on_delete=models.CASCADE)
order = models.PositiveIntegerField()

class Meta:
ordering = ['order']

def __str__(self):
return f"{self.page} in {self.series} at position {self.order}"
6 changes: 4 additions & 2 deletions py/dj/apps/g12f/models/zpage.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@

from django.utils import timezone
from django.db import models
from django.db.models import Sum, F, IntegerField
from django.db.models import Sum, IntegerField
from django.contrib.auth.hashers import make_password, check_password
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist

import markdown2
from taggit.managers import TaggableManager
Expand Down Expand Up @@ -67,6 +66,9 @@ def __repr__(self):


class zPage(models.Model):
"""
PK is the free2zaddr, which is the UUID to get the zPage.
"""
creator = models.ForeignKey(
'g12f.Creator', null=False, blank=False,
# if a Creator chooses to delete themselves, so go the Pages
Expand Down
68 changes: 68 additions & 0 deletions py/dj/apps/g12f/serializers/series.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
from rest_framework import serializers
from dj.apps.g12f.models import Series, PageOrder, zPage


class zPageSerializer(serializers.ModelSerializer):
class Meta:
model = zPage
fields = ['free2zaddr', 'title']


class PageOrderSerializer(serializers.ModelSerializer):
page = zPageSerializer()

class Meta:
model = PageOrder
fields = ['page', 'order']

def to_internal_value(self, data):
# This method will convert the incoming JSON (which uses the free2zaddr)
# to the Django internal Python data type (which uses the zPage instance).
page_data = data.get('page')
page = zPage.objects.get(free2zaddr=page_data.get('free2zaddr'))
return {'page': page, 'order': data.get('order')}


class SeriesEditSerializer(serializers.ModelSerializer):
"""
For editing the order of zPages in a Series and the name of the Series.
"""
pageorder_set = PageOrderSerializer(many=True)

class Meta:
model = Series
fields = [
'id', 'name', 'pageorder_set', 'creator',
'created_at', 'updated_at',
]
read_only_fields = [
'id', 'creator', 'created_at', 'updated_at',
]

def save(self, **kwargs):
# Capture the incoming request object
self.context['request'] = kwargs.pop('request', None)
return super().save(**kwargs)

def create(self, validated_data):
pages_data = validated_data.pop('pageorder_set')
series = Series.objects.create(
creator=self.context['request'].user,
**validated_data,
)
for page_data in pages_data:
PageOrder.objects.create(series=series, **page_data)
return series

def update(self, instance, validated_data):
instance.pageorder_set.all().delete()
pages_data = validated_data.pop('pageorder_set')
for page_data in pages_data:
page = page_data.get('page')
# Check if the zPage is already in another series
page.pageorder_set.all().delete()
# Add the zPage to the new series
PageOrder.objects.create(
series=instance, page=page, order=page_data.get('order')
)
return super().update(instance, validated_data)
19 changes: 19 additions & 0 deletions py/dj/apps/g12f/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter

from dj.apps.g12f.views.series import (
MySeriesViewSet, zPageClearView, ZPageSeriesViewSet
)

router = DefaultRouter()
router.register(r'series/mine', MySeriesViewSet, basename='series_mine')

urlpatterns = [
path('', include(router.urls)),
path('series/clear-zpage/', zPageClearView.as_view(),
name='series_clear_zpage'),
path('zpage/<str:free2zaddr>/series/',
ZPageSeriesViewSet.as_view({'get': 'retrieve'}),
name='zpage_series'),

]
6 changes: 1 addition & 5 deletions py/dj/apps/g12f/views/creator.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,11 +146,7 @@ def get_queryset(self):
if home_sort == "random":
return base.order_by('?')
if home_sort == "updated":
return base.annotate(
most_recent_zpage_created_at=models.Max(
'zpage__created_at')
).order_by('-most_recent_zpage_created_at')

return base.order_by('-updated_at')
return base.order_by('-total')

return super().get_queryset()
Expand Down
Loading

0 comments on commit 2c1ebcf

Please sign in to comment.