add message and comment

This commit is contained in:
2024-06-29 21:33:22 +08:00
parent 148761c8a2
commit 88a322b248
28 changed files with 431 additions and 144 deletions

View File

@@ -1,61 +1,61 @@
# Generated by Django 5.0.6 on 2024-06-25 11:47
import django.db.models.deletion
import utils.models
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("announcement", "0005_alter_announcement_options_announcement_top"),
("submission", "0013_alter_submission_info_and_more"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name="Message",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("message", utils.models.RichTextField()),
("create_time", models.DateTimeField(auto_now_add=True)),
(
"recipient",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="recipient",
to=settings.AUTH_USER_MODEL,
),
),
(
"sender",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="sender",
to=settings.AUTH_USER_MODEL,
),
),
(
"submission",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="submission.submission",
),
),
],
options={
"db_table": "message",
"ordering": ("-create_time",),
},
),
]
# Generated by Django 5.0.6 on 2024-06-25 11:47
import django.db.models.deletion
import utils.models
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("announcement", "0005_alter_announcement_options_announcement_top"),
("submission", "0013_alter_submission_info_and_more"),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name="Message",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("message", utils.models.RichTextField()),
("create_time", models.DateTimeField(auto_now_add=True)),
(
"recipient",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="recipient",
to=settings.AUTH_USER_MODEL,
),
),
(
"sender",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="sender",
to=settings.AUTH_USER_MODEL,
),
),
(
"submission",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="submission.submission",
),
),
],
options={
"db_table": "message",
"ordering": ("-create_time",),
},
),
]

View File

@@ -0,0 +1,16 @@
# Generated by Django 5.0.6 on 2024-06-29 15:38
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('announcement', '0006_message'),
]
operations = [
migrations.DeleteModel(
name='Message',
),
]

View File

@@ -1,7 +1,6 @@
from django.db import models
from account.models import User
from submission.models import Submission
from utils.models import RichTextField
@@ -19,15 +18,3 @@ class Announcement(models.Model):
class Meta:
db_table = "announcement"
ordering = ("-top", "-create_time",)
class Message(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name="sender")
recipient = models.ForeignKey(User, on_delete=models.CASCADE, related_name="recipient")
submission = models.ForeignKey(Submission, on_delete=models.CASCADE)
message = RichTextField()
create_time = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = "message"
ordering = ("-create_time",)

View File

@@ -1,8 +1,7 @@
from submission.serializers import SubmissionSafeModelSerializer
from utils.api import serializers
from utils.api._serializers import UsernameSerializer
from .models import Announcement, Message
from .models import Announcement
class CreateAnnouncementSerializer(serializers.Serializer):
@@ -36,18 +35,3 @@ class EditAnnouncementSerializer(serializers.Serializer):
content = serializers.CharField(max_length=1024 * 1024 * 8)
visible = serializers.BooleanField()
top = serializers.BooleanField()
class MessageSerializer(serializers.ModelSerializer):
sender = UsernameSerializer()
submission = SubmissionSafeModelSerializer()
class Meta:
model = Message
exclude = ["recipient"]
class CreateMessageSerializer(serializers.Serializer):
recipient = serializers.IntegerField()
submission = serializers.CharField()
message = serializers.CharField()

View File

@@ -1,8 +1,7 @@
from django.urls import re_path as url
from ..views.oj import AnnouncementAPI, MessageAPI
from ..views.oj import AnnouncementAPI
urlpatterns = [
url(r"^announcement/?$", AnnouncementAPI.as_view(), name="announcement_api"),
url(r"^message/?$", MessageAPI.as_view(), name="message_api"),
]

View File

@@ -1,14 +1,8 @@
from account.decorators import super_admin_required, login_required
from account.models import User
from submission.models import Submission
from utils.api import APIView
from announcement.models import Announcement, Message
from announcement.models import Announcement
from announcement.serializers import (AnnouncementSerializer,
AnnouncementListSerializer,
CreateMessageSerializer,
MessageSerializer)
from utils.api.api import validate_serializer
AnnouncementListSerializer)
class AnnouncementAPI(APIView):
@@ -23,30 +17,3 @@ class AnnouncementAPI(APIView):
announcements = Announcement.objects.filter(visible=True)
return self.success(self.paginate_data(request, announcements, AnnouncementListSerializer))
class MessageAPI(APIView):
@login_required
def get(self, request):
messages = Message.objects.select_related("recipient","sender", "submission").filter(recipient=request.user)
return self.success(self.paginate_data(request, messages, MessageSerializer))
@validate_serializer(CreateMessageSerializer)
@super_admin_required
def post(self, request):
data = request.data
if data["recipient"] == request.user.id:
return self.error("Can not send a message to youself")
try:
recipient = User.objects.get(id=data["recipient"], is_disabled=False)
except User.DoesNotExist:
return self.error("User does not exist")
try:
submission = Submission.objects.get(id=data["submission"])
except Submission.DoesNotExist:
return self.error("Submission does not exist")
Message.objects.create(submission=submission,
message=data["message"],
sender=request.user,
recipient=recipient)
return self.success()