From 94bbdb1552fabf4aad82688058446c7722073e85 Mon Sep 17 00:00:00 2001 From: "Juan M. Ley" Date: Sat, 7 Feb 2026 03:32:20 -0600 Subject: [PATCH] Updated the API to use Core --- deps.json | 3 +- src/.env | 7 +++++ src/__init__.py | 3 ++ src/__pycache__/main.cpython-314.pyc | Bin 586 -> 775 bytes src/core/__pycache__/config.cpython-314.pyc | Bin 0 -> 1668 bytes src/core/config.py | 29 ++++++++++++++++++ .../__pycache__/db.cpython-314.pyc | Bin 571 -> 723 bytes src/infrastructure/adapters/persistence/db.py | 5 +-- .../api/users/__pycache__/app.cpython-314.pyc | Bin 693 -> 911 bytes .../users/__pycache__/root.cpython-314.pyc | Bin 479 -> 733 bytes src/infrastructure/api/users/app.py | 5 ++- src/infrastructure/api/users/root.py | 6 ++++ src/main.py | 11 ++++--- src/users.db | Bin 24576 -> 24576 bytes 14 files changed, 60 insertions(+), 9 deletions(-) create mode 100644 src/.env create mode 100644 src/__init__.py create mode 100644 src/core/__pycache__/config.cpython-314.pyc create mode 100644 src/core/config.py diff --git a/deps.json b/deps.json index 8b82685..c41e4b2 100644 --- a/deps.json +++ b/deps.json @@ -3,6 +3,7 @@ "1" : "uviconrn", "2" : "fastapi", "3" : "pydantic", - "4" : "sqlalchemy" + "4" : "pydantic-settings", + "5" : "sqlalchemy" } } \ No newline at end of file diff --git a/src/.env b/src/.env new file mode 100644 index 0000000..a7750ea --- /dev/null +++ b/src/.env @@ -0,0 +1,7 @@ +DATABASE_URL=sqlite:///./users.db +API_TITLE=Users Microservice +API_VERSION=1.0.0 +HOST=0.0.0.0 +PORT=8000 +RELOAD=true +LOG_LEVEL=info \ No newline at end of file diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..a497821 --- /dev/null +++ b/src/__init__.py @@ -0,0 +1,3 @@ +from core.config import settings + +__all__ = ["settings"] \ No newline at end of file diff --git a/src/__pycache__/main.cpython-314.pyc b/src/__pycache__/main.cpython-314.pyc index 6ebcf94df2a20fb5e8789b52c03cddd167d651fd..b3693bf18b5e4e64d824cb641d04359ae49f3e3e 100644 GIT binary patch literal 775 zcmZ8eQEL-H5T4EMU9L@HN+?LRB(?RSp^$q}u!#C1LQ82WCyEcoVw^wMM zB7*g==&$fE1ccPJeGs2~iw1mlCnhBAz|PLhxA)zAGg~)Gi=gcbJqx-7;3pY>ZFc z{DoiDiCXjp_at|{B+*&%X&fCr=TZhyJM|~TX>NEPR-L#!>^C)=B?c~(n4}1}8Of&P;PK9q{M~&oE6p#=d{v&;?T@Svq$~h~X z?Y-MOw<;H6TRH}o@X1}sIEP%1}7fiz(X#!A|>mtAF9%wzQ zL3AX%REo@(ncxjC2^typsiQ>T0#!ll;ja4$L`fF}4qjQ0 zI&mut`4h3MQyfCNrQMJcLN4LnCEWdCF1-(X^bfO$Ia~%-{Mh|USH7|QhiAVjuv=rY Ef0)&q@c;k- delta 290 zcmZo?JH^7Q&Bx2d00eU9+cK3V@=C_L0XYo}aSTC>o(vw0C5-Y6v5blgCLlFHP{I_% zB+gL69Lo~KY!Si0kOI^!!w}1iP$AC{#G(wwnyfEDS~MANaU~a}CYGeeCl(Y;Tqwq9 zHF1ZkeGqdHOAu=iTM)ZBD@Yjw15hWUGJ_^Z5fhN(SH+Q=n3-n<)KbN6pa+JT4)P2P zA-7mE^V0GsmoqByGu>h@Ez3;KFUq^cTvVDj`55R#be$0W_jIys9;W%2?hEm2{hYDSPY4IuG>nURt4E`#ypM@*^! DTX#Ku diff --git a/src/core/__pycache__/config.cpython-314.pyc b/src/core/__pycache__/config.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c3e40fa2f6dfd815e6e30351d751d742b9e7f47 GIT binary patch literal 1668 zcmY*Z-)|d55T5g$&raevP7^zEQxdl!NDh*(KqY=vPz6*qqAlV|^McaVxf!BSS_NJ;2+_cKLLsNyqT5y#8cmTG*WqF=4@ByEPwaScy@O7n_0hGou37Kp4d;t zp9O%w$(TIFF?qFvWB?Dqw|3!{rL7I(h26p}TiY8@hs)sGE8si()-`*yMmzh?Ww;#J6<64X4NTFT4DR>-(3l=xyT4`~GbT57UJIkgpAB=>cj$?kLcyY8Ol?;)g*m)@Cl^DwLwDMVj<4 z+*e$x)*TVb6xpc=dB6Bx=W6F_ZwpgT`9(_Ej&R>eeLd9+q)1i2gyHlNH#PviHI7IQ z)BmY$VJdoFts_iny{c`}*)L!RZPeC5U5aL5qDyC_N#E)4`+LhW0CMA#h=T#9$hgv)evQ2iYH2Famr1dF{J}7LKbK( z#X%2+WlUD6SgP23?wuss3%y(?&rhSYbtedqc_O~&UiXnVr4U!1lA#x-k|R(zJKaad z9UVf>VYXHLD$4yc440bE%ERXRuT{B>4%t8mNvDZc4sx3ISAB%*)&Tb4LE)pH03!5W zf^V#2%Y%E?ckpS!x8A{+F)vJUdx|?#yg23-u64(}fV?ynQznl6n0Z07Y$`ZM0nHTa z$=J*UUBR@_sOTKgQyd~3C$m7t)O;D|I91v>-BfDhN*<>{WM<;@h{gPr$8Fo#N=svl z1cMIJG{!-74^w#(Xfw}P7zav4BGlL=s^ZE(*7IT*3z8(o#!>U@Z{}s%P5P-6;oqn5 z7_u@fH8QY^ZZ-p!l`TVU>C9D9XDei^LZf-+>|{+c)?u!C<}|YnGFrK@ zoLwg43d}E_IV;&F8E@y=*8bT-W7JM+^4<0YIgf8yC0HP+A(#?lQ5xcuQHioiaFJk* z;1a=G1awy{ou%dCgk*g+Mq&ei$_-LUt z1Nh6?&Rl4&4{KY)<&V#ccGDf)ep!LW_F#9ovOf4~xVAI+`lSnt7YAPsYs&~rD}$TE z`r2UkwNof=WPtFxjc0!Xqtnw)ciXO6>^_Qugl?A_{~JphX;Yr~M-ouDsn9){bTYqy zqg;8z%hyL&{WICYSUQtxA-uFL%X$vm&*9>^)37$4{df-e%HD_C>M#Arl{~|LfpM!O literal 0 HcmV?d00001 diff --git a/src/core/config.py b/src/core/config.py new file mode 100644 index 0000000..f7a7e6f --- /dev/null +++ b/src/core/config.py @@ -0,0 +1,29 @@ +from pydantic_settings import BaseSettings +from pydantic import Field + +class Settings(BaseSettings): + """Configuración de la aplicación""" + + # Base de datos + database_url: str = Field( + default="sqlite:///./test.db", + description="URL de conexión a la base de datos" + ) + + # API + api_title: str = "Users Microservice" + api_version: str = "1.0.0" + api_description: str = "Microservicio de gestión de usuarios" + + # Server + host: str = "0.0.0.0" + port: int = 8000 + reload: bool = True + log_level: str = "info" + + class Config: + env_file = ".env" + case_sensitive = False + + +ConfSettings = Settings() \ No newline at end of file diff --git a/src/infrastructure/adapters/persistence/__pycache__/db.cpython-314.pyc b/src/infrastructure/adapters/persistence/__pycache__/db.cpython-314.pyc index 461d49fa33e21a2e29e0b158dc1baf0a64af8721..55c050a828527f073ed7abbaa70943962c4591b5 100644 GIT binary patch delta 356 zcmdnZa+#G^n~#@^0SE$E+A}XrQLb1P zMFtZF23|0~ggb~!nL(3#VxNVcCgUw0=ls01;M9_m%)IpCDv{#CoXnC`D}8-^J^j++ z)S_a&l%!j15YdTuTp4*LD>3Tmawq2(rRpUEb!Mg)u>p;}#pB`_;^^cU>>3{$`qdun1gd rk-f+wd&AIjN6dBGu#2`~R}8~02&pb8y(p-AAtr9J0Fye47|;L!5#~@0 delta 204 zcmcc2x|@Ypn~#@^0SHP@w`Jx{0SzVg*8Wb7rV0dn}70g9(JgP{I+!q0FGkIq`~xSd~a|VNPaAs+GRJzMg(* zacWVqUP{trD@IpF&dCjoI=nnCjvAZ!&giivW#b1ma>BAn}2jk&*E( lgUWpd%Ln|b4LlDy#cr?&+z?V-PA7;MslCK042f> zZ2Xq&?6tZU_zYCCl(HzOIlrM0LnoadIw|_l)>G$y_li|!xIrt{{0$STHawLTkpjfE zU0lkmyd&pO^!U1;8hRqeq^>1~aK(@%xiLcM`d(7(v5;~%5UA91TsF%k2FWc1tGjeA zN-+)CkjhF>vhI3x81-0pxd&WMgkPs2#OmL6xa=`0P|hUG_{_`rpn!gkLJYIQov)?o zmO0rnXO+Ear7@{AX4Qw&>i(p<|HsG_58}hiEExHzzB$o1&&EIW>d)eO{D!Y#{M&ji z$@TGE=>`K6u*!M{26>=TpzD~bcteX*i;5M1L|JBX zswU$t){@MUoK#KbB9NwAe3^O4Ii)G7@kRNiC8^cKqli3Wx{T!J(BuW)HJINxAlzs@3dkwr{)O4$__xf|Sk4PHe& zKt+Ci)EfU*i|EYEhERJ)GK=5Ixm zvCM8Zsx(do<8_INuU02v0Z?8>2atN``D7h6v?-i|nV$}#;CLG~j43$<4)_N~DPIT& z-PWlNT;>7+Ezzh!O=?k_=-@pg?a=f0f{01&$(F<=X>4+TPg+~T6KNuCnnqC&?MmZ8 z>?dzb(u7hrWv0{iL@VZ@G}FinnY5B_B3LMG&f3gN7+1c^n9o5;)Z3NhQxZmk_~aR| z388T_F4bT*i-MPobh@M#_&f&gb>OpvB-|%K)Z$(uc@(EN{V{==1?b%yQz)wiqf@4s97qh)b! Mq$6$duR>$Be=I|tQvd(} delta 362 zcmcc1dY_q3n~#@^0SLtIwq>qkn8+s);0NS2FvKwgF?uq1FqSaNGsH3~GMIoA0YM2< zEK>kGgpEuFF_|zz_(9C#2-Pe>EEDU*!f!F^CnKw70dkmu_%k1nXkZ8eS{B3<#H`Px z%%I6~i!Hb$v81&47JE=>US4Ki`Yjfh{N&;)R{azpwUVKT6QmP}878k_jH>4WGFXAQ zSOQ2iFnnNR;1!*ad4or2g8K(nW*)8&49u)tMIcZ5X|mp8PfIK=Ni4`L0$G2Htth{= zB(>-kb9!n?5y&90*4BO~Ko2HA(4LdxCJ h4Qvk>+1sTWr8=CO FastAPI: - app = FastAPI(title="Users service") + app = FastAPI(title=ConfSettings.api_title, + version=ConfSettings.api_version, + description=ConfSettings.api_description) app.include_router(router) return app \ No newline at end of file diff --git a/src/infrastructure/api/users/root.py b/src/infrastructure/api/users/root.py index bf8b1bc..8caac67 100644 --- a/src/infrastructure/api/users/root.py +++ b/src/infrastructure/api/users/root.py @@ -1,10 +1,16 @@ from fastapi import APIRouter +import platform router = APIRouter() @router.get("/") def root(): + uname = platform.uname() return { + "machine": { + "OS" : f"{uname.system} {uname.release}", + "Arch": uname.machine + }, "Status": "Running", "Docs": "/docs" } \ No newline at end of file diff --git a/src/main.py b/src/main.py index a3b7108..aa15ff6 100644 --- a/src/main.py +++ b/src/main.py @@ -1,4 +1,5 @@ from infrastructure.api.users.app import create_app +from core.config import ConfSettings app = create_app() @@ -6,11 +7,11 @@ def run(): import uvicorn uvicorn.run( "main:app", - host="0.0.0.0", - port=8000, - reload=True, - log_level="info", + host=ConfSettings.host, + port=ConfSettings.port, + reload=ConfSettings.reload, + log_level=ConfSettings.log_level, ) if __name__ == "__main__": - run() + run() \ No newline at end of file diff --git a/src/users.db b/src/users.db index a321460d55213f40a23811fb6af9f5606e44316b..fdae28b045c83ceaf184a1d78820b4dedf17fa9a 100644 GIT binary patch delta 233 zcmZoTz}Rqrae_1>`$QRMR(1xx-d`J27VvX0@o#3}zs0|Kv!K9oesxtQRt8ahWv|l2 zyeuHr%So+tD9uYu&d|%Purvb#BSRw~ntV%M3#juO1OFfXZ<_@bUh#{uGBYwVF)=f9 za&j>+Ffj4oVBmkpe*-9YhF?sSS)UQZIHt+(?8ShFykX$~%Krwa@BzO92eT+6$ZjSs xW@%36)a1;Z%tVNBj~MtL@qYrUy2dZZ&#cUd+e8^>RyGE`vhIy33;5X>`EN1s-`XswaDjjFEqN^<{|^KIA0YoJ z|HJ@ZK4xZ4PA&!p21fpO4E*na!cX`ozq1zuD*MX7{}rl?O_YmSn$tNoIWs3S5u*AN a1OF$mtRPS`FS8=2rMbDGp`oRbu^|BDG9@Pf