This commit is contained in:
AmirHossein Shirazi
2024-12-12 22:53:41 +03:30
104 changed files with 305 additions and 13 deletions
View File
+3
View File
@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.
+6
View File
@@ -0,0 +1,6 @@
from django.apps import AppConfig
class AccountConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'account'
+3
View File
@@ -0,0 +1,3 @@
from django.db import models
# Create your models here.
+3
View File
@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.
+3
View File
@@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.
View File
+50
View File
@@ -0,0 +1,50 @@
from django.contrib import admin
from import_export.admin import ImportExportActionModelAdmin
from unfold.admin import ModelAdmin
from .models import *
@admin.register(Dare)
class Dare(ModelAdmin):
list_display = ['lang1', 'is_for_adults']
list_filter = ['is_for_adults']
@admin.register(Truth)
class Truth(ModelAdmin):
list_display = ['lang1', 'is_for_adults']
list_filter = ['is_for_adults']
@admin.register(Would_you_rather)
class Would_you_rather(ModelAdmin):
list_display = ['lang1', 'is_for_adults']
list_filter = ['is_for_adults']
@admin.register(challenge)
class Challenge(ModelAdmin):
list_display = ['type']
@admin.register(abjad)
class abjad(ModelAdmin):
list_display = ['word', 'difficulty_type', 'answer']
list_filter = ['difficulty_type']
@admin.register(MusicModel)
class MusicAdmin(ModelAdmin):
list_display = ['name', 'message_id', 'singer', 'category', 'trand']
@admin.register(MovieModel)
class MovieAdmin(ModelAdmin):
list_display = ['name', 'message_id', 'category', 'receommended']
@admin.register(MovieCategory)
class MovieCategoryAdmin(ModelAdmin):
pass
@admin.register(MusicCategory)
class MusicCategoryAdmin(ModelAdmin):
pass
+7
View File
@@ -0,0 +1,7 @@
from django.apps import AppConfig
class EntertainmentConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'entertainment'
verbose_name = 'بخش سرگرمی ها'
+142
View File
@@ -0,0 +1,142 @@
from django.db import models
class BaseModel(models.Model):
lang1 = models.CharField(max_length=200, verbose_name='فارسی')
is_for_adults = models.BooleanField(verbose_name='+18 سوال')
class Meta:
abstract = True
def __str__(self):
return self.lang1
async def get(self, *attrs):
if len(attrs) == 1:
return getattr(self, attrs[0], None)
else:
return tuple(getattr(self, attr, None) for attr in attrs)
class Dare(BaseModel):
class Meta:
verbose_name = 'شجاعت'
verbose_name_plural = 'شجاعت ها'
class Truth(BaseModel):
class Meta:
verbose_name = 'حقیقت'
verbose_name_plural = "حقیقت ها"
class Would_you_rather(BaseModel):
class Meta:
verbose_name = 'ترجیح میدی'
verbose_name_plural = "ترجیح میدی ها"
class challenge(models.Model):
challenge_type = (
('map', 'نقشه ی گنج'),
('prize', 'جوایز')
)
type = models.CharField(max_length=30, choices=challenge_type, verbose_name='نوع چالش', primary_key=True)
image = models.ImageField(upload_to='media/', verbose_name='عکس')
link = models.URLField(verbose_name='لینک')
text = models.TextField(verbose_name='متن توضیحات')
button_text = models.CharField(max_length=40, verbose_name='متن دکمه')
def __str__(self):
return f'{self.type} - {self.text[0:50]}'
class Meta:
verbose_name = 'چالش'
verbose_name_plural = 'چالش ها'
class abjad(models.Model):
word = models.TextField(verbose_name='صورت ی سوال')
difficulty = (
('hard', 'سخت'),
('normal', 'متوسط'),
('easy', 'اسون')
)
image = models.ImageField(upload_to='media/', verbose_name='عکس بازی افتابه', blank=True, null=True)
difficulty_type = models.CharField(max_length=13, choices=difficulty, verbose_name='سختی')
answer = models.CharField(max_length=30, verbose_name='جواب')
option2 = models.CharField(max_length=30, verbose_name='گزینه ی اشتباه', null=True, blank=True)
option3 = models.CharField(max_length=30, verbose_name='گزینه ی اشتباه', null=True, blank=True)
option4 = models.CharField(max_length=30, verbose_name='گزینه ی اشتباه', null=True, blank=True)
def __str__(self):
return f'{self.word}'
class Meta:
verbose_name = 'سوال ابجد'
verbose_name_plural = 'سوالات ابجد'
async def get(self, *attrs):
if len(attrs) == 1:
return getattr(self, attrs[0], None)
else:
return tuple(getattr(self, attr, None) for attr in attrs)
GAME_DATA = {
Dare: {
'button': 'dare',
'game_name': 'شجاعت'
},
Truth: {
'button': 'truth',
'game_name': 'حقیقت'
},
Would_you_rather: {
'button': 'wyr',
'game_name': 'ترجیح میدی'
}
}
from django.db import models
class MusicCategory(models.Model):
name = models.CharField(max_length=40, verbose_name='نام دسته بندی')
def __str__(self):
return self.name
class Meta:
verbose_name = 'دسته بندی موزیک'
verbose_name_plural = 'دسته بندی موزیک ها'
class MovieCategory(models.Model):
name = models.CharField(max_length=40, verbose_name='نام دسته بندی')
def __str__(self):
return self.name
class Meta:
verbose_name = 'دسته بندی قیلم'
verbose_name_plural = 'دسته بندی فیلم ها'
class UploadParent(models.Model):
name = models.CharField(max_length=300, verbose_name='نام')
message_id = models.CharField(max_length=40, verbose_name='ای دی پیام تلگرام')
def __str__(self):
return self.name
class MusicModel(UploadParent):
lyric = models.CharField(verbose_name='متن اهنگ', max_length=4000, blank=True, null=True)
singer = models.CharField(max_length=300, verbose_name='خواننده', blank=True, null=True)
category = models.ForeignKey(MusicCategory, on_delete=models.CASCADE, verbose_name='دسته بندی', blank=True, null=True)
trand = models.BooleanField(default=False, verbose_name='ترند')
class Meta:
verbose_name = 'مدل اهنگ'
verbose_name_plural = 'مدل اهنگ ها'
class MovieModel(UploadParent):
description = models.CharField(max_length=4000,verbose_name='توضیحات فیلم', blank=True, null=True)
category = models.ForeignKey(MovieCategory, on_delete=models.CASCADE, verbose_name='دسته بندی', blank=True, null=True)
receommended = models.BooleanField(default=False, verbose_name='پیشنهادی')
class Meta:
verbose_name = 'مدل فیلم'
verbose_name_plural = 'مدل فیلم ها'
+3
View File
@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.
+3
View File
@@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.
+2 -2
View File
@@ -51,10 +51,10 @@ class CommentView(APIView):
comment_ser = CommentSerializer(data=request.data)
product = get_object_or_404(ProductModel, id=pk)
if comment_ser.is_valid():
comment_ser.save(product=product)
#TODO comment_ser.save(product=product, user=request.user)
comment_ser.save(product=product, user=request.user)
return Response(comment_ser.data, status=status.HTTP_201_CREATED)
return Response(comment_ser.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk):
comment = get_object_or_404(CommentModel, pk=pk)
if comment.user == request.user:
+18
View File
@@ -0,0 +1,18 @@
from django.contrib import admin
from unfold.admin import ModelAdmin
from .models import NotifModel
from import_export.admin import ImportExportModelAdmin
from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm
@admin.register(NotifModel)
class NotifModelAdmin(ModelAdmin, ImportExportModelAdmin):
import_form_class = ImportForm
export_form_class = ExportForm
compressed_fields = True
warn_unsaved_form = True
list_display = ('subject', 'priority', 'send_time', 'send_by', 'send_to_all')
search_fields = ('subject', 'description', 'send_by__email', 'send_to_branch__name')
list_filter = ('priority', 'send_time', 'send_to_all')
ordering = ('-send_time',)
filter_horizontal = ('send_to_branch', 'read_by')
+14
View File
@@ -0,0 +1,14 @@
from rest_framework import serializers
class GetNotifSerializer(serializers.ModelSerializer):
send_by = UserSerializer()
is_seen = serializers.SerializerMethodField()
read_by = UserSerializer(many=True)
class Meta:
model = NotifModel
fields = ('id', 'subject', 'priority', 'description', 'send_time', 'is_seen', 'send_by', 'read_by')
read_only_fields = ("read_by", "send_by")
def get_is_seen(self, obj):
user = self.context['user']
return user in obj.read_by.all()
+37
View File
@@ -0,0 +1,37 @@
from django.core.paginator import Paginator
from rest_framework.views import APIView
from .models import *
from .serializers import *
from rest_framework import status
from rest_framework.response import Response
from django.db.models import Q
from django.shortcuts import get_object_or_404
from rest_framework.permissions import IsAuthenticatedOrReadOnly
class CommentView(APIView):
serializer_class = CommentSerializer
permission_classes = [IsAuthenticatedOrReadOnly]
def get(self, request, pk):
product = get_object_or_404(ProductModel, id=pk)
comments = product.comments.filter(show=True)
comments_ser = self.serializer_class(instance=comments, many=True)
return Response({'comments': comments_ser.data}, status=status.HTTP_200_OK)
def post(self, request, pk):
comment_ser = CommentSerializer(data=request.data)
product = get_object_or_404(ProductModel, id=pk)
if comment_ser.is_valid():
comment_ser.save(product=product, user=request.user)
return Response(comment_ser.data, status=status.HTTP_201_CREATED)
return Response(comment_ser.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk):
comment = get_object_or_404(CommentModel, pk=pk)
if comment.user == request.user:
comment.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
else:
return Response({"detail": "شما اجازه ی پاک کردن این کامنت را ندارید"}, status=status.HTTP_403_FORBIDDEN)
+11 -11
View File
@@ -8,8 +8,8 @@ export default defineNuxtConfig({
postcss: {
plugins: {
"@tailwindcss/postcss": {},
autoprefixer: {}
}
autoprefixer: {},
},
},
icon: {
@@ -17,9 +17,9 @@ export default defineNuxtConfig({
customCollections: [
{
prefix: "ci",
dir: "./assets/custom-icons"
}
]
dir: "./public/icons",
},
],
},
modules: [
@@ -30,11 +30,11 @@ export default defineNuxtConfig({
"DM Sans": "100..900",
Inter: "100..900",
download: true,
inject: false
}
}
inject: false,
},
},
],
"@nuxt/icon",
"reka-ui/nuxt"
]
});
"reka-ui/nuxt",
],
});

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 365 B

After

Width:  |  Height:  |  Size: 365 B

Before

Width:  |  Height:  |  Size: 365 B

After

Width:  |  Height:  |  Size: 365 B

Before

Width:  |  Height:  |  Size: 366 B

After

Width:  |  Height:  |  Size: 366 B

Before

Width:  |  Height:  |  Size: 494 B

After

Width:  |  Height:  |  Size: 494 B

Before

Width:  |  Height:  |  Size: 675 B

After

Width:  |  Height:  |  Size: 675 B

Before

Width:  |  Height:  |  Size: 853 B

After

Width:  |  Height:  |  Size: 853 B

Before

Width:  |  Height:  |  Size: 858 B

After

Width:  |  Height:  |  Size: 858 B

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 539 B

After

Width:  |  Height:  |  Size: 539 B

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 825 B

After

Width:  |  Height:  |  Size: 825 B

Before

Width:  |  Height:  |  Size: 657 B

After

Width:  |  Height:  |  Size: 657 B

Before

Width:  |  Height:  |  Size: 596 B

After

Width:  |  Height:  |  Size: 596 B

Before

Width:  |  Height:  |  Size: 451 B

After

Width:  |  Height:  |  Size: 451 B

Before

Width:  |  Height:  |  Size: 231 B

After

Width:  |  Height:  |  Size: 231 B

Before

Width:  |  Height:  |  Size: 599 B

After

Width:  |  Height:  |  Size: 599 B

Before

Width:  |  Height:  |  Size: 212 B

After

Width:  |  Height:  |  Size: 212 B

Before

Width:  |  Height:  |  Size: 219 B

After

Width:  |  Height:  |  Size: 219 B

Before

Width:  |  Height:  |  Size: 218 B

After

Width:  |  Height:  |  Size: 218 B

Before

Width:  |  Height:  |  Size: 219 B

After

Width:  |  Height:  |  Size: 219 B

Before

Width:  |  Height:  |  Size: 311 B

After

Width:  |  Height:  |  Size: 311 B

Before

Width:  |  Height:  |  Size: 661 B

After

Width:  |  Height:  |  Size: 661 B

Before

Width:  |  Height:  |  Size: 733 B

After

Width:  |  Height:  |  Size: 733 B

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 939 B

After

Width:  |  Height:  |  Size: 939 B

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Before

Width:  |  Height:  |  Size: 568 B

After

Width:  |  Height:  |  Size: 568 B

Before

Width:  |  Height:  |  Size: 628 B

After

Width:  |  Height:  |  Size: 628 B

Before

Width:  |  Height:  |  Size: 694 B

After

Width:  |  Height:  |  Size: 694 B

Before

Width:  |  Height:  |  Size: 860 B

After

Width:  |  Height:  |  Size: 860 B

Before

Width:  |  Height:  |  Size: 821 B

After

Width:  |  Height:  |  Size: 821 B

Before

Width:  |  Height:  |  Size: 981 B

After

Width:  |  Height:  |  Size: 981 B

Before

Width:  |  Height:  |  Size: 412 B

After

Width:  |  Height:  |  Size: 412 B

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before

Width:  |  Height:  |  Size: 542 B

After

Width:  |  Height:  |  Size: 542 B

Before

Width:  |  Height:  |  Size: 688 B

After

Width:  |  Height:  |  Size: 688 B

Before

Width:  |  Height:  |  Size: 996 B

After

Width:  |  Height:  |  Size: 996 B

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 991 B

After

Width:  |  Height:  |  Size: 991 B

Before

Width:  |  Height:  |  Size: 850 B

After

Width:  |  Height:  |  Size: 850 B

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before

Width:  |  Height:  |  Size: 429 B

After

Width:  |  Height:  |  Size: 429 B

Before

Width:  |  Height:  |  Size: 479 B

After

Width:  |  Height:  |  Size: 479 B

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 607 B

After

Width:  |  Height:  |  Size: 607 B

Before

Width:  |  Height:  |  Size: 205 B

After

Width:  |  Height:  |  Size: 205 B

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 653 B

After

Width:  |  Height:  |  Size: 653 B

Before

Width:  |  Height:  |  Size: 885 B

After

Width:  |  Height:  |  Size: 885 B

Before

Width:  |  Height:  |  Size: 722 B

After

Width:  |  Height:  |  Size: 722 B

Before

Width:  |  Height:  |  Size: 533 B

After

Width:  |  Height:  |  Size: 533 B

Before

Width:  |  Height:  |  Size: 307 B

After

Width:  |  Height:  |  Size: 307 B

Before

Width:  |  Height:  |  Size: 792 B

After

Width:  |  Height:  |  Size: 792 B

Before

Width:  |  Height:  |  Size: 729 B

After

Width:  |  Height:  |  Size: 729 B

Before

Width:  |  Height:  |  Size: 663 B

After

Width:  |  Height:  |  Size: 663 B

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 527 B

After

Width:  |  Height:  |  Size: 527 B

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before

Width:  |  Height:  |  Size: 430 B

After

Width:  |  Height:  |  Size: 430 B

Before

Width:  |  Height:  |  Size: 689 B

After

Width:  |  Height:  |  Size: 689 B

Before

Width:  |  Height:  |  Size: 650 B

After

Width:  |  Height:  |  Size: 650 B

Before

Width:  |  Height:  |  Size: 898 B

After

Width:  |  Height:  |  Size: 898 B

Before

Width:  |  Height:  |  Size: 674 B

After

Width:  |  Height:  |  Size: 674 B

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 889 B

After

Width:  |  Height:  |  Size: 889 B

Before

Width:  |  Height:  |  Size: 979 B

After

Width:  |  Height:  |  Size: 979 B

Before

Width:  |  Height:  |  Size: 986 B

After

Width:  |  Height:  |  Size: 986 B

Before

Width:  |  Height:  |  Size: 690 B

After

Width:  |  Height:  |  Size: 690 B

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 504 B

After

Width:  |  Height:  |  Size: 504 B

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Some files were not shown because too many files have changed in this diff Show More