From f80b8c38db659070b4caaeb0cfd1b665c7456334 Mon Sep 17 00:00:00 2001 From: andrei-mihnea-cerbu Date: Tue, 9 Jan 2024 03:06:03 +0200 Subject: [PATCH] users api done --- messenger_app/.idea/.gitignore | 3 + .../inspectionProfiles/profiles_settings.xml | 6 ++ messenger_app/.idea/messenger_app.iml | 8 ++ messenger_app/.idea/misc.xml | 7 ++ messenger_app/.idea/modules.xml | 8 ++ messenger_app/.idea/vcs.xml | 6 ++ messenger_app/api/__init__.py | 0 .../api/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 155 bytes messenger_app/api/v1/__init__.py | 0 .../v1/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 158 bytes messenger_app/api/v1/database/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 167 bytes .../postgres_database.cpython-310.pyc | Bin 0 -> 1210 bytes .../__pycache__/user_queries.cpython-310.pyc | Bin 0 -> 1937 bytes .../api/v1/database/postgres_database.py | 38 ++++++++ messenger_app/api/v1/database/user_queries.py | 81 ++++++++++++++++++ messenger_app/api/v1/dependencies/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 171 bytes .../__pycache__/security.cpython-310.pyc | Bin 0 -> 540 bytes messenger_app/api/v1/dependencies/auth.py | 0 messenger_app/api/v1/dependencies/security.py | 11 +++ messenger_app/api/v1/endpoints/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 168 bytes .../__pycache__/messages.cpython-310.pyc | Bin 0 -> 460 bytes .../__pycache__/users.cpython-310.pyc | Bin 0 -> 1584 bytes messenger_app/api/v1/endpoints/messages.py | 4 +- messenger_app/api/v1/endpoints/users.py | 48 +++++++++-- messenger_app/api/v1/models/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 165 bytes .../__pycache__/message.cpython-310.pyc | Bin 0 -> 508 bytes .../models/__pycache__/user.cpython-310.pyc | Bin 0 -> 456 bytes messenger_app/api/v1/models/message.py | 3 + messenger_app/api/v1/models/user.py | 3 + .../app/__pycache__/main.cpython-310.pyc | Bin 381 -> 320 bytes messenger_app/app/main.py | 6 +- 35 files changed, 221 insertions(+), 11 deletions(-) create mode 100644 messenger_app/.idea/.gitignore create mode 100644 messenger_app/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 messenger_app/.idea/messenger_app.iml create mode 100644 messenger_app/.idea/misc.xml create mode 100644 messenger_app/.idea/modules.xml create mode 100644 messenger_app/.idea/vcs.xml create mode 100644 messenger_app/api/__init__.py create mode 100644 messenger_app/api/__pycache__/__init__.cpython-310.pyc create mode 100644 messenger_app/api/v1/__init__.py create mode 100644 messenger_app/api/v1/__pycache__/__init__.cpython-310.pyc create mode 100644 messenger_app/api/v1/database/__init__.py create mode 100644 messenger_app/api/v1/database/__pycache__/__init__.cpython-310.pyc create mode 100644 messenger_app/api/v1/database/__pycache__/postgres_database.cpython-310.pyc create mode 100644 messenger_app/api/v1/database/__pycache__/user_queries.cpython-310.pyc create mode 100644 messenger_app/api/v1/database/postgres_database.py create mode 100644 messenger_app/api/v1/database/user_queries.py create mode 100644 messenger_app/api/v1/dependencies/__init__.py create mode 100644 messenger_app/api/v1/dependencies/__pycache__/__init__.cpython-310.pyc create mode 100644 messenger_app/api/v1/dependencies/__pycache__/security.cpython-310.pyc create mode 100644 messenger_app/api/v1/dependencies/auth.py create mode 100644 messenger_app/api/v1/dependencies/security.py create mode 100644 messenger_app/api/v1/endpoints/__init__.py create mode 100644 messenger_app/api/v1/endpoints/__pycache__/__init__.cpython-310.pyc create mode 100644 messenger_app/api/v1/endpoints/__pycache__/messages.cpython-310.pyc create mode 100644 messenger_app/api/v1/endpoints/__pycache__/users.cpython-310.pyc create mode 100644 messenger_app/api/v1/models/__init__.py create mode 100644 messenger_app/api/v1/models/__pycache__/__init__.cpython-310.pyc create mode 100644 messenger_app/api/v1/models/__pycache__/message.cpython-310.pyc create mode 100644 messenger_app/api/v1/models/__pycache__/user.cpython-310.pyc diff --git a/messenger_app/.idea/.gitignore b/messenger_app/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/messenger_app/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/messenger_app/.idea/inspectionProfiles/profiles_settings.xml b/messenger_app/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/messenger_app/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/messenger_app/.idea/messenger_app.iml b/messenger_app/.idea/messenger_app.iml new file mode 100644 index 0000000..d27d2cf --- /dev/null +++ b/messenger_app/.idea/messenger_app.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/messenger_app/.idea/misc.xml b/messenger_app/.idea/misc.xml new file mode 100644 index 0000000..3a91067 --- /dev/null +++ b/messenger_app/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/messenger_app/.idea/modules.xml b/messenger_app/.idea/modules.xml new file mode 100644 index 0000000..10da75e --- /dev/null +++ b/messenger_app/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/messenger_app/.idea/vcs.xml b/messenger_app/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/messenger_app/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/messenger_app/api/__init__.py b/messenger_app/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/messenger_app/api/__pycache__/__init__.cpython-310.pyc b/messenger_app/api/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9cedb6093e2c4006e08ecac681274b16eaea249f GIT binary patch literal 155 zcmd1j<>g`k0-oYIsUZ3>h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vGKO;XkRX;H= zr6@I1-z7h}G&eP`q*y;UwYWGnFFmyg!HQ2TD9}$V$kdOI&&g`k0@30*sUZ3>h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vJKO;XkRX;H= zr6@I1-z7h}G&eP`q*y;UwYWGnFFmyg!HQ2TD9}$V$kZ=0)Q^wP%*!l^kJl@xyv1RY To1apelWGStx|j(_urL4sKtUxS literal 0 HcmV?d00001 diff --git a/messenger_app/api/v1/database/__init__.py b/messenger_app/api/v1/database/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/messenger_app/api/v1/database/__pycache__/__init__.cpython-310.pyc b/messenger_app/api/v1/database/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f658ddb54589007d5bc5857312a7d6a6a60a689a GIT binary patch literal 167 zcmd1j<>g`kf}JgMQbF`%5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HQenx(7s(xZ# zN>OU2zDs^`X>Mv>NwI!zYH@LDUV3T~f)$@wP@tb!kf~p0sGpKpl9-fOoT?umpP83g c5+AQuPdnDE3heQ9=!BQj6L&b!ycxb!hqo)d-!Zb2NK`YX;5HJa|lstEg1?1$$9NrQ1vh z7923HvTi^*Yt=o*8y#gQmP-4f=lac1NM$~Ju)bEZlua9f+h)q_2-xOCt`OajQ)MPu zQOKpIPoE3|imqr2mZ*T}&q;KMDQO`|zT=O0hz4j6RgsCnZ}jeAG{hM7^Ag@Vz+cc; zat!t!+J|a~_y|+TO|&lVqLNYRmv%T0`Qzg2z-{=fD8r%`1_AS=R%MeFsVm)vD_G_S zf(o2S^t>=SSW~HSo|@m@e6{&(v$|8?dRf_h@myK)k;;mAE086kGULov7%0qm7V3z_ zd9~aO+pL`6Ro)K0PMZZ%l&8pEYIQe?%5KyuzgsO&UQ~_%+XK!-ed1Y(dTPPr%$2Nu zd8xio6hIJMz&5NrOy>i+;5Wdz>zN=YBL&J7@o!-C*9YhfjnJpNLvvuB0jdKsA{Y$} zz63TIp`kUf_7DMFO_;}q#=8oY z_7w*0BYVssXfcDN(qI0MLH3?`9SLLteQ!IA_cEoFvb_!$Ay=t!R5@>$^qQ{kLnv&w zTaxFXUao=S3m{4#YZSRa=F_U{FaX2)Bziy@A#5m)1E1-{JM_i#<$et%^GL1 z1cKlU&SDcgnBc{~8T;OOAvI;=HY9i$#AIk){{nIQ>+J)$C!qr)i7D32od5zqCP1;c zmGmxjTG8`E!RQL~pB1Y~O*pRU>T3&e#!SmB!)3w&p`Qv5zTkJjfGc)ORsz#J*m3`G n{p>hAb83u6421Kf9ny}^p6X(Rb~%U`1nSq*{^O)G>1_TVSot6e literal 0 HcmV?d00001 diff --git a/messenger_app/api/v1/database/__pycache__/user_queries.cpython-310.pyc b/messenger_app/api/v1/database/__pycache__/user_queries.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39b04cccd8cc76a93cf1c017749da33491f654c6 GIT binary patch literal 1937 zcma)-OK;mo5XYBKQHrG6j^Q=|+As$LR$)lUrH3?qq_Kh;NR`5p8^936fE3wX zGOh{g_A8_s6TjlFP|ci4~2OX{#q~q6yuej(Z&^%uT2P-r zz5E_bOwP$%$rQew-lxi3&B&25*J2pS)J(%m{;bdSOy_n6SG_~#MrOPqv6?C8ibBR@ z(WcO=#!ums;o8P1eblm-%6Rx}_+(;#Y(L$5{*9do#)bXj>*3ze_Ne`ty(vDeEuUN{ zxpl;1_r&pij^DwNYtPIZxOeK&ytPEaCYnl_panl2gyRG1ZL<*Un|Cbw?jf;BYjU|bDMRhHEyzJgJyE-lme zy>uParDp_nb)?M=P?(nKnQ;!GAT^|+o=OeLcBvtCl%CWm?2g96y@|a$nmjKRw1wzr zPQbS9$PwZ+ZHjG>8rEK2ZcHHp4&=AtbFNdn#;RKe zr&Izx+=3kfAyzVI>0Je!|BAm4gD$G1D(IyuEX4#m5*&uzR{9};Gm3D8;MC_PpaXE3 ziRfaLLdgC~sP?;r1}FjR70R+*qSQxeS_88G?at%Lu%K9*7!N0M6roC4Ey$MLh2m-( z|09@RclNa8NL&{p?$d#ZSK5wrC06F69)q$^LgjkdCezWSSg1jDsJ#fx3} zY6P9D6uOz-eKUpL=p~szrQo$9nJ&Eau*P%;k|ucR|D{a+0o(}KQs%Qa*z!9t+0!M+ zcWJpepd$1XHr5E4T1n^?zXx-pUNgTBX|n(FLBC3q{U{XiF(lz>HL~!mbg4{&GKg`kf}@3VQbF`%5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HYenx(7s(xZ# zN>OU2zDs^`X>Mv>NwI!zYH@LDUV3T~f)$@wP@tb!kf~p0sGpKrkeZj0nwOlJTC5)* gpP83g5+AQuPLP9%>@QYB%PBnkxY8;WK5+mTbP-o zBN7GQI6;O2Q5y5GYN0=%n*oNBZ0MG}QOs;jHlCzgx~5z9#@1{^c5L|CT9nhvo5;7p zv(S|)ZF>f}iRYyalGr3_Wdq1XAtCZ?sA6MQg_hQ@CwguIh# uw*;L|tL7!{+Bl>>)#sT00P7dk2S)%kRE-keW`$hL;m-Zso(KuOPVftb+j=g`kf&+zfQbF`%5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!Hwenx(7s(xZ# zN>OU2zDs^`X>Mv>NwI!zYH@LDUV3T~f)$@wP@tb!kf~p0sGpjbQjnhsQWzhfnU`4- bAFo$Xd5gm)H$SB`C)EyQNih?UU||3NVcjX# literal 0 HcmV?d00001 diff --git a/messenger_app/api/v1/endpoints/__pycache__/messages.cpython-310.pyc b/messenger_app/api/v1/endpoints/__pycache__/messages.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..990361bd4c824fbefee2b9e6e6a091b7a4a41ace GIT binary patch literal 460 zcmYjO%}T>S5Z=vhleV-4K_8-*EWJxn@FHRnz2#CucUmh+cG*b^iU*}$eFI;h&(XKY z)swH_$=S482WI$Yc7DE@HT`~~@^}6!gamUZiks z0+V4>NAna*YU2V5)F*`E)hKQj!gyclgntWNbB|hDgJn~HAihJ9Pivo2ah1W?Z;k%z MdaTDo-V?|C2O4s43IG5A literal 0 HcmV?d00001 diff --git a/messenger_app/api/v1/endpoints/__pycache__/users.cpython-310.pyc b/messenger_app/api/v1/endpoints/__pycache__/users.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b91d312d4dcd09f18d8df26a06234bbe4e7f87d9 GIT binary patch literal 1584 zcmZWp&5qne5O%jcw#Va{ok=!QA_6Q2K+a)Cxko5SAce~+f^hN0^16Gnj{HY=JIO{9 zDKH$#jSFan;F#y&%nS6D)4oE41XblEJIi|1HC5H+cGdS)bvvC#4m>~odMf`KInLi` z>^>eCcVX$@KnO>$%Bfk(YMye2Hm}^;OFh!vYE=8FUk7PGwg+~YhV?id*HIdgZ&Xd{ zIE|Sj+15#?a{BvB_$WD8@f}TbAyDe@_00{1XwAe*yk0#H{-h&7CzkFKA&XjGFFzbD*rGl8nLus-e^z7&)lXYHJ zcDCy(MdI37p=5645GRi8tnb7HTgXbD@5Axa<6IwSU9R<$R*7f+3O}K(hkpgb{N6kW zECBBO2}`d*e9w%taUQWPd(JjY%?uYzaN)k>KQQCMj%P+7{Vl^N;k|U3^X?74;bL^d z0qK(rNQO5YF+TO4yCT}SVsgp>r1-G>1@d@y6>&JoD=1K$9LT4oHu@E}6K!(S>#S&n zw7!rAfB_&v%)iNNX~Va**%6_pu&6T<95ok2;#pn_wFj!2qga5jk?xB^YQ63&z~3J} zq$U_2D1?H-6ds@g6!bo}CmoV_6l;AYbzd1958MbM$1ZlQOq7Lr<*4`I-PiY4$89ZF zc_Wl8S6{S6U(3emRSl`g=Al&QT9$X+D(}kG}TNM^^90;T63^&d#E^u!-0(eYsgAr$C%I1?J=tFXeH|{wMnQjJ#`HQ z@e!hiEdHMqu08;-4ckgkorL)yZsNvdXJXKyXCM%>5HO2y{i{9!m--0AC6I7P2&7w} z3?L2TK@ja3wlgAp<7^q;F#v~ms6NC)4^R*W?obgGGX`(M>5J4-mvY{j>W?8-BiZ~# zNIAz$eG2Aba?J+o9GbW*74k_q*(+c!AKzZqFg}%DBD@NVus7dq!1a+IoYBO}5+x3P}#R%DT|W pl=n`pI30>e3hzL^eI-A`F{ZAbJ29KHec;FEp*v^c0#>-s{sV74gKPi* literal 0 HcmV?d00001 diff --git a/messenger_app/api/v1/endpoints/messages.py b/messenger_app/api/v1/endpoints/messages.py index b7e3296..eec4f71 100644 --- a/messenger_app/api/v1/endpoints/messages.py +++ b/messenger_app/api/v1/endpoints/messages.py @@ -1,8 +1,8 @@ from fastapi import APIRouter -from messenger_app.api.v1.models.message import Message - +from api.v1.models.message import Message router = APIRouter() + @router.post("/messages/", response_model=Message) async def create_message(message: Message): # You would typically save the message to the database here diff --git a/messenger_app/api/v1/endpoints/users.py b/messenger_app/api/v1/endpoints/users.py index e210b84..f736961 100644 --- a/messenger_app/api/v1/endpoints/users.py +++ b/messenger_app/api/v1/endpoints/users.py @@ -1,9 +1,45 @@ -from fastapi import APIRouter, Depends -from messenger_app.api.v1.dependencies.auth import get_current_user -from messenger_app.api.v1.models.user import User +from fastapi import APIRouter, HTTPException +from api.v1.models.user import User +from api.v1.database.user_queries import get_user_by_email, get_user_by_id +from api.v1.database.user_queries import create_user_db, update_user_db, delete_user_db +from api.v1.dependencies.security import hash_password router = APIRouter() -@router.get("/users/me", response_model=User) -async def read_users_me(current_user: User = Depends(get_current_user)): - return current_user + +@router.post("/users") +async def create_user(user: User): + result = get_user_by_email(user.email) + if result: + raise HTTPException(status_code=409, detail='User already exists') + + create_user_db(username=user.username, password=hash_password(user.password), email=user.email) + created_user = get_user_by_email(user.email) + created_user_dict = { + "id": created_user[0], + "username": created_user[1], + "password": created_user[2], + "email": created_user[3], + } + + return {'status': 'successful', 'user': created_user_dict} + + +@router.put("/users") +async def update_user(new_info: User): + old_info = get_user_by_id(new_info.id) + if old_info is None: + raise HTTPException(status_code=404, detail='User not found') + update_user_db(user_id=new_info.id, new_email=new_info.email, + new_username=new_info.username, new_password=hash_password(new_info.password)) + + +@router.delete("/users") +async def delete_user(user_id: int): + user = get_user_by_id(user_id) + if user is None: + raise HTTPException(status_code=404, detail='User not found') + delete_user_db(user_id) + + + diff --git a/messenger_app/api/v1/models/__init__.py b/messenger_app/api/v1/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/messenger_app/api/v1/models/__pycache__/__init__.cpython-310.pyc b/messenger_app/api/v1/models/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cdda52cf1839ef7e155d1cde589870ae8a889e5 GIT binary patch literal 165 zcmd1j<>g`kf^CI!QbF`%5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HAenx(7s(xZ# zN>OU2zDs^`X>Mv>NwI!zYH@LDUV3T~f)$@wP@tb!kf~p0sGpmklA2SjA0MBYmst`Y ZuUAlci^B#eSelb+2eP4<2}rOo007OXD0u(? literal 0 HcmV?d00001 diff --git a/messenger_app/api/v1/models/__pycache__/message.cpython-310.pyc b/messenger_app/api/v1/models/__pycache__/message.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb806899147343ec0744f93777349de7fd64de40 GIT binary patch literal 508 zcmYjO!Ab)$5KT7Qc3ZdT!Jk-=F5Zh25qfGb;$<%(Y=#=xWY;7u_N+f4co%;uS5N+e zCnw!PJ7MO{%S?Eaq@7MD1g-t}gfGOONX{)qvOsq?7$lLjA(~c{#yn{fom2@WOCp&} z--%3tzOjnQ!6PY#zj%TaG>q?sgHNtHYiV30~W zCon)vj>r&)$kRFLwZdox&WR0#)WfR}V+TfpYX4`Vh1~+>I}REJK~kRGVuyb zoZCw6S-$UnKHZ-ijRwH-_3=p?#-HSzO3u!lf4E|WfTD&*tb~9&zzpR(pd|4oR~hCH zFe!eS1rrg^Z%v?khg7dqK-t(}e;(!B>ziu8tJ7hg^!FR?{qyK3#T)H%_QGwiJ~$6`6#Z*wEq3#sA|F6BSc Csc#Sf literal 0 HcmV?d00001 diff --git a/messenger_app/api/v1/models/message.py b/messenger_app/api/v1/models/message.py index 87631fe..163006c 100644 --- a/messenger_app/api/v1/models/message.py +++ b/messenger_app/api/v1/models/message.py @@ -1,6 +1,9 @@ from pydantic import BaseModel +from datetime import datetime + class Message(BaseModel): text: str sender_id: int receiver_id: int + timestamp: datetime diff --git a/messenger_app/api/v1/models/user.py b/messenger_app/api/v1/models/user.py index 092f452..50ad3b2 100644 --- a/messenger_app/api/v1/models/user.py +++ b/messenger_app/api/v1/models/user.py @@ -1,5 +1,8 @@ from pydantic import BaseModel + class User(BaseModel): id: int username: str + password: str + email: str diff --git a/messenger_app/app/__pycache__/main.cpython-310.pyc b/messenger_app/app/__pycache__/main.cpython-310.pyc index e14832cf7d62aaf5ca39a542485863ae36a632c6..bf436c0b421e4cc88b107dd4fdafa7a88eaee0ec 100644 GIT binary patch delta 122 zcmey%bbv`apO=@50SMfy=A