mirror of
https://github.com/Dadechin/Dashboard-XRoom.git
synced 2025-07-05 09:44:34 +00:00
Compare commits
No commits in common. "b383319676c6425c5e6ffb12550c1307c125c622" and "f53adf9774cea76a8f8d4ca5f506ac38d6a456c7" have entirely different histories.
b383319676
...
f53adf9774
|
@ -14,8 +14,6 @@ from core.models.AssetBundleRoom import AssetBundleRoom
|
||||||
from core.models.AssignRoomUser import AssignRoomUser
|
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
|
||||||
from core.models.Meeting import Meeting
|
|
||||||
from core.models.Invitation import Invitation
|
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(Image)
|
admin.site.register(Image)
|
||||||
|
@ -31,5 +29,3 @@ admin.site.register(Space)
|
||||||
admin.site.register(TeamMember)
|
admin.site.register(TeamMember)
|
||||||
admin.site.register(AssetBundleRoom)
|
admin.site.register(AssetBundleRoom)
|
||||||
admin.site.register(AssignRoomUser)
|
admin.site.register(AssignRoomUser)
|
||||||
admin.site.register(Meeting)
|
|
||||||
admin.site.register(Invitation)
|
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
# Generated by Django 4.2 on 2025-06-02 09:54
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
('core', '0005_meeting'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='meeting',
|
|
||||||
name='code',
|
|
||||||
field=models.CharField(blank=True, max_length=255, null=True),
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,26 +0,0 @@
|
||||||
# Generated by Django 4.2 on 2025-06-02 10:02
|
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
||||||
('core', '0006_meeting_code'),
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='Invitation',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('is_admin', models.BooleanField(default=False)),
|
|
||||||
('is_sms_sent', models.BooleanField(default=False)),
|
|
||||||
('meeting', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invitations', to='core.meeting')),
|
|
||||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invitations', to=settings.AUTH_USER_MODEL)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
]
|
|
|
@ -1,13 +0,0 @@
|
||||||
# core/models.py
|
|
||||||
|
|
||||||
from django.db import models
|
|
||||||
from django.contrib.auth.models import User
|
|
||||||
|
|
||||||
class Invitation(models.Model):
|
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='invitations')
|
|
||||||
meeting = models.ForeignKey('core.Meeting', on_delete=models.CASCADE, related_name='invitations')
|
|
||||||
is_admin = models.BooleanField(default=False)
|
|
||||||
is_sms_sent = models.BooleanField(default=False)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f"Invitation of {self.user.username} to {self.meeting.name}"
|
|
|
@ -15,7 +15,6 @@ class Meeting(models.Model):
|
||||||
space = models.ForeignKey(Space, on_delete=models.SET_NULL, null=True, blank=True)
|
space = models.ForeignKey(Space, on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
asset_bundle = models.ForeignKey(AssetBundleRoom, on_delete=models.SET_NULL, null=True, blank=True)
|
asset_bundle = models.ForeignKey(AssetBundleRoom, on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
use_space = models.BooleanField(default=False)
|
use_space = models.BooleanField(default=False)
|
||||||
code = models.CharField(max_length=255, null=True, blank=True )
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
|
@ -125,7 +125,7 @@ else:
|
||||||
'USER': 'root',
|
'USER': 'root',
|
||||||
'PASSWORD': '',
|
'PASSWORD': '',
|
||||||
'HOST': 'localhost',
|
'HOST': 'localhost',
|
||||||
'PORT': '3306',
|
'PORT': '3309',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -92,7 +92,6 @@ urlpatterns = [
|
||||||
|
|
||||||
re_path('add_team', teamView.addTeam),
|
re_path('add_team', teamView.addTeam),
|
||||||
re_path('get_team', teamView.getTeams),
|
re_path('get_team', teamView.getTeams),
|
||||||
re_path('get_all_team_members', teamView.get_all_team_members),
|
|
||||||
|
|
||||||
path('add_meeting', meetingView. addMeeting, name='add_meeting'),
|
path('add_meeting', meetingView. addMeeting, name='add_meeting'),
|
||||||
|
|
||||||
|
|
|
@ -8,54 +8,11 @@ from drf_yasg import openapi
|
||||||
from core.serializers.MeetingSerializer import MeetingSerializer
|
from core.serializers.MeetingSerializer import MeetingSerializer
|
||||||
|
|
||||||
|
|
||||||
# @swagger_auto_schema(
|
|
||||||
# method='post',
|
|
||||||
# request_body=openapi.Schema(
|
|
||||||
# type=openapi.TYPE_OBJECT,
|
|
||||||
# required=['name', 'description', 'date_time'],
|
|
||||||
# properties={
|
|
||||||
# 'name': openapi.Schema(type=openapi.TYPE_STRING, default='Sprint Planning'),
|
|
||||||
# 'description': openapi.Schema(type=openapi.TYPE_STRING, default='Discuss the next sprint'),
|
|
||||||
# 'date_time': openapi.Schema(type=openapi.TYPE_STRING, format='date-time', default='2025-06-01T14:00:00Z'),
|
|
||||||
# 'space': openapi.Schema(type=openapi.TYPE_INTEGER, default=1),
|
|
||||||
# 'asset_bundle': openapi.Schema(type=openapi.TYPE_INTEGER, default=1),
|
|
||||||
# 'use_space': openapi.Schema(type=openapi.TYPE_BOOLEAN, default=False),
|
|
||||||
# }
|
|
||||||
# )
|
|
||||||
# )
|
|
||||||
# @api_view(['POST'])
|
|
||||||
# @authentication_classes([SessionAuthentication, TokenAuthentication])
|
|
||||||
# @permission_classes([IsAuthenticated])
|
|
||||||
# def addMeeting(request):
|
|
||||||
# data = request.data.copy()
|
|
||||||
# data['creator_user'] = request.user.id
|
|
||||||
|
|
||||||
# serializer = MeetingSerializer(data=data)
|
|
||||||
# if serializer.is_valid():
|
|
||||||
# meeting = serializer.save()
|
|
||||||
# return Response({
|
|
||||||
# "message": "Meeting created successfully.",
|
|
||||||
# "meeting": serializer.data
|
|
||||||
# }, status=status.HTTP_201_CREATED)
|
|
||||||
|
|
||||||
# return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from core.models.Invitation import Invitation # Ensure Invitation is imported
|
|
||||||
from django.contrib.auth.models import User
|
|
||||||
from django.db import transaction
|
|
||||||
|
|
||||||
@swagger_auto_schema(
|
@swagger_auto_schema(
|
||||||
method='post',
|
method='post',
|
||||||
request_body=openapi.Schema(
|
request_body=openapi.Schema(
|
||||||
type=openapi.TYPE_OBJECT,
|
type=openapi.TYPE_OBJECT,
|
||||||
required=['name', 'description', 'date_time', 'user_ids'],
|
required=['name', 'description', 'date_time'],
|
||||||
properties={
|
properties={
|
||||||
'name': openapi.Schema(type=openapi.TYPE_STRING, default='Sprint Planning'),
|
'name': openapi.Schema(type=openapi.TYPE_STRING, default='Sprint Planning'),
|
||||||
'description': openapi.Schema(type=openapi.TYPE_STRING, default='Discuss the next sprint'),
|
'description': openapi.Schema(type=openapi.TYPE_STRING, default='Discuss the next sprint'),
|
||||||
|
@ -63,11 +20,6 @@ from django.db import transaction
|
||||||
'space': openapi.Schema(type=openapi.TYPE_INTEGER, default=1),
|
'space': openapi.Schema(type=openapi.TYPE_INTEGER, default=1),
|
||||||
'asset_bundle': openapi.Schema(type=openapi.TYPE_INTEGER, default=1),
|
'asset_bundle': openapi.Schema(type=openapi.TYPE_INTEGER, default=1),
|
||||||
'use_space': openapi.Schema(type=openapi.TYPE_BOOLEAN, default=False),
|
'use_space': openapi.Schema(type=openapi.TYPE_BOOLEAN, default=False),
|
||||||
'user_ids': openapi.Schema(
|
|
||||||
type=openapi.TYPE_ARRAY,
|
|
||||||
items=openapi.Items(type=openapi.TYPE_INTEGER),
|
|
||||||
description='List of user IDs to invite'
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -76,39 +28,14 @@ from django.db import transaction
|
||||||
@permission_classes([IsAuthenticated])
|
@permission_classes([IsAuthenticated])
|
||||||
def addMeeting(request):
|
def addMeeting(request):
|
||||||
data = request.data.copy()
|
data = request.data.copy()
|
||||||
user_ids = data.pop('user_ids', [])
|
|
||||||
data['creator_user'] = request.user.id
|
data['creator_user'] = request.user.id
|
||||||
|
|
||||||
serializer = MeetingSerializer(data=data)
|
serializer = MeetingSerializer(data=data)
|
||||||
|
|
||||||
if serializer.is_valid():
|
if serializer.is_valid():
|
||||||
try:
|
|
||||||
with transaction.atomic():
|
|
||||||
meeting = serializer.save()
|
meeting = serializer.save()
|
||||||
|
|
||||||
for user_id in user_ids:
|
|
||||||
user = User.objects.get(id=user_id) # will raise exception if not found
|
|
||||||
Invitation.objects.create(
|
|
||||||
user=user,
|
|
||||||
meeting=meeting,
|
|
||||||
is_admin=False,
|
|
||||||
is_sms_sent=False
|
|
||||||
)
|
|
||||||
|
|
||||||
return Response({
|
return Response({
|
||||||
"message": "Meeting created successfully with invitations.",
|
"message": "Meeting created successfully.",
|
||||||
"meeting": serializer.data
|
"meeting": serializer.data
|
||||||
}, status=status.HTTP_201_CREATED)
|
}, status=status.HTTP_201_CREATED)
|
||||||
|
|
||||||
except User.DoesNotExist:
|
|
||||||
return Response(
|
|
||||||
{"error": f"User with id {user_id} does not exist."},
|
|
||||||
status=status.HTTP_400_BAD_REQUEST
|
|
||||||
)
|
|
||||||
except Exception as e:
|
|
||||||
return Response(
|
|
||||||
{"error": str(e)},
|
|
||||||
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
||||||
)
|
|
||||||
|
|
||||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
|
@ -5,7 +5,6 @@ from rest_framework.response import Response
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
|
|
||||||
from core.models.Team import Team
|
from core.models.Team import Team
|
||||||
from core.models.TeamMember import TeamMember
|
|
||||||
from core.serializers.TeamSerializer import TeamSerializer
|
from core.serializers.TeamSerializer import TeamSerializer
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,50 +63,3 @@ def getTeams(request):
|
||||||
return Response({
|
return Response({
|
||||||
"teams": serializer.data
|
"teams": serializer.data
|
||||||
}, status=status.HTTP_200_OK)
|
}, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
|
||||||
from django.db.models import Q
|
|
||||||
|
|
||||||
from rest_framework.serializers import ModelSerializer
|
|
||||||
|
|
||||||
|
|
||||||
class SimpleUserSerializer(ModelSerializer):
|
|
||||||
class Meta:
|
|
||||||
model = User
|
|
||||||
fields = ['id', 'username', 'first_name', 'last_name' ]
|
|
||||||
|
|
||||||
@api_view(['GET'])
|
|
||||||
@authentication_classes([SessionAuthentication, TokenAuthentication])
|
|
||||||
@permission_classes([IsAuthenticated])
|
|
||||||
def get_all_team_members(request):
|
|
||||||
try:
|
|
||||||
# Get all team IDs for current user
|
|
||||||
# team_ids = TeamMember.objects.filter(user=request.user).values_list('team_id', flat=True)
|
|
||||||
# team_ids = Team.objects.filter(Q(members__user=request.user) | Q(admin=request.user)).values_list('id', flat=True).distinct()
|
|
||||||
|
|
||||||
# team_ids = Team.objects.filter(admin_id=7)
|
|
||||||
team_ids = Team.objects.filter(Q(admin_id=request.user.id) | Q(members__user=request.user)).values_list('id', flat=True).distinct()
|
|
||||||
|
|
||||||
|
|
||||||
# Get all members of those teams
|
|
||||||
team_members = TeamMember.objects.filter(team_id__in=team_ids)
|
|
||||||
|
|
||||||
for tm in team_members:
|
|
||||||
print(f" - {tm.user.username} (Team: {tm.team.name})")
|
|
||||||
|
|
||||||
# Extract user objects
|
|
||||||
users = [tm.user for tm in team_members]
|
|
||||||
|
|
||||||
serializer = SimpleUserSerializer(users, many=True)
|
|
||||||
return Response({'members': serializer.data}, status=status.HTTP_200_OK)
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
10
test.rest
10
test.rest
|
@ -149,13 +149,3 @@ GET http://127.0.0.1:8000/get_team
|
||||||
Content-Type: application/json
|
Content-Type: application/json
|
||||||
Authorization: token e2792ac06153e10f00949a1924483a07629cc753
|
Authorization: token e2792ac06153e10f00949a1924483a07629cc753
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###
|
|
||||||
|
|
||||||
GET http://127.0.0.1:8000/get_all_team_members
|
|
||||||
Content-Type: application/json
|
|
||||||
Authorization: token e2792ac06153e10f00949a1924483a07629cc753
|
|
||||||
# Authorization: token 53e2b003a92e22aca85c95088a438ece8d9a5dfb
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user