Skip to content

Commit 9bb2e90

Browse files
authored
Merge pull request #5 from codersforcauses/setup_models
Setup models
2 parents b970a31 + e4190eb commit 9bb2e90

27 files changed

+421
-0
lines changed

package-lock.json

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ dependencies = [
1212
"gunicorn~=23.0",
1313
"python-dotenv~=1.0",
1414
"psycopg[binary,pool]~=3.2.13",
15+
"djangorestframework-simplejwt>=5.5.1",
1516
]
1617

1718
[dependency-groups]

server/server/settings.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
"rest_framework",
4949
"corsheaders",
5050
"healthcheck",
51+
"user_profile",
52+
"task_planner",
5153
]
5254

5355
MIDDLEWARE = [
@@ -70,6 +72,13 @@
7072

7173
ROOT_URLCONF = "server.urls"
7274

75+
REST_FRAMEWORK = {
76+
"DEFAULT_AUHTENTICATION_CLASSES": (
77+
"rest_framework.authenticaiton.SessionAuthenticaiton",
78+
"rest_framework_simplejwt.authentication.JWTAuthenticaiton",
79+
)
80+
}
81+
7382
TEMPLATES = [
7483
{
7584
"BACKEND": "django.template.backends.django.DjangoTemplates",

server/server/urls.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,14 @@
1818
from django.contrib import admin
1919
from django.urls import include, path
2020

21+
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
22+
2123
urlpatterns = [
2224
path("admin/", admin.site.urls),
25+
path("api-auth/", include("rest_framework.urls")),
26+
path("api/token/", TokenObtainPairView.as_view(), name="token_obtain_pair"),
27+
path("api/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"),
2328
path("api/healthcheck/", include("healthcheck.urls")),
29+
path("api/user/", include("user_profile.urls")),
30+
path("api/planner/", include("task_planner.urls")),
2431
]

server/task_planner/__init__.py

Whitespace-only changes.

server/task_planner/admin.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from django.contrib import admin
2+
3+
from .models import Task, Time, Topic
4+
5+
# Register your models here.
6+
admin.site.register(Task)
7+
admin.site.register(Time)
8+
admin.site.register(Topic)

server/task_planner/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class TaskPlannerConfig(AppConfig):
5+
default_auto_field = "django.db.models.BigAutoField"
6+
name = "task_planner"
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# Generated by Django 5.2.8 on 2025-12-07 11:16
2+
3+
import django.db.models.deletion
4+
from django.conf import settings
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
initial = True
11+
12+
dependencies = [
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
]
15+
16+
operations = [
17+
migrations.CreateModel(
18+
name="Task",
19+
fields=[
20+
(
21+
"id",
22+
models.BigAutoField(
23+
auto_created=True,
24+
primary_key=True,
25+
serialize=False,
26+
verbose_name="ID",
27+
),
28+
),
29+
("name", models.CharField(max_length=255)),
30+
("description", models.TextField(blank=True)),
31+
("completed", models.BooleanField(default=False)),
32+
(
33+
"user",
34+
models.ForeignKey(
35+
on_delete=django.db.models.deletion.CASCADE,
36+
to=settings.AUTH_USER_MODEL,
37+
),
38+
),
39+
],
40+
),
41+
migrations.CreateModel(
42+
name="Time",
43+
fields=[
44+
(
45+
"id",
46+
models.BigAutoField(
47+
auto_created=True,
48+
primary_key=True,
49+
serialize=False,
50+
verbose_name="ID",
51+
),
52+
),
53+
("day", models.IntegerField()),
54+
("start_time", models.TimeField()),
55+
("end_time", models.TimeField()),
56+
("repeating", models.BooleanField(default=False)),
57+
(
58+
"task",
59+
models.ForeignKey(
60+
on_delete=django.db.models.deletion.CASCADE,
61+
related_name="task",
62+
to="task_planner.task",
63+
),
64+
),
65+
],
66+
),
67+
migrations.CreateModel(
68+
name="Topic",
69+
fields=[
70+
(
71+
"id",
72+
models.BigAutoField(
73+
auto_created=True,
74+
primary_key=True,
75+
serialize=False,
76+
verbose_name="ID",
77+
),
78+
),
79+
("name", models.CharField(max_length=255)),
80+
("color_hex", models.PositiveIntegerField()),
81+
(
82+
"user",
83+
models.ForeignKey(
84+
on_delete=django.db.models.deletion.CASCADE,
85+
to=settings.AUTH_USER_MODEL,
86+
),
87+
),
88+
],
89+
),
90+
migrations.AddField(
91+
model_name="task",
92+
name="topics",
93+
field=models.ManyToManyField(to="task_planner.topic"),
94+
),
95+
]

server/task_planner/migrations/__init__.py

Whitespace-only changes.

server/task_planner/models.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from django.db import models
2+
from django.contrib.auth import get_user_model
3+
4+
5+
# Create your models here.
6+
User = get_user_model()
7+
8+
9+
class Topic(models.Model):
10+
name = models.CharField(max_length=255)
11+
color_hex = models.PositiveIntegerField()
12+
user = models.ForeignKey(User, on_delete=models.CASCADE)
13+
14+
15+
class Task(models.Model):
16+
name = models.CharField(max_length=255)
17+
description = models.TextField(blank=True)
18+
completed = models.BooleanField(default=False)
19+
user = models.ForeignKey(User, on_delete=models.CASCADE)
20+
topics = models.ManyToManyField(Topic)
21+
22+
23+
class Time(models.Model):
24+
day = models.IntegerField()
25+
start_time = models.TimeField()
26+
end_time = models.TimeField()
27+
repeating = models.BooleanField(default=False)
28+
task = models.ForeignKey(
29+
Task, related_name="times", on_delete=models.CASCADE)

0 commit comments

Comments
 (0)