diff --git a/server/health/__init__.py b/server/health/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/health/admin.py b/server/health/admin.py new file mode 100644 index 0000000..e3a16d0 --- /dev/null +++ b/server/health/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from .models import SymptomInstance, MedRecord + +# Register your models here. +admin.site.register(SymptomInstance) +admin.site.register(MedRecord) \ No newline at end of file diff --git a/server/health/apps.py b/server/health/apps.py new file mode 100644 index 0000000..9856744 --- /dev/null +++ b/server/health/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class HealthConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'health' diff --git a/server/health/migrations/0001_initial.py b/server/health/migrations/0001_initial.py new file mode 100644 index 0000000..9459b8d --- /dev/null +++ b/server/health/migrations/0001_initial.py @@ -0,0 +1,36 @@ +# Generated by Django 5.2.8 on 2025-12-06 07:22 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('pet', '0002_remove_medication_feedtime_alter_food_descr_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='MedRecord', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200)), + ('recordDate', models.DateField()), + ('descr', models.TextField(null=True)), + ('forPet', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='medrec_for_pet', to='pet.pet')), + ], + ), + migrations.CreateModel( + name='SymptomInstance', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('symptomType', models.CharField(max_length=200)), + ('extraInfo', models.TextField(null=True)), + ('dateAndTime', models.DateTimeField()), + ('forPet', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='symptom_for_pet', to='pet.pet')), + ], + ), + ] diff --git a/server/health/migrations/__init__.py b/server/health/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/health/models.py b/server/health/models.py new file mode 100644 index 0000000..5b18aec --- /dev/null +++ b/server/health/models.py @@ -0,0 +1,20 @@ +from django.db import models +from pet.models import Pet + +# Create your models here. +class SymptomInstance(models.Model): + forPet = models.ForeignKey(Pet, on_delete=models.CASCADE, related_name="symptom_for_pet") + symptomType = models.CharField(max_length=200) + extraInfo = models.TextField(null=True) + dateAndTime = models.DateTimeField() + def __str__(self): + return f"{self.symptomType} {self.dateAndTime}" + +class MedRecord(models.Model): + forPet = models.ForeignKey(Pet, on_delete=models.CASCADE, related_name="medrec_for_pet") + title = models.CharField(max_length=200) + recordDate = models.DateField() + descr = models.TextField(null=True) + # add file link later + def __str__(self): + return self.title \ No newline at end of file diff --git a/server/health/tests.py b/server/health/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/server/health/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/server/health/urls.py b/server/health/urls.py new file mode 100644 index 0000000..a9d7f56 --- /dev/null +++ b/server/health/urls.py @@ -0,0 +1,7 @@ +from django.urls import path + +from . import views + +urlpatterns = [ + path("", views.index, name="index"), +] \ No newline at end of file diff --git a/server/health/views.py b/server/health/views.py new file mode 100644 index 0000000..878c327 --- /dev/null +++ b/server/health/views.py @@ -0,0 +1,6 @@ +from django.shortcuts import render +from django.http import HttpResponse + +# Create your views here. +def index(request): + return HttpResponse("Hello, world. You're at the health index.") \ No newline at end of file diff --git a/server/pet/migrations/0003_remove_pet_belongstobusiness_and_more.py b/server/pet/migrations/0003_remove_pet_belongstobusiness_and_more.py new file mode 100644 index 0000000..6d2cd04 --- /dev/null +++ b/server/pet/migrations/0003_remove_pet_belongstobusiness_and_more.py @@ -0,0 +1,21 @@ +# Generated by Django 5.2.8 on 2025-12-11 02:12 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('pet', '0002_remove_medication_feedtime_alter_food_descr_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='pet', + name='belongsToBusiness', + ), + migrations.RemoveField( + model_name='pet', + name='belongsToHouse', + ), + ] diff --git a/server/pet/migrations/0004_pet_belongstobusiness_pet_belongstohouse.py b/server/pet/migrations/0004_pet_belongstobusiness_pet_belongstohouse.py new file mode 100644 index 0000000..b556ed7 --- /dev/null +++ b/server/pet/migrations/0004_pet_belongstobusiness_pet_belongstohouse.py @@ -0,0 +1,25 @@ +# Generated by Django 5.2.8 on 2025-12-11 03:01 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pet', '0003_remove_pet_belongstobusiness_and_more'), + ('registration', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='pet', + name='belongsToBusiness', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='business', to='registration.business'), + ), + migrations.AddField( + model_name='pet', + name='belongsToHouse', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='household', to='registration.household'), + ), + ] diff --git a/server/pet/models.py b/server/pet/models.py index 7e79f5e..3781b25 100644 --- a/server/pet/models.py +++ b/server/pet/models.py @@ -1,4 +1,5 @@ from django.db import models +from registration.models import Household, Business # Create your models here. class Pet(models.Model): @@ -8,8 +9,8 @@ class Pet(models.Model): breed = models.CharField(max_length=50, null=True) weight = models.FloatField(null=True) exerciseReq = models.FloatField(null=True) - belongsToHouse = models.CharField(max_length=50, null=True) - belongsToBusiness = models.CharField(max_length=50, null=True) + belongsToHouse = models.ForeignKey(Household, on_delete=models.SET_NULL, related_name="household", null=True) + belongsToBusiness = models.ForeignKey(Business, on_delete=models.SET_NULL, related_name="business", null=True) def __str__(self): return self.petName diff --git a/server/registration/migrations/0001_initial.py b/server/registration/migrations/0001_initial.py new file mode 100644 index 0000000..5e9950b --- /dev/null +++ b/server/registration/migrations/0001_initial.py @@ -0,0 +1,64 @@ +# Generated by Django 5.2.8 on 2025-12-11 03:01 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Business', + fields=[ + ('businessID', models.CharField(max_length=100, primary_key=True, serialize=False)), + ('businessName', models.CharField(max_length=255)), + ('streetNo', models.IntegerField()), + ('streetName', models.CharField(max_length=255)), + ('suburb', models.CharField(max_length=255)), + ('state', models.CharField(max_length=100)), + ('postcode', models.IntegerField()), + ('country', models.CharField(max_length=100)), + ('payDetail', models.CharField(max_length=255)), + ], + ), + migrations.CreateModel( + name='Household', + fields=[ + ('houseID', models.CharField(max_length=100, primary_key=True, serialize=False)), + ('houseName', models.CharField(max_length=255)), + ('houseNo', models.IntegerField()), + ('streetName', models.CharField(max_length=255)), + ('suburb', models.CharField(max_length=255)), + ('postcode', models.IntegerField()), + ('state', models.CharField(max_length=100)), + ('country', models.CharField(max_length=100)), + ], + ), + migrations.CreateModel( + name='PetCarer', + fields=[ + ('username', models.CharField(max_length=100, primary_key=True, serialize=False)), + ('fullName', models.CharField(max_length=255)), + ('email', models.EmailField(max_length=254)), + ('phoneNumber', models.CharField(max_length=20)), + ('payDetail', models.CharField(blank=True, max_length=255, null=True)), + ('belongsToBusiness', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='business_members', to='registration.business')), + ('belongsToHouse', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='household_members', to='registration.household')), + ], + ), + migrations.AddField( + model_name='household', + name='accountManager', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='managed_households', to='registration.petcarer'), + ), + migrations.AddField( + model_name='business', + name='accountManager', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='managed_businesses', to='registration.petcarer'), + ), + ] diff --git a/server/server/settings.py b/server/server/settings.py index 8474ca2..a3ef71d 100644 --- a/server/server/settings.py +++ b/server/server/settings.py @@ -54,6 +54,8 @@ "dog.apps.DogConfig", "vet.apps.VetConfig", "landing_page", + "health.apps.HealthConfig", + "registration", ] MIDDLEWARE = [ diff --git a/server/server/urls.py b/server/server/urls.py index b1d0acf..2698f1d 100644 --- a/server/server/urls.py +++ b/server/server/urls.py @@ -31,4 +31,5 @@ path("home/", include("landing_page.urls")), path("dog/", include("dog.urls")), path("vet/", include("vet.urls")), + path("health/", include("health.urls")) ] diff --git a/server/tasks/models.py b/server/tasks/models.py index d441391..70e7e09 100644 --- a/server/tasks/models.py +++ b/server/tasks/models.py @@ -7,4 +7,6 @@ class Task(models.Model): title = models.CharField(max_length=200) descr = models.TextField(null=True) due = models.DateTimeField() - isComplete = models.BooleanField(default=False) \ No newline at end of file + isComplete = models.BooleanField(default=False) + def __str__(self): + return self.title \ No newline at end of file