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

0
message/__init__.py Normal file
View File

View File

@@ -0,0 +1,34 @@
# Generated by Django 5.0.6 on 2024-06-29 15:38
import django.db.models.deletion
import utils.models
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('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

18
message/models.py Normal file
View File

@@ -0,0 +1,18 @@
from django.db import models
from account.models import User
from submission.models import Submission
from utils.models import RichTextField
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",)

19
message/serializers.py Normal file
View File

@@ -0,0 +1,19 @@
from submission.serializers import SubmissionSafeModelSerializer
from utils.api import UsernameSerializer, serializers
from .models import Message
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()

0
message/urls/__init__.py Normal file
View File

7
message/urls/oj.py Normal file
View File

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

View File

40
message/views/oj.py Normal file
View File

@@ -0,0 +1,40 @@
from account.decorators import super_admin_required, login_required
from account.models import User
from message.serializers import CreateMessageSerializer, MessageSerializer
from submission.models import Submission
from utils.api import APIView
from message.models import Message
from utils.api.api import validate_serializer
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()