From 3701c507112371202f0558fd21be40f10402dd92 Mon Sep 17 00:00:00 2001 From: Schubert Ferenc Date: Wed, 1 Jul 2026 20:50:17 +0200 Subject: [PATCH] feat: add database configuration and health check --- backend/hermes/.env | 5 +++ .../app/__pycache__/main.cpython-314.pyc | Bin 740 -> 844 bytes .../core/__pycache__/config.cpython-314.pyc | Bin 0 -> 989 bytes backend/hermes/app/core/config.py | 16 ++++++++++ .../db/__pycache__/database.cpython-314.pyc | Bin 0 -> 1045 bytes .../app/db/__pycache__/health.cpython-314.pyc | Bin 0 -> 906 bytes backend/hermes/app/db/database.py | 29 ++++++++++++++++++ backend/hermes/app/db/health.py | 12 ++++++++ backend/hermes/app/main.py | 12 ++++++-- 9 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 backend/hermes/.env create mode 100644 backend/hermes/app/core/__pycache__/config.cpython-314.pyc create mode 100644 backend/hermes/app/core/config.py create mode 100644 backend/hermes/app/db/__pycache__/database.cpython-314.pyc create mode 100644 backend/hermes/app/db/__pycache__/health.cpython-314.pyc create mode 100644 backend/hermes/app/db/database.py create mode 100644 backend/hermes/app/db/health.py diff --git a/backend/hermes/.env b/backend/hermes/.env new file mode 100644 index 0000000..c43a93a --- /dev/null +++ b/backend/hermes/.env @@ -0,0 +1,5 @@ +DATABASE_URL=postgresql+psycopg://olympus:FsFs03285310!!!@olympus-db:5432/olympus + +APP_NAME=Hermes API + +APP_VERSION=0.1.0 diff --git a/backend/hermes/app/__pycache__/main.cpython-314.pyc b/backend/hermes/app/__pycache__/main.cpython-314.pyc index 06c55d6ff77a4fd9246724ca36930fdba83e9637..1be2f4b8297a920a42ba6aa82a4973ff5c5ac09f 100644 GIT binary patch literal 844 zcmZ`$&ubGw6rS1HU(GMmBs5CJR#b2ivK0#UAcBIDTxwYmFIL@brp?-9v&>8a$tmJN z!AlPQ6a9O72?HKPJa~)7lPBNoCaD%2m^W|ceeb>Rn|G&>&mdU8Uq62H5hL_fU6#vS zIP(cOWAqYvxPj_e;4S5A4XsWD*+Pf-I`W98dxmG;BWaG%5A}oWve5bIS-a3hEzho^ z-PA?G{119xPBbFT|bO!@lfil*AuJ+MRKtDWiVqjGtpXUvNyGh z6K7_SoH;|pFj*0TBMYkd9ntn%hD}v oOlAe78Skras~^hmuKv(;Y|aVN3Nz)M$F7{=@+w&Qse*~@KSFS~=Kufz delta 494 zcmX@Z_JoyJn~#@^0SG+9T(cx5@=DgX067f|aSTC>o(vw0C5-Y6v5blgK}Oy#Ad<>;RmscGnhc7N?35H=76i_gsPSXYAIn2;!$RvZm~nOR2K09c@P3*RuMl) zk_{qRB+O9HzyJ~{2B`wsE;1qW0=L2i76q`)ewu8z*wcVcPAteQ0$Fy8IkBMN7IS)P zNfF55Km#xh=dj7mPbtkwwJQ<_%7VhMI0Q(1U}j`wyvrc{kd5~Sm)H#+;Tr;~U)U#e uGK=UlGMas6W?^`%)@I|h3!B|wJC#~- zhzb%&{1SdnZ^0LYIQ2$pB{(w9qlzVuXY3h&-+cDX>8T9h$oo&;E)sxWIv5Rm=$tI0 z(}gYY$Qo3MBvnHiSD*k_!83~BnKiOx4sxYgGq1wZuuxi_bsfs~k&erT%0Bc3+h9_L z@wQMGM&6?&Zid^B!$1bZ!v1mwU&YWz0yU7t18Hno(wu<==^%h1?OF;Y9_qpOEpDl z5cxthP(@0GzUf+5-E&_HtanAQ)2TBqn~bwKa9>1wt#(Jabw7B=;)c7^m%&9iH%K@` zqaUQw-cwmh{WwmfFBzq(FjB5EzO6M7H_-h13z=x$q6v%ah8X{Z{er45h84(TOw;qQ39=krn}?a}?i!3mJtmixW!uB$o56 zHX2%Gv5rM_Kw9O-s5LurplPEZ*g+UjUrHX_Lx0v1J-mI*(PHwyi__jyhu zq()}E%P#ctrEaxXoa;Wr&hqoUT(MW2J+;kzs{8!!6!!QLcz#s6Uba=Pz1Q$#%|Q(R zKiB`J-$5TlIcEn2ebBGg6qK_v5N4H^Fx1?{Wi-D{LdXwTJx!%a>dS{yz~%T7Wbav2Q>;=x-&_Ta&T)jL_llLb@#)mKf|bIuh<96%}h*B^c)0N<4{ z5bFT!zd_J}Rq)6%ED=e{3Tw;Sk}mZ=))5=h=woBqT(YE9h8mfHnsui*c<%4%nVvPT z<+ikI#ta~1)@*NRUO!+9lYp!}1zw@1pC7P}=S+bd_J&VE#r>(SR!BAyaOO)!S+X7` z42jY;7DPVxWw^<%`a)5zU_yjx68jsBqiqW&Wtgms8)z6TXr>iCbNseUgEWpqnH3aX zi`t@@8TBw}1bJS$#zysJ{}3J>sDUINNNsgO>K>7Xr(t?}W~kWj;a0`WY)TV9W|U?Q zrE%J5M+&=?K5F~Xfu}_2TF8Zru!tl@_avo4Vi5uLrQ~6~Et#N{k6_Gw6+T<6-WQCE zstB6xI^%MUah3$t+tF6sYKv;!4>nlRs5TjonW*}$R<%*DHhk&VF|oPU7I*QLzM4QF zOjJ+di(&Ke0sl|c2C}E{+uuZW63STlgFz?YJaS4}a0FK1F?4WAR^ZOT;BsHC2RF;$ z;d3Y8-hXa|a7jM~A-SN3q(W|0w9LJm5A$Xk_)%sCQQDue)~E}W&k3%|$*grIX`{}k z(Kw8sID_gZCjGTA`Qmuz>aM1nYvKo z!4PPhN12r`E?3Kxk3^;1pL0HmemVB#d~dGsGI~{=;x?*Xoe;7EvpaBh2TuQh**y!K zsjlIEHl{xr)7?U`XX=jDvGyDoJ=!fzbc^HNLa8@ojA|XXS0tpcz1RahdbUZ%`vLy| D%6{z{ literal 0 HcmV?d00001 diff --git a/backend/hermes/app/db/__pycache__/health.cpython-314.pyc b/backend/hermes/app/db/__pycache__/health.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7493d1dacf9cdb0f7f71e9eeb08f396bb89f4e66 GIT binary patch literal 906 zcmYjPPfrs;6o0e-D72--QXs<83Pw_itR@^xP?N^gfH8;*dLrFycL!S8?$+Je1Uxmy zlNY}LiCp~(-ue-YM9c;c#(3a{!K8^^e6wuPH<|Z-@6DSx@6XH+XNLeuF{{sI0`Q$H zeG(FIb{#_$sn52kPhCrU?CiDLVW8DbYlphF)}Vfi2AbJ!Yjzzq z(_xK;_Fj}R4AXTzW-@9Rei}n6xPv^h4)j1Fg`b@5OR+dZGgzGUX#hc7*CB!qOv1k^ z*7^G3=#^VXk1v@*p)T;Kj#E)@;74AVKM1vU*b5hb2?e%IUu1f%t8s~ zVeZ@j+nB`^G=(Clc*+;|SQ1rek`ipD5;rW{#NT*VR3LNoCxOD|LF)koF)8>L&T z8xP8|FX5GF!17!iF^dN1F112NeV#!ySlzW~n>9T?u%W~UwRl)1pMSn+*lJK~$FNOi z)=iwJQkqc37^i)LoJGg-%U#XP|csE&*|P_tSIcrV6ufXu2eWMLomZ8^Z?j<67cNrfEr|1e4}ON@xUkfnmS=|!z2}di YjZZ2VL58Ui@)ah3z)VlUzZBp23;kQNB>(^b literal 0 HcmV?d00001 diff --git a/backend/hermes/app/db/database.py b/backend/hermes/app/db/database.py new file mode 100644 index 0000000..a747234 --- /dev/null +++ b/backend/hermes/app/db/database.py @@ -0,0 +1,29 @@ +from sqlalchemy import create_engine +from sqlalchemy.orm import DeclarativeBase +from sqlalchemy.orm import sessionmaker + +from app.core.config import settings + + +engine = create_engine( + settings.database_url, + echo=False +) + +SessionLocal = sessionmaker( + autocommit=False, + autoflush=False, + bind=engine +) + + +class Base(DeclarativeBase): + pass + + +def get_db(): + db = SessionLocal() + try: + yield db + finally: + db.close() \ No newline at end of file diff --git a/backend/hermes/app/db/health.py b/backend/hermes/app/db/health.py new file mode 100644 index 0000000..4cefa6e --- /dev/null +++ b/backend/hermes/app/db/health.py @@ -0,0 +1,12 @@ +from sqlalchemy import text + +from app.db.database import engine + + +def check_database() -> bool: + try: + with engine.connect() as connection: + connection.execute(text("SELECT 1")) + return True + except Exception: + return False \ No newline at end of file diff --git a/backend/hermes/app/main.py b/backend/hermes/app/main.py index f98f36b..7db3816 100644 --- a/backend/hermes/app/main.py +++ b/backend/hermes/app/main.py @@ -1,5 +1,7 @@ from fastapi import FastAPI +from app.db.health import check_database + app = FastAPI( title="Hermes API", version="0.1.0", @@ -9,9 +11,15 @@ app = FastAPI( @app.get("/") def root(): - return {"service": "Hermes", "status": "running"} + return { + "service": "Hermes", + "status": "running" + } @app.get("/health") def health(): - return {"status": "healthy"} + return { + "status": "healthy", + "database": check_database() + } \ No newline at end of file