Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Django
*.log
*.pot
*.pyc
__pycache__/
local_settings.py
db.sqlite3
db.sqlite3-journal
1 change: 1 addition & 0 deletions Backend/DegreePlanner/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
# Application definition

INSTALLED_APPS = [
'courses.apps.CoursesConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
Expand Down
2 changes: 2 additions & 0 deletions Backend/DegreePlanner/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
"""
from django.contrib import admin
from django.urls import path
from django.urls.conf import include

urlpatterns = [
path('admin/', admin.site.urls),
path('courses/', include('courses.urls')),
]
17 changes: 17 additions & 0 deletions Backend/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# DegreePlanner backend

## Project setup

Create Python virtual environment
```bash
python -m venv .venv
source .venv/bin/activate # note: choose the right activate script for your shell
pip install -r requirements.txt
```

Setup django and run development server
```bash
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
```
Empty file added Backend/courses/__init__.py
Empty file.
3 changes: 3 additions & 0 deletions Backend/courses/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
6 changes: 6 additions & 0 deletions Backend/courses/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class CoursesConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'courses'
74 changes: 74 additions & 0 deletions Backend/courses/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Generated by Django 5.1.2 on 2025-01-05 10:40

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Course',
fields=[
('id', models.CharField(max_length=10, primary_key=True, serialize=False)),
('subject', models.CharField(max_length=100)),
('number', models.IntegerField()),
('description', models.CharField(max_length=1000)),
],
),
migrations.CreateModel(
name='Degree',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
('description', models.CharField(max_length=100)),
],
),
migrations.CreateModel(
name='Subject',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('code', models.CharField(max_length=10)),
('name', models.CharField(max_length=100)),
('description', models.CharField(max_length=100)),
],
),
migrations.CreateModel(
name='Term',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('code', models.IntegerField()),
('year', models.IntegerField()),
('season', models.CharField(choices=[('F', 'Fall'), ('W', 'Winter'), ('S', 'Spring')], max_length=1)),
],
),
migrations.CreateModel(
name='CoReq',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('coreqOrGroup', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.course')),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_requests_created', to='courses.course')),
],
),
migrations.CreateModel(
name='AntiReq',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('antireq', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.course')),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_requests_created', to='courses.course')),
],
),
migrations.CreateModel(
name='PreReq',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_requests_created', to='courses.course')),
('prereqOrGroup', models.ManyToManyField(to='courses.course')),
],
),
]
Empty file.
39 changes: 39 additions & 0 deletions Backend/courses/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from django.db import models
from django.utils.translation import gettext_lazy as _

class Season(models.TextChoices):
FALL = 'F', _('Fall')
WINTER = 'W', _('Winter')
SPRING = 'S', _('Spring')

class Term(models.Model):
code = models.IntegerField()
year = models.IntegerField()
season = models.CharField(max_length=1, choices=Season.choices)

class Subject(models.Model):
code = models.CharField(max_length=10)
name = models.CharField(max_length=100)
description = models.CharField(max_length=100)

class Course(models.Model):
id = models.CharField(max_length=10, primary_key=True)
subject = models.CharField(max_length=100)
number = models.IntegerField()
description = models.CharField(max_length=1000)

class PreReq(models.Model):
course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='%(class)s_requests_created')
prereqOrGroup = models.ManyToManyField(Course)

class CoReq(models.Model):
course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='%(class)s_requests_created')
coreqOrGroup = models.ForeignKey(Course, on_delete=models.CASCADE)

class AntiReq(models.Model):
course = models.ForeignKey(Course, on_delete=models.CASCADE, related_name='%(class)s_requests_created')
antireq = models.ForeignKey(Course, on_delete=models.CASCADE)

class Degree(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=100)
3 changes: 3 additions & 0 deletions Backend/courses/tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.test import TestCase

# Create your tests here.
7 changes: 7 additions & 0 deletions Backend/courses/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django.urls import path

from . import views

urlpatterns = [
path('', views.listCourses, name='index'),
]
4 changes: 4 additions & 0 deletions Backend/courses/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from django.http.response import JsonResponse

def listCourses(request):
return JsonResponse({'courses': []})
4 changes: 4 additions & 0 deletions Backend/pyrightconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"venvPath": ".",
"venv": ".venv"
}
5 changes: 5 additions & 0 deletions Backend/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
asgiref==3.8.1
Django==5.1.2
django-allauth==65.1.0
sqlparse==0.5.1
tzdata==2024.2