Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add snippet favorites #43

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion snypy/snippets/admin.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.contrib import admin


from .models import Snippet, File, Label, Language, SnippetLabel, Extension
from .models import Snippet, File, Label, Language, SnippetLabel, Extension, SnippetFavorite


class SnippetLabelInline(admin.TabularInline):
Expand Down Expand Up @@ -91,3 +91,8 @@ class ExtensionAdmin(admin.ModelAdmin):
@admin.register(SnippetLabel)
class SnippetLabelAdmin(admin.ModelAdmin):
pass


@admin.register(SnippetFavorite)
class SnippetFavoriteAdmin(admin.ModelAdmin):
pass
28 changes: 28 additions & 0 deletions snypy/snippets/migrations/0004_snippetfavorite.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Generated by Django 3.2.8 on 2021-10-11 21:34

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


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('snippets', '0003_relations'),
]

operations = [
migrations.CreateModel(
name='SnippetFavorite',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('snippet', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='snippet_favorites', to='snippets.snippet', verbose_name='Snippet')),
('user', django_userforeignkey.models.fields.UserForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='snippet_favorites', to=settings.AUTH_USER_MODEL, verbose_name='User')),
],
options={
'abstract': False,
},
),
]
4 changes: 2 additions & 2 deletions snypy/snippets/models/managers.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
from core.models.managers import BaseManager

from .querysets import SnippetQuerySet, FileQuerySet, LabelQuerySet, LanguageQuerySet, ExtensionQuerySet, \
SnippetLabelQuerySet

SnippetLabelQuerySet, SnippetFavoriteQuerySet

SnippetManager = BaseManager.from_queryset(SnippetQuerySet)
FileManager = BaseManager.from_queryset(FileQuerySet)
LabelManager = BaseManager.from_queryset(LabelQuerySet)
LanguageManager = BaseManager.from_queryset(LanguageQuerySet)
ExtensionManager = BaseManager.from_queryset(ExtensionQuerySet)
SnippetLabelManager = BaseManager.from_queryset(SnippetLabelQuerySet)
SnippetFavoriteManager = BaseManager.from_queryset(SnippetFavoriteQuerySet)
27 changes: 26 additions & 1 deletion snypy/snippets/models/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
from django_userforeignkey.models.fields import UserForeignKey

from core.models import BaseModel, DateModelMixin
from .managers import SnippetManager, FileManager, LabelManager, LanguageManager, ExtensionManager, SnippetLabelManager
from .managers import SnippetManager, FileManager, LabelManager, LanguageManager, ExtensionManager, SnippetLabelManager, \
SnippetFavoriteManager


class Snippet(BaseModel, DateModelMixin):
Expand Down Expand Up @@ -205,3 +206,27 @@ class SnippetLabel(BaseModel):
def __str__(self):
return f'{force_text(self.snippet)} - {force_text(self.label)}'


class SnippetFavorite(BaseModel):

objects = SnippetFavoriteManager()

snippet = models.ForeignKey(
'Snippet',
related_name='snippet_favorites',
verbose_name='Snippet',
on_delete=models.CASCADE,
null=False,
blank=False,
)

user = UserForeignKey(
auto_user_add=True,
related_name="snippet_favorites",
verbose_name="User",
editable=False,
on_delete=models.CASCADE,
)

def __str__(self):
return f'{force_text(self.snippet)} - {force_text(self.user)}'
12 changes: 12 additions & 0 deletions snypy/snippets/models/querysets.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,15 @@ def editable(self):
return self.filter(
snippet__in=Snippet.objects.editable().values_list('pk', flat=True)
)


class SnippetFavoriteQuerySet(BaseQuerySet):

def viewable(self):
user = get_current_user()

return self.filter(
Q(
user=user,
)
)
14 changes: 13 additions & 1 deletion snypy/snippets/rest/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from core.rest.serializers import BaseSerializer
from teams.models import Team, get_current_user, UserTeam
from ..models import Snippet, File, Label, Language, SnippetLabel, Extension
from ..models import Snippet, File, Label, Language, SnippetLabel, Extension, SnippetFavorite


class SnippetFileSerializer(BaseSerializer):
Expand Down Expand Up @@ -185,3 +185,15 @@ class Meta:
'name',
'language',
)


class SnippetFavoriteSerializer(BaseSerializer):
snippet = PrimaryKeyRelatedField(queryset=Snippet.objects.all())

class Meta:
model = SnippetFavorite
fields = (
'pk',
'url',
'snippet',
)
10 changes: 7 additions & 3 deletions snypy/snippets/rest/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
from core.rest.viewsets import BaseModelViewSet
from teams.models import Team, get_user_model

from ..models import Snippet, File, Label, Language, SnippetLabel, Extension
from ..models import Snippet, File, Label, Language, SnippetLabel, Extension, SnippetFavorite
from .filters import FileFilter, SnippetFilter, LabelFilter, SnippetLabelFilter
from .serializers import SnippetSerializer, FileSerializer, LabelSerializer, LanguageSerializer, \
SnippetLabelSerializer, ExtensionSerializer

SnippetLabelSerializer, ExtensionSerializer, SnippetFavoriteSerializer

User = get_user_model()

Expand Down Expand Up @@ -86,3 +85,8 @@ class ExtensionViewSet(BaseModelViewSet):
queryset = Extension.objects.all()
serializer_class = ExtensionSerializer
search_fields = ('name', )


class SnippetFavoriteViewSet(BaseModelViewSet):
queryset = SnippetFavorite.objects.all()
serializer_class = SnippetFavoriteSerializer
4 changes: 2 additions & 2 deletions snypy/snippets/urls.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from core.utils.rest_router import router

from .rest.viewsets import SnippetViewSet, FileViewSet, LabelViewSet, LanguageViewSet, SnippetLabelViewSet, \
ExtensionViewSet

ExtensionViewSet, SnippetFavoriteViewSet

# Register rest views
router.register(r'snippet', SnippetViewSet)
Expand All @@ -11,3 +10,4 @@
router.register(r'language', LanguageViewSet)
router.register(r'snippetlabel', SnippetLabelViewSet)
router.register(r'extension', ExtensionViewSet)
router.register(r'snippetfavorite', SnippetFavoriteViewSet)