From 94501bf9866bc29e9091c2cbc0eefd3ef8d85091 Mon Sep 17 00:00:00 2001 From: "afanasyev.aa" Date: Sun, 6 Apr 2025 00:26:30 +0900 Subject: [PATCH] switched from sqlite to postgres --- api/__pycache__/admin.cpython-311.pyc | Bin 536 -> 742 bytes api/__pycache__/models.cpython-311.pyc | Bin 2006 -> 3098 bytes api/__pycache__/serializers.cpython-311.pyc | Bin 837 -> 6114 bytes api/__pycache__/urls.cpython-311.pyc | Bin 847 -> 1981 bytes api/__pycache__/views.cpython-311.pyc | Bin 5146 -> 12796 bytes api/migrations/0001_initial.py | 49 ++++++++++++++++-- ...diction_user_userprediction_delete_todo.py | 46 ---------------- ...userprediction_unique_together_and_more.py | 30 ----------- .../0004_satellite_telemetrypacket.py | 35 ------------- .../__pycache__/0001_initial.cpython-311.pyc | Bin 995 -> 3207 bytes .../__pycache__/0001_initial.cpython-313.pyc | Bin 959 -> 0 bytes ...userprediction_delete_todo.cpython-311.pyc | Bin 2221 -> 0 bytes ...userprediction_delete_todo.cpython-313.pyc | Bin 2216 -> 0 bytes ...n_unique_together_and_more.cpython-313.pyc | Bin 1427 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 140 -> 140 bytes .../__pycache__/__init__.cpython-313.pyc | Bin 139 -> 0 bytes db.sqlite3 | Bin 397312 -> 0 bytes docker-compose.yml | 39 ++++++++------ requirements.txt | 4 +- testapi/__pycache__/settings.cpython-311.pyc | Bin 2906 -> 4112 bytes testapi/__pycache__/settings.cpython-313.pyc | Bin 3574 -> 4054 bytes testapi/settings.py | 20 +++---- 22 files changed, 80 insertions(+), 143 deletions(-) delete mode 100644 api/migrations/0002_prediction_user_userprediction_delete_todo.py delete mode 100644 api/migrations/0003_alter_userprediction_unique_together_and_more.py delete mode 100644 api/migrations/0004_satellite_telemetrypacket.py delete mode 100644 api/migrations/__pycache__/0001_initial.cpython-313.pyc delete mode 100644 api/migrations/__pycache__/0002_prediction_user_userprediction_delete_todo.cpython-311.pyc delete mode 100644 api/migrations/__pycache__/0002_prediction_user_userprediction_delete_todo.cpython-313.pyc delete mode 100644 api/migrations/__pycache__/0003_alter_userprediction_unique_together_and_more.cpython-313.pyc delete mode 100644 api/migrations/__pycache__/__init__.cpython-313.pyc delete mode 100644 db.sqlite3 diff --git a/api/__pycache__/admin.cpython-311.pyc b/api/__pycache__/admin.cpython-311.pyc index 8f3745e450dd9f2f190ab855d9018ef7c58e1a7b..f395797607ef71515a65603e1e4d16a792941ec3 100644 GIT binary patch literal 742 zcmbVJzfZzI6n;m4K@%W^i9s-dr3)kuPR7Ya2P8q4Zk4-`Vy`9FIRJB#A*&5Ytof@`*fS^e+lejBoS^g%gTl zdxVuhVO{Gv)2TRa@4LzFbha)Y2(2rR9I~4DA-fKrMR->bLUY)S|M~(3@n*gN?b>{W z`U})=juL33(1@Wi&!Hy?v{Gor(8{Cz1llRIV`%5m;{=*1G-GJy(bEJvDRkn@SygoY E1zl^K7ytkO delta 160 zcmaFHI)jC8IWI340}yoOyh`8AFp*D!=@7$24J83ahE&EZHjoSmEMT9Qq{)rUorcOi zr8YT&QHqgyaxtS4v!5o%u`TqY;(3k=FY JRKyF^0sws0Ba8q5 diff --git a/api/__pycache__/models.cpython-311.pyc b/api/__pycache__/models.cpython-311.pyc index 19fbe5d9c3f2d16b8cc0099a917624a6a3186e28..f82ab9a6f6aeb21f33245f132adcdc2834070467 100644 GIT binary patch literal 3098 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 diff --git a/api/__pycache__/urls.cpython-311.pyc b/api/__pycache__/urls.cpython-311.pyc index dd5424cdf89f4458662662cfd152414daa4e0b6a..196bb0aa1b325d395ebd2aca99c831184a88445b 100644 GIT binary patch literal 1981 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 literal 5146 zcmbVQZ*1Gf6+eoUM9H$5NVa7qX{;n}8pW}cwrqI6pr;$9D z=JKAjhr?%&#^;5!z}md#&HK_m))q8>UQCP7_R2mjkPoJV`L=XhK9mlzKEKwU??`vB zv7#pBx1_hQc0k*j-YN$_Bk8b*oF;PHXG9JuzFRyYx8ZV1I>LDE!0Xt+>ts9$cw08` zx)^Wk<}&5L7)gYm;1UUs?bD5{F{9h!gi=tbn$r`UEnZOc>0&`wpzR+y_r|-bGK<}Y znpftE1?35cb9p;>jw-U6Gt^?i7JjNL)b2p)_QIr2_h}5|XEk+Bq0leAp^wZMA1MVx z&1DTm9?hZ9TJb>x)$sHWK;S^QGG{dKC+qDJS0Z;jw>+RWxSUe5;h2 z#S=bTq{_!Lif-sOKcN_Qn{!&3Tv1kRVNwUh2VTFNQ>L9WFqF$if~OM5v&9dyx{{fp z8p?2vQ^(hj$K&5`g*{9=`+%d>lhar1?I1ogT|dvvI4$NghO;HQ9p<6;=E4kSePqmn4SqKoL%^h88F}||5aCi?fLhgt@Lid+_1{%bAkp*LG ztxZVD*St@alf8F*&F+-*yaxza_WjZ~wtk=GX31s#Ju=G~VOLgzRv6N{9H&+C-tjlD zR`wg+?x_DdpD+3Eh|PQBNaMR1F;`ltWi9u_oA&?~6d1MrGk{weRR*W@sB#k&;WuxmH?{dY7f%#lxo5Tao%LsefKr^O0?19O!lF@SS5T z{l}O4k5~GKt^Q%?s>Ci>u?zDZYXToQx*9)vZ?qDB(~7@ohMt4^-Kx~HM!3LHm#jv% zFZ}Fxxusn<#&3?BI|lCN%*c^S+-Q#b~BYB6{$VTGK$Ei8E>ZJzB z{|WTN?!mvM>c$4huV)a~K-&KY`9C5|Y=HS6F^6vkptA4-p+%_cqoH9mKx+eFZaNmi zP)mSVM6GNnvbT9hCB7ucJ^*Wwdb=*U>}`VD#vlTzZ!0iQ)^n(4*$i$O1lS=5DrA;w zxKDaFPDQV*!;S-UxL=yWWqso+NT3YD?6yl;4f3yy1~$g9j)59Y!oY-&zKoLw zk;IV!|bwJ+(iuSKWQ_IoR-Hu9h*oqF%hc@qh3=q=2Z>2l6+?`sD?6M+>mB_*6$iaJ2GjgyJ z8L=WGE0MRCBX2({Rw5r*kq@dn_F?VavlbxHgWnKuH24h3eA~AnvZV)+<^6kx*>kGW zbIQW{MnyVnNq|6SnJWW;(AQw|^azrpNFqr3khoZJ93PQjNY(cNad5)HiZ<_?+#1=O zIzn*j{|p!nA0nriZ7|5dXjm&4%JBIqe69gxK(1Bez}@}iSZvHJ>m$I~T60F;z`S$4 zOx7Lg7WBBE8znwd|C}iCn>%RpjOLt2_Q<^2vho;#EU>mP+$S-5vI6;FcguW1_CnT& z?hfzeener`H%4lCUP2tj)M$Fj_OCnEMVbJKbAi#K5g#wk6lC>F&>GzjorwU;1(-KE z=Z|`@`9g8l4!V8`c|rD);v^8EQ$a1h^hOq@R**)h@!F?sh%fq%$zKsRxqi!iX&f!@MCB#1p5 z9LVp*Ep1L62g0d8#(@-mf=dfB2dM2~!F@F0ZFTT=kY$Ib6`EId9sUW(j}aT?in+6*XgU<5@u|_DReuPZ8FhqcR&(oKzM+BWVT4BSn5jA4D4t#Ckc=24-3bd zI$OAx@FSNZ4BH`jGFzA^CgEdT(%Oy2 zQ418$)Jcum%QBc_N7aXnI{tkx9&-|_A^HI@Fx$~7P%sXTtCD_mvsxtw%;s7p`^@HA zCA-Y#S|x+#57#OgFq>wA*` diff --git a/api/migrations/0001_initial.py b/api/migrations/0001_initial.py index ee34459..8c138ed 100644 --- a/api/migrations/0001_initial.py +++ b/api/migrations/0001_initial.py @@ -1,6 +1,9 @@ -# Generated by Django 5.1.7 on 2025-03-15 08:54 +# Generated by Django 4.2.20 on 2025-04-05 15:24 +from django.conf import settings from django.db import migrations, models +import django.db.models.deletion +import uuid class Migration(migrations.Migration): @@ -8,15 +11,53 @@ class Migration(migrations.Migration): initial = True dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( - name='Todo', + name='Prediction', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('result', models.JSONField()), + ('deleted_at', models.DateTimeField(blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='Satellite', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='User', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ], + ), + migrations.CreateModel( + name='UserPrediction', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=100)), - ('completed', models.BooleanField(default=False)), + ('created_at', models.DateTimeField()), + ('prediction', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.prediction')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='TelemetryPacket', + fields=[ + ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), + ('timestamp', models.BigIntegerField()), + ('lat', models.FloatField()), + ('lon', models.FloatField()), + ('alt', models.FloatField()), + ('payload', models.JSONField(blank=True, null=True)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('satellite', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='telemetry', to='api.satellite')), ], ), ] diff --git a/api/migrations/0002_prediction_user_userprediction_delete_todo.py b/api/migrations/0002_prediction_user_userprediction_delete_todo.py deleted file mode 100644 index e62cc82..0000000 --- a/api/migrations/0002_prediction_user_userprediction_delete_todo.py +++ /dev/null @@ -1,46 +0,0 @@ -# Generated by Django 5.1.7 on 2025-03-31 10:14 - -import django.db.models.deletion -import uuid -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='Prediction', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('result', models.JSONField()), - ('deleted_at', models.DateTimeField(blank=True, null=True)), - ], - ), - migrations.CreateModel( - name='User', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ], - ), - migrations.CreateModel( - name='UserPrediction', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('prediction', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.prediction')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.user')), - ], - options={ - 'unique_together': {('user', 'prediction')}, - }, - ), - migrations.DeleteModel( - name='Todo', - ), - ] diff --git a/api/migrations/0003_alter_userprediction_unique_together_and_more.py b/api/migrations/0003_alter_userprediction_unique_together_and_more.py deleted file mode 100644 index 332ea40..0000000 --- a/api/migrations/0003_alter_userprediction_unique_together_and_more.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 5.1.7 on 2025-04-05 10:40 - -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0002_prediction_user_userprediction_delete_todo'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.AlterUniqueTogether( - name='userprediction', - unique_together=set(), - ), - migrations.AlterField( - model_name='userprediction', - name='created_at', - field=models.DateTimeField(), - ), - migrations.AlterField( - model_name='userprediction', - name='user', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/api/migrations/0004_satellite_telemetrypacket.py b/api/migrations/0004_satellite_telemetrypacket.py deleted file mode 100644 index d7f36cd..0000000 --- a/api/migrations/0004_satellite_telemetrypacket.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 5.1.7 on 2025-04-05 13:30 - -import django.db.models.deletion -import uuid -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('api', '0003_alter_userprediction_unique_together_and_more'), - ] - - operations = [ - migrations.CreateModel( - name='Satellite', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('name', models.CharField(max_length=100)), - ], - ), - migrations.CreateModel( - name='TelemetryPacket', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), - ('timestamp', models.BigIntegerField()), - ('lat', models.FloatField()), - ('lon', models.FloatField()), - ('alt', models.FloatField()), - ('payload', models.JSONField(blank=True, null=True)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('satellite', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='telemetry', to='api.satellite')), - ], - ), - ] diff --git a/api/migrations/__pycache__/0001_initial.cpython-311.pyc b/api/migrations/__pycache__/0001_initial.cpython-311.pyc index dd819741b9c14954defd28efd1c103f55a6caedd..5cce3a30a688b188a2ca2b3f9c98edc2fbbb80b5 100644 GIT binary patch literal 3207 zcmbVO%}*Og6yIHc;9U&ZgkT&9o3AEuK7cAfm87jo3{C_2Qh_LSBCQr?aMoF`o!xa3 zQdQ#6Lyx(Yzks$1ha7U?kVB3=j-@%EIYsIzw~fLnr@mQx!9Xeyv)<=7^WOa4$IQIh zKik?A0ouUS$3iP`|ME`IA`Rx#ePI3&kbp!}D2aJd#k9@ z92PB=5jLIM^No4_Ust2^>3Nv@hK0O{guH~rd`J>-xES~@;ApWWn7AT>eR%7wAm(Gf zt{jXY3GvxVu{9XM@nT!Rqc9Rtcr~&D7GJ?zZwnHN`g7WY5hSj*Y_|kD+>%mk){%GV zD85cdfU^S3tDqwQM(a)tuoPdBKnvb_TaXHo)wbl$`+*K2!|$nNal436~TP2l8Tf zz@gM?&-SdtdZiDF*1TtT;}*huWaP*}@{D?YZ&N`;yK>X#%X|J;esm9c{~mJHmv8QV zSi>*u?tPuLV?NSBR`EDGv3hcQm4Xu$+nMh|B%em7pmu%5egcxwyLHHwKQz$CCs7=1~!qy8 zjVYDQOuT5necX4@#()CpVCZ({2#aZcU(=YP zX>iX}O$>Zo)1FjylWRh+#jp$)7Rlx{pLIFU^h$-VB*aj`7Q)v2qRlTg)-g6a^P@I9 zJ@J!v>(2PZO%~tOFtEc~v;G3#;}?{8*KKGZr9oPHKQ;Fo21@Ta%CGE1#1d6RTLF;|HCIz}RLzmZ^(MjE z3{kJu)N53|MiSZeWSaDzUmm5s=WD$eY41gn7-&{L^$yf0Yw9FbCrM(;YmIibdl6Yy zJ_I}X5kmyf{YS&bosy0bD>q&_09FOeW>w9m0rXv${1txp`tAp{^(UNdNHi0_`8J^^em2QIhy(J=slqGRslg zld1Kbr#4r~XBzaTvk}}UgoM!;Y1}9!t9O#TLP4dT{2o6q0 zX07#uJ1}3i7V0HMZj7Kgzxve6MtXB_p#Et*5FB#*JB~IQK-%M+^DX3n`yBhWUgEyD zC!xzfgq>f3cp*^~;e3k6iEym>w=SF|U;3>#sjUmGOa9|UN5!Zo>?SW2nmF~53pTzW H_1*gq(|atX literal 995 zcmZuvzfaph6uz?^Cw2@<5LK$E3ay}3lYt*AMOA6D>E zN0tiyf>aez)sa7;qmf(*-GtPM%?Ku@zH0;$)3S<3=K zzqvD#%#Crm1jYd(h+qe`v5wn%o#L=ccSVy;>E)wYts%Fl4xGFHU zZCkz>+MXLQx$P0^1dY*7{!f#E|K)d32Z$ma6Qm0S>!O8pNkBByk~xqI5r_yY*;a1o z!wQBWk<38uOOOW4p)>`OO_9oIh2#cG9|H#FEk;c-qZ|;C2Kj$6mN?M*K-3Y;p;%bY zlQAfAoGBZl>b97)f_;%a$_l$RRk0}B5ZPT$o zQl{-vf7=VF;hJsAGNBzh^qjy=RSe{r9}I`OR=C5IhS%;m6pn&Gme8izbwVImO83c4 zn>r-etZFQ0q(>PBQw;+c?>ZE0%`o0~O^1WQ%i69TLIO-9v_oA&-G)sApLdbvSJR9) zc&~g;DAQJKYZ+=;<99G+b;tCFrncgF4mI7Or+OWF)9P>Nl5=%EJ!f`0Fzva&&tPtT zetyBYNnp0K=kxZaiW|WfP`%r6Ha^i?Pb54k_g*JCq)dHQ<6PymSUM}-i%PZq-MCac zmVVAex)Hg4R0>W?L0k%=LU>xdAC+r|PvUazM?5$Qb4$Y>Jol%;<&Q6T3n~#Y#)*t@H9}ACeu-Sba)R!veKju3T=2lvf1>HV Fe*oYD1TO#p diff --git a/api/migrations/__pycache__/0001_initial.cpython-313.pyc b/api/migrations/__pycache__/0001_initial.cpython-313.pyc deleted file mode 100644 index 0939751071650b9a52ec3e2540c52228b58449af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 959 zcmZuvO=}ZD7@pbPY_gk8n$*^mP=aVIB!_;09$KaJLn>C=L&uXW4BPBvJG$A8vy);y z6$H<{6#5qg4<7pyJSG82nNz`2Z;>coolP3*p#wAfJTuQb`@YXRgG|N*a;&ZW@YWRo ze#T@x64zj`D#0m00Ku1F8#1`9Fy$VY0rvq?iU6rL+|$QFH{ZwV2s72wDv7I@R1{%0 zsK*>m!ypoRBXo%$)ox+{NMDn|R|!sm4H!g#DF`wZDNI`cEMe<=+5baESSF()%}(u2 z-g>4W1tpMQ8!J%y=X}6E2|Ruvj9S=e`b1tO50WmaJ1w6}kF{Z(UZ=!&qc32$ zk`*aDybNPuVk~WM`9xw1+(Qs?<%DF7k!T{Pf9TuTbq4s^{AGa{CQ#2dqb=rZx3qNruv1!V=hpj4Z7TaKku=P{YE0^%w%LPm0=u%?hWpkD zyl~##A9^;lX_R7I;YeGSNTi;QTC&RKB!zNDvvTRH5W>GYfR*2R4(canFIVp5%71_) G!{~pK%J^6S diff --git a/api/migrations/__pycache__/0002_prediction_user_userprediction_delete_todo.cpython-311.pyc b/api/migrations/__pycache__/0002_prediction_user_userprediction_delete_todo.cpython-311.pyc deleted file mode 100644 index f5a17168c41c18a97a7cf1cca682fe99c14fc6da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2221 zcmbVNy>Ht_6hBfFEmE>9IZhbWO=zb^Q#pv^G)>ynK>>e6L7c=bU^{5l00iwjDYPY0 zA*B?_kcM0Z?&r%zWTe1 z-5*4bfrS3Sw@?+z2@!#(7$u;=d`DjEiw%&}niBI^!bvQ(G#k#C_qJFbjMS zC)=q_0d!zS19X%lI_eRfbf}Y#Pi+G8B3>Y{k@>d`@YKHvQN4f}jfz-JwzG%#;MBnw z2aXeCRrn99xvterj0AE8*~0nu;IZ;`B8)Y@J4CW;1F_{^Wvu1)_wq4^huS9(#}Ao1 zb!=oUf+e)yJ6xM#rU&OISpdvVo52`9{k#WItV zla~$4wwjh%W9nBf!PY7-YbIK_v{aN>A0`#ERco>oh??d~jj(jXwd$t(#8@X!nBox^ z&RS0iQ&(MLHVHP&W>H`nv(==wZPHS6j$RM8)(_qqZTomPL(tt61OP2qukF~AjO2MasD*- z+2=H(1|cmu*eMF3XrVa7Qbq{FFqmo>&^%f-0({0W9<|IG2gp~LG>DCfy=oE9<&B7? zXT$W~LijW^NU|DL~Lfps!qebL@TxA zxWua3cin)yMP3}EnPAj z4Vc!YUT3@n#r3h#%dNrl7m@>eQKliA*qLZNad`s{NeUS6cj#st`%fSvWh6+5L-NMm zKt+oFqw1&5?&Qz>kv~bb^Uogp+WD8#D|LIBe*J(xtW(YIXtuA}H0OX8)vr8%?CV#y zhp1la=p|n-(cG;Af~_U0&vf(|U!S45*`0iW4qteF%^$wd8NTQbU!=K-gUVyupg!Nx z=Y4&i=I#V(c_2{{tkC4QwR24Iq1*1eu?4|IG>dOb$V z2DM$Pc^%F3HIL?+2LQe!%t;>q>H#$$QQht6uCKc^=k4S*S{Q$R z$}fz+y#MMO|LRTu>VkjuKK+)^LZwrv_=O71RRbjnK(i=+j*fj!KbQjGC$m95&4B~i z<0LrU1FnGrmjT)1B$yf*lsD%2<9-(3c(IQaq9UBYD-+S5>O@?L?q#la0SHs}mBQ~L z{1l?P`IPH~_O1i>HgzNVxV~_2z>@zldh0-fgdhk|OTs8cBhhaMr8mN72Yp1}^$X+= W1vx-R$urf@jlJQ5y?01MF#iAoWJTBj diff --git a/api/migrations/__pycache__/0002_prediction_user_userprediction_delete_todo.cpython-313.pyc b/api/migrations/__pycache__/0002_prediction_user_userprediction_delete_todo.cpython-313.pyc deleted file mode 100644 index cff1936e4963a5c2cea6672613349924a876d2af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2216 zcmcgt&u`mQ9DjBkH+IrA+0v$Ix1}r9MmmvpteKQ$0(Jd?*0KU|J28l4x%F#in%e2J zQ`DW1kT~yx)PI2k(so)o(IZDY98x_FAaNR}RE0a=XD4e!%RoZHlApid_x<&G-|zQ* zebV1ABY4KQeye^fBJ?X`x=*-6oU8!xHBykmEhEDDU!L&r<(ETC0uh$NBs_+O(Ku2< zBS;Y{LOIrTa{4WV0-A_bE*E~un3Wt)+^n~K|(j%)VDsS!f)4s$|zhN9vl zfan|vDf|>igi83lXbcM==_@CCodxtbsz~M3*?lFfi179mg&AInfbGy(9q=nEQjr4< z`866*Un2$@!{_-ZbT+|D|7*O6O1#L=@Ka%BpveF2ITQcooKxIueJ6e2Bj=p~^1!ln zLAm%Z^Ob^=UOLZHWuQEEcE8-Me2=I+-otdr^2FIaWl$MnnN!mLW6a?o=9Hjhl#!d< zG^dOfLr}GAXYoN7T~aO=xha99lq+Pgn$3+-=|T4MY{H)w2ndithnn1*9$ zH7b8dux@Oy`$Bm`UtG-zv`@#ITBGLB2#6eQy@qMDPK<4h?5SILk4iQsU~4?VRNf$1 zbFi*zPL887t>IXzX??D0x=!UrT|bpYx-u#fY%}jN+)doEc8}d4yF< zw{n~>`Ud9G5RIrl5LKnJs={1q)G*L7Ro!W5H3kv50ae{Ji0#x26Pp$j>$r|h9h(~l zwh0?}G&<*J`~jP6L|{A8+S>j3MV2T4-Y|3;X6p>?pNH(P8rwLKNlVHHD*+k1XH;jQ zQ~@V1S_B(aa~Vo2>Yr(5)uOzCCc^DOwd|+eLWximh;{IA~Q@a4-1uEDf!** zH+WEJ)=GiDyG${1H@HLZkavNF+9R7?$##h2xDyd^SARm$pV6DYi`O{usoY9Tc!`NW J5HP-vKLINT7`Xrd diff --git a/api/migrations/__pycache__/0003_alter_userprediction_unique_together_and_more.cpython-313.pyc b/api/migrations/__pycache__/0003_alter_userprediction_unique_together_and_more.cpython-313.pyc deleted file mode 100644 index e13512f6bd67581dfcb4be3e2408abdb9f86038c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1427 zcmaJ>&u`O66dv1&GjUTw-4+U>qAgXMNXV@~9J*RnL~Q}JK&3dnSsFRrWcNGlGUxTOl*d1KdY7or{6DTvb!o%7tkD9LT2VVGP72;dMPD3 z|K0-|Vz69ODy!eb@@ZM(IG|zZdd;9LbFJ+*nH{>m7jU)hJG2!v1TGyDr;AZt5?)!c zM@%*)rkJvosmAf7;N-i6EOo3mz#zt&%rI!`$?oC|(I}R-gzlXR&CG_dapfW=SqmgY zU8r6kcXp<)ZYckwp9B3HVk;b#9DoX^d?7ciH%in0P}r!N)a)O`CZ()6~in zJpUxE$Tti`P$R|exO{DWef3~HH5j!+>JU3DE6@<435bBQ0@&x-LzlK3o)L6Fk_Xd?87_zZ2WY5S zj!BFsglmL=ez!$oT_EJBYqtaw?23dOx-1A=u17te5S9_-Gry#(GlWY6K3!>rlpVye)Y4EC=xnaVCl7?zOk65Hxeejf z+%}D6TzlX%>NdSSddyYlx$QN5E<1IOm%2IMJZ zZoM1Q0K%973nO?DuWkKdG1~DhI0&I+mUz#vmjwm9OKjowuVwqCBEUkOSYe}9Br*0%a86!|x|y&dbZi00es8A187*0strY1b6@d delta 19 ZcmeBS>|x|y&dbZi00aSVE=}Za1OO{-1snhX diff --git a/api/migrations/__pycache__/__init__.cpython-313.pyc b/api/migrations/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 620db1b35846eb0ad6a72ec8ca9ebc7c90b263af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139 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 Ra4_zjoTE70R^I&3{|jnUIcNX? diff --git a/docker-compose.yml b/docker-compose.yml index aebbcfe..8c6b5bd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,21 +1,30 @@ -version: '3.9' - services: - web: - build: . - command: python manage.py runserver 0.0.0.0:8000 - ports: - - "8000:8000" - volumes: - - .:/app - depends_on: - - db - db: image: postgres:14 environment: - POSTGRES_DB: testapi - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres + POSTGRES_DB: mydb + POSTGRES_USER: myuser + POSTGRES_PASSWORD: mypass + volumes: + - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" + + web: + build: . + command: python manage.py runserver 0.0.0.0:8000 + volumes: + - .:/app + ports: + - "8000:8000" + depends_on: + - db + environment: + - DB_NAME=mydb + - DB_USER=myuser + - DB_PASSWORD=mypass + - DB_HOST=db + - DB_PORT=5432 + +volumes: + postgres_data: diff --git a/requirements.txt b/requirements.txt index 6aae030..ad39d85 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,4 +3,6 @@ djangorestframework djangorestframework-simplejwt psycopg2-binary drf-spectacular -requests \ No newline at end of file +requests +django-cors-headers + diff --git a/testapi/__pycache__/settings.cpython-311.pyc b/testapi/__pycache__/settings.cpython-311.pyc index 9fd7f242f73ce49c66fc89d349495e43892770c6..92a452d96d47806876ac0b18292d04805289ec32 100644 GIT binary patch delta 1777 zcmb7E-EY%Y6u-99Bu<*tq#+ITo6?W);WjM+!PrNZ7#avpu~WgUNs-&*x`s9hP8g%o zl%o9s+b|M);GyDy4e>Im+WY>5bm~Lor%F6cnx;&=?P(_tX$w4Y?Q`xuzxzAq+;gsF zJM!a*@=GA#BRGQB|J9jZLSDCw&Tw|ncypd6K+|+%uO>DIqwb^g;-FHRevZlW*&2YgOx*of*P#^aa-P3Z*?h zbn5JMW{5!FNBczK82Z#cF41x5|L8;mF!-(y3_WujloEkq7^z{ChGEpvCmcOyP`XR$ zgOf@W#+75(+T$qwFrf^v!p#n5BkjqyVie%%0A(;ld%#;4Hp#=g1zh*_rQkFHj$|DZO&FAF2&F-Jl!4`5--gYI<&CSN#wp$RdPG&^Gb~zbb?XU-toB*ztiy7U%=N71Q zJRYiASTWUg?Lo=B%a>K%D5_PXROA;_T@&xGFKH&O-hzJte$UqLp6_ED*vmncx&WT7xGBr%q3M-Hfklq94DF`r3h-^DRdCy2$eX96Cr z_>EzfiZ-KbRqGu4sAh*-Uqd04%U#dl(ea+;OkS}2WI>jl!rt3>hd!UrFXY7RS0B*# zH`?^Pv?%8f>Ul}twEi;xMWNI&_kCUq zlCEGQ6mM{$C%&h_$HAW;{yMe8&Fyk?hoMtDTw<3?G{TW5*Pe=x#jQ_&o7f3o+znqm z%sRcpo!{loABHA&xcDv?Zw5S^yGdG#VFUCg+Z-WmPn}b&UEkNn=uN6|B-|MIVvoJt zWavqE(@WSylVQf(cz$*Uu~7&6ti3xNYIOk>HeiZGv8Zt4_;8){HTwFU^-yaaov!!I MpxJ)SYuMKR0ZK8{m;e9( delta 564 zcmX|7J#Q015S`t_OA8`&t3?homC14>C6(}f$`6w__NVT2qIh`&f0b(jQoaiHg zwt&J#NI`@sD6Xa8FF=7J7YK=lj+1C8*$XjmHE-U&nboZ3#kpx?{m^wSP-wsV72o#( zeiWA(_=))aM~PQ}AOH!{EwW7oB|ssf5qnDj-mCbBeNFaB?d7)rOrKes|CQj#LV|i=?pg*Ar5oN4kRdrRc zcFgr-o=ZrqT^2qzL?C->nIymSI`oo9O4vspbCtJzW=<3)~=7|pJly`f# z@AkS=t+#fsyX&b%jPJ-#dR^|B_3Wz=5V>eQry-LU>~+=)1G#Sp@}oVJV`oKXPAU)G zi}oe;tXS(PCi0uRq~{zQUzWWqOLmp!Fr(DVn}(;18KqWU2frovyqo7+pnFHv&XFIy zzVX>_=Q{Iw4h7X*m!@XEEW72w^1>SVZd}h9ZS&j!^O{nNJa^4vj-u2n&hCo(%wI?{ Bf@S~! diff --git a/testapi/__pycache__/settings.cpython-313.pyc b/testapi/__pycache__/settings.cpython-313.pyc index 0b832d5978ed1daf8c661da0d05e951954d91fdf..6e62f8dea21dbb4885a9c6e53e7c23aed54358d2 100644 GIT binary patch delta 1045 zcmb7DK~EDw6rS1L?sm7`?NSg51zHLg3b@-+YhsKh7^+gRz&?zLA!)X>7PM(`N{pV$ zUuYUrj~qRCFzH4Ag-H|BtS95mcqkG*J6+N=Byiv*-+S}keBXP!Gns$>Z-MPoS(XsB zFRLd7VGyC8-K1ys4oyy17=+#-Km-8>W(}tp!UVf(c8w+M4iiE9- z^rLY>jR?RICpd_xBO>Vt_$^FaGzv7j!3mbPT+!pi+jdiinE;&bG=d9ZI6ok_5WNYDT{quEW-K9-$(46A8A~`Y5BG}uS;BUAnR2C`l77iTzVv#ZluH&{ z$R9T2u0cVBk_mJQ$KRY1lh|RDSsyGpWS9vK@O$u zjkQ&8L#jy)rKY@p`(du7#?M#gTWX>`G~7tlQjK&ieSG&*xHWY9JZGV$-a20ix765) jEU0{k6=mi~>;#eM`Kmtau#AK6IB8OUAb;di^ppPs_!`kb delta 549 zcmY*WyNeTX5T5z%W;fYa_VT*TJ2_8d6n7(X!l4KXQG5mNrcIMvj^Kk+Cl+FJ*Vx$w z!M{R_6gD=tb~bXPwGu2653QY?5zc|{`{wa61Ha$b>hI$Ik?UF@(YP@mzD@&tTNM8y zzD$lTBfuLVU?3!Q7w;%mHR!4}=xQ4>Tf}zaub$+MWwCvHB-!kfBQBj>VQ&jtNXbx-kXOj(6s=IIYf$=v z4M3StwUE=4rCbXKBCBG~QgF=q7DhT}sK8k&a!!`73IZx|p2}RH3RS5_^$2NAa7wT) zI31c?q%&L+l*L~WRLPX{wPB-qcJfqR!^wNCuWuFx4|{vVC*hzU_Io>zcJ~IOaP;i) zgXg=KURu&z=1ny<+MQdsJMF37xqiRR-sD64hjKFVTvP2{??tCsAHTDM@n`${sMs5_=wRf;hBbrb7i6aD*(*T4RHLi=Up_NlsfQ!mc}=|UbzA>?=Te}`oY_)U;M^A WruoJ!?Yin9F*`TTB|qw$vhNS-E^5L6 diff --git a/testapi/settings.py b/testapi/settings.py index ba898ed..2d38109 100644 --- a/testapi/settings.py +++ b/testapi/settings.py @@ -11,7 +11,7 @@ https://docs.djangoproject.com/en/5.1/ref/settings/ """ from pathlib import Path - +import os # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -42,6 +42,7 @@ INSTALLED_APPS = [ 'drf_spectacular', 'corsheaders', 'api.apps.ApiConfig', + ] MIDDLEWARE = [ @@ -89,21 +90,16 @@ WSGI_APPLICATION = 'testapi.wsgi.application' # https://docs.djangoproject.com/en/5.1/ref/settings/#databases DATABASES = { - # 'default': { - # 'ENGINE': 'django.db.backends.postgresql', - # 'NAME': 'drfapi', # Your database name - # 'USER': 'postgres', # Your PostgreSQL username - # 'PASSWORD': '1235', # Your PostgreSQL password - # 'HOST': 'localhost', # Or your DB server's IP - # 'PORT': '5432', # Default PostgreSQL port - # } 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', + 'ENGINE': 'django.db.backends.postgresql', + 'NAME': os.environ.get("DB_NAME", "drfapi"), + 'USER': os.environ.get("DB_USER", "postgres"), + 'PASSWORD': os.environ.get("DB_PASSWORD", "1235"), + 'HOST': os.environ.get("DB_HOST", "localhost"), + 'PORT': os.environ.get("DB_PORT", "5432"), } } - # Password validation # https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators