From 5a6c34e1473a114f298160ae102344259b88ee97 Mon Sep 17 00:00:00 2001
From: Aaron <Aaron8.jones@live.uwe.ac.uk>
Date: Thu, 13 Mar 2025 21:15:40 +0000
Subject: [PATCH] Updated to include DB.

---
 ActualProjectCode/DjangoProject/Dockerfile    |  11 +-
 ActualProjectCode/DjangoProject/db.sqlite3    |   0
 .../DjangoProject/docker-compose.yml          |  43 ++++--
 .../DjangoProject/requirements.txt            | Bin 130 -> 164 bytes
 .../DjangoProject/server/settings.py          |  10 +-
 .../DjangoProject/server/urls.py              |   4 +-
 .../backend/server/settings/__init__.py       |  12 --
 .../backend/server/settings/local.py          | 128 ----------------
 .../backend/server/settings/production.py     | 139 ------------------
 9 files changed, 50 insertions(+), 297 deletions(-)
 delete mode 100644 ActualProjectCode/DjangoProject/db.sqlite3
 delete mode 100644 mainDockerImage/backend/server/settings/__init__.py
 delete mode 100644 mainDockerImage/backend/server/settings/local.py
 delete mode 100644 mainDockerImage/backend/server/settings/production.py

diff --git a/ActualProjectCode/DjangoProject/Dockerfile b/ActualProjectCode/DjangoProject/Dockerfile
index 483a879c..2e49ee69 100644
--- a/ActualProjectCode/DjangoProject/Dockerfile
+++ b/ActualProjectCode/DjangoProject/Dockerfile
@@ -1,12 +1,17 @@
 # Use the official Python image
-FROM python:3.12
+FROM python:3.12-alpine3.20
 
 # Set the working directory
 WORKDIR /app
 
 # Copy and install dependencies
 COPY requirements.txt .
-RUN pip install --no-cache-dir -r requirements.txt
+
+RUN apk add --update --upgrade --no-cache postgresql-client && \
+    apk add --update --upgrade --no-cache --virtual .tmp \
+        build-base postgresql-dev
+
+RUN pip install --no-cache-dir -r requirements.txt && apk del .tmp
 
 # Copy the project files
 COPY . .
@@ -15,4 +20,4 @@ COPY . .
 EXPOSE 8000
 
 # Run the Django development server
-CMD ["python", "manage.py", "runserver", "0.0.0.0:7000"]
\ No newline at end of file
+CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
\ No newline at end of file
diff --git a/ActualProjectCode/DjangoProject/db.sqlite3 b/ActualProjectCode/DjangoProject/db.sqlite3
deleted file mode 100644
index e69de29b..00000000
diff --git a/ActualProjectCode/DjangoProject/docker-compose.yml b/ActualProjectCode/DjangoProject/docker-compose.yml
index 0dbf18c1..da720a0f 100644
--- a/ActualProjectCode/DjangoProject/docker-compose.yml
+++ b/ActualProjectCode/DjangoProject/docker-compose.yml
@@ -1,18 +1,37 @@
 version: '3.8'
 services:
   web:
-    build: .
+    build:
+      context: .
     ports:
-      - "7000:7000"
+      - "8000:8000"
     volumes:
-      - .:/app
+     - .:/app
+    command: >
+      sh -c "python manage.py migrate &&
+              python manage.py runserver 0.0.0.0:8000"
     environment:
-      - DEBUG=True
-#    depends_on:
-#      - db
-#  db:
-#    image: postgres
-#    environment:
-#      POSTGRES_USER: user
-#      POSTGRES_PASSWORD: password
-#      POSTGRES_DB: mydb
+      - DB_HOST=db
+      - DB_NAME=db
+      - DB_USER=user
+      - DB_PASSWORD=password
+    depends_on:
+      db:
+        condition: service_healthy
+
+  db:
+    image: postgres
+    volumes:
+      - db-data:/var/lib/postgresql/data
+    environment:
+      POSTGRES_USER: user
+      POSTGRES_PASSWORD: password
+      POSTGRES_DB: db
+    healthcheck:
+      test: ["CMD", "pg_isready", "-q", "-d", "db", "-U", "user"]
+      interval: 5s
+      timeout: 5s
+      retries: 5
+
+volumes:
+  db-data:
diff --git a/ActualProjectCode/DjangoProject/requirements.txt b/ActualProjectCode/DjangoProject/requirements.txt
index 09ed45eca833e4b3c124887702da9690fb4c5ead..02400a1d8af30e7a2db6300c1d7a5217861c806b 100644
GIT binary patch
delta 41
wcmZo-T*5e^NvVLLn4yv(nIWH{fFYeBnjx7Xmcf?6mcf`okHLsRkHMG$0M4-o>i_@%

delta 6
NcmZ3&*u*%Y2>=I>0y_Wz

diff --git a/ActualProjectCode/DjangoProject/server/settings.py b/ActualProjectCode/DjangoProject/server/settings.py
index 98df23a0..38c9d5e1 100644
--- a/ActualProjectCode/DjangoProject/server/settings.py
+++ b/ActualProjectCode/DjangoProject/server/settings.py
@@ -37,6 +37,8 @@ INSTALLED_APPS = [
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
+    'django.contrib.admin',
+    'core',
 ]
 
 MIDDLEWARE = [
@@ -76,8 +78,12 @@ WSGI_APPLICATION = 'server.wsgi.application'
 
 DATABASES = {
     'default': {
-        'ENGINE': 'django.db.backends.sqlite3',
-        'NAME': BASE_DIR / 'db.sqlite3',
+        'ENGINE': 'django.db.backends.postgresql',
+        'NAME': os.environ.get("DB_NAME"),
+        'USER': os.environ.get("DB_USER"),
+        "PASSWORD": os.environ.get("DB_PASSWORD"),
+        "HOST": os.environ.get("DB_HOST"),
+        "PORT": 5432,
     }
 }
 
diff --git a/ActualProjectCode/DjangoProject/server/urls.py b/ActualProjectCode/DjangoProject/server/urls.py
index 1f30cc33..13c75576 100644
--- a/ActualProjectCode/DjangoProject/server/urls.py
+++ b/ActualProjectCode/DjangoProject/server/urls.py
@@ -19,12 +19,14 @@ from django.urls import path
 
 from django.contrib import admin
 from django.urls import path
+from django.urls import include
 from django.shortcuts import render
 
 def home(request):
     return render(request, 'index.html')
 
+
 urlpatterns = [
-    # path('admin/', admin.site.urls),
+    path('admin/', admin.site.urls),
     path('', home, name='home'),
 ]
\ No newline at end of file
diff --git a/mainDockerImage/backend/server/settings/__init__.py b/mainDockerImage/backend/server/settings/__init__.py
deleted file mode 100644
index 9d2afefe..00000000
--- a/mainDockerImage/backend/server/settings/__init__.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# decides whether we are using production settings or local 
-
-import os 
-
-def get_secret(secret_id, backup=None):
-    return os.getenv(secret_id, backup)
-
-# Keep at the end
-if get_secret('PIPELINE') == 'production':
-    from .production import *
-else:
-    from .local import *
\ No newline at end of file
diff --git a/mainDockerImage/backend/server/settings/local.py b/mainDockerImage/backend/server/settings/local.py
deleted file mode 100644
index 42d10516..00000000
--- a/mainDockerImage/backend/server/settings/local.py
+++ /dev/null
@@ -1,128 +0,0 @@
-"""
-Django settings for server project.
-
-Generated by 'django-admin startproject' using Django 5.1.6.
-
-For more information on this file, see
-https://docs.djangoproject.com/en/5.1/topics/settings/
-
-For the full list of settings and their values, see
-https://docs.djangoproject.com/en/5.1/ref/settings/
-"""
-
-from pathlib import Path
-import os
-
-
-# Build paths inside the project like this: BASE_DIR / 'subdir'.
-BASE_DIR = Path(__file__).resolve().parent.parent.parent.parent
-
-STATIC_URL = "/static/"
-STATICFILES_DIRS = [BASE_DIR / 'server'/'frontend' / 'static']
-# Quick-start development settings - unsuitable for production
-# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/
-
-# SECURITY WARNING: keep the secret key used in production secret!
-SECRET_KEY = 'django-insecure-g)$()*#j2%^=7c#efw5(gjr$%du8=9mx&tg&3ivtt#s1w%dk*m'
-
-# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = True
-
-ALLOWED_HOSTS = []
-
-
-# Application definition
-
-INSTALLED_APPS = [
-    'django.contrib.admin',
-    'django.contrib.auth',
-    'django.contrib.contenttypes',
-    'django.contrib.sessions',
-    'django.contrib.messages',
-    'django.contrib.staticfiles',
-]
-
-MIDDLEWARE = [
-    'django.middleware.security.SecurityMiddleware',
-    'django.contrib.sessions.middleware.SessionMiddleware',
-    'django.middleware.common.CommonMiddleware',
-    'django.middleware.csrf.CsrfViewMiddleware',
-    'django.contrib.auth.middleware.AuthenticationMiddleware',
-    'django.contrib.messages.middleware.MessageMiddleware',
-    'django.middleware.clickjacking.XFrameOptionsMiddleware',
-]
-
-ROOT_URLCONF = 'server.urls'
-
-TEMPLATES = [
-    {
-        'BACKEND': 'django.template.backends.django.DjangoTemplates',
-        'DIRS': [
-            BASE_DIR / 'server' / 'frontend' / 'templates',  # Updated path
-        ],
-        'APP_DIRS': True,
-        'OPTIONS': {
-            'context_processors': [
-                'django.template.context_processors.debug',
-                'django.template.context_processors.request',
-                'django.contrib.auth.context_processors.auth',
-                'django.contrib.messages.context_processors.messages',
-            ],
-        },
-    },
-]
-
-WSGI_APPLICATION = 'server.wsgi.application'
-
-
-# Database
-# https://docs.djangoproject.com/en/5.1/ref/settings/#databases
-
-DATABASES = {
-    'default': {
-        'ENGINE': 'django.db.backends.sqlite3',
-        'NAME': BASE_DIR / 'db.sqlite3',
-    }
-}
-
-
-# Password validation
-# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators
-
-AUTH_PASSWORD_VALIDATORS = [
-    {
-        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
-    },
-    {
-        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
-    },
-    {
-        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
-    },
-    {
-        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
-    },
-]
-
-
-# Internationalization
-# https://docs.djangoproject.com/en/5.1/topics/i18n/
-
-LANGUAGE_CODE = 'en-us'
-
-TIME_ZONE = 'UTC'
-
-USE_I18N = True
-
-USE_TZ = True
-
-
-# Static files (CSS, JavaScript, Images)
-# https://docs.djangoproject.com/en/5.1/howto/static-files/
-
-STATIC_URL = 'static/'
-
-# Default primary key field type
-# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field
-
-DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
diff --git a/mainDockerImage/backend/server/settings/production.py b/mainDockerImage/backend/server/settings/production.py
deleted file mode 100644
index 12dca54f..00000000
--- a/mainDockerImage/backend/server/settings/production.py
+++ /dev/null
@@ -1,139 +0,0 @@
-"""
-Django settings for server project.
-
-Generated by 'django-admin startproject' using Django 5.1.6.
-
-For more information on this file, see
-https://docs.djangoproject.com/en/5.1/topics/settings/
-
-For the full list of settings and their values, see
-https://docs.djangoproject.com/en/5.1/ref/settings/
-"""
-
-from pathlib import Path
-import os
-
-
-# Build paths inside the project like this: BASE_DIR / 'subdir'.
-BASE_DIR = Path(__file__).resolve().parent.parent
-
-STATIC_URL = "/static/"
-STATICFILES_DIRS = [os.path.join(BASE_DIR, "backend/static")]
-# Quick-start development settings - unsuitable for production
-# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/
-
-# SECURITY WARNING: keep the secret key used in production secret!
-from server.settings import get_secret
-SECRET_KEY = get_secret('SECRET_KEY')
-
-# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = False
-
-ALLOWED_HOSTS = ['*']
-
-
-# Application definition
-
-INSTALLED_APPS = [
-    'django.contrib.admin',
-    'django.contrib.auth',
-    'django.contrib.contenttypes',
-    'django.contrib.sessions',
-    'django.contrib.messages',
-    'django.contrib.staticfiles',
-]
-
-MIDDLEWARE = [
-    'django.middleware.security.SecurityMiddleware',
-    'django.contrib.sessions.middleware.SessionMiddleware',
-    'django.middleware.common.CommonMiddleware',
-    'django.middleware.csrf.CsrfViewMiddleware',
-    'django.contrib.auth.middleware.AuthenticationMiddleware',
-    'django.contrib.messages.middleware.MessageMiddleware',
-    'django.middleware.clickjacking.XFrameOptionsMiddleware',
-]
-
-ROOT_URLCONF = 'server.urls'
-
-TEMPLATES = [
-    {
-        'BACKEND': 'django.template.backends.django.DjangoTemplates',
-        'DIRS': [
-            os.path.join(BASE_DIR, 'frontend'),  
-        ],
-        'APP_DIRS': True,
-        'OPTIONS': {
-            'context_processors': [
-                'django.template.context_processors.debug',
-                'django.template.context_processors.request',
-                'django.contrib.auth.context_processors.auth',
-                'django.contrib.messages.context_processors.messages',
-            ],
-        },
-    },
-]
-
-WSGI_APPLICATION = 'server.wsgi.application'
-
-
-# Database
-# https://docs.djangoproject.com/en/5.1/ref/settings/#databases
-
-# Change DATABASES to connect to a real database
-DB_NAME = get_secret("DB_NAME")
-DB_USER_NM = get_secret("DB_USER_NM")
-DB_USER_PW = get_secret("DB_USER_PW")
-DB_IP = get_secret("DB_IP")
-DB_PORT = get_secret("DB_PORT")
-DATABASES = {
-    'default': {
-        'ENGINE': 'django.db.backends.postgresql',
-        'NAME': DB_NAME,
-        'USER': DB_USER_NM,
-        "PASSWORD": DB_USER_PW,
-        "HOST": DB_IP,
-        "PORT": DB_PORT,
-    }
-}
-
-
-# Password validation
-# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators
-
-AUTH_PASSWORD_VALIDATORS = [
-    {
-        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
-    },
-    {
-        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
-    },
-    {
-        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
-    },
-    {
-        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
-    },
-]
-
-
-# Internationalization
-# https://docs.djangoproject.com/en/5.1/topics/i18n/
-
-LANGUAGE_CODE = 'en-us'
-
-TIME_ZONE = 'UTC'
-
-USE_I18N = True
-
-USE_TZ = True
-
-
-# Static files (CSS, JavaScript, Images)
-# https://docs.djangoproject.com/en/5.1/howto/static-files/
-
-STATIC_URL = 'static/'
-
-# Default primary key field type
-# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field
-
-DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
-- 
GitLab