From 277387ce35c409fed51d2b612edd304fa3cbad0f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 9 Dec 2025 14:33:21 +0000 Subject: [PATCH] Fix code review issues: update datetime.utcnow() to datetime.now(timezone.utc) and fix Docker configs Co-authored-by: mblanke <9078342+mblanke@users.noreply.github.com> --- backend/app/core/security.py | 6 +++--- backend/app/models/artifact.py | 4 ++-- backend/app/models/case.py | 6 +++--- backend/app/models/host.py | 6 +++--- backend/app/models/tenant.py | 4 ++-- backend/app/models/user.py | 4 ++-- docker-compose.yml | 2 +- frontend/.dockerignore | 8 ++++++++ frontend/Dockerfile | 3 ++- 9 files changed, 26 insertions(+), 17 deletions(-) create mode 100644 frontend/.dockerignore diff --git a/backend/app/core/security.py b/backend/app/core/security.py index e495e40..664082f 100644 --- a/backend/app/core/security.py +++ b/backend/app/core/security.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone from typing import Optional from jose import JWTError, jwt from passlib.context import CryptContext @@ -32,9 +32,9 @@ def create_access_token(data: dict, expires_delta: Optional[timedelta] = None) - """ to_encode = data.copy() if expires_delta: - expire = datetime.utcnow() + expires_delta + expire = datetime.now(timezone.utc) + expires_delta else: - expire = datetime.utcnow() + timedelta(minutes=settings.access_token_expire_minutes) + expire = datetime.now(timezone.utc) + timedelta(minutes=settings.access_token_expire_minutes) to_encode.update({"exp": expire}) encoded_jwt = jwt.encode(to_encode, settings.secret_key, algorithm=settings.algorithm) diff --git a/backend/app/models/artifact.py b/backend/app/models/artifact.py index a96200b..6bf3ee3 100644 --- a/backend/app/models/artifact.py +++ b/backend/app/models/artifact.py @@ -1,6 +1,6 @@ from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Text, JSON from sqlalchemy.orm import relationship -from datetime import datetime +from datetime import datetime, timezone from app.core.database import Base @@ -14,7 +14,7 @@ class Artifact(Base): description = Column(Text, nullable=True) case_id = Column(Integer, ForeignKey("cases.id"), nullable=True) artifact_metadata = Column(JSON, nullable=True) - created_at = Column(DateTime, default=datetime.utcnow) + created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc)) # Relationships case = relationship("Case", back_populates="artifacts") diff --git a/backend/app/models/case.py b/backend/app/models/case.py index cc59aa2..034afd7 100644 --- a/backend/app/models/case.py +++ b/backend/app/models/case.py @@ -1,6 +1,6 @@ from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Text from sqlalchemy.orm import relationship -from datetime import datetime +from datetime import datetime, timezone from app.core.database import Base @@ -14,8 +14,8 @@ class Case(Base): status = Column(String, default="open", nullable=False) # open, closed, investigating severity = Column(String, nullable=True) # low, medium, high, critical tenant_id = Column(Integer, ForeignKey("tenants.id"), nullable=False) - created_at = Column(DateTime, default=datetime.utcnow) - updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc)) + updated_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc)) # Relationships tenant = relationship("Tenant", back_populates="cases") diff --git a/backend/app/models/host.py b/backend/app/models/host.py index cd82b79..4ea8099 100644 --- a/backend/app/models/host.py +++ b/backend/app/models/host.py @@ -1,6 +1,6 @@ from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, JSON from sqlalchemy.orm import relationship -from datetime import datetime +from datetime import datetime, timezone from app.core.database import Base @@ -14,8 +14,8 @@ class Host(Base): os = Column(String, nullable=True) tenant_id = Column(Integer, ForeignKey("tenants.id"), nullable=False) host_metadata = Column(JSON, nullable=True) - created_at = Column(DateTime, default=datetime.utcnow) - last_seen = Column(DateTime, default=datetime.utcnow) + created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc)) + last_seen = Column(DateTime, default=lambda: datetime.now(timezone.utc)) # Relationships tenant = relationship("Tenant", back_populates="hosts") diff --git a/backend/app/models/tenant.py b/backend/app/models/tenant.py index b913e5b..07de63b 100644 --- a/backend/app/models/tenant.py +++ b/backend/app/models/tenant.py @@ -1,6 +1,6 @@ from sqlalchemy import Column, Integer, String, DateTime from sqlalchemy.orm import relationship -from datetime import datetime +from datetime import datetime, timezone from app.core.database import Base @@ -11,7 +11,7 @@ class Tenant(Base): id = Column(Integer, primary_key=True, index=True) name = Column(String, unique=True, index=True, nullable=False) description = Column(String, nullable=True) - created_at = Column(DateTime, default=datetime.utcnow) + created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc)) # Relationships users = relationship("User", back_populates="tenant") diff --git a/backend/app/models/user.py b/backend/app/models/user.py index a5a8b1c..20c631f 100644 --- a/backend/app/models/user.py +++ b/backend/app/models/user.py @@ -1,6 +1,6 @@ from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Boolean from sqlalchemy.orm import relationship -from datetime import datetime +from datetime import datetime, timezone from app.core.database import Base @@ -14,7 +14,7 @@ class User(Base): role = Column(String, default="user", nullable=False) # user, admin tenant_id = Column(Integer, ForeignKey("tenants.id"), nullable=False) is_active = Column(Boolean, default=True, nullable=False) - created_at = Column(DateTime, default=datetime.utcnow) + created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc)) # Relationships tenant = relationship("Tenant", back_populates="users") diff --git a/docker-compose.yml b/docker-compose.yml index 49406bb..50a1c4e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,7 +32,7 @@ services: condition: service_healthy volumes: - ./backend:/app - command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload + command: sh -c "alembic upgrade head && uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload" frontend: build: diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..0f4e812 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,8 @@ +node_modules +npm-debug.log +build +.git +.gitignore +README.md +.env +.env.local diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 9f3a9e3..ecce705 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -3,7 +3,8 @@ FROM node:18-alpine WORKDIR /app # Copy package files -COPY package*.json ./ +COPY package.json ./ +COPY package-lock.json* ./ # Install dependencies RUN npm install