Skip to content

Commit

Permalink
Initial models and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
irfan committed Oct 23, 2022
1 parent acda452 commit ad074e3
Show file tree
Hide file tree
Showing 8 changed files with 238 additions and 3 deletions.
13 changes: 13 additions & 0 deletions app/backend/backend/constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from enum import Enum

"""
c = UserType.ADMIN
print(c) -> UserType.ADMIN
print(c.name) -> ADMIN
print(c.value) -> 0
print(c is UserType.ADMIN) -> True
"""
class UserType(Enum):
ADMIN = 0
DOCTOR = 1
MEMBER = 2
90 changes: 90 additions & 0 deletions app/backend/backend/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# Generated by Django 4.1.2 on 2022-10-23 16:29

import django.contrib.postgres.fields
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Category',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
('definition', models.CharField(max_length=100, null=True)),
],
),
migrations.CreateModel(
name='MemberInfo',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('firstname', models.CharField(max_length=25)),
('lastname', models.CharField(max_length=25)),
('address', models.CharField(max_length=100, null=True)),
('weight', models.DecimalField(decimal_places=1, max_digits=3, null=True)),
('height', models.DecimalField(decimal_places=1, max_digits=3, null=True)),
('age', models.IntegerField(null=True)),
('past_illnesses', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=25), null=True, size=None)),
('allergies', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=25), null=True, size=None)),
('chronic_diseases', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=25), null=True, size=None)),
('undergone_operations', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=25), null=True, size=None)),
('used_drugs', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=25), null=True, size=None)),
],
),
migrations.CreateModel(
name='User',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=200)),
('email', models.CharField(max_length=100)),
('type', models.IntegerField()),
],
),
migrations.CreateModel(
name='Admin',
fields=[
('user_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='backend.user')),
('username', models.CharField(max_length=50)),
],
bases=('backend.user',),
),
migrations.CreateModel(
name='Report',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('message', models.CharField(max_length=500)),
('reported_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reported_user', to='backend.user')),
('reporter_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reporter_user', to='backend.user')),
('reviewed_by', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reviewed_by', to='backend.admin')),
],
),
migrations.CreateModel(
name='Member',
fields=[
('user_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='backend.user')),
('username', models.CharField(max_length=50)),
('avatar', models.CharField(max_length=200)),
('banned_by', models.CharField(max_length=50, null=True)),
('info', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.memberinfo')),
],
bases=('backend.user',),
),
migrations.CreateModel(
name='Doctor',
fields=[
('user_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='backend.user')),
('full_name', models.CharField(max_length=50)),
('hospital_name', models.CharField(max_length=100, null=True)),
('verified', models.BooleanField(default=False, max_length=100)),
('specialization', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='backend.category')),
],
bases=('backend.user',),
),
]
Empty file.
92 changes: 92 additions & 0 deletions app/backend/backend/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# from backend.auth_system import models
# from backend.follow_system import models
# from backend.profile_management import models

from django.db import models
from django.contrib.postgres.fields import ArrayField


class User(models.Model):
password = models.CharField(max_length=200, null=False)
email = models.CharField(max_length=100, null=False)

type = models.IntegerField(null=False)

def __str__(self):
return self.email


class Admin(User):
# user = models.ForeignKey(User, on_delete=models.CASCADE)
username = models.CharField(max_length=50, null=False)

def __str__(self):
return self.username

class MemberInfo(models.Model):
firstname = models.CharField(max_length=25, null=False)

This comment has been minimized.

Copy link
@canberkboun9

canberkboun9 Oct 23, 2022

Contributor

null=True

lastname = models.CharField(max_length=25, null=False)

This comment has been minimized.

Copy link
@canberkboun9

canberkboun9 Oct 23, 2022

Contributor

null=True

address = models.CharField(max_length=100, null=True)
weight = models.DecimalField(null=True, max_digits=3, decimal_places=1)
height = models.DecimalField(null=True, max_digits=3, decimal_places=1)
age = models.IntegerField(null=True)

past_illnesses = ArrayField(
models.CharField(max_length=25), null=True
)
allergies = ArrayField(
models.CharField(max_length=25), null=True
)
chronic_diseases = ArrayField(
models.CharField(max_length=25), null=True
)
undergone_operations = ArrayField(
models.CharField(max_length=25), null=True
)
used_drugs = ArrayField(
models.CharField(max_length=25), null=True
)


class Member(User):
username = models.CharField(max_length=50, null=False)
avatar = models.CharField(max_length=200, null=False)
banned_by = models.CharField(max_length=50, null=True) # username of admin

info = models.ForeignKey(MemberInfo, null=False, on_delete=models.CASCADE)

def __str__(self):
retval = ""
if self.info.firstname != None:
retval += self.info.firstname + " "
if self.info.lastname != None:
retval += self.info.firstname

This comment has been minimized.

Copy link
@canberkboun9

canberkboun9 Oct 23, 2022

Contributor

firstname => lastname


if retval != " ":
return retval

return self.username


class Category(models.Model):
name = models.CharField(max_length=50, null=False)
definition = models.CharField(max_length=100, null=True)


class Doctor(User):
full_name = models.CharField(max_length=50, null=False)
specialization = models.ForeignKey(Category, null=True, on_delete=models.SET_NULL)
hospital_name = models.CharField(max_length=100, null=True)
verified = models.BooleanField(max_length=100, null=False, default=False)

def __str__(self):
return self.full_name


class Report(models.Model):
reporter_user = models.ForeignKey(User, null=False, on_delete=models.CASCADE, related_name='reporter_user')
reported_user = models.ForeignKey(User, null=False, on_delete=models.CASCADE, related_name='reported_user')
message = models.CharField(max_length=500, null=False)
reviewed_by = models.ForeignKey(Admin, null=True, default=None, on_delete=models.SET_NULL, related_name='reviewed_by')


9 changes: 6 additions & 3 deletions app/backend/backend/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
"""

from pathlib import Path
import os


# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
Expand All @@ -31,6 +33,7 @@
# Application definition

INSTALLED_APPS = [
'backend',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
Expand Down Expand Up @@ -78,9 +81,9 @@
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'app',
'USER': 'postgres',
'PASSWORD': 'a1b2c3d4',
'HOST':'ec2-100-24-23-233.compute-1.amazonaws.com',
'PORT':'5432',
'PASSWORD': os.environ['DATABASE_PW'],
'HOST': 'ec2-100-24-23-233.compute-1.amazonaws.com',
'PORT': '5432',
}
}

Expand Down
7 changes: 7 additions & 0 deletions app/backend/backend/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import django.contrib.auth.hashers

def make_password(password):
assert password
return django.contrib.auth.hashers.make_password(
password=password
)
Empty file added app/backend/tests/__init__.py
Empty file.
30 changes: 30 additions & 0 deletions app/backend/tests/test_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from django.test import TestCase
from django.contrib.auth.hashers import check_password

from backend import models
from backend import constants
from backend import utils

TEST_ADMIN_EMAIL = "test_admin@test.com"
TEST_ADMIN_PASSWORD = "test_password"
TEST_ADMIN_USERNAME = "test_admin_unsername"

class AdminTestCase(TestCase):
def setUp(self):
models.Admin.objects.create(
email=TEST_ADMIN_EMAIL,
password=utils.make_password(TEST_ADMIN_PASSWORD),
type=constants.UserType.ADMIN.value,
username=TEST_ADMIN_USERNAME
)

def test_admin_name(self):
testAdmin = models.Admin.objects.get(username=TEST_ADMIN_USERNAME)

self.assertTrue(isinstance(testAdmin, models.Admin))

self.assertEqual(testAdmin.email, TEST_ADMIN_EMAIL)
self.assertTrue(check_password(TEST_ADMIN_PASSWORD, testAdmin.password))
self.assertEqual(str(testAdmin), TEST_ADMIN_USERNAME)
self.assertEqual(testAdmin.type, constants.UserType.ADMIN.value)

0 comments on commit ad074e3

Please sign in to comment.