From d4f32a5d26728c39c6d344b9943e3365bd41fa67 Mon Sep 17 00:00:00 2001 From: ZhuchkaTrilesix Date: Fri, 23 May 2025 11:52:17 +0300 Subject: [PATCH 1/6] init architecture --- auth_service/.dockerignore | 3 + auth_service/.gitkeep | 0 auth_service/Dockerfile | 14 ++++ auth_service/requirements.txt | 0 auth_service/src/config.py | 8 +++ auth_service/src/main.py | 0 data_service/.dockerignore | 3 + data_service/.gitkeep | 0 data_service/Dockerfile | 14 ++++ data_service/requirements.txt | 0 data_service/src/config.py | 8 +++ data_service/src/main.py | 0 requirements.txt => gateway/requirements.txt | 76 ++++++++++---------- route_service/.dockerignore | 3 + route_service/.gitkeep | 0 route_service/Dockerfile | 14 ++++ route_service/requirements.txt | 0 route_service/src/config.py | 8 +++ route_service/src/main.py | 0 station_service/.dockerignore | 3 + station_service/.gitkeep | 0 station_service/Dockerfile | 14 ++++ station_service/requirements.txt | 0 station_service/src/config.py | 8 +++ station_service/src/main.py | 0 user_service/.dockerignore | 3 + user_service/.gitkeep | 0 user_service/Dockerfile | 14 ++++ user_service/requirements.txt | 0 user_service/src/config.py | 8 +++ user_service/src/main.py | 0 31 files changed, 163 insertions(+), 38 deletions(-) create mode 100644 auth_service/.dockerignore create mode 100644 auth_service/.gitkeep create mode 100644 auth_service/Dockerfile create mode 100644 auth_service/requirements.txt create mode 100644 auth_service/src/config.py create mode 100644 auth_service/src/main.py create mode 100644 data_service/.dockerignore create mode 100644 data_service/.gitkeep create mode 100644 data_service/Dockerfile create mode 100644 data_service/requirements.txt create mode 100644 data_service/src/config.py create mode 100644 data_service/src/main.py rename requirements.txt => gateway/requirements.txt (94%) create mode 100644 route_service/.dockerignore create mode 100644 route_service/.gitkeep create mode 100644 route_service/Dockerfile create mode 100644 route_service/requirements.txt create mode 100644 route_service/src/config.py create mode 100644 route_service/src/main.py create mode 100644 station_service/.dockerignore create mode 100644 station_service/.gitkeep create mode 100644 station_service/Dockerfile create mode 100644 station_service/requirements.txt create mode 100644 station_service/src/config.py create mode 100644 station_service/src/main.py create mode 100644 user_service/.dockerignore create mode 100644 user_service/.gitkeep create mode 100644 user_service/Dockerfile create mode 100644 user_service/requirements.txt create mode 100644 user_service/src/config.py create mode 100644 user_service/src/main.py diff --git a/auth_service/.dockerignore b/auth_service/.dockerignore new file mode 100644 index 0000000..e31985f --- /dev/null +++ b/auth_service/.dockerignore @@ -0,0 +1,3 @@ +.venv +__pycache__ +.idea \ No newline at end of file diff --git a/auth_service/.gitkeep b/auth_service/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/auth_service/Dockerfile b/auth_service/Dockerfile new file mode 100644 index 0000000..853b26d --- /dev/null +++ b/auth_service/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.12.9-slim + +WORKDIR /app + +COPY requirements.txt . + +RUN pip install --no-cache-dir fastapi[standard] && \ + pip install --no-cache-dir -r requirements.txt + +COPY . . + +WORKDIR /app/src + +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"] \ No newline at end of file diff --git a/auth_service/requirements.txt b/auth_service/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/auth_service/src/config.py b/auth_service/src/config.py new file mode 100644 index 0000000..f3309f5 --- /dev/null +++ b/auth_service/src/config.py @@ -0,0 +1,8 @@ +import os +from abc import ABC +from dataclasses import asdict, dataclass + + +class CfgBase(ABC): + dict: callable = asdict + diff --git a/auth_service/src/main.py b/auth_service/src/main.py new file mode 100644 index 0000000..e69de29 diff --git a/data_service/.dockerignore b/data_service/.dockerignore new file mode 100644 index 0000000..e31985f --- /dev/null +++ b/data_service/.dockerignore @@ -0,0 +1,3 @@ +.venv +__pycache__ +.idea \ No newline at end of file diff --git a/data_service/.gitkeep b/data_service/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/data_service/Dockerfile b/data_service/Dockerfile new file mode 100644 index 0000000..853b26d --- /dev/null +++ b/data_service/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.12.9-slim + +WORKDIR /app + +COPY requirements.txt . + +RUN pip install --no-cache-dir fastapi[standard] && \ + pip install --no-cache-dir -r requirements.txt + +COPY . . + +WORKDIR /app/src + +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"] \ No newline at end of file diff --git a/data_service/requirements.txt b/data_service/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/data_service/src/config.py b/data_service/src/config.py new file mode 100644 index 0000000..f3309f5 --- /dev/null +++ b/data_service/src/config.py @@ -0,0 +1,8 @@ +import os +from abc import ABC +from dataclasses import asdict, dataclass + + +class CfgBase(ABC): + dict: callable = asdict + diff --git a/data_service/src/main.py b/data_service/src/main.py new file mode 100644 index 0000000..e69de29 diff --git a/requirements.txt b/gateway/requirements.txt similarity index 94% rename from requirements.txt rename to gateway/requirements.txt index 51352b4..65c38d9 100644 --- a/requirements.txt +++ b/gateway/requirements.txt @@ -1,38 +1,38 @@ -annotated-types==0.7.0 -anyio==4.9.0 -bcrypt==4.3.0 -certifi==2025.4.26 -click==8.1.8 -colorama==0.4.6 -dnspython==2.7.0 -email_validator==2.2.0 -fastapi==0.115.12 -fastapi-cli==0.0.7 -h11==0.16.0 -httpcore==1.0.9 -httptools==0.6.4 -httpx==0.28.1 -idna==3.10 -Jinja2==3.1.6 -markdown-it-py==3.0.0 -MarkupSafe==3.0.2 -mdurl==0.1.2 -psycopg2==2.9.10 -pydantic==2.11.4 -pydantic_core==2.33.2 -Pygments==2.19.1 -PyJWT==2.10.1 -python-dotenv==1.1.0 -python-multipart==0.0.20 -PyYAML==6.0.2 -rich==14.0.0 -rich-toolkit==0.14.6 -shellingham==1.5.4 -sniffio==1.3.1 -starlette==0.46.2 -typer==0.15.4 -typing-inspection==0.4.0 -typing_extensions==4.13.2 -uvicorn==0.34.2 -watchfiles==1.0.5 -websockets==15.0.1 +annotated-types==0.7.0 +anyio==4.9.0 +bcrypt==4.3.0 +certifi==2025.4.26 +click==8.1.8 +colorama==0.4.6 +dnspython==2.7.0 +email_validator==2.2.0 +fastapi==0.115.12 +fastapi-cli==0.0.7 +h11==0.16.0 +httpcore==1.0.9 +httptools==0.6.4 +httpx==0.28.1 +idna==3.10 +Jinja2==3.1.6 +markdown-it-py==3.0.0 +MarkupSafe==3.0.2 +mdurl==0.1.2 +psycopg2==2.9.10 +pydantic==2.11.4 +pydantic_core==2.33.2 +Pygments==2.19.1 +PyJWT==2.10.1 +python-dotenv==1.1.0 +python-multipart==0.0.20 +PyYAML==6.0.2 +rich==14.0.0 +rich-toolkit==0.14.6 +shellingham==1.5.4 +sniffio==1.3.1 +starlette==0.46.2 +typer==0.15.4 +typing-inspection==0.4.0 +typing_extensions==4.13.2 +uvicorn==0.34.2 +watchfiles==1.0.5 +websockets==15.0.1 diff --git a/route_service/.dockerignore b/route_service/.dockerignore new file mode 100644 index 0000000..e31985f --- /dev/null +++ b/route_service/.dockerignore @@ -0,0 +1,3 @@ +.venv +__pycache__ +.idea \ No newline at end of file diff --git a/route_service/.gitkeep b/route_service/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/route_service/Dockerfile b/route_service/Dockerfile new file mode 100644 index 0000000..853b26d --- /dev/null +++ b/route_service/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.12.9-slim + +WORKDIR /app + +COPY requirements.txt . + +RUN pip install --no-cache-dir fastapi[standard] && \ + pip install --no-cache-dir -r requirements.txt + +COPY . . + +WORKDIR /app/src + +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"] \ No newline at end of file diff --git a/route_service/requirements.txt b/route_service/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/route_service/src/config.py b/route_service/src/config.py new file mode 100644 index 0000000..f3309f5 --- /dev/null +++ b/route_service/src/config.py @@ -0,0 +1,8 @@ +import os +from abc import ABC +from dataclasses import asdict, dataclass + + +class CfgBase(ABC): + dict: callable = asdict + diff --git a/route_service/src/main.py b/route_service/src/main.py new file mode 100644 index 0000000..e69de29 diff --git a/station_service/.dockerignore b/station_service/.dockerignore new file mode 100644 index 0000000..e31985f --- /dev/null +++ b/station_service/.dockerignore @@ -0,0 +1,3 @@ +.venv +__pycache__ +.idea \ No newline at end of file diff --git a/station_service/.gitkeep b/station_service/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/station_service/Dockerfile b/station_service/Dockerfile new file mode 100644 index 0000000..853b26d --- /dev/null +++ b/station_service/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.12.9-slim + +WORKDIR /app + +COPY requirements.txt . + +RUN pip install --no-cache-dir fastapi[standard] && \ + pip install --no-cache-dir -r requirements.txt + +COPY . . + +WORKDIR /app/src + +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"] \ No newline at end of file diff --git a/station_service/requirements.txt b/station_service/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/station_service/src/config.py b/station_service/src/config.py new file mode 100644 index 0000000..f3309f5 --- /dev/null +++ b/station_service/src/config.py @@ -0,0 +1,8 @@ +import os +from abc import ABC +from dataclasses import asdict, dataclass + + +class CfgBase(ABC): + dict: callable = asdict + diff --git a/station_service/src/main.py b/station_service/src/main.py new file mode 100644 index 0000000..e69de29 diff --git a/user_service/.dockerignore b/user_service/.dockerignore new file mode 100644 index 0000000..e31985f --- /dev/null +++ b/user_service/.dockerignore @@ -0,0 +1,3 @@ +.venv +__pycache__ +.idea \ No newline at end of file diff --git a/user_service/.gitkeep b/user_service/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/user_service/Dockerfile b/user_service/Dockerfile new file mode 100644 index 0000000..853b26d --- /dev/null +++ b/user_service/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.12.9-slim + +WORKDIR /app + +COPY requirements.txt . + +RUN pip install --no-cache-dir fastapi[standard] && \ + pip install --no-cache-dir -r requirements.txt + +COPY . . + +WORKDIR /app/src + +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"] \ No newline at end of file diff --git a/user_service/requirements.txt b/user_service/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/user_service/src/config.py b/user_service/src/config.py new file mode 100644 index 0000000..f3309f5 --- /dev/null +++ b/user_service/src/config.py @@ -0,0 +1,8 @@ +import os +from abc import ABC +from dataclasses import asdict, dataclass + + +class CfgBase(ABC): + dict: callable = asdict + diff --git a/user_service/src/main.py b/user_service/src/main.py new file mode 100644 index 0000000..e69de29 From cbb63cbb1040bb4ad8e6d767c629bb2a20eff0b2 Mon Sep 17 00:00:00 2001 From: ZhuchkaTrilesix Date: Fri, 23 May 2025 12:10:03 +0300 Subject: [PATCH 2/6] update 3.13.3 --- auth_service/Dockerfile | 2 +- data_service/Dockerfile | 2 +- gateway/Dockerfile | 14 ++++++++++++++ route_service/Dockerfile | 2 +- station_service/Dockerfile | 2 +- user_service/Dockerfile | 2 +- 6 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 gateway/Dockerfile diff --git a/auth_service/Dockerfile b/auth_service/Dockerfile index 853b26d..cafbaf3 100644 --- a/auth_service/Dockerfile +++ b/auth_service/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.12.9-slim +FROM python:3.13.3-slim WORKDIR /app diff --git a/data_service/Dockerfile b/data_service/Dockerfile index 853b26d..cafbaf3 100644 --- a/data_service/Dockerfile +++ b/data_service/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.12.9-slim +FROM python:3.13.3-slim WORKDIR /app diff --git a/gateway/Dockerfile b/gateway/Dockerfile new file mode 100644 index 0000000..cafbaf3 --- /dev/null +++ b/gateway/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.13.3-slim + +WORKDIR /app + +COPY requirements.txt . + +RUN pip install --no-cache-dir fastapi[standard] && \ + pip install --no-cache-dir -r requirements.txt + +COPY . . + +WORKDIR /app/src + +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"] \ No newline at end of file diff --git a/route_service/Dockerfile b/route_service/Dockerfile index 853b26d..cafbaf3 100644 --- a/route_service/Dockerfile +++ b/route_service/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.12.9-slim +FROM python:3.13.3-slim WORKDIR /app diff --git a/station_service/Dockerfile b/station_service/Dockerfile index 853b26d..cafbaf3 100644 --- a/station_service/Dockerfile +++ b/station_service/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.12.9-slim +FROM python:3.13.3-slim WORKDIR /app diff --git a/user_service/Dockerfile b/user_service/Dockerfile index 853b26d..cafbaf3 100644 --- a/user_service/Dockerfile +++ b/user_service/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.12.9-slim +FROM python:3.13.3-slim WORKDIR /app From 7fb242ac0c9b9c26d43513feffed6fa8e6d5d6a0 Mon Sep 17 00:00:00 2001 From: ZhuchkaTrilesix Date: Fri, 23 May 2025 12:11:01 +0300 Subject: [PATCH 3/6] ref --- .../auth_service}/.dockerignore | 0 .../auth_service}/.gitkeep | 0 .../auth_service}/Dockerfile | 0 .../auth_service}/requirements.txt | 0 .../auth_service}/src/config.py | 0 .../auth_service}/src/main.py | 0 .../data_service}/.dockerignore | 0 .../data_service}/.gitkeep | 0 .../data_service}/Dockerfile | 0 .../data_service}/requirements.txt | 0 .../data_service}/src/config.py | 0 .../data_service}/src/main.py | 0 .../docker-compose.local.yml | 0 {gateway => server/gateway}/Dockerfile | 0 .../gateway}/dependencies/auth.py | 0 {gateway => server/gateway}/main.py | 82 ++++++++--------- {gateway => server/gateway}/requirements.txt | 0 .../gateway}/routers/__init__.py | 0 {gateway => server/gateway}/routers/auth.py | 88 +++++++++---------- {gateway => server/gateway}/routers/route.py | 34 +++---- .../gateway}/routers/station.py | 66 +++++++------- {gateway => server/gateway}/routers/user.py | 70 +++++++-------- {gateway => server/gateway}/utils.py | 0 .../route_service}/.dockerignore | 0 .../route_service}/.gitkeep | 0 .../route_service}/Dockerfile | 0 .../route_service}/requirements.txt | 0 .../route_service}/src/config.py | 0 .../route_service}/src/main.py | 0 .../station_service}/.dockerignore | 0 .../station_service}/.gitkeep | 0 .../station_service}/Dockerfile | 0 .../station_service}/requirements.txt | 0 .../station_service}/src/config.py | 0 .../station_service}/src/main.py | 0 .../user_service}/.dockerignore | 0 .../user_service}/.gitkeep | 0 .../user_service}/Dockerfile | 0 .../user_service}/requirements.txt | 0 .../user_service}/src/config.py | 0 .../user_service}/src/main.py | 0 41 files changed, 170 insertions(+), 170 deletions(-) rename {auth_service => server/auth_service}/.dockerignore (100%) rename {auth_service => server/auth_service}/.gitkeep (100%) rename {auth_service => server/auth_service}/Dockerfile (100%) rename {auth_service => server/auth_service}/requirements.txt (100%) rename {auth_service => server/auth_service}/src/config.py (100%) rename {auth_service => server/auth_service}/src/main.py (100%) rename {data_service => server/data_service}/.dockerignore (100%) rename {data_service => server/data_service}/.gitkeep (100%) rename {data_service => server/data_service}/Dockerfile (100%) rename {data_service => server/data_service}/requirements.txt (100%) rename {data_service => server/data_service}/src/config.py (100%) rename {data_service => server/data_service}/src/main.py (100%) rename docker-compose.local.yml => server/docker-compose.local.yml (100%) rename {gateway => server/gateway}/Dockerfile (100%) rename {gateway => server/gateway}/dependencies/auth.py (100%) rename {gateway => server/gateway}/main.py (96%) rename {gateway => server/gateway}/requirements.txt (100%) rename {gateway => server/gateway}/routers/__init__.py (100%) rename {gateway => server/gateway}/routers/auth.py (96%) rename {gateway => server/gateway}/routers/route.py (95%) rename {gateway => server/gateway}/routers/station.py (96%) rename {gateway => server/gateway}/routers/user.py (96%) rename {gateway => server/gateway}/utils.py (100%) rename {route_service => server/route_service}/.dockerignore (100%) rename {route_service => server/route_service}/.gitkeep (100%) rename {route_service => server/route_service}/Dockerfile (100%) rename {route_service => server/route_service}/requirements.txt (100%) rename {route_service => server/route_service}/src/config.py (100%) rename {route_service => server/route_service}/src/main.py (100%) rename {station_service => server/station_service}/.dockerignore (100%) rename {station_service => server/station_service}/.gitkeep (100%) rename {station_service => server/station_service}/Dockerfile (100%) rename {station_service => server/station_service}/requirements.txt (100%) rename {station_service => server/station_service}/src/config.py (100%) rename {station_service => server/station_service}/src/main.py (100%) rename {user_service => server/user_service}/.dockerignore (100%) rename {user_service => server/user_service}/.gitkeep (100%) rename {user_service => server/user_service}/Dockerfile (100%) rename {user_service => server/user_service}/requirements.txt (100%) rename {user_service => server/user_service}/src/config.py (100%) rename {user_service => server/user_service}/src/main.py (100%) diff --git a/auth_service/.dockerignore b/server/auth_service/.dockerignore similarity index 100% rename from auth_service/.dockerignore rename to server/auth_service/.dockerignore diff --git a/auth_service/.gitkeep b/server/auth_service/.gitkeep similarity index 100% rename from auth_service/.gitkeep rename to server/auth_service/.gitkeep diff --git a/auth_service/Dockerfile b/server/auth_service/Dockerfile similarity index 100% rename from auth_service/Dockerfile rename to server/auth_service/Dockerfile diff --git a/auth_service/requirements.txt b/server/auth_service/requirements.txt similarity index 100% rename from auth_service/requirements.txt rename to server/auth_service/requirements.txt diff --git a/auth_service/src/config.py b/server/auth_service/src/config.py similarity index 100% rename from auth_service/src/config.py rename to server/auth_service/src/config.py diff --git a/auth_service/src/main.py b/server/auth_service/src/main.py similarity index 100% rename from auth_service/src/main.py rename to server/auth_service/src/main.py diff --git a/data_service/.dockerignore b/server/data_service/.dockerignore similarity index 100% rename from data_service/.dockerignore rename to server/data_service/.dockerignore diff --git a/data_service/.gitkeep b/server/data_service/.gitkeep similarity index 100% rename from data_service/.gitkeep rename to server/data_service/.gitkeep diff --git a/data_service/Dockerfile b/server/data_service/Dockerfile similarity index 100% rename from data_service/Dockerfile rename to server/data_service/Dockerfile diff --git a/data_service/requirements.txt b/server/data_service/requirements.txt similarity index 100% rename from data_service/requirements.txt rename to server/data_service/requirements.txt diff --git a/data_service/src/config.py b/server/data_service/src/config.py similarity index 100% rename from data_service/src/config.py rename to server/data_service/src/config.py diff --git a/data_service/src/main.py b/server/data_service/src/main.py similarity index 100% rename from data_service/src/main.py rename to server/data_service/src/main.py diff --git a/docker-compose.local.yml b/server/docker-compose.local.yml similarity index 100% rename from docker-compose.local.yml rename to server/docker-compose.local.yml diff --git a/gateway/Dockerfile b/server/gateway/Dockerfile similarity index 100% rename from gateway/Dockerfile rename to server/gateway/Dockerfile diff --git a/gateway/dependencies/auth.py b/server/gateway/dependencies/auth.py similarity index 100% rename from gateway/dependencies/auth.py rename to server/gateway/dependencies/auth.py diff --git a/gateway/main.py b/server/gateway/main.py similarity index 96% rename from gateway/main.py rename to server/gateway/main.py index 04672cd..f9fe882 100644 --- a/gateway/main.py +++ b/server/gateway/main.py @@ -1,42 +1,42 @@ -from fastapi import FastAPI, Depends, HTTPException -from fastapi.middleware.cors import CORSMiddleware -from contextlib import asynccontextmanager -import logging -import uvicorn - -from routers import auth, user, station, route - -logging.basicConfig( - level=logging.INFO, - format="%(asctime)s [%(levelname)s] %(name)s: %(message)s" -) -logger = logging.getLogger(__name__) - - -app = FastAPI(title="EV Route Planner Gateway") - -app.add_middleware( - CORSMiddleware, - allow_origins=["*"], - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], -) - -# Подключение маршрутов -app.include_router(auth.router, prefix="/auth") -app.include_router(user.router, prefix="/user") -app.include_router(station.router, prefix="/stations") -app.include_router(route.router, prefix="/route") -#app.include_router(data.router, prefix="/data") - -@asynccontextmanager -async def lifespan(app: FastAPI): - logger.info("Gateway server is starting...") - yield - logger.info("Gateway server is shutting down...") - - -if __name__ == "__main__": - logger.info("Running with Uvicorn at http://0.0.0.0:8000") +from fastapi import FastAPI, Depends, HTTPException +from fastapi.middleware.cors import CORSMiddleware +from contextlib import asynccontextmanager +import logging +import uvicorn + +from routers import auth, user, station, route + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(name)s: %(message)s" +) +logger = logging.getLogger(__name__) + + +app = FastAPI(title="EV Route Planner Gateway") + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +# Подключение маршрутов +app.include_router(auth.router, prefix="/auth") +app.include_router(user.router, prefix="/user") +app.include_router(station.router, prefix="/stations") +app.include_router(route.router, prefix="/route") +#app.include_router(data.router, prefix="/data") + +@asynccontextmanager +async def lifespan(app: FastAPI): + logger.info("Gateway server is starting...") + yield + logger.info("Gateway server is shutting down...") + + +if __name__ == "__main__": + logger.info("Running with Uvicorn at http://0.0.0.0:8000") uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True) \ No newline at end of file diff --git a/gateway/requirements.txt b/server/gateway/requirements.txt similarity index 100% rename from gateway/requirements.txt rename to server/gateway/requirements.txt diff --git a/gateway/routers/__init__.py b/server/gateway/routers/__init__.py similarity index 100% rename from gateway/routers/__init__.py rename to server/gateway/routers/__init__.py diff --git a/gateway/routers/auth.py b/server/gateway/routers/auth.py similarity index 96% rename from gateway/routers/auth.py rename to server/gateway/routers/auth.py index 7c1c952..2e99684 100644 --- a/gateway/routers/auth.py +++ b/server/gateway/routers/auth.py @@ -1,45 +1,45 @@ -from fastapi import APIRouter, HTTPException, Depends -from pydantic import BaseModel, EmailStr -from utils import hash_password, verify_password, create_access_token -import psycopg2 - -router = APIRouter() - -SECRET_KEY = "secret" - -conn = psycopg2.connect(dbname="evroutesusers", user="roki", password="roki", host="localhost") -cursor = conn.cursor() - -class LoginData(BaseModel): - email: EmailStr - password: str - -class RegisterData(BaseModel): - email: EmailStr - password: str - role: str = "user" - -@router.post("/register") -def register(data: RegisterData): - cursor.execute("SELECT 1 FROM users WHERE email = %s", (data.email,)) - if cursor.fetchone(): - raise HTTPException(status_code=400, detail="User already exists") - - hashed_pw = hash_password(data.password) - - cursor.execute( - "INSERT INTO users (email, password_hash, role) VALUES (%s, %s, %s)", - (data.email, hashed_pw, data.role) - ) - conn.commit() - return {"status": "registered"} - -@router.post("/login") -def login(data: LoginData): - cursor.execute("SELECT password_hash, role FROM users WHERE email = %s", (data.email,)) - row = cursor.fetchone() - if not row or not verify_password(data.password, row[0]): - raise HTTPException(status_code=401, detail="Invalid credentials") - - token = create_access_token({"email": data.email, "role": row[1]}) +from fastapi import APIRouter, HTTPException, Depends +from pydantic import BaseModel, EmailStr +from utils import hash_password, verify_password, create_access_token +import psycopg2 + +router = APIRouter() + +SECRET_KEY = "secret" + +conn = psycopg2.connect(dbname="evroutesusers", user="roki", password="roki", host="localhost") +cursor = conn.cursor() + +class LoginData(BaseModel): + email: EmailStr + password: str + +class RegisterData(BaseModel): + email: EmailStr + password: str + role: str = "user" + +@router.post("/register") +def register(data: RegisterData): + cursor.execute("SELECT 1 FROM users WHERE email = %s", (data.email,)) + if cursor.fetchone(): + raise HTTPException(status_code=400, detail="User already exists") + + hashed_pw = hash_password(data.password) + + cursor.execute( + "INSERT INTO users (email, password_hash, role) VALUES (%s, %s, %s)", + (data.email, hashed_pw, data.role) + ) + conn.commit() + return {"status": "registered"} + +@router.post("/login") +def login(data: LoginData): + cursor.execute("SELECT password_hash, role FROM users WHERE email = %s", (data.email,)) + row = cursor.fetchone() + if not row or not verify_password(data.password, row[0]): + raise HTTPException(status_code=401, detail="Invalid credentials") + + token = create_access_token({"email": data.email, "role": row[1]}) return {"access_token": token} \ No newline at end of file diff --git a/gateway/routers/route.py b/server/gateway/routers/route.py similarity index 95% rename from gateway/routers/route.py rename to server/gateway/routers/route.py index 9feb94d..f51661f 100644 --- a/gateway/routers/route.py +++ b/server/gateway/routers/route.py @@ -1,18 +1,18 @@ -from fastapi import APIRouter -from pydantic import BaseModel - -router = APIRouter() - -class RouteRequest(BaseModel): - start: str - end: str - battery_level: int - -@router.post("/") -def calculate_route(data: RouteRequest): - return { - "start": data.start, - "end": data.end, - "estimated_time": "2h 30m", - "stations_on_route": [] +from fastapi import APIRouter +from pydantic import BaseModel + +router = APIRouter() + +class RouteRequest(BaseModel): + start: str + end: str + battery_level: int + +@router.post("/") +def calculate_route(data: RouteRequest): + return { + "start": data.start, + "end": data.end, + "estimated_time": "2h 30m", + "stations_on_route": [] } \ No newline at end of file diff --git a/gateway/routers/station.py b/server/gateway/routers/station.py similarity index 96% rename from gateway/routers/station.py rename to server/gateway/routers/station.py index b7f47dd..7554805 100644 --- a/gateway/routers/station.py +++ b/server/gateway/routers/station.py @@ -1,34 +1,34 @@ -from fastapi import APIRouter -from pydantic import BaseModel -import psycopg2 - -router = APIRouter() - -conn = psycopg2.connect(dbname="evroutesstations", user="roki", password="roki", host="localhost") -cursor = conn.cursor() - -class Station(BaseModel): - name: str - latitude: float - longitude: float - connector_type: str - power_kW: int - working_hours: str - -@router.post("/") -def add_station(station: Station): - cursor.execute( - """ - INSERT INTO stations (name, latitude, longitude, connector_type, power_kW, working_hours) - VALUES (%s, %s, %s, %s, %s, %s) - """, - (station.name, station.latitude, station.longitude, station.connector_type, station.power_kW, station.working_hours) - ) - conn.commit() - return {"status": "ok"} - -@router.get("/") -def get_stations(): - cursor.execute("SELECT * FROM stations") - rows = cursor.fetchall() +from fastapi import APIRouter +from pydantic import BaseModel +import psycopg2 + +router = APIRouter() + +conn = psycopg2.connect(dbname="evroutesstations", user="roki", password="roki", host="localhost") +cursor = conn.cursor() + +class Station(BaseModel): + name: str + latitude: float + longitude: float + connector_type: str + power_kW: int + working_hours: str + +@router.post("/") +def add_station(station: Station): + cursor.execute( + """ + INSERT INTO stations (name, latitude, longitude, connector_type, power_kW, working_hours) + VALUES (%s, %s, %s, %s, %s, %s) + """, + (station.name, station.latitude, station.longitude, station.connector_type, station.power_kW, station.working_hours) + ) + conn.commit() + return {"status": "ok"} + +@router.get("/") +def get_stations(): + cursor.execute("SELECT * FROM stations") + rows = cursor.fetchall() return rows \ No newline at end of file diff --git a/gateway/routers/user.py b/server/gateway/routers/user.py similarity index 96% rename from gateway/routers/user.py rename to server/gateway/routers/user.py index a18d363..3821aed 100644 --- a/gateway/routers/user.py +++ b/server/gateway/routers/user.py @@ -1,36 +1,36 @@ -from fastapi import APIRouter -from pydantic import BaseModel -import psycopg2 - -router = APIRouter() - -conn = psycopg2.connect(dbname="evroutesuserinfo", user="roki", password="roki", host="localhost") -cursor = conn.cursor() - -class UserData(BaseModel): - email: str - car_model: str - battery_capacity: float - connector_type: str - -@router.post("/") -def save_user(data: UserData): - cursor.execute( - """ - INSERT INTO users (email, car_model, battery_capacity, connector_type) - VALUES (%s, %s, %s, %s) - ON CONFLICT (email) DO UPDATE SET - car_model = EXCLUDED.car_model, - battery_capacity = EXCLUDED.battery_capacity, - connector_type = EXCLUDED.connector_type - """, - (data.email, data.car_model, data.battery_capacity, data.connector_type) - ) - conn.commit() - return {"status": "saved"} - -@router.get("/{email}") -def get_user(email: str): - cursor.execute("SELECT * FROM users WHERE email = %s", (email,)) - row = cursor.fetchone() +from fastapi import APIRouter +from pydantic import BaseModel +import psycopg2 + +router = APIRouter() + +conn = psycopg2.connect(dbname="evroutesuserinfo", user="roki", password="roki", host="localhost") +cursor = conn.cursor() + +class UserData(BaseModel): + email: str + car_model: str + battery_capacity: float + connector_type: str + +@router.post("/") +def save_user(data: UserData): + cursor.execute( + """ + INSERT INTO users (email, car_model, battery_capacity, connector_type) + VALUES (%s, %s, %s, %s) + ON CONFLICT (email) DO UPDATE SET + car_model = EXCLUDED.car_model, + battery_capacity = EXCLUDED.battery_capacity, + connector_type = EXCLUDED.connector_type + """, + (data.email, data.car_model, data.battery_capacity, data.connector_type) + ) + conn.commit() + return {"status": "saved"} + +@router.get("/{email}") +def get_user(email: str): + cursor.execute("SELECT * FROM users WHERE email = %s", (email,)) + row = cursor.fetchone() return row \ No newline at end of file diff --git a/gateway/utils.py b/server/gateway/utils.py similarity index 100% rename from gateway/utils.py rename to server/gateway/utils.py diff --git a/route_service/.dockerignore b/server/route_service/.dockerignore similarity index 100% rename from route_service/.dockerignore rename to server/route_service/.dockerignore diff --git a/route_service/.gitkeep b/server/route_service/.gitkeep similarity index 100% rename from route_service/.gitkeep rename to server/route_service/.gitkeep diff --git a/route_service/Dockerfile b/server/route_service/Dockerfile similarity index 100% rename from route_service/Dockerfile rename to server/route_service/Dockerfile diff --git a/route_service/requirements.txt b/server/route_service/requirements.txt similarity index 100% rename from route_service/requirements.txt rename to server/route_service/requirements.txt diff --git a/route_service/src/config.py b/server/route_service/src/config.py similarity index 100% rename from route_service/src/config.py rename to server/route_service/src/config.py diff --git a/route_service/src/main.py b/server/route_service/src/main.py similarity index 100% rename from route_service/src/main.py rename to server/route_service/src/main.py diff --git a/station_service/.dockerignore b/server/station_service/.dockerignore similarity index 100% rename from station_service/.dockerignore rename to server/station_service/.dockerignore diff --git a/station_service/.gitkeep b/server/station_service/.gitkeep similarity index 100% rename from station_service/.gitkeep rename to server/station_service/.gitkeep diff --git a/station_service/Dockerfile b/server/station_service/Dockerfile similarity index 100% rename from station_service/Dockerfile rename to server/station_service/Dockerfile diff --git a/station_service/requirements.txt b/server/station_service/requirements.txt similarity index 100% rename from station_service/requirements.txt rename to server/station_service/requirements.txt diff --git a/station_service/src/config.py b/server/station_service/src/config.py similarity index 100% rename from station_service/src/config.py rename to server/station_service/src/config.py diff --git a/station_service/src/main.py b/server/station_service/src/main.py similarity index 100% rename from station_service/src/main.py rename to server/station_service/src/main.py diff --git a/user_service/.dockerignore b/server/user_service/.dockerignore similarity index 100% rename from user_service/.dockerignore rename to server/user_service/.dockerignore diff --git a/user_service/.gitkeep b/server/user_service/.gitkeep similarity index 100% rename from user_service/.gitkeep rename to server/user_service/.gitkeep diff --git a/user_service/Dockerfile b/server/user_service/Dockerfile similarity index 100% rename from user_service/Dockerfile rename to server/user_service/Dockerfile diff --git a/user_service/requirements.txt b/server/user_service/requirements.txt similarity index 100% rename from user_service/requirements.txt rename to server/user_service/requirements.txt diff --git a/user_service/src/config.py b/server/user_service/src/config.py similarity index 100% rename from user_service/src/config.py rename to server/user_service/src/config.py diff --git a/user_service/src/main.py b/server/user_service/src/main.py similarity index 100% rename from user_service/src/main.py rename to server/user_service/src/main.py From a0cf98c5a976d076c9e2df83223cfdcb2ad81393 Mon Sep 17 00:00:00 2001 From: ZhuchkaTrilesix Date: Fri, 23 May 2025 12:17:39 +0300 Subject: [PATCH 4/6] docker for services --- server/auth_service/Dockerfile | 2 +- server/data_service/Dockerfile | 2 +- server/docker-compose.local.yml | 68 +++++++++++++++++++++++++++---- server/route_service/Dockerfile | 2 +- server/station_service/Dockerfile | 2 +- server/user_service/Dockerfile | 2 +- 6 files changed, 66 insertions(+), 12 deletions(-) diff --git a/server/auth_service/Dockerfile b/server/auth_service/Dockerfile index cafbaf3..c41bb0c 100644 --- a/server/auth_service/Dockerfile +++ b/server/auth_service/Dockerfile @@ -11,4 +11,4 @@ COPY . . WORKDIR /app/src -CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"] \ No newline at end of file +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8002", "--reload"] \ No newline at end of file diff --git a/server/data_service/Dockerfile b/server/data_service/Dockerfile index cafbaf3..79d41a0 100644 --- a/server/data_service/Dockerfile +++ b/server/data_service/Dockerfile @@ -11,4 +11,4 @@ COPY . . WORKDIR /app/src -CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"] \ No newline at end of file +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8003", "--reload"] \ No newline at end of file diff --git a/server/docker-compose.local.yml b/server/docker-compose.local.yml index dcca6db..81d30d4 100644 --- a/server/docker-compose.local.yml +++ b/server/docker-compose.local.yml @@ -1,17 +1,71 @@ version: '3.8' services: - api: - build: . - command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload - volumes: - - .:/code + gateway: + build: ./ + container_name: gateway + ports: + - "8001:8001" + depends_on: + - mongodb + environment: + DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev + restart: unless-stopped + + auth_service: + build: ./ + container_name: auth_service + ports: + - "8002:8002" + depends_on: + - mongodb + environment: + DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev + restart: unless-stopped + + data_service: + build: ./ + container_name: data_service + ports: + - "8003:8003" + depends_on: + - mongodb + environment: + DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev + restart: unless-stopped + + route_service: + build: ./ + container_name: route_service ports: - - "8000:8000" + - "8004:8004" + depends_on: + - mongodb environment: DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev + restart: unless-stopped + + station_service: + build: ./ + container_name: station_service + ports: + - "8005:8005" depends_on: - - postgres + - mongodb + environment: + DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev + restart: unless-stopped + + user_service: + build: ./ + container_name: user_service + ports: + - "8006:8006" + depends_on: + - mongodb + environment: + DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev + restart: unless-stopped postgres: image: postgres:15-alpine diff --git a/server/route_service/Dockerfile b/server/route_service/Dockerfile index cafbaf3..e132f97 100644 --- a/server/route_service/Dockerfile +++ b/server/route_service/Dockerfile @@ -11,4 +11,4 @@ COPY . . WORKDIR /app/src -CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"] \ No newline at end of file +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8004", "--reload"] \ No newline at end of file diff --git a/server/station_service/Dockerfile b/server/station_service/Dockerfile index cafbaf3..70d0a72 100644 --- a/server/station_service/Dockerfile +++ b/server/station_service/Dockerfile @@ -11,4 +11,4 @@ COPY . . WORKDIR /app/src -CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"] \ No newline at end of file +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8005", "--reload"] \ No newline at end of file diff --git a/server/user_service/Dockerfile b/server/user_service/Dockerfile index cafbaf3..e00086c 100644 --- a/server/user_service/Dockerfile +++ b/server/user_service/Dockerfile @@ -11,4 +11,4 @@ COPY . . WORKDIR /app/src -CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001", "--reload"] \ No newline at end of file +CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8006", "--reload"] \ No newline at end of file From e1a1bfcf49a653adfabdac7ee643df7b606573bc Mon Sep 17 00:00:00 2001 From: ZhuchkaTrilesix Date: Fri, 23 May 2025 12:20:16 +0300 Subject: [PATCH 5/6] fix --- server/docker-compose.local.yml | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/server/docker-compose.local.yml b/server/docker-compose.local.yml index 81d30d4..8e4811b 100644 --- a/server/docker-compose.local.yml +++ b/server/docker-compose.local.yml @@ -2,73 +2,74 @@ version: '3.8' services: gateway: - build: ./ + build: ./gateway container_name: gateway ports: - "8001:8001" depends_on: - - mongodb + - postgres environment: DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev restart: unless-stopped auth_service: - build: ./ + build: ./auth_service container_name: auth_service ports: - "8002:8002" depends_on: - - mongodb + - postgres environment: DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev restart: unless-stopped data_service: - build: ./ + build: ./data_service container_name: data_service ports: - "8003:8003" depends_on: - - mongodb + - postgres environment: DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev restart: unless-stopped route_service: - build: ./ + build: ./route_service container_name: route_service ports: - "8004:8004" depends_on: - - mongodb + - postgres environment: DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev restart: unless-stopped station_service: - build: ./ + build: ./station_service container_name: station_service ports: - "8005:8005" depends_on: - - mongodb + - postgres environment: DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev restart: unless-stopped user_service: - build: ./ + build: ./user_service container_name: user_service ports: - "8006:8006" depends_on: - - mongodb + - postgres environment: DATABASE_URL: postgresql+asyncpg://fastapi:secret@postgres:5432/fastapi_dev restart: unless-stopped postgres: image: postgres:15-alpine + container_name: postgres environment: POSTGRES_USER: fastapi POSTGRES_PASSWORD: secret From 7a4abc2d306827ecf6342f5541321a745ef8caa2 Mon Sep 17 00:00:00 2001 From: ZhuchkaTrilesix Date: Fri, 23 May 2025 12:35:04 +0300 Subject: [PATCH 6/6] configuration/ref --- server/{gateway/routers => }/__init__.py | 0 server/auth_service/src/config.py | 2 ++ server/data_service/src/config.py | 2 ++ server/gateway/.dockerignire | 3 +++ server/gateway/.gitkeep | 0 server/gateway/src/__init__.py | 0 server/gateway/src/config.py | 10 ++++++++++ server/gateway/src/dependencies/__init__.py | 0 server/gateway/{ => src}/dependencies/auth.py | 0 server/gateway/{ => src}/main.py | 5 +++-- server/gateway/src/routers/__init__.py | 0 server/gateway/{ => src}/routers/auth.py | 0 server/gateway/{ => src}/routers/route.py | 0 server/gateway/{ => src}/routers/station.py | 0 server/gateway/{ => src}/routers/user.py | 0 server/gateway/{ => src}/utils.py | 0 server/route_service/src/config.py | 2 ++ server/station_service/src/config.py | 2 ++ server/user_service/src/config.py | 2 ++ 19 files changed, 26 insertions(+), 2 deletions(-) rename server/{gateway/routers => }/__init__.py (100%) create mode 100644 server/gateway/.dockerignire create mode 100644 server/gateway/.gitkeep create mode 100644 server/gateway/src/__init__.py create mode 100644 server/gateway/src/config.py create mode 100644 server/gateway/src/dependencies/__init__.py rename server/gateway/{ => src}/dependencies/auth.py (100%) rename server/gateway/{ => src}/main.py (89%) create mode 100644 server/gateway/src/routers/__init__.py rename server/gateway/{ => src}/routers/auth.py (100%) rename server/gateway/{ => src}/routers/route.py (100%) rename server/gateway/{ => src}/routers/station.py (100%) rename server/gateway/{ => src}/routers/user.py (100%) rename server/gateway/{ => src}/utils.py (100%) diff --git a/server/gateway/routers/__init__.py b/server/__init__.py similarity index 100% rename from server/gateway/routers/__init__.py rename to server/__init__.py diff --git a/server/auth_service/src/config.py b/server/auth_service/src/config.py index f3309f5..66fc382 100644 --- a/server/auth_service/src/config.py +++ b/server/auth_service/src/config.py @@ -6,3 +6,5 @@ class CfgBase(ABC): dict: callable = asdict +class PostgresCfg(CfgBase): + url: str = os.getenv("DATABASE_URL") \ No newline at end of file diff --git a/server/data_service/src/config.py b/server/data_service/src/config.py index f3309f5..66fc382 100644 --- a/server/data_service/src/config.py +++ b/server/data_service/src/config.py @@ -6,3 +6,5 @@ class CfgBase(ABC): dict: callable = asdict +class PostgresCfg(CfgBase): + url: str = os.getenv("DATABASE_URL") \ No newline at end of file diff --git a/server/gateway/.dockerignire b/server/gateway/.dockerignire new file mode 100644 index 0000000..74a9069 --- /dev/null +++ b/server/gateway/.dockerignire @@ -0,0 +1,3 @@ +.venv +.idea +__pycache__ \ No newline at end of file diff --git a/server/gateway/.gitkeep b/server/gateway/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/server/gateway/src/__init__.py b/server/gateway/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/gateway/src/config.py b/server/gateway/src/config.py new file mode 100644 index 0000000..66fc382 --- /dev/null +++ b/server/gateway/src/config.py @@ -0,0 +1,10 @@ +import os +from abc import ABC +from dataclasses import asdict, dataclass + + +class CfgBase(ABC): + dict: callable = asdict + +class PostgresCfg(CfgBase): + url: str = os.getenv("DATABASE_URL") \ No newline at end of file diff --git a/server/gateway/src/dependencies/__init__.py b/server/gateway/src/dependencies/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/gateway/dependencies/auth.py b/server/gateway/src/dependencies/auth.py similarity index 100% rename from server/gateway/dependencies/auth.py rename to server/gateway/src/dependencies/auth.py diff --git a/server/gateway/main.py b/server/gateway/src/main.py similarity index 89% rename from server/gateway/main.py rename to server/gateway/src/main.py index f9fe882..4e4f0ef 100644 --- a/server/gateway/main.py +++ b/server/gateway/src/main.py @@ -1,10 +1,11 @@ -from fastapi import FastAPI, Depends, HTTPException +from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager import logging import uvicorn -from routers import auth, user, station, route +from server.gateway.src.routers import auth, route +from server.gateway.src.routers import user, station logging.basicConfig( level=logging.INFO, diff --git a/server/gateway/src/routers/__init__.py b/server/gateway/src/routers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/gateway/routers/auth.py b/server/gateway/src/routers/auth.py similarity index 100% rename from server/gateway/routers/auth.py rename to server/gateway/src/routers/auth.py diff --git a/server/gateway/routers/route.py b/server/gateway/src/routers/route.py similarity index 100% rename from server/gateway/routers/route.py rename to server/gateway/src/routers/route.py diff --git a/server/gateway/routers/station.py b/server/gateway/src/routers/station.py similarity index 100% rename from server/gateway/routers/station.py rename to server/gateway/src/routers/station.py diff --git a/server/gateway/routers/user.py b/server/gateway/src/routers/user.py similarity index 100% rename from server/gateway/routers/user.py rename to server/gateway/src/routers/user.py diff --git a/server/gateway/utils.py b/server/gateway/src/utils.py similarity index 100% rename from server/gateway/utils.py rename to server/gateway/src/utils.py diff --git a/server/route_service/src/config.py b/server/route_service/src/config.py index f3309f5..66fc382 100644 --- a/server/route_service/src/config.py +++ b/server/route_service/src/config.py @@ -6,3 +6,5 @@ class CfgBase(ABC): dict: callable = asdict +class PostgresCfg(CfgBase): + url: str = os.getenv("DATABASE_URL") \ No newline at end of file diff --git a/server/station_service/src/config.py b/server/station_service/src/config.py index f3309f5..66fc382 100644 --- a/server/station_service/src/config.py +++ b/server/station_service/src/config.py @@ -6,3 +6,5 @@ class CfgBase(ABC): dict: callable = asdict +class PostgresCfg(CfgBase): + url: str = os.getenv("DATABASE_URL") \ No newline at end of file diff --git a/server/user_service/src/config.py b/server/user_service/src/config.py index f3309f5..66fc382 100644 --- a/server/user_service/src/config.py +++ b/server/user_service/src/config.py @@ -6,3 +6,5 @@ class CfgBase(ABC): dict: callable = asdict +class PostgresCfg(CfgBase): + url: str = os.getenv("DATABASE_URL") \ No newline at end of file