apply languages
This commit is contained in:
0
Messaging/__init__.py
Normal file
0
Messaging/__init__.py
Normal file
8
Messaging/admin.py
Normal file
8
Messaging/admin.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from django.contrib import admin
|
||||
from Messaging.models import *
|
||||
|
||||
# Register your models here.
|
||||
|
||||
admin.site.register(Message)
|
||||
admin.site.register(Chat)
|
||||
admin.site.register(Membership)
|
6
Messaging/apps.py
Normal file
6
Messaging/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class MessagingConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'Messaging'
|
50
Messaging/migrations/0001_initial.py
Normal file
50
Messaging/migrations/0001_initial.py
Normal file
@@ -0,0 +1,50 @@
|
||||
# Generated by Django 3.2.4 on 2022-02-17 19:53
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Chat',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.TextField()),
|
||||
('is_group', models.BooleanField()),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Message',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('text', models.TextField()),
|
||||
('time_sent', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('is_read', models.BooleanField(default=False)),
|
||||
('chat', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Messaging.chat')),
|
||||
('sender', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Membership',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('chat', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Messaging.chat')),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='chat',
|
||||
name='last_message',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='Messaging.message'),
|
||||
),
|
||||
]
|
19
Messaging/migrations/0002_alter_chat_last_message.py
Normal file
19
Messaging/migrations/0002_alter_chat_last_message.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# Generated by Django 3.2.4 on 2022-02-17 20:20
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('Messaging', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='chat',
|
||||
name='last_message',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='Messaging.message'),
|
||||
),
|
||||
]
|
17
Messaging/migrations/0003_remove_chat_last_message.py
Normal file
17
Messaging/migrations/0003_remove_chat_last_message.py
Normal file
@@ -0,0 +1,17 @@
|
||||
# Generated by Django 3.2.4 on 2022-02-18 08:37
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('Messaging', '0002_alter_chat_last_message'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='chat',
|
||||
name='last_message',
|
||||
),
|
||||
]
|
19
Messaging/migrations/0004_chat_last_message.py
Normal file
19
Messaging/migrations/0004_chat_last_message.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# Generated by Django 3.2.4 on 2022-02-18 08:43
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('Messaging', '0003_remove_chat_last_message'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='chat',
|
||||
name='last_message',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='Messaging.message'),
|
||||
),
|
||||
]
|
0
Messaging/migrations/__init__.py
Normal file
0
Messaging/migrations/__init__.py
Normal file
22
Messaging/models.py
Normal file
22
Messaging/models.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
|
||||
|
||||
class Chat(models.Model):
|
||||
name = models.TextField()
|
||||
is_group = models.BooleanField()
|
||||
last_message = models.ForeignKey("Message", null=True, on_delete=models.SET_NULL, related_name='+')
|
||||
|
||||
|
||||
class Membership(models.Model):
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
chat = models.ForeignKey(Chat, on_delete=models.CASCADE)
|
||||
|
||||
|
||||
class Message(models.Model):
|
||||
chat = models.ForeignKey(Chat, on_delete=models.CASCADE)
|
||||
sender = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
|
||||
text = models.TextField()
|
||||
time_sent = models.DateTimeField(default=timezone.now)
|
||||
is_read = models.BooleanField(default=False)
|
3
Messaging/tests.py
Normal file
3
Messaging/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
7
Messaging/urls.py
Normal file
7
Messaging/urls.py
Normal file
@@ -0,0 +1,7 @@
|
||||
from django.urls import path
|
||||
|
||||
from Messaging import views
|
||||
|
||||
urlpatterns = [
|
||||
path("chat_window", views.chat_window),
|
||||
]
|
26
Messaging/views.py
Normal file
26
Messaging/views.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
from Messaging.models import Chat, Message, Membership
|
||||
from SprintLib.BaseView import AccessError
|
||||
|
||||
page_size = 20
|
||||
|
||||
|
||||
def chat_window(request):
|
||||
chat = None if request.GET['chat_id'] == '-1' else Chat.objects.get(id=request.GET['chat_id'])
|
||||
if chat is not None:
|
||||
if Membership.objects.filter(user=request.user, chat=chat).first() is None:
|
||||
raise AccessError()
|
||||
page = None if request.GET['page'] == '-1' else int(request.GET['page'])
|
||||
memberships = Membership.objects.filter(user=request.user).order_by('-chat__last_message__time_sent')
|
||||
messages = []
|
||||
if chat is not None:
|
||||
offset = page_size * (page - 1)
|
||||
limit = page_size
|
||||
Message.objects.filter(chat=chat, is_read=False).update(is_read=True)
|
||||
messages = Message.objects.filter(chat=chat).order_by('-time_sent')[offset:offset + limit]
|
||||
return render(request, "chat_window.html", context={
|
||||
"memberships": memberships,
|
||||
"messages": messages,
|
||||
"current_chat": chat,
|
||||
})
|
Reference in New Issue
Block a user