diff --git a/FriendsWave/FriendsWave/settings.py b/FriendsWave/FriendsWave/settings.py index 87f94b4..e7e433b 100755 --- a/FriendsWave/FriendsWave/settings.py +++ b/FriendsWave/FriendsWave/settings.py @@ -9,9 +9,10 @@ For the full list of settings and their values, see https://docs.djangoproject.com/en/3.2/ref/settings/ """ +import os from pathlib import Path -from decouple import config +from decouple import config, Csv # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -21,12 +22,12 @@ # See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'django-insecure-^o$t%co88y9u5o+me!c!x^*bzrli3oxz)@k61ea)3au0*d!4b(' +SECRET_KEY = config('SECRET_KEY') # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +DEBUG = config('DEBUG', cast=bool) -ALLOWED_HOSTS = [] +ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=Csv()) # Application definition @@ -38,7 +39,11 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - 'social.apps.StoreSocial', + 'social.apps', + 'groupModule.apps', + 'postModule.apps', + 'commentModule.apps', + 'topicModule.apps', 'rest_framework', ] @@ -76,8 +81,7 @@ # Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases -SECRET_KEY = config('SECRET_KEY') -DEBUG = config('DEBUG', cast=bool) + DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', @@ -136,4 +140,5 @@ REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10 -} \ No newline at end of file +} + diff --git a/FriendsWave/FriendsWave/urls.py b/FriendsWave/FriendsWave/urls.py index bfad36f..d4b7b4d 100755 --- a/FriendsWave/FriendsWave/urls.py +++ b/FriendsWave/FriendsWave/urls.py @@ -1,21 +1,8 @@ -"""FriendsWave URL Configuration - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/3.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" from django.contrib import admin from django.urls import path +from django.conf import settings +from django.conf.urls.static import static urlpatterns = [ path('admin/', admin.site.urls), -] +] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) diff --git a/FriendsWave/commentModule/__init__.py b/FriendsWave/commentModule/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FriendsWave/commentModule/admin.py b/FriendsWave/commentModule/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/FriendsWave/commentModule/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/FriendsWave/commentModule/apps.py b/FriendsWave/commentModule/apps.py new file mode 100644 index 0000000..a00b441 --- /dev/null +++ b/FriendsWave/commentModule/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CommentmoduleConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'commentModule' diff --git a/FriendsWave/commentModule/migrations/__init__.py b/FriendsWave/commentModule/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FriendsWave/commentModule/models.py b/FriendsWave/commentModule/models.py new file mode 100644 index 0000000..d321279 --- /dev/null +++ b/FriendsWave/commentModule/models.py @@ -0,0 +1,34 @@ +from django.db import models +from social.models import Profil +from postModule.models import Post +from django.utils import timezone +# Create your models here. + + +""" +model Content +""" +class Content(models.Model): + Profil = models.ForeignKey(Profil, on_delete=models.CASCADE, related_name="creator") + shares = models.ManyToManyField(Profil, through='Share') + likes = models.ManyToManyField(Profil, through='Like') + content = models.TextField(max_length=1000) + media = models.FileField(upload_to='uploads/%Y/%m/%d/', null=True, blank=True) + created_at = models.DateTimeField(default=timezone.now, editable=False) + update_at = models.DateTimeField(auto_now=True) + + class Meta: + ordering = ['created_at'] + abstract = True + verbose_name = 'content' + verbose_plural_name = "contents" + + def __str__(self): + return self.content + + +""" +model Comment +""" +class Comment(Content): + post = models.ForeignKey(Post, on_delete=models.CASCADE) \ No newline at end of file diff --git a/FriendsWave/commentModule/tests.py b/FriendsWave/commentModule/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/FriendsWave/commentModule/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/FriendsWave/commentModule/views.py b/FriendsWave/commentModule/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/FriendsWave/commentModule/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/FriendsWave/groupModule/__init__.py b/FriendsWave/groupModule/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FriendsWave/groupModule/admin.py b/FriendsWave/groupModule/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/FriendsWave/groupModule/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/FriendsWave/groupModule/apps.py b/FriendsWave/groupModule/apps.py new file mode 100644 index 0000000..249e17e --- /dev/null +++ b/FriendsWave/groupModule/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GroupmoduleConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'groupModule' diff --git a/FriendsWave/groupModule/migrations/__init__.py b/FriendsWave/groupModule/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FriendsWave/groupModule/models.py b/FriendsWave/groupModule/models.py new file mode 100644 index 0000000..56a3513 --- /dev/null +++ b/FriendsWave/groupModule/models.py @@ -0,0 +1,44 @@ +from django.db import models +from social.models import Profil +from django.utils import timezone + +# Create your models here. + + +""" +model Group +""" +class Group(models.Model): + VISIBILITY = ( + ('PUG', 'Public Group'), + ('PRG', 'Private Group') + ) + + members = models.ManyToManyField(Profil, through='Member') + name = models.CharField(max_length=100) + description = models.TextField(max_length=100) + visibilty = models.CharField(max_length=100, choices=VISIBILITY) + link = models.CharField(max_length=100) + created_at = models.DateTimeField(default=timezone.now, editable=False) + update_at = models.DateTimeField(auto_now=True) + + class Meta: + ordering = ['created_at', 'name'] + verbose_name = "Group" + verbose_plural_name = "Groups" + + def __str__(self): + return self.name + + + +""" +model Member +""" +class Member(models.Model): + group = models.ForeignKey(Group, on_delete=models.CASCADE) + profil = models.ForeignKey(Profil, on_delete=models.CASCADE) + is_admin = models.BooleanField(default=False) + is_owner = models.BooleanField(default=False) + date_joined = models.DateTimeField(default=timezone.now, editable=False) + end= models.DateTimeField(null=True) \ No newline at end of file diff --git a/FriendsWave/groupModule/tests.py b/FriendsWave/groupModule/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/FriendsWave/groupModule/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/FriendsWave/groupModule/views.py b/FriendsWave/groupModule/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/FriendsWave/groupModule/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/FriendsWave/postModule/__init__.py b/FriendsWave/postModule/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FriendsWave/postModule/admin.py b/FriendsWave/postModule/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/FriendsWave/postModule/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/FriendsWave/postModule/apps.py b/FriendsWave/postModule/apps.py new file mode 100644 index 0000000..d742b29 --- /dev/null +++ b/FriendsWave/postModule/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class PostmoduleConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'postModule' diff --git a/FriendsWave/postModule/migrations/__init__.py b/FriendsWave/postModule/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FriendsWave/postModule/models.py b/FriendsWave/postModule/models.py new file mode 100644 index 0000000..a21b38d --- /dev/null +++ b/FriendsWave/postModule/models.py @@ -0,0 +1,44 @@ +from django.db import models +from social.models import Profil, Topic +from django.utils import timezone + +# Create your models here. + +""" +model Content +""" +class Content(models.Model): + Profil = models.ForeignKey(Profil, on_delete=models.CASCADE, related_name="creator") + shares = models.ManyToManyField(Profil, through='Share') + likes = models.ManyToManyField(Profil, through='Like') + content = models.TextField(max_length=1000) + media = models.FileField(upload_to='uploads/%Y/%m/%d/', null=True, blank=True) + created_at = models.DateTimeField(default=timezone.now, editable=False) + update_at = models.DateTimeField(auto_now=True) + + class Meta: + ordering = ['created_at'] + abstract = True + verbose_name = 'content' + verbose_plural_name = "contents" + + def __str__(self): + return self.content + + +""" +model Post +""" +class Post(Content): + topic = models.ForeignKey(Topic, on_delete=models.CASCADE) + + + +""" +model Like +""" +class Like(models.Model): + profil = models.ForeignKey(Profil, on_delete=models.CASCADE) + content = models.ForeignKey(Content, on_delete=models.CASCADE) + created_at = models.DateTimeField(default=timezone.now, editable=False) + update_at = models.DateTimeField(auto_now=True) \ No newline at end of file diff --git a/FriendsWave/postModule/tests.py b/FriendsWave/postModule/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/FriendsWave/postModule/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/FriendsWave/postModule/views.py b/FriendsWave/postModule/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/FriendsWave/postModule/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/FriendsWave/requirements.txt b/FriendsWave/requirements.txt new file mode 100644 index 0000000..9c7b4e6 --- /dev/null +++ b/FriendsWave/requirements.txt @@ -0,0 +1,41 @@ +asn1crypto==0.24.0 +backports.entry-points-selectable==1.1.1 +configparser==4.0.2 +contextlib2==0.6.0.post1 +cryptography==2.1.4 +distlib==0.3.3 +django-environ==0.4.5 +duplicity==0.7.17 +enum34==1.1.6 +fasteners==0.12.0 +filelock==3.2.1 +idna==2.6 +importlib-metadata==2.1.2 +importlib-resources==3.3.1 +ipaddress==1.0.17 +keyring==10.6.0d +keyrings.alt==3.0 +lockfile==0.12.2 +Markdown==3.1.1 +monotonic==1.0 +mysql-connector-python==2.1.6 +mysql-utilities==1.6.4 +paramiko==2.0.0 +pathlib2==2.3.6 +pexpect==4.2.1 +platformdirs==2.0.2 +psycopg2-binary==2.8.6 +pyasn1==0.4.2 +pycrypto==2.6.1 +pygobject==3.26.1 +pyodbc==4.0.17 +pysqlite==2.7.0 +python-decouple==3.5 +pyxdg==0.25 +scandir==1.10.0 +SecretStorage==2.3.1 +singledispatch==3.7.0 +six==1.16.0 +typing==3.10.0.0 +virtualenv==20.10.0 +zipp==1.2.0 diff --git a/FriendsWave/social/models.py b/FriendsWave/social/models.py index 71a8362..81bef16 100755 --- a/FriendsWave/social/models.py +++ b/FriendsWave/social/models.py @@ -1,3 +1,76 @@ -from django.db import models +from django.db import models, utils +from django.contrib.auth.models import AbstractUser +from django.utils import timezone +from topicModule.models import Topic -# Create your models here. + +""" + model user extend default user django +""" +class User(AbstractUser): + GENRE = ( + ('M', 'Masculin'), + ('F', 'Feminin') + ) + + first_name = models.CharField(max_length=100) + last_npassame = models.CharField(max_length=100) + birth_date = models.DateField(null=True, blank=True) + genre = models.CharField(max_length=1, choices=GENRE) + phone_number = models.CharField(max_length=20) + address = models.CharField(max_length=30, blank=True) + user_name = models.CharField(max_length=20) + password = models.CharField(max_length=20) + created_at = models.DateTimeField(default=timezone.now, editable=False) + update_at = models.DateTimeField(auto_now=True) + + class Meta: + ordering = ['created_at', 'genre'] + + def __str__(self): + return "%s %s" % (self.first_name, self.last_name) + + +""" +model Profil +""" +class Profil(models.Models): + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="belong") + follow = models.ManyToManyField('self', through='Friend', related_name="have") + topics_of_interest = models.ManyToManyField(Topic, through='UserTopic') + pseudo = models.CharField(max_length=100) + avatar = models.ImageField(upload_to="static", null=True, blank=True) + email = models.EmailField(max_length=100) + is_active = models.BooleanField(default=True) + created_at = models.DateTimeField(default=timezone.now, editable=False) + update_at = models.DateTimeField(auto_now=True) + + class Meta: + ordering = ['created_at'] + verbose_name = "Profil" + verbose_plural_name = "Profils" + + def __str__(self): + return self.pseudo + + + +""" +model Friend +""" +class Friend(models.Model): + STATUS = ( + ('A', 'ACCEPT'), + ('D', 'DENIE') + ) + + follower = models.ForeignKey(Profil, on_delete=models.CASCADE, related_name="friends") + followed = models.ForeignKey(Profil, on_delete=models.CASCADE, related_name="friend") + status = models.CharField(max_length=1, choices=STATUS) + + class Meta: + verbose_name = "friend" + verbose_plural_name = "friends" + + def __str__(self): + return self.STATUS diff --git a/FriendsWave/social/views.py b/FriendsWave/social/views.py index 91ea44a..45a329d 100755 --- a/FriendsWave/social/views.py +++ b/FriendsWave/social/views.py @@ -1,3 +1,2 @@ from django.shortcuts import render - # Create your views here. diff --git a/FriendsWave/systemModule/__init__.py b/FriendsWave/systemModule/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FriendsWave/systemModule/admin.py b/FriendsWave/systemModule/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/FriendsWave/systemModule/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/FriendsWave/systemModule/apps.py b/FriendsWave/systemModule/apps.py new file mode 100644 index 0000000..6e6a1e6 --- /dev/null +++ b/FriendsWave/systemModule/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class SystemmoduleConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'systemModule' diff --git a/FriendsWave/systemModule/migrations/__init__.py b/FriendsWave/systemModule/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FriendsWave/systemModule/models.py b/FriendsWave/systemModule/models.py new file mode 100644 index 0000000..11ba2b4 --- /dev/null +++ b/FriendsWave/systemModule/models.py @@ -0,0 +1,21 @@ +from django.db import models +from social.models import Profil +from django.utils import timezone +# Create your models here. + +""" +model Notification +""" +class Notification(models.Model): + receiver = models.ForeignKey(Profil, on_delete=models.CASCADE, related_name="receive") + title = models.CharField(max_length=50) + message = models.TextField(max_length=100) + created_at = models.DateTimeField(default=timezone.now, editable=False) + update_at = models.DateTimeField(auto_now=True) + + class Meta: + ordering =['created_at'] + + + def __str__(self) -> str: + return self.title \ No newline at end of file diff --git a/FriendsWave/systemModule/tests.py b/FriendsWave/systemModule/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/FriendsWave/systemModule/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/FriendsWave/systemModule/views.py b/FriendsWave/systemModule/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/FriendsWave/systemModule/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/FriendsWave/topicModule/__init__.py b/FriendsWave/topicModule/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FriendsWave/topicModule/admin.py b/FriendsWave/topicModule/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/FriendsWave/topicModule/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/FriendsWave/topicModule/apps.py b/FriendsWave/topicModule/apps.py new file mode 100644 index 0000000..14fa1fe --- /dev/null +++ b/FriendsWave/topicModule/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class TopicmoduleConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'topicModule' diff --git a/FriendsWave/topicModule/migrations/__init__.py b/FriendsWave/topicModule/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/FriendsWave/topicModule/models.py b/FriendsWave/topicModule/models.py new file mode 100644 index 0000000..b4a4c0a --- /dev/null +++ b/FriendsWave/topicModule/models.py @@ -0,0 +1,36 @@ +from django.db import models +from social.models import Profil +from django.utils import timezone + +# Create your models here. + +""" +model Topic +""" +class Topic(models.Model): + title = models.TextField(max_length=100) + description = models.TextField(max_length=100) + profil = models.ForeignKey(Profil, on_delete=models.SET_NULL) + created_at = models.DateTimeField(default=timezone.now, editable=False) + update_at = models.DateTimeField(auto_now=True) + + class Meta: + ordering = ['created_at', 'title'] + verbose_name = "topic" + verbose_plural_name = "topics" + + def __str__(self): + return self.title + + + +""" +model User_Topic +""" +class UserTopic(models.Model): + suscribers = models.ForeignKey(Profil, on_delete=models.CASCADE) + topics = models.ForeignKey(Topic, on_delete=models.CASCADE) + raison = models.TextField(max_length=500) + last_opened = models.DateTimeField(null=True) + created_at = models.DateTimeField(default=timezone.now, editable=False) + end= models.DateField(null=True) \ No newline at end of file diff --git a/FriendsWave/topicModule/tests.py b/FriendsWave/topicModule/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/FriendsWave/topicModule/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/FriendsWave/topicModule/views.py b/FriendsWave/topicModule/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/FriendsWave/topicModule/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here.