MukeshKapoor25 commited on
Commit
230f597
·
1 Parent(s): f2d6f7a

Add initial project structure with Dockerfile, environment configuration, and FastAPI setup

Browse files
.env.example ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ APP_NAME=Tracker Microservice
2
+ APP_VERSION=1.0.0
3
+ DEBUG=false
4
+ LOG_LEVEL=INFO
5
+ PORT=8003
6
+ ROOT_PATH=
Dockerfile ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.11-slim-bullseye AS base
2
+
3
+ ENV PYTHONUNBUFFERED=1 \
4
+ PYTHONDONTWRITEBYTECODE=1 \
5
+ PATH="/home/user/.local/bin:$PATH"
6
+
7
+ RUN apt-get update && apt-get install -y \
8
+ openssl \
9
+ ca-certificates \
10
+ && rm -rf /var/lib/apt/lists/*
11
+
12
+ RUN useradd -m -u 1000 user
13
+ USER user
14
+ WORKDIR /app
15
+
16
+ COPY --chown=user ./requirements.txt requirements.txt
17
+ RUN pip install --no-cache-dir --upgrade pip && \
18
+ pip install --no-cache-dir --upgrade -r requirements.txt
19
+
20
+ COPY --chown=user . /app
21
+
22
+ EXPOSE 7860
23
+
24
+ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860", "--workers", "2", "--log-level", "info"]
app/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ """Cuatrolabs Tracker microservice package."""
app/core/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ """Core utilities for Tracker microservice."""
app/core/config.py ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Configuration settings for Tracker microservice.
3
+ Loads environment variables and provides application settings.
4
+ """
5
+ from typing import List
6
+ from pydantic_settings import BaseSettings, SettingsConfigDict
7
+
8
+
9
+ class Settings(BaseSettings):
10
+ """Application settings loaded from environment variables"""
11
+
12
+ # Application
13
+ APP_NAME: str = "Tracker Microservice"
14
+ APP_VERSION: str = "1.0.0"
15
+ DEBUG: bool = False
16
+
17
+ # Logging
18
+ LOG_LEVEL: str = "INFO"
19
+
20
+ # CORS
21
+ CORS_ORIGINS: List[str] = [
22
+ "http://localhost:3000",
23
+ "http://localhost:8000",
24
+ ]
25
+
26
+ # Pydantic v2 config
27
+ model_config = SettingsConfigDict(
28
+ env_file=".env",
29
+ env_file_encoding="utf-8",
30
+ case_sensitive=True,
31
+ extra="allow",
32
+ )
33
+
34
+
35
+ # Global settings instance
36
+ settings = Settings()
app/main.py ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Main FastAPI application for Tracker Microservice.
3
+ """
4
+ import logging
5
+ import os
6
+ from fastapi import FastAPI
7
+ from fastapi.middleware.cors import CORSMiddleware
8
+
9
+ from app.core.config import settings
10
+ from app.tracker.controllers.router import router as tracker_router
11
+
12
+ logging.basicConfig(level=getattr(logging, settings.LOG_LEVEL.upper(), logging.INFO))
13
+ logger = logging.getLogger(__name__)
14
+
15
+ app = FastAPI(
16
+ title=settings.APP_NAME,
17
+ description="Employee Tracker - Basic service scaffold",
18
+ version=settings.APP_VERSION,
19
+ docs_url="/docs",
20
+ redoc_url="/redoc",
21
+ root_path=os.getenv("ROOT_PATH", ""),
22
+ )
23
+
24
+ app.add_middleware(
25
+ CORSMiddleware,
26
+ allow_origins=settings.CORS_ORIGINS,
27
+ allow_credentials=True,
28
+ allow_methods=["*"],
29
+ allow_headers=["*"],
30
+ )
31
+
32
+
33
+ @app.on_event("startup")
34
+ async def startup_event():
35
+ logger.info("Starting Tracker Microservice")
36
+
37
+
38
+ @app.on_event("shutdown")
39
+ async def shutdown_event():
40
+ logger.info("Shutting down Tracker Microservice")
41
+
42
+
43
+ @app.get("/health", tags=["health"])
44
+ async def health_check():
45
+ return {
46
+ "status": "healthy",
47
+ "service": "tracker-microservice",
48
+ "version": settings.APP_VERSION,
49
+ }
50
+
51
+
52
+ app.include_router(tracker_router, prefix="/api/v1")
53
+
54
+
55
+ if __name__ == "__main__":
56
+ import uvicorn
57
+
58
+ uvicorn.run(
59
+ "app.main:app",
60
+ host="0.0.0.0",
61
+ port=int(os.getenv("PORT", "8003")),
62
+ reload=True,
63
+ log_level=settings.LOG_LEVEL.lower(),
64
+ )
app/tracker/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ """Tracker domain package."""
app/tracker/controllers/__init__.py ADDED
@@ -0,0 +1 @@
 
 
1
+ """Tracker controllers."""
app/tracker/controllers/router.py ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ """Tracker router."""
2
+ from fastapi import APIRouter
3
+
4
+ router = APIRouter(prefix="/tracker", tags=["tracker"])
5
+
6
+
7
+ @router.get("/ping")
8
+ async def ping():
9
+ """Simple ping endpoint."""
10
+ return {"status": "ok"}
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ fastapi==0.104.1
2
+ uvicorn[standard]==0.24.0
3
+ pydantic>=2.12.5,<3.0.0
4
+ pydantic-settings>=2.0.0
5
+ python-dotenv==1.0.0