From 638f5ba67148f1aa6f0af10b1dc6e22dfe2db5c6 Mon Sep 17 00:00:00 2001 From: Laurent Date: Thu, 7 Dec 2023 21:29:36 +0100 Subject: [PATCH] First commit : model and services --- .DS_Store | Bin 0 -> 6148 bytes chat/.DS_Store | Bin 0 -> 6148 bytes chat/__init__.py | 0 chat/admin.py | 8 ++ chat/apps.py | 6 ++ chat/migrations/0001_initial.py | 42 ++++++++ chat/migrations/0002_message_parent.py | 19 ++++ chat/migrations/__init__.py | 0 chat/models.py | 25 +++++ chat/serializers.py | 18 ++++ chat/templates/.DS_Store | Bin 0 -> 6148 bytes chat/templates/chat/index.html | 11 ++ chat/templates/chat/room.html | 16 +++ chat/tests.py | 3 + chat/urls.py | 8 ++ chat/views.py | 38 +++++++ enchant_server/.DS_Store | Bin 0 -> 6148 bytes enchant_server/__init__.py | 0 enchant_server/asgi.py | 16 +++ enchant_server/settings.py | 134 +++++++++++++++++++++++++ enchant_server/urls.py | 32 ++++++ enchant_server/wsgi.py | 16 +++ manage.py | 22 ++++ 23 files changed, 414 insertions(+) create mode 100644 .DS_Store create mode 100644 chat/.DS_Store create mode 100644 chat/__init__.py create mode 100644 chat/admin.py create mode 100644 chat/apps.py create mode 100644 chat/migrations/0001_initial.py create mode 100644 chat/migrations/0002_message_parent.py create mode 100644 chat/migrations/__init__.py create mode 100644 chat/models.py create mode 100644 chat/serializers.py create mode 100644 chat/templates/.DS_Store create mode 100644 chat/templates/chat/index.html create mode 100644 chat/templates/chat/room.html create mode 100644 chat/tests.py create mode 100644 chat/urls.py create mode 100644 chat/views.py create mode 100644 enchant_server/.DS_Store create mode 100644 enchant_server/__init__.py create mode 100644 enchant_server/asgi.py create mode 100644 enchant_server/settings.py create mode 100644 enchant_server/urls.py create mode 100644 enchant_server/wsgi.py create mode 100755 manage.py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6ed2ff0d5192491dbd06a08215748d07cd5b1643 GIT binary patch literal 6148 zcmeH~O-chn5QSgqECNEv(q&)48w??yAP4X#5nO}>OmsavukEWJVd5ZUSn&h)HDEFzHje<1%Mgd6`wv#&DY&0c2yBq^F6l5&F=Yd*l}{Hd2NRcUh#y}xPFco z>}z3<6CQA6A|L|i1g>+s@cw^K|Kh6Ww+l6f_84h*_zHXoWdYj!B=x8wZc>7q4|BNd=;as-E5`>< bio9ZT?AOFO(CLUf9mt;n(}hL_{#$`7BYqXB literal 0 HcmV?d00001 diff --git a/chat/__init__.py b/chat/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/chat/admin.py b/chat/admin.py new file mode 100644 index 0000000..230e319 --- /dev/null +++ b/chat/admin.py @@ -0,0 +1,8 @@ +from django.contrib import admin + +# Register your models here. +from .models import App, Room, Message + +admin.site.register(App) +admin.site.register(Room) +admin.site.register(Message) diff --git a/chat/apps.py b/chat/apps.py new file mode 100644 index 0000000..2fe899a --- /dev/null +++ b/chat/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ChatConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'chat' diff --git a/chat/migrations/0001_initial.py b/chat/migrations/0001_initial.py new file mode 100644 index 0000000..ef31699 --- /dev/null +++ b/chat/migrations/0001_initial.py @@ -0,0 +1,42 @@ +# Generated by Django 4.1.1 on 2023-12-07 14:40 + +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='App', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='Room', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('app', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='chat.app')), + ], + ), + migrations.CreateModel( + name='Message', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('text', models.CharField(max_length=500)), + ('date', models.DateTimeField(verbose_name='date published')), + ('room', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='chat.room')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/chat/migrations/0002_message_parent.py b/chat/migrations/0002_message_parent.py new file mode 100644 index 0000000..412afe6 --- /dev/null +++ b/chat/migrations/0002_message_parent.py @@ -0,0 +1,19 @@ +# Generated by Django 4.1.1 on 2023-12-07 20:28 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('chat', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='message', + name='parent', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='chat.message'), + ), + ] diff --git a/chat/migrations/__init__.py b/chat/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/chat/models.py b/chat/models.py new file mode 100644 index 0000000..58f3a9f --- /dev/null +++ b/chat/models.py @@ -0,0 +1,25 @@ +from django.db import models +from django.contrib.auth.models import User + +class App(models.Model): + name = models.CharField(max_length=100) + + def __str__(self): + return self.name + +class Room(models.Model): + name = models.CharField(max_length=100) + app = models.ForeignKey(App, on_delete=models.CASCADE) + + def __str__(self): + return self.name + +class Message(models.Model): + text = models.CharField(max_length=500) + date = models.DateTimeField("date published") + user = models.ForeignKey(User, on_delete=models.CASCADE) + room = models.ForeignKey(Room, on_delete=models.CASCADE) + parent = models.ForeignKey('self', null=True, on_delete=models.SET_NULL) + + def __str__(self): + return self.text diff --git a/chat/serializers.py b/chat/serializers.py new file mode 100644 index 0000000..3d428c9 --- /dev/null +++ b/chat/serializers.py @@ -0,0 +1,18 @@ +from django.contrib.auth.models import User +from rest_framework import serializers +from .models import App, Room, Message + +class AppSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = App + fields = ['id', 'name'] + +class RoomSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Room + fields = ['id', 'name'] + +class MessageSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Message + fields = ['id', 'text', 'date'] diff --git a/chat/templates/.DS_Store b/chat/templates/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f9d47a10fa6fda5d99d986fe3dce9223cd15408d GIT binary patch literal 6148 zcmeH~J&wXa427SU6iC~oq?~3Czzs$SPOul?ub@Dp*rlJN^Xzf6VQUnjXUYD?o>)m< zk%er^j=Knh3!DIf); zz>E~gV|@8Jqi52iNC7D@4+Z@DQ0UH@Y@PAxV2BZb99RzHI%Wy7c!8|R*2xOZa(b|A zwHQOZ9_?hw>uR!f_I6kfAC`AEpJHg%+hK(X&1yhF3P^#80*juHe*W+1|IPoC7Nt@^ z3cQ&DHf+DQ8@^PYtxvD#^?g=--RNXo&hY0afQcW)D|#6Bi!aEUY@Mvo^dk^5C`f^q GD)0cy>Jp^@ literal 0 HcmV?d00001 diff --git a/chat/templates/chat/index.html b/chat/templates/chat/index.html new file mode 100644 index 0000000..4b08158 --- /dev/null +++ b/chat/templates/chat/index.html @@ -0,0 +1,11 @@ +

Rooms

+ +{% if rooms %} + +{% else %} +

No rooms are available.

+{% endif %} diff --git a/chat/templates/chat/room.html b/chat/templates/chat/room.html new file mode 100644 index 0000000..2c56124 --- /dev/null +++ b/chat/templates/chat/room.html @@ -0,0 +1,16 @@ + +{% if room %} + +

{{ room.name }}

+ + {% if messages %} +
    + {% for message in messages.all %} +
  • {{ message.text }}
  • + {% endfor %} +
+ {% else %} +

No message inside

+ {% endif %} + +{% endif %} diff --git a/chat/tests.py b/chat/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/chat/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/chat/urls.py b/chat/urls.py new file mode 100644 index 0000000..f261078 --- /dev/null +++ b/chat/urls.py @@ -0,0 +1,8 @@ +from django.urls import path + +from . import views + +urlpatterns = [ + path("", views.index, name="index"), + path("room//", views.room, name="room"), +] diff --git a/chat/views.py b/chat/views.py new file mode 100644 index 0000000..cabfd52 --- /dev/null +++ b/chat/views.py @@ -0,0 +1,38 @@ + +from django.shortcuts import render +from django.http import HttpResponse +from .models import App, Room, Message +from django.shortcuts import get_object_or_404, render +from django.template import loader +from rest_framework import viewsets +from rest_framework import permissions +from .serializers import AppSerializer, RoomSerializer, MessageSerializer + +# Create your views here. +def index(request): + rooms = Room.objects.all() + template = loader.get_template("chat/index.html") + context = { + "rooms": rooms, + } + return render(request, "chat/index.html", context) + +def room(request, room_id): + room = get_object_or_404(Room, pk=room_id) + context = { + "room": room, + "messages": room.message_set, + } + return render(request, "chat/room.html", context) + +class AppViewSet(viewsets.ModelViewSet): + queryset = App.objects.all() + serializer_class = AppSerializer + +class RoomViewSet(viewsets.ModelViewSet): + queryset = Room.objects.all() + serializer_class = RoomSerializer + +class MessageViewSet(viewsets.ModelViewSet): + queryset = Message.objects.all() + serializer_class = MessageSerializer diff --git a/enchant_server/.DS_Store b/enchant_server/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..316146325a09ae7a97af7b17edcb825954c1b568 GIT binary patch literal 6148 zcmeHKJ5EC}5S)b+k&sYIN?(B+SW!3u2jG(+QACN95b9TPE{?|Rr+Io%MKsZ@v>toC zW6M*#eG9;rr_DXE05GRJ;>(Ar`M&$at}0?gI?s5)4j*{J5pR?1-viFQW%dqhypQ+? zd@_F69M{{|{eJ6-GASShq<|EV0#e{?1*)XZZ_YkR2S@=aaA^wo_o2}pd*P56pAHVu z0uW~mhjAXg1hIL5*b9e5Mrf8)Vp6SI3`;uWt@3)|keGB>H6K9C%t zQ3^#k*TzLI|p#RbTk4aid0V!}%3fOG*xLWc_Ra+;I^IF^J&veiErn_+-6b@02 kiBXQZ@N#??NtxGt&i!6EBnF-FpcC~o;JV19z<(?70|(L