[init] Initial commit

This commit is contained in:
ITQ
2024-03-31 21:02:53 +03:00
commit 04d4e83d1f
105 changed files with 8559 additions and 0 deletions
+32
View File
@@ -0,0 +1,32 @@
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)
+6
View File
@@ -0,0 +1,6 @@
from django.apps import AppConfig
class NotificationsConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "notifications"
+23
View File
@@ -0,0 +1,23 @@
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,56 @@
# Generated by Django 4.2.11 on 2024-03-31 15:06
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name="Notification",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("title", models.CharField(max_length=150, verbose_name="заголовок")),
("content", models.TextField(null=True, verbose_name="содержание")),
(
"read",
models.BooleanField(default=False, verbose_name="дата создания"),
),
(
"created_at",
models.DateTimeField(
auto_now_add=True, verbose_name="дата создания"
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="notifications",
to=settings.AUTH_USER_MODEL,
verbose_name="пользователь",
),
),
],
options={
"verbose_name": "уведомление",
"verbose_name_plural": "уведомления",
},
),
]
+44
View File
@@ -0,0 +1,44 @@
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",
verbose_name="пользователь",
)
title = models.CharField(
max_length=150,
verbose_name="заголовок",
null=False,
)
content = models.TextField(
verbose_name="содержание",
null=False,
)
read = models.BooleanField(
"дата создания",
default=False,
)
created_at = models.DateTimeField(
auto_now_add=True,
verbose_name="дата создания",
)
objects = NotificationManager()
class Meta:
verbose_name = "уведомление"
verbose_name_plural = "уведомления"
def __str__(self):
return self.title
@@ -0,0 +1,9 @@
from rest_framework import serializers
from notifications.models import Notification
class NotificationSerializer(serializers.ModelSerializer):
class Meta:
model = Notification
fields = ["title", "content", "read", "created_at"]
+1
View File
@@ -0,0 +1 @@
# Create your tests here.
+14
View File
@@ -0,0 +1,14 @@
from rest_framework import generics
from rest_framework.permissions import IsAuthenticated
from notifications.models import Notification
from notifications.serializers import NotificationSerializer
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)