[chore] Global project refactoring

This commit is contained in:
ITQ
2024-04-01 11:20:07 +03:00
parent 0a8b3773f5
commit 5c64e1f3b9
49 changed files with 731 additions and 496 deletions
@@ -0,0 +1,31 @@
from django.contrib import admin
from notifications import models
from notifications.forms import (
CreateNotificationAdminForm,
EditNotificationAdminForm,
)
class NotificationAdmin(admin.ModelAdmin):
form = EditNotificationAdminForm
add_form = CreateNotificationAdminForm
list_display = [
models.Notification.title.field.name,
models.Notification.user.field.name,
models.Notification.content.field.name,
models.Notification.read.field.name,
models.Notification.created_at.field.name,
]
def get_readonly_fields(self, request, obj=None): # noqa: ARG002
if obj:
return (
*self.readonly_fields,
models.Notification.read.field.name,
models.Notification.created_at.field.name,
)
return self.readonly_fields
admin.site.register(models.Notification, NotificationAdmin)
@@ -0,0 +1,6 @@
from django.apps import AppConfig
class NotificationsConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "notifications"
@@ -0,0 +1,22 @@
from django import forms
from notifications.models import Notification
class EditNotificationAdminForm(forms.ModelForm):
class Meta:
model = Notification
fields = (
model.user.field.name,
model.title.field.name,
model.content.field.name,
)
class CreateNotificationAdminForm(forms.ModelForm):
class Meta:
model = Notification
fields = (
model.user.field.name,
model.title.field.name,
model.content.field.name,
)
@@ -0,0 +1,36 @@
from django.conf import settings
from django.db import models
class NotificationManager(models.Manager):
def by_user(self, user_id):
return self.get_queryset().filter(
user__id=user_id,
)
class Notification(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="notifications",
)
title = models.CharField(
max_length=150,
null=False,
)
content = models.TextField(
verbose_name="content",
null=False,
)
read = models.BooleanField(
default=False,
)
created_at = models.DateTimeField(
auto_now_add=True,
)
objects = NotificationManager()
def __str__(self):
return self.title
@@ -0,0 +1,8 @@
from notifications.models import Notification
from rest_framework import serializers
class NotificationSerializer(serializers.ModelSerializer):
class Meta:
model = Notification
fields = ["title", "content", "read", "created_at"]
@@ -0,0 +1,13 @@
from notifications.models import Notification
from notifications.serializers import NotificationSerializer
from rest_framework import generics
from rest_framework.permissions import IsAuthenticated
class UserNotificationsAPIView(generics.ListAPIView):
serializer_class = NotificationSerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
user = self.request.user
return Notification.objects.by_user(user.id)