From 73e47e3cbc8b7b99cbc584fc79d9881a9443f67c Mon Sep 17 00:00:00 2001 From: mike Date: Wed, 19 Jun 2024 23:17:47 +0500 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB=20=D1=82?= =?UTF-8?q?=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=83=20=D1=81=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B5=D0=B9=D0=BB=D0=B8=D1=81=D1=82=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/proj/audio/admin.py | 6 ++++- server/proj/audio/models.py | 6 +++++ server/proj/audio/serializers.py | 15 ++++++++++- server/proj/audio/views.py | 24 ++++++++++++++++-- .../conf/__pycache__/__init__.cpython-310.pyc | Bin 138 -> 153 bytes .../conf/__pycache__/urls.cpython-310.pyc | Bin 1491 -> 1561 bytes .../conf/__pycache__/wsgi.cpython-310.pyc | Bin 545 -> 560 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 174 -> 189 bytes .../settings/__pycache__/base.cpython-310.pyc | Bin 3360 -> 3375 bytes .../__pycache__/development.cpython-310.pyc | Bin 704 -> 656 bytes server/proj/conf/urls.py | 3 ++- .../__pycache__/__init__.cpython-310.pyc | Bin 142 -> 157 bytes .../__pycache__/admin.cpython-310.pyc | Bin 183 -> 198 bytes .../loginApi/__pycache__/apps.cpython-310.pyc | Bin 425 -> 440 bytes .../__pycache__/models.cpython-310.pyc | Bin 180 -> 195 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 153 -> 168 bytes .../news/__pycache__/__init__.cpython-310.pyc | Bin 138 -> 153 bytes .../news/__pycache__/admin.cpython-310.pyc | Bin 135 -> 150 bytes .../news/__pycache__/apps.cpython-310.pyc | Bin 413 -> 428 bytes .../news/__pycache__/models.cpython-310.pyc | Bin 744 -> 759 bytes .../__pycache__/0001_initial.cpython-310.pyc | Bin 876 -> 891 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 149 -> 164 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 142 -> 157 bytes .../__pycache__/admin.cpython-310.pyc | Bin 469 -> 484 bytes .../rubricks/__pycache__/apps.cpython-310.pyc | Bin 425 -> 440 bytes .../__pycache__/models.cpython-310.pyc | Bin 1058 -> 1073 bytes .../__pycache__/0001_initial.cpython-310.pyc | Bin 1065 -> 1080 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 153 -> 168 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 145 -> 160 bytes .../__pycache__/admin.cpython-310.pyc | Bin 581 -> 596 bytes .../__pycache__/apps.cpython-310.pyc | Bin 434 -> 449 bytes .../__pycache__/models.cpython-310.pyc | Bin 1163 -> 1178 bytes .../__pycache__/serializers.cpython-310.pyc | Bin 736 -> 751 bytes .../__pycache__/views.cpython-310.pyc | Bin 1372 -> 1387 bytes .../__pycache__/0001_initial.cpython-310.pyc | Bin 1031 -> 1046 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 156 -> 171 bytes 36 files changed, 49 insertions(+), 5 deletions(-) diff --git a/server/proj/audio/admin.py b/server/proj/audio/admin.py index 6d86d8b..82c06fd 100644 --- a/server/proj/audio/admin.py +++ b/server/proj/audio/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Song, FavoriteSong +from .models import Song, FavoriteSong, PlayList @admin.register(Song) class SongAdmin(admin.ModelAdmin): @@ -9,3 +9,7 @@ class SongAdmin(admin.ModelAdmin): @admin.register(FavoriteSong) class FavoriteSongAdmin(admin.ModelAdmin): list_display = ('id', 'song', 'user') + +@admin.register(PlayList) +class PlayListAdmin(admin.ModelAdmin): + list_display = ('id', 'name', 'user',) diff --git a/server/proj/audio/models.py b/server/proj/audio/models.py index 46cada6..5a52c91 100644 --- a/server/proj/audio/models.py +++ b/server/proj/audio/models.py @@ -36,3 +36,9 @@ class FavoriteSong(models.Model): verbose_name = 'Избранные Треки' unique_together = ('song', 'user') verbose_name_plural = 'Избранные Треки' + + +class PlayList(models.Model): + name = models.CharField('Название плейлиста', max_length=50) + song = models.ManyToManyField(Song) + user = models.ForeignKey(MyUser, verbose_name='Пользователь', on_delete=models.CASCADE, blank=True, null=True) \ No newline at end of file diff --git a/server/proj/audio/serializers.py b/server/proj/audio/serializers.py index 751389f..5e75c38 100644 --- a/server/proj/audio/serializers.py +++ b/server/proj/audio/serializers.py @@ -1,11 +1,24 @@ from rest_framework import serializers -from .models import Song, FavoriteSong +from .models import Song, FavoriteSong, PlayList class SongSerializer(serializers.ModelSerializer): class Meta: model = Song fields = ('id', 'unique_id', 'azura_id', 'title', 'artist', 'album', 'genre', 'art') +class PlayListSerializer(serializers.ModelSerializer): + class Meta: + model = PlayList + fields = ('id', 'name', 'song') + + def to_representation(self, instance): + rep = super().to_representation(instance) + rep["song"] = SongSerializer( + instance.song.all(), many=True).data + return rep + + + class FavoriteSongSerializer(serializers.ModelSerializer): class Meta: diff --git a/server/proj/audio/views.py b/server/proj/audio/views.py index 4767e1b..0e2d551 100644 --- a/server/proj/audio/views.py +++ b/server/proj/audio/views.py @@ -10,8 +10,28 @@ import requests from django.http import HttpResponse from .schemas import SongSchema, DeleteSongSchema -from .models import Song, FavoriteSong -from .serializers import SongSerializer, FavoriteSongSerializer +from .models import Song, FavoriteSong, PlayList +from .serializers import SongSerializer, FavoriteSongSerializer, PlayListSerializer + +class PlayListViewSet(GenericViewSet): + queryset = PlayList + serializer_class = PlayListSerializer + permission_classes = (IsAuthenticated,) + def list(self, request): + queryset = self.get_queryset().objects.filter(user=request.user) + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data, status=status.HTTP_200_OK) + + def retrieve(self, request, pk): + try: + queryset = self.get_queryset().objects.get(pk=pk, user=request.user) + serializer = self.get_serializer(queryset) + return Response(serializer.data, status=status.HTTP_200_OK) + except ObjectDoesNotExist: + return Response({"error": 'Объекта не существует'}, status=status.HTTP_404_NOT_FOUND) + + + class SongViewSet(GenericViewSet): queryset = Song.objects.all() diff --git a/server/proj/conf/__pycache__/__init__.cpython-310.pyc b/server/proj/conf/__pycache__/__init__.cpython-310.pyc index dd307ba920340ee1fd35c33793f37f3300baf96a..a8cc239fe4f1fc9ad2b82b2d60f01de1cac9c550 100644 GIT binary patch delta 73 zcmeBToXN)5P0Y$Kipea|ElNzu%#ZO52?EnV Wxw6!vn1Z7GteE8dytJ5!SqcC{G#M=b delta 58 zcmbQq*u}`5&&$ij00i}Fg%i1Lly&vX5{vZ9%ggmWLxK`hGV}F|Q;W({i}VYM^0V}l M^Yha5Csrx|0Kvu)rvLx| diff --git a/server/proj/conf/__pycache__/urls.cpython-310.pyc b/server/proj/conf/__pycache__/urls.cpython-310.pyc index d25e60803b1e496ac79f5b9e35502d52c9970f2a..087f3a15ae3c0c19dc349e1a2e832dfc10e53ef0 100644 GIT binary patch delta 629 zcmYk3zi-+=6vuu3k?_M9hY|vTI6x92`h&GUlun&0B~n$|4ks@r?*-Wj7~Ppvl`1i0 ztUMr3U8?XOv}^Z{oho&pYyXN)JsU^jPVe1)zVF99>3-!u>xN$_v8kCTD zd!BV8qXzddbGyHgpbXogBDjLHY$EKWLKSlf*HYd^1?tcUNm9Ot8)6{qW)0Gb$O5qR144<@h(|r1`fxuGeWw_rUT|)a+;lpde(&5L2h1HXS^N-<{whyJhNZ^YXR4Lk7AlK> zk496q`6%LOq{6< delta 575 zcmYk3OK;Oa5XZfK1UGh^P(mMR9!>g?QlwZ&NI-?SbKyV`hYATfooQsZiPPOYghZ7? zZ7C(uh5zwUY_0M7EYDj zES@apOhM;%d#RjMuoCQmjU}+55NYHm>|hz3dtAgVDBj}|Za^tx10Es^szL2qMFZB+ zysa-4cm(B0BYuo)DQ{%FiFx9=0$Z7}jT%&7Ct_)P6>~H|?RrHu%t0L*up6mqwn^NA zy%qP(lLoE_yZk#g(59$Krv>|w`dp#R%G)Dv|DOj3T_ri~!}yN;J4Tt>?KF+#0 zmc|&pfoL;n_B??@Z-DXvpY*tYE~GA~P{zO1BPL@@>yRF6P129ra`Qks5O~9W*f|Y{ zWA693N)ImMvi_1P-s(y9m0r(R$mPjr$oQMyej%Oo_S19GnbHV?7n0PPH}W%f61Kbv z_+jQ0(`L)~^642xJdrHk-L`-oNvx))mO7$lVbS1D7T`b0_>lbVi@0`Dzft cK`$+5c^7@o%H`7r;86+W-In diff --git a/server/proj/conf/__pycache__/wsgi.cpython-310.pyc b/server/proj/conf/__pycache__/wsgi.cpython-310.pyc index db8885968656a664b4f00f2188880acff077cf93..522b0b5c9a61b2a2eae0a45e61bc150e4a8c738b 100644 GIT binary patch delta 77 zcmZ3;vVny+pO=@50SKOPN2Sf)$a|L2$imqwCbT%Us5mA!F)P0)CbLAhC^027KgKg8 b2uuUz%2JDB3X1ZxVv_Uo(qbn6WmEwGxTzZ! delta 62 zcmdnMvXF&0pO=@50SM~V3e&nb@}6Z>*3>UcEYdG8FW2`B2}(@K%-1hYEhU%1pra$9aI1S delta 69 zcmdnXxQ>xGpO=@50SNR?6{RUojDoZWWFDS~- W(ofFMO9Kj&lw{_m7wb=)s{jDQ?iRfO diff --git a/server/proj/conf/settings/__pycache__/base.cpython-310.pyc b/server/proj/conf/settings/__pycache__/base.cpython-310.pyc index d21da598b49274f2c7b65ad7aa7046ee348ef9f5..b4d19aa6a2604fffd6ebe53257c453e108a7882b 100644 GIT binary patch delta 493 zcmYjNO=}ZD7;da>Hyax(Rw=1y?_#}K6cyI(By79c39}OduM5LucM_*fGGS)dFAx#` zfUsv#ym=Dw4|w$CS^671=+%Qbn_hem&-?MbydTf|)~8let*^UF)?V+J5x(%b`JuJ} zD^rn4{(N=eZbJFB_UkG%wJTbVR`I1x-d zl_r<7F|*^wi#Gy7f@{UcAed zVEkA#B|o1SItS7pxj&zvs72CaEzOU`K`q5flf`z6`c%vhj zIFm_FcH7L1YY+D{tp7Pkd49>@Wq#SCXrcn5iJi51`q%P7;Z7rsU5wf)sh|84);fEj|ROA*W3B7Yx2>0QCY zdm)8M!&UsS0!4x%%F4v8qBI x8$|abx}NEf!N1SWDc8-E&+A2o7)u z3+l?|&NV0vjlV1ozGfEcub{99DaeW=MSGKCjCd`1F2-q8NZ62NlA_{vvjEni?8K#C^wo++S z_t$DWskv5ZRx;Ia6P-@)yY^uew#rg1i*v!08(}JVBw{Gz8N6?-E_l0=3+eUzb|kzY zo)bO>kymT({8TkN!h;X6tF z_>}k1k0c!g?5iI$A+tf$?*(VdE%lxEwOYlLX1($8xKWpS!~LxIi&t+;+HyVbq}e`_ z`lqJXk$S7y?j#v_12S>oWJTI6occTp$1IF1x#R}6ax#15cHBePt9vr}0k2!q?nmKZ zTPO>^`RXiU}=FEh>)5P0Y$Kipea|ElNzu%#ZO52?EnV axw6!vn1Z7GteBkq^vpcRg3OqSc?tlqWg5-^ delta 62 zcmbQs*vH77&&$ij00i}Fg%i1L)D88^5{vZ9%ggmWLxK`hGV}F|Q;W({i}VYM^0V}F Q^3yZ(91Ak_C)O$e01$Q)NB{r; diff --git a/server/proj/loginApi/__pycache__/admin.cpython-310.pyc b/server/proj/loginApi/__pycache__/admin.cpython-310.pyc index 0784dd20f12546d49c19b2c8073f4cb64e506e16..ff072f881cc798dfd7f6d46764566474152fe0a0 100644 GIT binary patch delta 113 zcmdnac#M%ZpO=@50SFG93r%yH$m{_1 diff --git a/server/proj/loginApi/__pycache__/apps.cpython-310.pyc b/server/proj/loginApi/__pycache__/apps.cpython-310.pyc index 052a14119b7d3e247a109c57d225233807375005..c65b06e5e6c15d94a6d120ebfae4dd1e13a33a48 100644 GIT binary patch delta 81 zcmZ3z5@K>6e$6>wAU-C8lKN>lddMm8BNx7Zl}Z p>F4C9XXZH;Wa{VUr=;c->lIYq;;;d-OLJ1~7=gwVGXV(!1_1jX8%_WK diff --git a/server/proj/loginApi/migrations/__pycache__/__init__.cpython-310.pyc b/server/proj/loginApi/migrations/__pycache__/__init__.cpython-310.pyc index d72607b42c763ae3d2993479fffc40c76a2cd86f..a369094428f8d885e199fdf436d42a9dced4aec2 100644 GIT binary patch delta 88 zcmbQqxPp;8pO=@50SFG93!TVqd6%$&VT2vg9o0yef6q8w^Ta=iRnIGdB5(K7! la%HJSF$G2WSur{J>6v+s1(`9qndwD|C7Jno#W52r6#xP9AD#dJ delta 73 zcmZ3%IFpe(pO=@50SM~V3MX>g7}@BTB^K$ImzV2%h6E+1WajG^rxul^7U>rh`(vz3q=>} diff --git a/server/proj/news/__pycache__/__init__.cpython-310.pyc b/server/proj/news/__pycache__/__init__.cpython-310.pyc index c158afdaf0912bd8f268f78c53cea9b5703202c2..8d9c6494373932781453cc7dc83fb8db5f025777 100644 GIT binary patch delta 73 zcmeBToXN)5P0Y$Kipea|ElNzu%#ZO52?EnV Wxw6!vn1Z7GteCvi^5U3@SqcC{y%|IR delta 58 zcmbQq*u}`5&&$ij00i}Fg%i1Lly&vX5{vZ9%ggmWLxK`hGV}F|Q;W({i}VYM^0V~w MQp=0=Csrx|0K!iZz5oCK diff --git a/server/proj/news/__pycache__/admin.cpython-310.pyc b/server/proj/news/__pycache__/admin.cpython-310.pyc index 68134d629e5731f2759e3ae17f497f8d6e8cba47..332b92017f1fa85035e634cfccf8bb2e400ff685 100644 GIT binary patch delta 73 zcmZo?oW{tV&&$ij00ios#S^)0j4Yk4VnT~ki;81%6SMM*Vlqo~ixN{Z^J6?ig1|IT Wt}L}Erl2T4D<&_syf|iJmMj4F delta 58 zcmbQn*v`nE&&$ij00i}Fg%i1Ll(qEB5{vZ9%ggmWLxK`hGV}F|Q;W({i}VYM^0V~w MQp=0=CsxV=0KkM1vH$=8 diff --git a/server/proj/news/__pycache__/apps.cpython-310.pyc b/server/proj/news/__pycache__/apps.cpython-310.pyc index f3907b479266a996afe479995513ba1367c6babf..86d2b9ca109dbbd2622f92a7de45d0a054806427 100644 GIT binary patch delta 77 zcmbQsyoQ-KpO=@50SFG93r(A}k(Yzf$imqwCbT%Us5mA!F)P0)CbLAhC^027KgKg8 b2uuUz%2JDB3X1ZxV)9bUi(@8RFs1?ktCJdO delta 62 zcmZ3(JeQd_pO=@50SM~V3e$Qv@^UaLYwDLJ7U`Flm+O0m1SO_q=Ia-y7L}zI=@%5` QXX)pqmKWy9^3Gv2vU0YH2`x@7Dvrrb%*ro{$t=+=N=(VjkMRr% b0@FabvecrOf};Gan7q{T;+V~67-bj%zZV*y delta 63 zcmey)`ht}=pO=@50SM~V3e!?I^3GvY*48geEYdG8FW2`B2}(@K%-1hYEh0g+Nh66Iz^FR2-9=n3Z1?lUbr$l$es4ALAJk l1g3#Vo7FxUa|hg=vnBOB^K$ImzV2%h6E+1WajG^rxul^7U>rh`RXiU}=FEh>)5P0Y$Kipea|ElNzu%#ZO52?EnV axw6!vn1Z7GteB$Gq@v8^?BbY-c?tlr=o

5LCTB5b0|3SQ|R2NGC diff --git a/server/proj/rubricks/__pycache__/apps.cpython-310.pyc b/server/proj/rubricks/__pycache__/apps.cpython-310.pyc index 26f32e50123e80bce08152374da832f664210b21..b04edd35e6f096a0055ffbc9de2ece6e05f3dcb0 100644 GIT binary patch delta 81 zcmZ3sbZ*kb<=BJeAq}nk8dBrS1f`>tj830d3G<5&~ delta 228 zcmdnUv512=pO=@50SM~V3e(~?@;Wjy-kR*sSi{IZ`3z&A4j)kFm%e^kVv&A%dAYu4 zNKj%*X1;!LYEfBgk$yo@ewKbwX;M*Ua(1!)I%p#0DlS`RRqy#_$ASFmd6%$&VT2vg9o0yef6q8w^Ta=iRnIGdB5(K7! ka%HJSF$G2WSusVWNky5-*+8|K=|zbpnfZCeF%v5l00o;L&;S4c delta 73 zcmZ3%IFpe(pO=@50SM~V3MX>g7}@BTB^K$ImzV2%h6E+1WajG^rxul^7U>rh`(vz4(=Eo diff --git a/server/proj/userProfile/__pycache__/__init__.cpython-310.pyc b/server/proj/userProfile/__pycache__/__init__.cpython-310.pyc index 7914c4dfdc9b0fd2ad5fc9278b5ab90c85e08380..522c76a04be5801b8bfde9efc00867acfc035043 100644 GIT binary patch delta 80 zcmbQpxPXy6pO=@50SFGB3!TVqW9jT{6%$&VT2vg9o0yef6q8w^Ta=iRnIGdB5(K7! ca%HJSF$G2WSuv$RPC!w9T4qja%)~+k00`?GI{*Lx delta 65 zcmZ3$IFXS%pO=@50SM~V3MX>gXqo7jB^K$ImzV2%h6E+1WajG^rxul^7U>rh^*ba1wc2`x@7Dvrrb%*ro{$t=+=N=(VjkMRr% z0@FabvecrOf};Gam{K4opeR2rGbc4>ay_GxSQKAMR$^XyzFu;EUP)1AQV|o-@Tke# G8T$a_F(sY= delta 81 zcmcb@a+HNPpO=@50SM~V3e#jZ@_I088S0lM7U`Flm+O0m1SO_q=Ia-y7L}zI=@%5` hXX%#$IRQoaX_+~x`jh(@l^AbL-pD8dB#$xn0RY#A8r%Q? diff --git a/server/proj/userProfile/__pycache__/apps.cpython-310.pyc b/server/proj/userProfile/__pycache__/apps.cpython-310.pyc index b65ddb55099c90fa5d0eaf58bc9a4bd6423c4cc0..03d8c35127097ca55bc0c2386350998083a2415f 100644 GIT binary patch delta 84 zcmdnQe2|$ppO=@50SFGB3r$?8@7}fv) diff --git a/server/proj/userProfile/__pycache__/serializers.cpython-310.pyc b/server/proj/userProfile/__pycache__/serializers.cpython-310.pyc index a222c8e2ef5448ce17346d108b9c65f3079ebc25..75b8fb88f3d480cf240254d9704b9f11b89d98dc 100644 GIT binary patch delta 84 zcmaFB`ks|HpO=@50SH!k#;2KVE>(|6Iz^FR2-9=n3Z1?lUbr$l$es4ALAJk g1g3#ELV?6Iz^FR2-9=n3Z1?lUbr$l$es4ALAJk z1g3#BHg$B&W0J0?DH+ F(*evZC(Zx> delta 98 zcmaFOb%%>LpO=@50SM~V3e#LR@;+wLGSn|iEYdG8FW2`B2}(@K%-1hYEhqnsV?0BG rz%)>Z`RixNvR^Ye=JC-*RS0RYtf8yx@u diff --git a/server/proj/userProfile/migrations/__pycache__/__init__.cpython-310.pyc b/server/proj/userProfile/migrations/__pycache__/__init__.cpython-310.pyc index 9c2bcc5ef40caacfb8da4caf02eab6107f2a25ba..4824d080705b49e1a059021438a2b2e315019ee3 100644 GIT binary patch delta 91 zcmbQkxSEkWpO=@50SFGB3!TVqgnA+=?B^K$ImzV2%h6E+1WajG^rxul^7U>rh