aboutsummaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorBobby <[email protected]>2024-12-17 19:25:04 +0000
committerBobby <[email protected]>2024-12-17 19:25:04 +0000
commit79d44e676adeb998c3072b4a58d08815b45d4676 (patch)
tree13dd865f0b809b0e77d5cfc491fa5909c1ea15c1 /apps
parenta12bd485351559af96d019d55a4b0f8dbc1b7265 (diff)
downloadthatcomputerscientist-79d44e676adeb998c3072b4a58d08815b45d4676.tar.xz
thatcomputerscientist-79d44e676adeb998c3072b4a58d08815b45d4676.zip
journal stuff
Diffstat (limited to 'apps')
-rw-r--r--apps/core/urls.py2
-rw-r--r--apps/core/views.py15
-rw-r--r--apps/journals/__init__.py0
-rw-r--r--apps/journals/admin.py7
-rw-r--r--apps/journals/apps.py6
-rw-r--r--apps/journals/migrations/0001_initial.py78
-rw-r--r--apps/journals/migrations/0002_journal_slug.py19
-rw-r--r--apps/journals/migrations/__init__.py0
-rw-r--r--apps/journals/models.py39
-rw-r--r--apps/journals/tests.py3
-rw-r--r--apps/journals/urls.py6
-rw-r--r--apps/journals/views.py3
12 files changed, 178 insertions, 0 deletions
diff --git a/apps/core/urls.py b/apps/core/urls.py
index db770dd0..3d64a60d 100644
--- a/apps/core/urls.py
+++ b/apps/core/urls.py
@@ -5,4 +5,6 @@ from . import views
app_name = "core"
urlpatterns = [
path("", views.home, name="home"),
+ # My Pages
+ path("my/journals/", views.my_journals, name="my_journals"),
]
diff --git a/apps/core/views.py b/apps/core/views.py
index 037f52c2..1790098a 100644
--- a/apps/core/views.py
+++ b/apps/core/views.py
@@ -1,6 +1,7 @@
from django.shortcuts import render
from thatcomputerscientist.utils import i18npatterns
from apps.administration.models import Announcement
+from apps.journals.models import Journal
from internal.mal_wrapper import get_mal_recent_activity
from internal.weblog_utilities import recent_weblogs
@@ -20,3 +21,17 @@ def home(request):
"recent_weblogs": recent_weblogs(lang=LANGUAGE_CODE),
}
return render(request, f"{LANGUAGE_CODE}/core/home.html", context)
+
+
+# My Pages
+def my_journals(request):
+ META = {
+ "title": "My Journals",
+ }
+ LANGUAGE_CODE = i18npatterns(request.LANGUAGE_CODE)
+ request.META.update(META)
+ journals = Journal.objects.filter(owner=request.user).order_by("-created_at")
+ context = {
+ "journals": journals,
+ }
+ return render(request, f"{LANGUAGE_CODE}/core/my/journals.html", context)
diff --git a/apps/journals/__init__.py b/apps/journals/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/apps/journals/__init__.py
diff --git a/apps/journals/admin.py b/apps/journals/admin.py
new file mode 100644
index 00000000..e619370d
--- /dev/null
+++ b/apps/journals/admin.py
@@ -0,0 +1,7 @@
+from django.contrib import admin
+
+# Register your models here.
+from apps.journals.models import Journal, JournalEntry
+
+admin.site.register(Journal)
+admin.site.register(JournalEntry)
diff --git a/apps/journals/apps.py b/apps/journals/apps.py
new file mode 100644
index 00000000..6b3c8ae9
--- /dev/null
+++ b/apps/journals/apps.py
@@ -0,0 +1,6 @@
+from django.apps import AppConfig
+
+
+class JournalsConfig(AppConfig):
+ default_auto_field = "django.db.models.BigAutoField"
+ name = "apps.journals"
diff --git a/apps/journals/migrations/0001_initial.py b/apps/journals/migrations/0001_initial.py
new file mode 100644
index 00000000..485a5314
--- /dev/null
+++ b/apps/journals/migrations/0001_initial.py
@@ -0,0 +1,78 @@
+# Generated by Django 5.1.4 on 2024-12-17 17:38
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name="Journal",
+ fields=[
+ (
+ "id",
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("name", models.CharField(max_length=128)),
+ ("description", models.TextField(blank=True)),
+ ("private", models.BooleanField(default=False)),
+ ("custom_css", models.TextField(blank=True)),
+ ("created_at", models.DateTimeField(auto_now_add=True)),
+ ("updated_at", models.DateTimeField(auto_now=True)),
+ (
+ "owner",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ (
+ "shared_with",
+ models.ManyToManyField(
+ blank=True,
+ related_name="shared_journals",
+ to=settings.AUTH_USER_MODEL,
+ ),
+ ),
+ ],
+ ),
+ migrations.CreateModel(
+ name="JournalEntry",
+ fields=[
+ (
+ "id",
+ models.BigAutoField(
+ auto_created=True,
+ primary_key=True,
+ serialize=False,
+ verbose_name="ID",
+ ),
+ ),
+ ("title", models.CharField(max_length=128)),
+ ("body", models.TextField()),
+ ("created_at", models.DateTimeField(auto_now_add=True)),
+ ("updated_at", models.DateTimeField(auto_now=True)),
+ (
+ "journal",
+ models.ForeignKey(
+ on_delete=django.db.models.deletion.CASCADE,
+ related_name="entries",
+ to="journals.journal",
+ ),
+ ),
+ ],
+ ),
+ ]
diff --git a/apps/journals/migrations/0002_journal_slug.py b/apps/journals/migrations/0002_journal_slug.py
new file mode 100644
index 00000000..67082c3c
--- /dev/null
+++ b/apps/journals/migrations/0002_journal_slug.py
@@ -0,0 +1,19 @@
+# Generated by Django 5.1.4 on 2024-12-17 18:37
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("journals", "0001_initial"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="journal",
+ name="slug",
+ field=models.SlugField(default="", max_length=256, unique=True),
+ preserve_default=False,
+ ),
+ ]
diff --git a/apps/journals/migrations/__init__.py b/apps/journals/migrations/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/apps/journals/migrations/__init__.py
diff --git a/apps/journals/models.py b/apps/journals/models.py
new file mode 100644
index 00000000..96214d56
--- /dev/null
+++ b/apps/journals/models.py
@@ -0,0 +1,39 @@
+from django.db import models
+from django.conf import settings
+
+
+class Journal(models.Model):
+ owner = models.ForeignKey(
+ settings.AUTH_USER_MODEL,
+ on_delete=models.CASCADE,
+ )
+ name = models.CharField(max_length=128)
+ slug = models.SlugField(max_length=256, unique=True)
+ description = models.TextField(blank=True)
+ private = models.BooleanField(default=False)
+ shared_with = models.ManyToManyField(
+ settings.AUTH_USER_MODEL,
+ related_name="shared_journals",
+ blank=True,
+ )
+ custom_css = models.TextField(blank=True)
+ created_at = models.DateTimeField(auto_now_add=True)
+ updated_at = models.DateTimeField(auto_now=True)
+
+ def __str__(self):
+ return self.name
+
+
+class JournalEntry(models.Model):
+ journal = models.ForeignKey(
+ Journal,
+ on_delete=models.CASCADE,
+ related_name="entries",
+ )
+ title = models.CharField(max_length=128)
+ body = models.TextField()
+ created_at = models.DateTimeField(auto_now_add=True)
+ updated_at = models.DateTimeField(auto_now=True)
+
+ def __str__(self):
+ return self.title
diff --git a/apps/journals/tests.py b/apps/journals/tests.py
new file mode 100644
index 00000000..7ce503c2
--- /dev/null
+++ b/apps/journals/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/apps/journals/urls.py b/apps/journals/urls.py
new file mode 100644
index 00000000..1f7413c2
--- /dev/null
+++ b/apps/journals/urls.py
@@ -0,0 +1,6 @@
+from django.urls import path
+
+from . import views
+
+app_name = "journal"
+urlpatterns = []
diff --git a/apps/journals/views.py b/apps/journals/views.py
new file mode 100644
index 00000000..91ea44a2
--- /dev/null
+++ b/apps/journals/views.py
@@ -0,0 +1,3 @@
+from django.shortcuts import render
+
+# Create your views here.