From efe7f279624eba2c33ac71aee39c541f3ec9b89b Mon Sep 17 00:00:00 2001 From: mi1468 Date: Sun, 13 Jul 2025 14:10:29 +0330 Subject: [PATCH] added download api --- core/admin.py | 2 ++ core/models/download.py | 20 ++++++++++++++++++++ core/serializers/DownloadSerializer.py | 7 +++++++ core/urls.py | 5 +++++ core/views/downloadView.py | 25 +++++++++++++++++++++++++ 5 files changed, 59 insertions(+) create mode 100644 core/models/download.py create mode 100644 core/serializers/DownloadSerializer.py create mode 100644 core/views/downloadView.py diff --git a/core/admin.py b/core/admin.py index b2cbc08..46296f4 100644 --- a/core/admin.py +++ b/core/admin.py @@ -16,6 +16,7 @@ from core.models.AssignRoomUser import AssignRoomUser from core.models.AssignedRule import AssignedRule from core.models.Meeting import Meeting from core.models.Invitation import Invitation +from core.models.download import Download admin.site.register(Image) @@ -33,3 +34,4 @@ admin.site.register(AssetBundleRoom) admin.site.register(AssignRoomUser) admin.site.register(Meeting) admin.site.register(Invitation) +admin.site.register(Download) diff --git a/core/models/download.py b/core/models/download.py new file mode 100644 index 0000000..48cdb70 --- /dev/null +++ b/core/models/download.py @@ -0,0 +1,20 @@ +from django.db import models + +class Download(models.Model): + TYPE_CHOICES = [ + ('windows', 'Windows'), + ('android', 'android'), + ('linux', 'Linux'), + # Add more types as needed + ] + + name = models.CharField(max_length=255) + description = models.TextField(blank=True) + url = models.URLField() + version = models.CharField(max_length=50) + type = models.CharField(max_length=50, choices=TYPE_CHOICES) + + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f"{self.name} ({self.type}) - v{self.version}" diff --git a/core/serializers/DownloadSerializer.py b/core/serializers/DownloadSerializer.py new file mode 100644 index 0000000..d021b1c --- /dev/null +++ b/core/serializers/DownloadSerializer.py @@ -0,0 +1,7 @@ +from rest_framework import serializers +from core.models.download import Download + +class DownloadSerializer(serializers.ModelSerializer): + class Meta: + model = Download + fields = ['id', 'name', 'description', 'url', 'version', 'type'] diff --git a/core/urls.py b/core/urls.py index ae567bb..895a008 100644 --- a/core/urls.py +++ b/core/urls.py @@ -17,6 +17,7 @@ from .views import subscriptionView from django.urls import include, path from django.conf import settings from django.conf.urls.static import static +from .views import downloadView @@ -101,6 +102,10 @@ urlpatterns = [ path('edit_meeting', meetingView. editMeeting, name='edit_meeting'), path('get_user_meetings', meetingView. get_user_meetings, name='get_user_meetings'), + + + path('latest-download/', downloadView.get_latest_downloads_by_type), + ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/core/views/downloadView.py b/core/views/downloadView.py new file mode 100644 index 0000000..16a546e --- /dev/null +++ b/core/views/downloadView.py @@ -0,0 +1,25 @@ +from rest_framework.decorators import api_view +from rest_framework.response import Response +from rest_framework import status +from core.models.download import Download +from core.serializers.DownloadSerializer import DownloadSerializer + + + +@api_view(['GET']) +def get_latest_downloads_by_type(request): + types = Download.objects.values_list('type', flat=True).distinct() + latest_items = [] + + for download_type in types: + latest_item = ( + Download.objects + .filter(type=download_type) + .order_by('-version') # Note: This is simple string sort + .first() + ) + if latest_item: + latest_items.append(latest_item) + + serializer = DownloadSerializer(latest_items, many=True) + return Response(serializer.data) \ No newline at end of file