diff --git a/backend/scripts/add_employee.py b/backend/scripts/add_employee.py new file mode 100644 index 0000000..9659093 --- /dev/null +++ b/backend/scripts/add_employee.py @@ -0,0 +1,41 @@ +"""Script to add a new employee to the database""" +import sys +from pathlib import Path + +# Add the parent directory to sys.path +sys.path.append(str(Path(__file__).resolve().parents[1])) + +from app.database import SessionLocal +from app.crud import employees +from app.models.employee import EmployeeCreate + +def add_employee(): + db = SessionLocal() + try: + # Create employee data + employee = EmployeeCreate( + first_name="", # Имя не указано в требованиях + last_name="Лесников", + department="general", # Общий отдел + office="101", + password="1111" + ) + + # Check if employee already exists + existing_employee = employees.get_employee_by_lastname(db, employee.last_name) + if existing_employee: + print(f"Сотрудник {employee.last_name} уже существует") + return + + # Create new employee + db_employee = employees.create_employee(db, employee) + print(f"Создан сотрудник: {db_employee.last_name} (ID: {db_employee.id})") + + except Exception as e: + print(f"Ошибка при создании сотрудника: {e}") + raise e + finally: + db.close() + +if __name__ == "__main__": + add_employee() \ No newline at end of file diff --git a/backend/scripts/init_db.py b/backend/scripts/init_db.py new file mode 100644 index 0000000..333aec2 --- /dev/null +++ b/backend/scripts/init_db.py @@ -0,0 +1,37 @@ +"""Database initialization script that runs on container startup""" +import sys +from pathlib import Path + +sys.path.append(str(Path(__file__).resolve().parents[1])) + +from app.database import SessionLocal +from app.crud import employees +from app.models.employee import EmployeeCreate + +def init_db(): + db = SessionLocal() + try: + # Create default employee + employee = EmployeeCreate( + first_name="Сотрудник", + last_name="Лесников", + department="general", + office="101", + password="1111" + ) + + existing = employees.get_employee_by_lastname(db, employee.last_name) + if not existing: + employees.create_employee(db, employee) + print("Default employee created successfully") + else: + print("Default employee already exists") + + except Exception as e: + print(f"Error initializing database: {e}") + raise + finally: + db.close() + +if __name__ == "__main__": + init_db() \ No newline at end of file diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index 41feda2..9600e3b 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -7,6 +7,9 @@ RUN apt-get update && apt-get install -y \ gcc \ && rm -rf /var/lib/apt/lists/* +# Create logs directory +RUN mkdir -p /app/logs + # Copy requirements first to leverage Docker cache COPY backend/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt @@ -14,7 +17,14 @@ RUN pip install --no-cache-dir -r requirements.txt # Copy application code COPY backend/ . +# Make entrypoint script executable +COPY docker/backend/entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +# Create volume for logs +VOLUME ["/app/logs"] + # Expose the port the app runs on EXPOSE 8000 -CMD ["python", "run.py"] \ No newline at end of file +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/docker/backend/entrypoint.sh b/docker/backend/entrypoint.sh new file mode 100644 index 0000000..53e0d97 --- /dev/null +++ b/docker/backend/entrypoint.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e + +# Run database initialization +python /app/scripts/init_db.py + +# Start the main application +exec python /app/run.py \ No newline at end of file