diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..55ad7d2
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ sqlite.xerial
+ true
+ org.sqlite.JDBC
+ jdbc:sqlite:$PROJECT_DIR$/database.db
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/.idea/pySourceRootDetection.xml b/.idea/pySourceRootDetection.xml
new file mode 100644
index 0000000..089a2ac
--- /dev/null
+++ b/.idea/pySourceRootDetection.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..d559bb4
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,13 @@
+FROM python:3.12-slim
+
+WORKDIR /app
+
+# Erst nur requirements kopieren -> besseres Docker-Layer-Caching
+COPY requirements.txt .
+RUN pip install --no-cache-dir -r requirements.txt
+
+COPY . .
+
+EXPOSE 8000
+
+CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
\ No newline at end of file
diff --git a/db.py b/db.py
index abae123..4702c3d 100644
--- a/db.py
+++ b/db.py
@@ -1,10 +1,10 @@
-from sqlalchemy import create_engine
-from sqlmodel import SQLModel, Session
+import os
+from sqlmodel import create_engine, SQLModel, Session
-from models.station import Station
-from models.measurement import IndoorMeasurement, OutdoorMeasurement
+DATA_DIR = "data"
+os.makedirs(DATA_DIR, exist_ok=True)
-engine = create_engine("sqlite:///database.db")
+engine = create_engine(f"sqlite:///{DATA_DIR}/database.db")
SQLModel.metadata.create_all(engine)
def get_session():
diff --git a/main.py b/main.py
index 14a710f..e925e4f 100644
--- a/main.py
+++ b/main.py
@@ -2,6 +2,7 @@ import functools
from datetime import datetime
from typing import List
+import uvicorn
from fastapi import FastAPI, Depends, Query
from enum import Enum
@@ -19,7 +20,7 @@ from services import stationService, measurementService
app = FastAPI()
app.add_middleware(
CORSMiddleware,
- allow_origins=["http://localhost:4200"],
+ allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
@@ -64,4 +65,7 @@ async def get_measurements(
@app.get('/measurements/records', response_model=RecordResponse, status_code=200)
async def get_records(station_ids: list[int] | None = Query(default=None), from_timestamp: datetime | None = None, session: Session = Depends(get_session)):
- return RecordResponse.model_validate(measurementService.get_measurement_records(session, station_ids, from_timestamp))
\ No newline at end of file
+ return RecordResponse.model_validate(measurementService.get_measurement_records(session, station_ids, from_timestamp))
+
+if __name__ == "__main__":
+ uvicorn.run("main:app", host="0.0.0.0", port=8000)
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..4915188
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,24 @@
+annotated-doc==0.0.4
+annotated-types==0.7.0
+anyio==4.14.1
+certifi==2026.6.17
+charset-normalizer==3.4.7
+click==8.4.2
+coolname==5.0.0
+fastapi==0.138.1
+greenlet==3.5.3
+h11==0.16.0
+httpcore==1.0.9
+httpx==0.28.1
+idna==3.18
+pydantic==2.13.4
+pydantic_core==2.46.4
+requests==2.34.2
+SQLAlchemy==2.0.51
+sqlmodel==0.0.39
+starlette==1.3.1
+typing-inspection==0.4.2
+typing_extensions==4.15.0
+urllib3==2.7.0
+utcnow==0.3.8
+uvicorn==0.49.0