added asset bundle rooms and assigned rooms

This commit is contained in:
mi1468 2025-05-24 16:59:34 +03:30
parent 255441ad61
commit 8984d6e542
15 changed files with 223 additions and 20 deletions

View File

@ -8,6 +8,8 @@ from core.models.video import Video
from core.models.glb import Glb from core.models.glb import Glb
from core.models.pdf import Pdf from core.models.pdf import Pdf
from core.models.TeamMember import TeamMember from core.models.TeamMember import TeamMember
from core.models.AssetBundleRoom import AssetBundleRoom
from core.models.AssignRoomUser import AssignRoomUser
# from .model import user # from .model import user
from core.models.AssignedRule import AssignedRule from core.models.AssignedRule import AssignedRule
@ -21,3 +23,5 @@ admin.site.register(AssignedRule)
admin.site.register(Customer) admin.site.register(Customer)
admin.site.register(Subscription) admin.site.register(Subscription)
admin.site.register(TeamMember) admin.site.register(TeamMember)
admin.site.register(AssetBundleRoom)
admin.site.register(AssignRoomUser)

View File

@ -0,0 +1,26 @@
# Generated by Django 5.0 on 2025-05-24 10:36
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0002_teammember'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='subscription',
name='adminUser',
field=models.ForeignKey(blank=True, default=None, on_delete=django.db.models.deletion.CASCADE, related_name='admin_subscriptions', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='subscription',
name='user',
field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='subscriptions', to=settings.AUTH_USER_MODEL),
),
]

View File

@ -0,0 +1,17 @@
# Generated by Django 5.0 on 2025-05-24 10:51
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('core', '0003_subscription_adminuser_alter_subscription_user'),
]
operations = [
migrations.RemoveField(
model_name='subscription',
name='adminUser',
),
]

View File

@ -0,0 +1,24 @@
# Generated by Django 5.0 on 2025-05-24 12:12
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0004_remove_subscription_adminuser'),
]
operations = [
migrations.CreateModel(
name='AssetBundleRoom',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('url', models.TextField()),
('name', models.CharField(max_length=255)),
('description', models.TextField(blank=True)),
('maxPerson', models.PositiveIntegerField()),
('img', models.TextField()),
],
),
]

View File

@ -0,0 +1,23 @@
# Generated by Django 5.0 on 2025-05-24 12:14
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0005_assetbundleroom'),
]
operations = [
migrations.AlterField(
model_name='assetbundleroom',
name='img',
field=models.FileField(blank=True, null=True, upload_to='user_imgs/'),
),
migrations.AlterField(
model_name='assetbundleroom',
name='url',
field=models.FileField(blank=True, null=True, upload_to='user_files/'),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 5.0 on 2025-05-24 13:08
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0006_alter_assetbundleroom_img_alter_assetbundleroom_url'),
]
operations = [
migrations.AddField(
model_name='assetbundleroom',
name='Private',
field=models.BooleanField(default=True),
),
]

View File

@ -0,0 +1,27 @@
# Generated by Django 5.0 on 2025-05-24 13:26
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0007_assetbundleroom_private'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='AssignRoomUser',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('assetbundle_room', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.assetbundleroom')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'unique_together': {('user', 'assetbundle_room')},
},
),
]

View File

@ -0,0 +1,13 @@
from django.db import models
class AssetBundleRoom(models.Model):
url = models.FileField(upload_to='user_files/', blank=True, null=True)
name = models.CharField(max_length=255)
description = models.TextField(blank=True)
maxPerson = models.PositiveIntegerField()
img = models.FileField(upload_to='user_imgs/', blank=True, null=True)
Private = models.BooleanField(default=True) # New boolean field
def __str__(self):
return f"{self.name} (Max: {self.maxPerson})"

View File

@ -0,0 +1,13 @@
from django.db import models
from django.conf import settings
from core.models.AssetBundleRoom import AssetBundleRoom # Adjust import path if needed
class AssignRoomUser(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
assetbundle_room = models.ForeignKey(AssetBundleRoom, on_delete=models.CASCADE)
class Meta:
unique_together = ('user', 'assetbundle_room') # Prevent duplicate assignments
def __str__(self):
return f"{self.user.username} assigned to {self.assetbundle_room.name}"

View File

@ -4,21 +4,20 @@ from django.conf import settings
class Subscription(models.Model): class Subscription(models.Model):
# uid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) user = models.ForeignKey(
user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, on_delete=models.CASCADE) settings.AUTH_USER_MODEL,
blank=True,
on_delete=models.CASCADE,
related_name='subscriptions' # For user subscriptions
)
license_number = models.CharField(max_length=100) license_number = models.CharField(max_length=100)
user_count = models.PositiveIntegerField(default = 0,blank=True) # changed from license_number CharField user_count = models.PositiveIntegerField(default=0, blank=True)
startTime = models.DateTimeField() startTime = models.DateTimeField()
endTime = models.DateTimeField() endTime = models.DateTimeField()
price = models.DecimalField(max_digits=30, decimal_places=2) price = models.DecimalField(max_digits=30, decimal_places=2)
def __str__(self): def __str__(self):
return f"Subscription {self.user_count} - License: {self.license_number}" return f"Subscription {self.user_count} - License: {self.license_number}"

View File

@ -47,6 +47,7 @@ urlpatterns = [
re_path('add_subscription', userView.addSubscription), re_path('add_subscription', userView.addSubscription),
re_path('add_teamMember', userView.addTeamMember), re_path('add_teamMember', userView.addTeamMember),
re_path('get_team_member_info', userView.get_team_member_info),

View File

@ -30,6 +30,7 @@ from core.models.video import Video
from core.models.pdf import Pdf from core.models.pdf import Pdf
from core.models.glb import Glb from core.models.glb import Glb
from core.models.Subscription import Subscription from core.models.Subscription import Subscription
from core.models.TeamMember import TeamMember
from django.core.mail import EmailMultiAlternatives from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string from django.template.loader import render_to_string
@ -330,6 +331,12 @@ def getInfo(request):
subscription_serializer = SubscriptionSerializer(user_subscriptions, many=True) subscription_serializer = SubscriptionSerializer(user_subscriptions, many=True)
first_subscription = subscription_serializer.data[0] if subscription_serializer.data else None
user_subscription_data = first_subscription.get('user_count') if first_subscription else None
user_data = { user_data = {
'id': user.id, 'id': user.id,
'first_name': user.first_name, 'first_name': user.first_name,
@ -345,7 +352,7 @@ def getInfo(request):
'pdfs': pdf_serializer.data, 'pdfs': pdf_serializer.data,
'videos': video_serializer.data, 'videos': video_serializer.data,
'glbs': glb_serializer.data, 'glbs': glb_serializer.data,
'subscription': subscription_serializer.data, 'subscription': user_subscription_data,
}, },
'message': 'موفق' 'message': 'موفق'
}, status=status.HTTP_200_OK) }, status=status.HTTP_200_OK)
@ -496,12 +503,7 @@ def submitSmsVerification(request):
@authentication_classes([SessionAuthentication, TokenAuthentication]) @authentication_classes([SessionAuthentication, TokenAuthentication])
@permission_classes([IsAuthenticated]) @permission_classes([IsAuthenticated])
def test_token(request): def test_token(request):
if not user_has_role(request.user, 'admin'):
return Response({
"status": 403,
"data": {},
"message": "دسترسی غیرمجاز"
}, status=status.HTTP_403_FORBIDDEN)
return Response({ return Response({
"status": 200, "status": 200,
@ -1120,3 +1122,28 @@ def addTeamMember(request):
@api_view(['GET'])
@authentication_classes([SessionAuthentication, TokenAuthentication])
@permission_classes([IsAuthenticated])
def get_team_member_info(request):
user = request.user
# Count team members where this user is the admin
team_member_count = TeamMember.objects.filter(adminUser=user).count()
# Get subscriptions where this user is the actual subscriber
user_subscriptions = Subscription.objects.filter(user=user)
subscription_serializer = SubscriptionSerializer(user_subscriptions, many=True)
# Extract user_count from the first subscription
first_subscription = subscription_serializer.data[0] if subscription_serializer.data else None
user_subscription_data = first_subscription.get('user_count') if first_subscription else None
return Response({
'status': 200,
'data': {
'team_member_capacity': team_member_count,
'subscriptionCount': user_subscription_data,
},
'message': 'موفق'
}, status=status.HTTP_200_OK)

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

View File

@ -10,7 +10,7 @@ Content-Type: application/json
POST http://127.0.0.1:8000/login POST http://127.0.0.1:8000/login
Content-Type: application/json Content-Type: application/json
{ "mobile_number":"09140086509", "password": "123456728" } { "mobile_number":"09140086509", "password": "13245678" }
### ###
@ -37,7 +37,7 @@ Authorization: token d3f1b03996140c8f7561d67221953ff704b482cb
GET http://127.0.0.1:8000/test_token GET http://127.0.0.1:8000/test_token
Content-Type: application/json Content-Type: application/json
Authorization: token 224648840820ad0948ddee5b00d53ae67c040c49 Authorization: token 8dcae0063521ca707a9d0ab6ce3d4794a90064ca
# Authorization: token 53e2b003a92e22aca85c95088a438ece8d9a5dfb # Authorization: token 53e2b003a92e22aca85c95088a438ece8d9a5dfb
@ -45,7 +45,7 @@ Authorization: token 224648840820ad0948ddee5b00d53ae67c040c49
GET http://127.0.0.1:8000/getInfo GET http://127.0.0.1:8000/getInfo
Content-Type: application/json Content-Type: application/json
Authorization: token 224648840820ad0948ddee5b00d53ae67c040c49 Authorization: token 8dcae0063521ca707a9d0ab6ce3d4794a90064ca
# Authorization: token 53e2b003a92e22aca85c95088a438ece8d9a5dfb # Authorization: token 53e2b003a92e22aca85c95088a438ece8d9a5dfb
@ -94,3 +94,14 @@ Content-Type: application/json
Authorization: token 8dcae0063521ca707a9d0ab6ce3d4794a90064ca Authorization: token 8dcae0063521ca707a9d0ab6ce3d4794a90064ca
{ "mobile_number": "09140086608", "first_name":"mahdi", "last_name":"arabi", "semat":"modir", "password": "12345678", "isAdmin":"true" } { "mobile_number": "09140086608", "first_name":"mahdi", "last_name":"arabi", "semat":"modir", "password": "12345678", "isAdmin":"true" }
###
GET http://127.0.0.1:8000/get_team_member_info
Content-Type: application/json
Authorization: token 8dcae0063521ca707a9d0ab6ce3d4794a90064ca
# Authorization: token 53e2b003a92e22aca85c95088a438ece8d9a5dfb