add message and comment
This commit is contained in:
0
message/__init__.py
Normal file
0
message/__init__.py
Normal file
34
message/migrations/0001_initial.py
Normal file
34
message/migrations/0001_initial.py
Normal 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',),
|
||||
},
|
||||
),
|
||||
]
|
||||
0
message/migrations/__init__.py
Normal file
0
message/migrations/__init__.py
Normal file
18
message/models.py
Normal file
18
message/models.py
Normal 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
19
message/serializers.py
Normal 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
0
message/urls/__init__.py
Normal file
7
message/urls/oj.py
Normal file
7
message/urls/oj.py
Normal 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"),
|
||||
]
|
||||
0
message/views/__init__.py
Normal file
0
message/views/__init__.py
Normal file
40
message/views/oj.py
Normal file
40
message/views/oj.py
Normal 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()
|
||||
Reference in New Issue
Block a user