From dbc21b7f55e7a388e97c012945fb38eccd056954 Mon Sep 17 00:00:00 2001 From: belledw Date: Sat, 6 Dec 2025 15:36:50 +0800 Subject: [PATCH 1/6] add symptom, med record models with health view --- server/health/__init__.py | 0 server/health/admin.py | 6 ++++ server/health/apps.py | 6 ++++ server/health/migrations/0001_initial.py | 36 ++++++++++++++++++++++++ server/health/migrations/__init__.py | 0 server/health/models.py | 16 +++++++++++ server/health/tests.py | 3 ++ server/health/urls.py | 7 +++++ server/health/views.py | 6 ++++ server/pet/models.py | 4 +-- server/server/settings.py | 1 + server/server/urls.py | 1 + 12 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 server/health/__init__.py create mode 100644 server/health/admin.py create mode 100644 server/health/apps.py create mode 100644 server/health/migrations/0001_initial.py create mode 100644 server/health/migrations/__init__.py create mode 100644 server/health/models.py create mode 100644 server/health/tests.py create mode 100644 server/health/urls.py create mode 100644 server/health/views.py 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..d917d61 --- /dev/null +++ b/server/health/models.py @@ -0,0 +1,16 @@ +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() + +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 \ 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/models.py b/server/pet/models.py index 7e79f5e..0f9945d 100644 --- a/server/pet/models.py +++ b/server/pet/models.py @@ -8,8 +8,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.CharField(max_length=50, null=True) # Add foreign key later + belongsToBusiness = models.CharField(max_length=50, null=True) # Add foreign key later def __str__(self): return self.petName diff --git a/server/server/settings.py b/server/server/settings.py index e797347..2a8d956 100644 --- a/server/server/settings.py +++ b/server/server/settings.py @@ -52,6 +52,7 @@ "pet.apps.PetConfig", "tasks.apps.TasksConfig", "landing_page", + "health.apps.HealthConfig", ] MIDDLEWARE = [ diff --git a/server/server/urls.py b/server/server/urls.py index 6a0358e..38348d2 100644 --- a/server/server/urls.py +++ b/server/server/urls.py @@ -29,4 +29,5 @@ path("pet/", include("pet.urls")), path("tasks/", include("tasks.urls")), path("home/", include("landing_page.urls")), + path("health/", include("health.urls")) ] From c0e0c988bce6f03a0e77ddf4b29251477ae9f0ed Mon Sep 17 00:00:00 2001 From: belledw Date: Thu, 11 Dec 2025 09:43:55 +0800 Subject: [PATCH 2/6] comment on pet models about adding foreign key when available --- server/pet/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/pet/models.py b/server/pet/models.py index 0f9945d..90ebd42 100644 --- a/server/pet/models.py +++ b/server/pet/models.py @@ -8,8 +8,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) # Add foreign key later - belongsToBusiness = models.CharField(max_length=50, null=True) # Add foreign key later + #belongsToHouse = models.CharField(max_length=50, null=True) # Add foreign key later + #belongsToBusiness = models.CharField(max_length=50, null=True) # Add foreign key later def __str__(self): return self.petName From 3751f988d045d5df91c5ec617f31dae6e2e08d16 Mon Sep 17 00:00:00 2001 From: belledw Date: Thu, 11 Dec 2025 10:09:44 +0800 Subject: [PATCH 3/6] added __str__ methods for health and task models --- server/health/models.py | 6 +++++- server/tasks/models.py | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/server/health/models.py b/server/health/models.py index d917d61..3856ffe 100644 --- a/server/health/models.py +++ b/server/health/models.py @@ -7,10 +7,14 @@ class SymptomInstance(models.Model): symptomType = models.CharField(max_length=200) extraInfo = models.TextField(null=True) dateAndTime = models.DateTimeField() + def __str__(self): + return self.symptomType 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 \ No newline at end of file + # add file link later + def __str__(self): + return self.title \ No newline at end of file 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 From 540cfdf5d23d932d614a616e85f6df75371b4a9f Mon Sep 17 00:00:00 2001 From: belledw Date: Thu, 11 Dec 2025 10:27:31 +0800 Subject: [PATCH 4/6] migrations for pet models --- ...3_remove_pet_belongstobusiness_and_more.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 server/pet/migrations/0003_remove_pet_belongstobusiness_and_more.py 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', + ), + ] From 1de2d688badb0bb305f66f531af5f0a6c59c2d76 Mon Sep 17 00:00:00 2001 From: belledw Date: Thu, 11 Dec 2025 10:58:40 +0800 Subject: [PATCH 5/6] Added foreign keys for pet models --- server/health/models.py | 2 +- server/pet/models.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/server/health/models.py b/server/health/models.py index 3856ffe..5b18aec 100644 --- a/server/health/models.py +++ b/server/health/models.py @@ -8,7 +8,7 @@ class SymptomInstance(models.Model): extraInfo = models.TextField(null=True) dateAndTime = models.DateTimeField() def __str__(self): - return self.symptomType + return f"{self.symptomType} {self.dateAndTime}" class MedRecord(models.Model): forPet = models.ForeignKey(Pet, on_delete=models.CASCADE, related_name="medrec_for_pet") diff --git a/server/pet/models.py b/server/pet/models.py index 90ebd42..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) # Add foreign key later - #belongsToBusiness = models.CharField(max_length=50, null=True) # Add foreign key later + 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 From 630435af1dd0796538d239f2fc16b99d00228ade Mon Sep 17 00:00:00 2001 From: belledw Date: Thu, 11 Dec 2025 11:02:31 +0800 Subject: [PATCH 6/6] fixing migration issues --- ...et_belongstobusiness_pet_belongstohouse.py | 25 ++++++++ .../registration/migrations/0001_initial.py | 64 +++++++++++++++++++ server/server/settings.py | 1 + 3 files changed, 90 insertions(+) create mode 100644 server/pet/migrations/0004_pet_belongstobusiness_pet_belongstohouse.py create mode 100644 server/registration/migrations/0001_initial.py 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/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 859084a..a3ef71d 100644 --- a/server/server/settings.py +++ b/server/server/settings.py @@ -55,6 +55,7 @@ "vet.apps.VetConfig", "landing_page", "health.apps.HealthConfig", + "registration", ] MIDDLEWARE = [