From 29d4a3a323940e7ebc76267d007ce865013cb285 Mon Sep 17 00:00:00 2001 From: 314dro Date: Wed, 8 Jan 2025 19:06:16 -0300 Subject: [PATCH 1/4] =?UTF-8?q?feat(chat):=20A=20cria=C3=A7=C3=A3o=20do=20?= =?UTF-8?q?chat=20foi=20vinculada=20a=20um=20item?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/__init__.cpython-312.pyc | Bin 122 -> 122 bytes API/AcheiUnB/__pycache__/urls.cpython-312.pyc | Bin 1840 -> 1840 bytes API/AcheiUnB/__pycache__/wsgi.cpython-312.pyc | Bin 612 -> 612 bytes ...chatroom_item_description_chatroom_item.py | 30 ++++++++++++++++ API/chat/models.py | 8 +++-- API/chat/serializers.py | 20 ++++++++++- API/chat/views.py | 33 +++++++++++++----- .../__pycache__/__init__.cpython-312.pyc | Bin 119 -> 119 bytes API/users/__pycache__/admin.cpython-312.pyc | Bin 116 -> 116 bytes API/users/__pycache__/apps.cpython-312.pyc | Bin 546 -> 546 bytes API/users/__pycache__/models.cpython-312.pyc | Bin 4814 -> 4814 bytes API/users/__pycache__/views.cpython-312.pyc | Bin 18484 -> 18484 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 130 -> 130 bytes 13 files changed, 78 insertions(+), 13 deletions(-) create mode 100644 API/chat/migrations/0003_remove_chatroom_item_description_chatroom_item.py diff --git a/API/AcheiUnB/__pycache__/__init__.cpython-312.pyc b/API/AcheiUnB/__pycache__/__init__.cpython-312.pyc index bc8c64f29b8cc4e19a457ff1addb2c1c7a1155c6..c0ebddc8489509ee04b05cdbd6e57b3d7a40fcc0 100644 GIT binary patch delta 17 Xcmb=b;y%sG%f$c${p$-Sa_0j8C;kMf delta 17 Xcmb=b;y%sG%f$c$!sl%!a_0j8B;o`Z diff --git a/API/AcheiUnB/__pycache__/urls.cpython-312.pyc b/API/AcheiUnB/__pycache__/urls.cpython-312.pyc index 77d51c6a0a533ab5bbae894429d562d62425d61a..1fbfe9d7c7be4f4daaaa38b4d872c6d90b802d30 100644 GIT binary patch delta 20 acmdnMw}FrQG%qg~0}%W_Ub~T7l^p;(;sv4r delta 20 acmdnMw}FrQG%qg~0}$+UE#Anj$_@ZF-2~MD diff --git a/API/AcheiUnB/__pycache__/wsgi.cpython-312.pyc b/API/AcheiUnB/__pycache__/wsgi.cpython-312.pyc index 0fbfcfb9fc0aaddf7675831bcd03b2c5f463dede..425443071d3ea3ee62c9f5669bdbb29d1919435b 100644 GIT binary patch delta 20 acmaFD@`Q!^G%qg~0}%W_Ub~Syk_iApl?EjM delta 20 acmaFD@`Q!^G%qg~0}!lrF5bu;$pipB4FyF2 diff --git a/API/chat/migrations/0003_remove_chatroom_item_description_chatroom_item.py b/API/chat/migrations/0003_remove_chatroom_item_description_chatroom_item.py new file mode 100644 index 00000000..11010624 --- /dev/null +++ b/API/chat/migrations/0003_remove_chatroom_item_description_chatroom_item.py @@ -0,0 +1,30 @@ +# Generated by Django 5.1.4 on 2025-01-08 21:10 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("chat", "0002_remove_message_chat_chatroom_message_room_and_more"), + ("users", "0004_merge_20241229_1953"), + ] + + operations = [ + migrations.RemoveField( + model_name="chatroom", + name="item_description", + ), + migrations.AddField( + model_name="chatroom", + name="item", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="chatrooms", + to="users.item", + ), + ), + ] diff --git a/API/chat/models.py b/API/chat/models.py index 245c09a4..0c4df11a 100644 --- a/API/chat/models.py +++ b/API/chat/models.py @@ -1,6 +1,8 @@ from django.contrib.auth.models import User from django.db import models +from users.models import Item + class ChatRoom(models.Model): """Representa uma sala de chat entre dois usuários.""" @@ -11,9 +13,9 @@ class ChatRoom(models.Model): participant_2 = models.ForeignKey( User, related_name="chatrooms_as_participant_2", on_delete=models.CASCADE ) - item_description = models.CharField( - max_length=255, blank=True, null=True - ) # Descrição do item perdido (opcional) + item = models.ForeignKey( + Item, related_name="chatrooms", on_delete=models.CASCADE, null=True, blank=True + ) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): diff --git a/API/chat/serializers.py b/API/chat/serializers.py index f49a60c6..9ce24a1c 100644 --- a/API/chat/serializers.py +++ b/API/chat/serializers.py @@ -1,5 +1,7 @@ from rest_framework import serializers +from users.models import Item + from .models import ChatRoom, Message @@ -16,6 +18,8 @@ class ChatRoomSerializer(serializers.ModelSerializer): messages = MessageSerializer(many=True, read_only=True) participant_1_username = serializers.ReadOnlyField(source="participant_1.username") participant_2_username = serializers.ReadOnlyField(source="participant_2.username") + item_id = serializers.IntegerField(write_only=True, required=True) + item_name = serializers.ReadOnlyField(source="item.name") class Meta: model = ChatRoom @@ -25,7 +29,21 @@ class Meta: "participant_1_username", "participant_2", "participant_2_username", - "item_description", + "item_id", + "item_name", "created_at", "messages", ] + + def validate_item(self, value): + # Verifica se o item associado existe + if not Item.objects.filter(id=value.id).exists(): + raise serializers.ValidationError("O item associado não foi encontrado.") + return value + + def create(self, validated_data): + # Associa o item ao chat usando o item_id + item_id = validated_data.pop("item_id") + validated_data["item"] = Item.objects.get(id=item_id) + return super().create(validated_data) + diff --git a/API/chat/views.py b/API/chat/views.py index 39047108..c00e3cd1 100644 --- a/API/chat/views.py +++ b/API/chat/views.py @@ -1,10 +1,11 @@ -from django.db import models # Certifique-se de importar models para usar Q from rest_framework.exceptions import ValidationError from rest_framework.permissions import IsAdminUser, IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.viewsets import ModelViewSet +from users.models import Item + from chat.models import ChatRoom, Message from .serializers import ChatRoomSerializer, MessageSerializer @@ -16,17 +17,31 @@ class ChatRoomViewSet(ModelViewSet): permission_classes = [IsAuthenticated] def create(self, request, *args, **kwargs): - participant_1 = request.data.get("participant_1") - participant_2 = request.data.get("participant_2") + participant_1_id = request.data.get("participant_1") + participant_2_id = request.data.get("participant_2") + item_id = request.data.get("item_id") + + # Verifica se todos os dados necessários foram fornecidos + if not participant_1_id or not participant_2_id or not item_id: + raise ValidationError( + "Os campos participant_1, participant_2 e item são obrigatórios." + ) + + # Verifica se o item existe + try: + item = Item.objects.get(id=item_id) + except Item.DoesNotExist: + raise ValidationError({"item": "Item não encontrado."}) - # Verifica se a sala já existe + # Verifica se já existe um chat para este item e participantes if ChatRoom.objects.filter( - ( - models.Q(participant_1=participant_1, participant_2=participant_2) - | models.Q(participant_1=participant_2, participant_2=participant_1) - ) + item=item, + participant_1__in=[participant_1_id, participant_2_id], + participant_2__in=[participant_1_id, participant_2_id], ).exists(): - raise ValidationError("Já existe um chat entre esses participantes.") + raise ValidationError( + "Já existe um chat para este item com os mesmos participantes." + ) return super().create(request, *args, **kwargs) diff --git a/API/users/__pycache__/__init__.cpython-312.pyc b/API/users/__pycache__/__init__.cpython-312.pyc index fb3cf9e0f9a90de346ed2ab228dc368b80407b8d..b05ac2fc7469ec99bf183b16983c7d796b3663e6 100644 GIT binary patch delta 17 XcmXRf=RVEL%f$c${p$-Sa_0a5Czu4F delta 17 XcmXRf=RVEL%f$c$!sl%!a_0a5Bzy!9 diff --git a/API/users/__pycache__/admin.cpython-312.pyc b/API/users/__pycache__/admin.cpython-312.pyc index 009c63fbf05004d141f9267a6454f2072399da85..db38109f75e5c5ef9df217e229e5a81972fc10d4 100644 GIT binary patch delta 17 XcmXRZ;XcjF%f$c$|Bu&BDDtZMg delta 17 XcmXRZ;XcjF%f$c$zXOUVa%TbnC+7sF diff --git a/API/users/__pycache__/apps.cpython-312.pyc b/API/users/__pycache__/apps.cpython-312.pyc index 8c87563a7c4c77b828b4583079779add76e594ce..a148bcf728d28e1d239ff8d92dbc01260579e928 100644 GIT binary patch delta 20 acmZ3)vWSKIG%qg~0}%W_Ub~T7oCyFpMFn2~ delta 20 acmZ3)vWSKIG%qg~0}yc97jNViX955&DFfF4 diff --git a/API/users/__pycache__/models.cpython-312.pyc b/API/users/__pycache__/models.cpython-312.pyc index 7460d650318a4ebc13fe08f5f21de6efc6e1c492..fe0c6c7fe5dc112d1897d2e0226c283bebfd4029 100644 GIT binary patch delta 20 acmX@7dQO%5G%qg~0}%W_Ub~U|un+)5*#@-$ delta 20 acmX@7dQO%5G%qg~0}!lrF5bv}SO@?=Q3cfi diff --git a/API/users/__pycache__/views.cpython-312.pyc b/API/users/__pycache__/views.cpython-312.pyc index ccaa41a03261cd4d78dce9b23259695a6e0f1cd3..d7b2eeaa7c833d206c85c46c7ca4a5176d023e87 100644 GIT binary patch delta 22 ccmdlofpN delta 22 ccmdlofpN Date: Wed, 8 Jan 2025 19:32:35 -0300 Subject: [PATCH 2/4] refactor(chat): Refatorando o serializers.py --- API/chat/serializers.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/API/chat/serializers.py b/API/chat/serializers.py index 9ce24a1c..5802129a 100644 --- a/API/chat/serializers.py +++ b/API/chat/serializers.py @@ -1,7 +1,5 @@ from rest_framework import serializers - from users.models import Item - from .models import ChatRoom, Message @@ -35,15 +33,14 @@ class Meta: "messages", ] - def validate_item(self, value): - # Verifica se o item associado existe - if not Item.objects.filter(id=value.id).exists(): - raise serializers.ValidationError("O item associado não foi encontrado.") - return value + def validate_item_id(self, value): + # Verifica se o item associado existe + if not Item.objects.filter(id=value).exists(): + raise serializers.ValidationError("O item associado não foi encontrado.") + return value - def create(self, validated_data): + def create(self, validated_data): # Associa o item ao chat usando o item_id - item_id = validated_data.pop("item_id") - validated_data["item"] = Item.objects.get(id=item_id) - return super().create(validated_data) - + item_id = validated_data.pop("item_id") + validated_data["item"] = Item.objects.get(id=item_id) + return super().create(validated_data) From 7d6032e4bbd734e02280a4fe18585ac5a019e45b Mon Sep 17 00:00:00 2001 From: pedroeverton217 Date: Wed, 8 Jan 2025 20:21:14 -0300 Subject: [PATCH 3/4] =?UTF-8?q?altera=C3=A7=C3=A3o=20m=C3=ADnima=20no=20re?= =?UTF-8?q?adme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a2ab6a9e..61c7328b 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ AcheiUnB é um projeto desenvolvido para facilitar a vida dos estudantes da Universidade de Brasília (UnB) na busca e recuperação de itens perdidos. A plataforma permite que os alunos registrem e encontrem objetos, facilitando o contato entre quem perdeu e encontrou o item. O objetivo é reduzir a dependência de grupos de mensagens e proporcionar um sistema mais organizado e acessível para achados e perdidos. + ## 📝 Sumário - [AcheiUnB](#acheiunb) From 8b24398bf46bfc56e978473ca7d00ca48ddede0a Mon Sep 17 00:00:00 2001 From: 314dro Date: Thu, 9 Jan 2025 11:05:28 -0300 Subject: [PATCH 4/4] chore(merge): Resolvendo problema de merge --- .../__pycache__/__init__.cpython-310.pyc | Bin 208 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 122 -> 0 bytes .../__pycache__/settings.cpython-310.pyc | Bin 3158 -> 0 bytes API/AcheiUnB/__pycache__/urls.cpython-310.pyc | Bin 1231 -> 0 bytes API/AcheiUnB/__pycache__/urls.cpython-312.pyc | Bin 1840 -> 0 bytes API/AcheiUnB/__pycache__/wsgi.cpython-310.pyc | Bin 553 -> 0 bytes API/AcheiUnB/__pycache__/wsgi.cpython-312.pyc | Bin 612 -> 0 bytes API/users/__pycache__/__init__.cpython-310.pyc | Bin 145 -> 0 bytes API/users/__pycache__/__init__.cpython-312.pyc | Bin 119 -> 0 bytes API/users/__pycache__/admin.cpython-310.pyc | Bin 186 -> 0 bytes API/users/__pycache__/admin.cpython-312.pyc | Bin 116 -> 0 bytes API/users/__pycache__/apps.cpython-310.pyc | Bin 422 -> 0 bytes API/users/__pycache__/apps.cpython-312.pyc | Bin 546 -> 0 bytes API/users/__pycache__/models.cpython-310.pyc | Bin 183 -> 0 bytes API/users/__pycache__/models.cpython-312.pyc | Bin 4814 -> 0 bytes API/users/__pycache__/views.cpython-310.pyc | Bin 726 -> 0 bytes API/users/__pycache__/views.cpython-312.pyc | Bin 18484 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 156 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 130 -> 0 bytes 19 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 API/AcheiUnB/__pycache__/__init__.cpython-310.pyc delete mode 100644 API/AcheiUnB/__pycache__/__init__.cpython-312.pyc delete mode 100644 API/AcheiUnB/__pycache__/settings.cpython-310.pyc delete mode 100644 API/AcheiUnB/__pycache__/urls.cpython-310.pyc delete mode 100644 API/AcheiUnB/__pycache__/urls.cpython-312.pyc delete mode 100644 API/AcheiUnB/__pycache__/wsgi.cpython-310.pyc delete mode 100644 API/AcheiUnB/__pycache__/wsgi.cpython-312.pyc delete mode 100644 API/users/__pycache__/__init__.cpython-310.pyc delete mode 100644 API/users/__pycache__/__init__.cpython-312.pyc delete mode 100644 API/users/__pycache__/admin.cpython-310.pyc delete mode 100644 API/users/__pycache__/admin.cpython-312.pyc delete mode 100644 API/users/__pycache__/apps.cpython-310.pyc delete mode 100644 API/users/__pycache__/apps.cpython-312.pyc delete mode 100644 API/users/__pycache__/models.cpython-310.pyc delete mode 100644 API/users/__pycache__/models.cpython-312.pyc delete mode 100644 API/users/__pycache__/views.cpython-310.pyc delete mode 100644 API/users/__pycache__/views.cpython-312.pyc delete mode 100644 API/users/migrations/__pycache__/__init__.cpython-310.pyc delete mode 100644 API/users/migrations/__pycache__/__init__.cpython-312.pyc diff --git a/API/AcheiUnB/__pycache__/__init__.cpython-310.pyc b/API/AcheiUnB/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index d9da95064c79d21bfe50b8febae046924a6967b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmd1j<>g`kf|+s_=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o5>1$koryE74EZ z4=qkDD%MX<%+1Wv_s>gpDatHM)j!-=l$xlJlBy6=l$ey5laa3cctl@tJvu-BgQ1KLBTt^0uwiKaYLmmqhs-}}9cR#r+G_}uyFi{9VX zGMT@phxtzt4v*nSMIn4X9UHL^I0=o24>Iu#&T6NaY8hRfK zKfjOGUkT%Vu7B&gRXv=L0jk=x{f|XH(>n;ef%;H zl$Vi=eh0E;^!xF8bG-h62tCQUf^In&oT_L)*D9pDhh9>YlP zp31k;n5p8S0SRTwyqHZXZ_6VJV&tjR`^sm^4sh>-&_NVqnS>yJ;4u<~GJIK|fJPGF zyI=q=^%)z|FH{vpK2;_tp$F6a;cWD3hbZbC0|b zfg(&|`Pd6anEpSyVthEK=-0HKnq`4YEsyn+y=fRoNU=YPapl(MkG9L7JfJ@uC+Nk4 zhhh1}_ptOH+f^bZg0rBIAMu&{&Mic<$rKB=7Yd{bR@QD{= zWgK9_P8BPSG`uv3@#@`m5nB{1mxiQJxIal)FElvc)e}3fo&!G*KZ}($wfX!jr zZ}glm&Osd~cW0@Y=4xJ*Hp%KaOEQbsS(T=qbwLjf5mg!y!ol9;l-yesoJPStqkS_5 zGp3c<&{0NlKofQ98N-8N0CVSD)f7=1k05)BrhI+e3qLRyO3Q~pMNmpovb`wgB9(%0 zchpPnyaQ#7U%>oe$){7=H)8P?$*JGTy#?a4%)W(ThAT_Fu%}hO)|)jh)r_{qi(0GY zj^7Gq%QnoWm290w?1c7+;thw8`f*+HrSq=J0wdpO7}d6Enfta|ts8pNc8wa}ya2TH zYFoE?rkv$Ven6m5U4nQXnlHwTXP@I!o=4HZBVn=vqcn`DG77s&H|FnY9s7yf(%M?X z;st~cy-~oD8&lU2(99}j7*W=XF?|tm5p{WScIG*X!@kF*`@8pc%6XpGn+HZy=TcK^ zz}m6&HZQg`%X((EAt+Bw%Z4#*w(a)F50#zuBVz@(KFpn=8n9Jkcnt+qskX5>IS>^@Th1=Y9xfsFiF@$R~Al+C5WxVLR z=~V-`0@Onk9Almz!mtk+FYalUo|Zc=O={BpTK|scYWiO1fUjuvy7^46xoHhp{F2eM zYybfOO5Nh6hEc24^=DdJ=bLF+Lb)4NE$tb1+EW%^ZkwjnBt8G3tYC5#$)|-fLI(qv%S8r%WoiEii zTT6Yh_|<8LObXb2s?`lZn!vwO*O~_%?Lc>{W=#iUjE3$yCe(frs@^p|d)Vap^v!l4 z95#4TO)cl^HGN;})NL0eo9@1$*K53B88)!g_Z{f&@ieQ;#y3OvHI6P$Jmn*mhITRIO#GXNTFJIc0dti(f*0jspBuT9Pz@MamSH zmxZ;gRFJZgSj-hy#T8MI{v+i@Nfbn(D2lJ8e@U;UH8Be(cmVrvfW4MVlDPa@ETvSl cNBRxm>wuN!e*cso?WP}F1cIw?-H2_>7PwS^SP&~#S|J21hh9Q9cAHd59N7-A6%vQ# zx<7=!Fdn}bu8CE( z?JWDt0oftmrA@k|ciDu9KJ}KnWT3r;GaHiKmzF<_J~k}NJAHA2Vph!4Ma3hTvI5N+ zM~87j)6?P+Dmh!ySO%W=Dxv62#j`S!lJY{lL0Kv!;;fQXAb=4_GW0g3??ix(03&Cd zqO<_Gd<|S?G!hgEN~a!zkw{sJDaM4wA|T7CSg=jHnB|xj_-=53B`ecdU>%Ghy};g+ z_fZa5V(J}LMQk{mvn)pc_uPe|6Y*h$H zq1a?^G}^E0N?1jgAi@ z5o(Y<{|`pTMVwV6Efyex$)`)xE#ByJY=l8T1=^!y>7I|~wUpDfTt=qo_zj(1Pv382eHC#@3B1L#3QulL?u;kn%@f9l q&yVphN2dzPbJe+*Gg4*rfejGi8cdGW8xHNB{xy5{b$eiUe*6U6PJpKX diff --git a/API/AcheiUnB/__pycache__/urls.cpython-312.pyc b/API/AcheiUnB/__pycache__/urls.cpython-312.pyc deleted file mode 100644 index 1fbfe9d7c7be4f4daaaa38b4d872c6d90b802d30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1840 zcmaJ>%TF6e7@xJ*ueFU|#JC1rnv@t*>J_v_)Z(E;M17xyZ zA8A#o9K#78bB)L!kYjE=^kU0MrmIFd^wb+IsVeo-&dl1FLY0*~^PAuI`@Z?+n{WJ6 zILrb3{qy5jrI;6hU&*5P4Rpcjx(k2P$yv0G&|kKm!0RlS-| z@KNkh{aQc>Xq>>&wO0*lAt9uNg)m+F)B!CbL@4&FQ7tCKw73w*>%jLwNVovxWDa^N z6TOuBb7iuRd*~47Nj~ZqgptaWvpzq{p(o)(x5H4~0M@;EUg2OlazPh`@k?9`Cgk`9 z9mzUW$zP6m*rnvb3m#XnNBET<$qODs*drjP4jCupf6o0HwWa^pHjHhtSMD^@->Jk2 zDacf2E}sNlg()1#jjiuqwqkbnGW%q-mt{Q+fRNhF>}GPW|3-v4#`c@gvJ|~!V(c|7 z(NZLgJff^A`eRHXsLK%LT((cqCAB6)o2`mg854trQ{mi zLeMM|h6KBhXA^r2EJGDqaKnU-IIbxYGE8I3DoUcNZi>>j)GaJM28&11FsEre902Rg z_9cE0y+hptIoI7fr{FZd$d@fmMff$5llc(*yar9nByMAWU*W}SmA@gCp|YXh{xl) zcZmGWq99Rv=qXW%;2_0a34RxVUJLC4n>7^+_c`5XkcfSvStP-*7gBNiTM+4{?ODEc zbK?U$aOc+YM>mQaYoFMh1J_no)*l0uAW>t)-#@Pza!rMci2N^-el)XqJaID&^Bjyl z2a|NX_5zIm<#IEwKRLjpUVy?Meul~Y&H+zgFZJ-fgTj8{U}=A;&0hPN^)~~}|?r9(g)rbFHzt=F+_*b{%ua{;6Ys`Z)Z?OCRg;I>F+5pEU|c>~(4$ zY$m6h$y_Hn-AYcklkYSOcV4<(Sn9?59{Wd{nb~G0-^t9jGPCW>+|zIR*1h5VQe(TF zoNTji;aGdg{h`K4J9fRzW@$F#&FsRXuRGa=R(7GCU3#YBlupJI5!Zv@$rNBiKP-N? nc+5ujXB!ip^i(T7_4LEe{7P$nYx15cN7~Qx=MfgnIThf~-rRmkJ?*TB4wmBBd2lE*p0}**NlgR%<8yxN_oO zz>$Ac`O1mEzzJ`npp4|Po=5ZE8{4?QACnO04=?iX5h1^8upP|+-iKw6LXu=mWF)DM z#!=WCnih?5BO(yZn?H7BQ||nv0X4pn@vfvJ(%!v)h`)~d1D2tgs+>)+V!dnz>dJgz zWrcIdToT6v$KbX^3zoSVuyu#fT3l;j!ZN`MlnV_V4NK5$DJr!p8Bu^_lZhxxtuo;h zn#m;aeGD=MR=|`Aip8qH&;)X2*;HwG$t*xTbFQ=}oJ-7XBIm;7xbc)>!NKt3)Oc5bas0;SipPJ#eUM>0^3QW{X?>P%+3<&_pL)aoMLIgWyc`VsqxAE|>DBq! z{j<&Zi3R7B$!)vkTWK0Rq^YN9{lVHvl7#`1nzy1s$+y5PRfWdKp;5wAEVT2Fw^*uy IpVFBA19TIpdjJ3c diff --git a/API/AcheiUnB/__pycache__/wsgi.cpython-312.pyc b/API/AcheiUnB/__pycache__/wsgi.cpython-312.pyc deleted file mode 100644 index 425443071d3ea3ee62c9f5669bdbb29d1919435b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmYjPF>ezw6t?d|Q#mvO)O5BGOC-2!2Nr~oN>idBNQbmS%5rhfFBeBX`*e0wQi-7x z;ur86P=5#mOA$z*n?Q(x4U~-qoTR7r4SwHy&+mQTv;1LgjUZ?L-oHxTV1$0mgVHJ& zV0P%hTf|Wxam+o5``CG3da2*{F#?GBB#8j6GtbxybA5r_lzm}a>iLu>;=I+nuAOdBxNj({#Zn3U{L0%e9WnreO| z;huyENIGG;SdaYKnClf(q{kTj59_TOD%9q@JdrYJ=*5W59} z`P|%hOhpycMC4i(#5HmlvLk7W+7-%oXf~Jhw-LHzSkf%i2HCV&eYkwXM|s`davuYk zO?UkEF~)zqDz40KAxwUvt#8PCO-{)d)cA-R=NrNK=FVr-`d+{Nseb3QmS1;G{{c~u Buk`=` diff --git a/API/users/__pycache__/__init__.cpython-310.pyc b/API/users/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 89ceb1cb65d22d5e6038b1388566a7112c4fdd88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmd1j<>g`kg036d=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6v6KO;XkRlguL zr6|8NsZ`&{z{o_`NY^nrBQ-NL&q?1gz*E1pIJKx)KR!M)FS8^*Uaz3?7Kcr4eoARh OsvXF*VkRKL!Tg`kg036d>GnYSF^Gc(44TX@fuanW zjJH@5Q*tx&{4|+v@ug%X=B4NBCFkdr6lEqAfecv5P{abHz{D>@{fzwFRQ-a~l%o97 zq*8q&10xe%BVEVjjMU7~JSTm}08jnW;?$yIeXyB&1(mlrY;yBcN^?@}7=fk~gG>}) F0015LDrEow diff --git a/API/users/__pycache__/admin.cpython-312.pyc b/API/users/__pycache__/admin.cpython-312.pyc deleted file mode 100644 index db38109f75e5c5ef9df217e229e5a81972fc10d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmX@j%ge<81pklMrpp59#~= qSU)i(H#1MKpz;=nO>TZlX-=wL5i3v)BM=vZ7$2D#85xV1fh+(m#}||U diff --git a/API/users/__pycache__/apps.cpython-310.pyc b/API/users/__pycache__/apps.cpython-310.pyc deleted file mode 100644 index dea282bcc85c943435d59af49956cf86ca251212..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 422 zcmYjNJx{|h5VhkJg?=okD-vsjnp6=ZLQRoCEEN*!lEq4UZW@%tA+85lVPfEa@Q;vJ zCjJ5w=cE!n>7IRe@7~!bN25MLd;dDmKJfgu!J)Yr%+S>t0uZ1DDQQ9}xh3ELdn3RE zePxLQ?gR0AKgc3JHOFyXU(0HfXKR}|G>X9tU5yb0NhlEPrU?Tlae<+VYX(at8r2EB zoWf&TWio(OP)ZPm3g&qh>z%yGMFFO#EqCGfjK_JEmV$HB=NzfJu=gS7PdY93l@kz~ zR2Ms*q5$8t3a+hvlE!YLh2Lqom8A%40gcov9Y)jWViHZ_^;YD|Y97Y-cVRm=OzT<& y^>f3p*X~LkA$Y{49&K|ApP9k_1D4x3c8F#FkLzv&%o*>pd-s*ylCpwBGG>4I>SVV7 diff --git a/API/users/__pycache__/apps.cpython-312.pyc b/API/users/__pycache__/apps.cpython-312.pyc deleted file mode 100644 index a148bcf728d28e1d239ff8d92dbc01260579e928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 546 zcmY*Wze~eF6n>Wc!I*3pe-MYDCIb!b;DrpmQ&5(lN&_BSfe}njk zIJk&Y2?&CdTOplX^j?yJzTw@wd*6NEckfXPv zOk6@hflFY@9GJ?7ESz7Fs#~DmKtRgdvaL-2bVB#6-Hc@ zDXzxUIk-CV1d+q8opHo?D4f$#&`+n)#fXP2*Hgp}H{`Vjps_+L zg)-@B@QB7V!9!mlwEJ!Kyg2Tam$4E~oaK7LJ(kV3|HwP#QBz(KIFoz$XtoPkz`$QIca0U&qz?COlVzL zGRlDvl@Rg{ U2kSg`kg036d>6SqHF^Gc(44TX@fuanW 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 axQA{~a*PdZ56|7l)-!ZdGDQWqkN+1N3%7Ux diff --git a/API/users/__pycache__/views.cpython-312.pyc b/API/users/__pycache__/views.cpython-312.pyc deleted file mode 100644 index d7b2eeaa7c833d206c85c46c7ca4a5176d023e87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18484 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 Zub}c4hfQvNN@-529mwEfCLqDW006XqBLn~d diff --git a/API/users/migrations/__pycache__/__init__.cpython-312.pyc b/API/users/migrations/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 1d613c02232b73c37bf6f101a57abdab15da18ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmX@j%ge<81pVs^(?RrO5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!Qq)f@D9|r0PAw|d z&&^CPN-W9D&nwoCkI&4@EQycTE2zB1VUwGmQks)$SHud`!3e~~AjU^#Mn=XWW*`dy Dx;Pw!