From 53ea3f2aa954a04c206a0f4624204671c7591412 Mon Sep 17 00:00:00 2001 From: Mike0001-droid Date: Thu, 6 Jun 2024 16:48:50 +0500 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20=D1=84?= =?UTF-8?q?=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=82=D1=80=D0=B5=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/proj/audio/admin.py | 5 +++- server/proj/audio/models.py | 20 +++++++------- server/proj/audio/schemas.py | 45 ++++++++++++++++++++++++++++++++ server/proj/audio/serializers.py | 7 +++++ server/proj/audio/views.py | 23 +++++++++++++++- server/proj/conf/urls.py | 9 +++---- 6 files changed, 91 insertions(+), 18 deletions(-) create mode 100644 server/proj/audio/schemas.py create mode 100644 server/proj/audio/serializers.py diff --git a/server/proj/audio/admin.py b/server/proj/audio/admin.py index 8c38f3f..7dd82aa 100644 --- a/server/proj/audio/admin.py +++ b/server/proj/audio/admin.py @@ -1,3 +1,6 @@ from django.contrib import admin +from .models import Song -# Register your models here. +@admin.register(Song) +class SongAdmin(admin.ModelAdmin): + list_display = ('title', 'artist', 'genre', 'album') diff --git a/server/proj/audio/models.py b/server/proj/audio/models.py index 2ae1eff..368115a 100644 --- a/server/proj/audio/models.py +++ b/server/proj/audio/models.py @@ -1,14 +1,12 @@ from django.db import models -# class Song(models.Model): -# name = models.CharField(max_length=255) -# artist = models.CharField(max_length=255) -# album = models.ForeignKey('Album', on_delete=models.CASCADE) -# ... +class Song(models.Model): + azura_id = models.CharField('ID трека с Азуры', max_length=255) + title = models.CharField('Название трека', max_length=255) + artist = models.CharField('Исполнитель', max_length=255) + album = models.CharField('Альбом трека', blank=True, null=True, max_length=255) + genre = models.CharField('Жанр трека', blank=True, null=True, max_length=50) + art = models.ImageField('Изображение трека', blank=True, null=True, upload_to="song_images/") -# class Playlist(models.Model): -# songs = models.ManyToManyField(Song) - -# class Podcast(models.Model): -# name = models.CharField(max_length=255) -# hosts = models.CharField(max_length=255) \ No newline at end of file + def __str__(self, request): + return f"{self.artist} - {self.title}" diff --git a/server/proj/audio/schemas.py b/server/proj/audio/schemas.py new file mode 100644 index 0000000..07150fa --- /dev/null +++ b/server/proj/audio/schemas.py @@ -0,0 +1,45 @@ +from rest_framework.schemas import AutoSchema +import coreapi +import coreschema + +class SongSchema(AutoSchema): + def get_serializer_fields(self, path, method): + return [ + coreapi.Field( + name='azura_id', + location='form', + required=False, + schema=coreschema.String(description='ID трека с Азуры') + ), + coreapi.Field( + name='title', + location='form', + required=False, + schema=coreschema.Array(description='Название трека') + ), + coreapi.Field( + name='artist', + location='form', + required=False, + schema=coreschema.Integer(description='Исполнитель') + ), + coreapi.Field( + name='album', + location='form', + required=False, + schema=coreschema.Integer(description='Альбом трека') + ), + coreapi.Field( + name='genre', + location='form', + required=False, + schema=coreschema.Integer(description='Жанр трека') + ), + coreapi.Field( + name='art', + location='form', + required=False, + schema=coreschema.Integer(description='Изображение трека') + ), + ] + \ No newline at end of file diff --git a/server/proj/audio/serializers.py b/server/proj/audio/serializers.py new file mode 100644 index 0000000..d12686a --- /dev/null +++ b/server/proj/audio/serializers.py @@ -0,0 +1,7 @@ +from rest_framework import serializers +from .models import Song + +class SongSerializer(serializers.ModelSerializer): + class Meta: + model = Song + fields = ('id', 'azura_id', 'title', 'artist', 'album', 'genre', 'art') diff --git a/server/proj/audio/views.py b/server/proj/audio/views.py index 91ea44a..5d4733e 100644 --- a/server/proj/audio/views.py +++ b/server/proj/audio/views.py @@ -1,3 +1,24 @@ from django.shortcuts import render +from rest_framework.viewsets import ViewSet +from rest_framework.response import Response +from rest_framework.decorators import action +from rest_framework import status -# Create your views here. +from .schemas import SongSchema +from .models import Song +from .serializers import SongSerializer + +class SongViewSet(ViewSet): + def list(self, request): + queryset = Song.objects.all() + serializer = SongSerializer(queryset, many=True) + return Response(serializer.data) + + @action(detail=False, methods=['post'], schema=SongSchema()) + def create_song(self, request): + song = SongSerializer(data=request.data) + if song.is_valid(): + song.save() + return Response(song.data) + else: + return Response(status=status.HTTP_404_NOT_FOUND) \ No newline at end of file diff --git a/server/proj/conf/urls.py b/server/proj/conf/urls.py index bcf5203..8c4f098 100644 --- a/server/proj/conf/urls.py +++ b/server/proj/conf/urls.py @@ -1,8 +1,6 @@ from django.contrib import admin from rest_framework.documentation import include_docs_urls from django.urls import path, include -# from api.views import AzuraNowPlayingWebhookView -#from loginApi.views import login, register from rest_framework_simplejwt.views import ( TokenObtainPairView, TokenRefreshView, @@ -10,20 +8,21 @@ from rest_framework_simplejwt.views import ( ) from django.conf.urls.static import static from news import views as newsViews -from rest_framework import routers, serializers, viewsets -#from userProfile.views import ProfileViewSet, TeamViewSet +from rest_framework import routers from userProfile.views import TeamViewSet from django.conf import settings from rubricks.views import RubricViewSet from api.views import FetchAndServeFile +from audio.views import SongViewSet router = routers.DefaultRouter() router.register(r'news', newsViews.NewsViewSet) -#router.register(r'profiles', ProfileViewSet, basename='profiles') router.register(r'teams', TeamViewSet, basename='teams') router.register(r'rubriks', RubricViewSet, basename='rubriks') +router.register(r'song', SongViewSet, basename='song') router.register(r'fetchandservefile', FetchAndServeFile, basename='fetchandservefile') + urlpatterns = [ path('api/admin/', admin.site.urls), #path('api/fetch-file///', FetchAndServeFile.as_view(), name='fetch-file'),