From 807c038a34d36077f47997b7a813b3929288dd8b Mon Sep 17 00:00:00 2001
From: Lorenz Padberg
Date: Mon, 21 Aug 2023 15:17:52 +0200
Subject: [PATCH] Rename ModuleCategoryType to ModuleCategory
---
.../src/components/modules/ModuleFilter.vue | 32 ++++++++---------
.../src/components/modules/ModuleTeaser.vue | 4 +--
.../src/graphql/gql/fragments/moduleParts.gql | 2 +-
server/books/categorize_modules.py | 36 +++++++++----------
server/books/factories.py | 4 +--
.../management/commands/categorize_modules.py | 10 +++---
.../create_default_model_categories.py | 4 +--
server/books/models/module.py | 6 ++--
server/books/schema/nodes/module.py | 20 +++++------
server/books/schema/nodes/module_category.py | 6 ++--
...odule_category_type.py => module_level.py} | 6 ++--
server/books/schema/queries.py | 19 +++++-----
server/books/wagtail_hooks.py | 12 +++----
13 files changed, 80 insertions(+), 81 deletions(-)
rename server/books/schema/nodes/{module_category_type.py => module_level.py} (66%)
diff --git a/client/src/components/modules/ModuleFilter.vue b/client/src/components/modules/ModuleFilter.vue
index 731b143a..e1ff9bae 100644
--- a/client/src/components/modules/ModuleFilter.vue
+++ b/client/src/components/modules/ModuleFilter.vue
@@ -9,9 +9,9 @@
selectedLernfeld = newItem"
+ :selected-item="selectedCategory"
+ :items="categoryOptions"
+ @update:selectedItem="newItem => selectedCategory = newItem"
>
{
- return [nullCategory, ...moduleLevelsResult.value?.moduleLevels || []];
+ return [nullLevel, ...moduleLevelsResult.value?.moduleLevels || []];
});
- const nullLernfeld = {
+ const nullCategory = {
name: '---',
id: null,
};
- const selectedLernfeld = ref(nullLernfeld);
+ const selectedCategory = ref(nullCategory);
- const {result: moduleCategoryTypesResult} = useQuery(gql`
- query ModuleCategoryTypesQuery {
- moduleCategoryTypes {
+ const {result: moduleCategoryResult} = useQuery(gql`
+ query ModuleCategoriesQuery {
+ moduleCategories {
name
id
}
}
`);
- const lernfeldOptions = computed(() => {
- return [nullLernfeld, ...moduleCategoryTypesResult.value?.moduleCategoryTypes || []];
+ const categoryOptions = computed(() => {
+ return [nullCategory, ...moduleCategoryResult.value?.moduleCategoryTypes || []];
});
@@ -117,17 +117,17 @@
return props.modules;
}
- // filter by Lehrjahr
+ // filter by Lehrjahr (moduleLevel)
if (selectedLevel.value.name !== '---') {
filteredModules = filteredModules.filter((module) => {
return module.level?.id == selectedLevel.value.id;
});
}
- //filter by Lernfeld
- if (selectedLernfeld.value.name !== '---') {
+ //filter by Lernfeld (Category)
+ if (selectedCategory.value.name !== '---') {
filteredModules = filteredModules.filter((module) => {
- return module.categoryType?.id == selectedLernfeld.value.id;
+ return module.category?.id == selectedCategory.value.id;
});
}
updateLastModuleLevel(selectedLevel.value);
diff --git a/client/src/components/modules/ModuleTeaser.vue b/client/src/components/modules/ModuleTeaser.vue
index 57a459a2..0ab7ff56 100644
--- a/client/src/components/modules/ModuleTeaser.vue
+++ b/client/src/components/modules/ModuleTeaser.vue
@@ -19,7 +19,7 @@
@@ -30,7 +30,7 @@
export default {
components: {Pill},
- props: ['metaTitle', 'title', 'teaser', 'id', 'slug', 'heroImage', 'level', 'categoryType'],
+ props: ['metaTitle', 'title', 'teaser', 'id', 'slug', 'heroImage', 'level', 'category'],
computed: {
diff --git a/client/src/graphql/gql/fragments/moduleParts.gql b/client/src/graphql/gql/fragments/moduleParts.gql
index 9a03d012..9b42877f 100644
--- a/client/src/graphql/gql/fragments/moduleParts.gql
+++ b/client/src/graphql/gql/fragments/moduleParts.gql
@@ -13,7 +13,7 @@ fragment ModuleParts on ModuleNode {
id
name
}
- categoryType {
+ category {
id
name
}
diff --git a/server/books/categorize_modules.py b/server/books/categorize_modules.py
index 4cd8f329..527b20a5 100644
--- a/server/books/categorize_modules.py
+++ b/server/books/categorize_modules.py
@@ -1,4 +1,4 @@
-from .models.module import Module, ModuleLevel, ModuleType
+from .models.module import Module, ModuleLevel, ModuleCategory
def analyze_module_meta_titles():
all_nodes = []
@@ -17,36 +17,36 @@ def analyze_module_meta_titles():
print(f"{i}.: {set(leafs)}")
-def create_default_categories():
+def create_default_levcels_and_categories():
for lehrjahr in range(1,4):
module_category, created = ModuleLevel.objects.get_or_create(name=f"{lehrjahr}. Lehrjahr")
- for type in range(1, 10):
- ModuleType.objects.get_or_create(name=f"Lernfeld {type}")
+ for category in range(1, 10):
+ ModuleCategory.objects.get_or_create(name=f"Lernfeld {category}")
def categorize_modules():
- for category in ModuleLevel.objects.all():
- modules = Module.objects.filter(category__isnull=True, meta_title__icontains=category.name)
+ for level in ModuleLevel.objects.all():
+ modules = Module.objects.filter(level__isnull=True, meta_title__icontains=level.name)
+ print(f"{level.name}: {modules.count()}")
+ modules.update(level=level)
+
+ for category in ModuleCategory.objects.all():
+ modules = Module.objects.filter(category__isnull=True, meta_title__contains=type.name)
print(f"{category.name}: {modules.count()}")
modules.update(category=category)
- for type in ModuleType.objects.all():
- modules = Module.objects.filter(category_type__isnull=True, meta_title__contains=type.name)
- print(f"{type.name}: {modules.count()}")
- modules.update(category_type=type)
-
def uncategorize_modules():
- ModuleType.objects.all().delete()
+ ModuleCategory.objects.all().delete()
ModuleLevel.objects.all().delete()
+def delete_unused_levels():
+ for level in ModuleLevel.objects.all():
+ if not level.module_set.exists():
+ level.delete()
+
def delete_unused_categories():
- for category in ModuleLevel.objects.all():
+ for category in ModuleCategory.objects.all():
if not category.module_set.exists():
category.delete()
-
-def delete_unused_types():
- for type in ModuleType.objects.all():
- if not type.module_set.exists():
- type.delete()
diff --git a/server/books/factories.py b/server/books/factories.py
index 5b89ffe7..a1d1cf84 100644
--- a/server/books/factories.py
+++ b/server/books/factories.py
@@ -28,7 +28,7 @@ from books.blocks import (
SurveyBlock,
VideoBlock,
)
-from books.models import Book, Chapter, ContentBlock, Module, TextBlock, Topic, ModuleLevel, ModuleType
+from books.models import Book, Chapter, ContentBlock, Module, TextBlock, Topic, ModuleLevel, ModuleCategory
from core.factories import (
BasePageFactory,
DummyImageFactory,
@@ -209,7 +209,7 @@ class ModuleLevelFactory(factory.DjangoModelFactory):
class ModuleTypeFactory(factory.DjangoModelFactory):
class Meta:
- model = ModuleType
+ model = ModuleCategory
name = 'Lernfeld 1'
diff --git a/server/books/management/commands/categorize_modules.py b/server/books/management/commands/categorize_modules.py
index 96a4711e..0e7d7ef0 100644
--- a/server/books/management/commands/categorize_modules.py
+++ b/server/books/management/commands/categorize_modules.py
@@ -1,16 +1,16 @@
from django.core.management import BaseCommand
-from books.categorize_modules import categorize_modules, delete_unused_categories, delete_unused_types, uncategorize_modules
-
-from books.categorize_modules import create_default_categories
+from books.categorize_modules import categorize_modules, delete_unused_levels, uncategorize_modules, \
+ delete_unused_categories
+from books.categorize_modules import create_default_levcels_and_categories
class Command(BaseCommand):
def handle(self, *args, **options):
self.stdout.write("Categorizing modules")
uncategorize_modules()
- create_default_categories()
+ create_default_levcels_and_categories()
categorize_modules()
- delete_unused_types()
+ delete_unused_levels()
delete_unused_categories()
self.stdout.write("Finish categorizing modules")
diff --git a/server/books/management/commands/create_default_model_categories.py b/server/books/management/commands/create_default_model_categories.py
index 1b378ce3..7c053814 100644
--- a/server/books/management/commands/create_default_model_categories.py
+++ b/server/books/management/commands/create_default_model_categories.py
@@ -1,11 +1,11 @@
from django.core.management import BaseCommand
-from books.categorize_modules import categorize_modules, create_default_categories
+from books.categorize_modules import categorize_modules, create_default_levcels_and_categories
class Command(BaseCommand):
def handle(self, *args, **options):
self.stdout.write("Create defaut categories")
- create_default_categories()
+ create_default_levcels_and_categories()
self.stdout.write("Finish")
diff --git a/server/books/models/module.py b/server/books/models/module.py
index e236bfee..d732df28 100644
--- a/server/books/models/module.py
+++ b/server/books/models/module.py
@@ -24,7 +24,7 @@ def default_category():
return ModuleLevel.objects.first().pk
-class ModuleType(models.Model):
+class ModuleCategory(models.Model):
class Meta:
verbose_name = _("module type")
verbose_name_plural = _("module types")
@@ -43,7 +43,7 @@ class Module(StrictHierarchyPage):
meta_title = models.CharField(max_length=255, help_text="e.g. 'Intro' or 'Modul 1'")
level = models.ForeignKey(ModuleLevel, on_delete=models.SET_NULL, blank=True, null=True)
- category_type = models.ForeignKey(ModuleType, on_delete=models.SET_NULL, blank=True, null=True)
+ category = models.ForeignKey(ModuleCategory, on_delete=models.SET_NULL, blank=True, null=True)
hero_image = models.ForeignKey(
@@ -66,7 +66,7 @@ class Module(StrictHierarchyPage):
FieldPanel("title", classname="full title"),
FieldPanel("meta_title", classname="full title"),
FieldPanel("level"),
- FieldPanel("category_type"),
+ FieldPanel("category"),
FieldPanel("hero_image"),
FieldPanel("hero_source"),
FieldPanel("teaser"),
diff --git a/server/books/schema/nodes/module.py b/server/books/schema/nodes/module.py
index dbbd2fbd..b38b4480 100644
--- a/server/books/schema/nodes/module.py
+++ b/server/books/schema/nodes/module.py
@@ -6,11 +6,11 @@ from graphene_django.filter import DjangoFilterConnectionField
from assignments.models import StudentSubmission
from assignments.schema.types import AssignmentNode, StudentSubmissionNode
-from books.models import Module, Chapter, ContentBlock, RecentModule, ModuleLevel, ModuleType
+from books.models import Module, Chapter, ContentBlock, RecentModule, ModuleLevel, ModuleCategory
from books.schema.interfaces.module import ModuleInterface
from books.schema.nodes.chapter import ChapterNode
-from books.schema.nodes.module_category import ModuleLevelNode
-from books.schema.nodes.module_category_type import ModuleCategoryTypeNode
+from books.schema.nodes.module_level import ModuleLevelNode
+from books.schema.nodes.module_category import ModuleCategoryNode
from notes.models import ModuleBookmark, ContentBlockBookmark, ChapterBookmark
from notes.schema import (
ModuleBookmarkNode,
@@ -37,7 +37,7 @@ class ModuleNode(DjangoObjectType):
"hero_source",
"topic",
"level",
- "category_type",
+ "category",
]
filter_fields = {
"slug": ["exact", "icontains", "in"],
@@ -56,8 +56,8 @@ class ModuleNode(DjangoObjectType):
snapshots = graphene.List("books.schema.nodes.SnapshotNode")
objective_groups = graphene.List(ObjectiveGroupNode)
assignments = graphene.List(AssignmentNode)
- category = graphene.Field(ModuleLevelNode)
- category_type = graphene.Field(ModuleCategoryTypeNode)
+ level = graphene.Field(ModuleLevelNode)
+ category = graphene.Field(ModuleCategoryNode)
def resolve_chapters(self, info, **kwargs):
return Chapter.get_by_parent(self)
@@ -110,11 +110,11 @@ class ModuleNode(DjangoObjectType):
def resolve_objective_groups(parent, info, **kwargs):
return parent.objective_groups.all().prefetch_related("hidden_for")
- def resolve_category(self, info, **kwargs):
- return ModuleLevel.objects.get(pk=self.category_id) if self.category_id else None
+ def resolve_level(self, info, **kwargs):
+ return ModuleLevel.objects.get(pk=self.level_id) if self.level_id else None
- def resolve_category_type(self, info, **kwargs):
- return ModuleType.objects.get(pk=self.category_type_id) if self.category_type_id else None
+ def resolve_category(self, info, **kwargs):
+ return ModuleCategory.objects.get(pk=self.category_id) if self.category_id else None
@staticmethod
def resolve_snapshots(parent, info, **kwargs):
diff --git a/server/books/schema/nodes/module_category.py b/server/books/schema/nodes/module_category.py
index 165d8e83..add10b08 100644
--- a/server/books/schema/nodes/module_category.py
+++ b/server/books/schema/nodes/module_category.py
@@ -2,12 +2,12 @@ from graphene import relay
from graphene import relay
from graphene_django import DjangoObjectType
-from books.models import ModuleLevel
+from books.models import ModuleCategory
-class ModuleLevelNode(DjangoObjectType):
+class ModuleCategoryNode(DjangoObjectType):
class Meta:
- model = ModuleLevel
+ model = ModuleCategory
interfaces = (relay.Node,)
only_fields = [
"id",
diff --git a/server/books/schema/nodes/module_category_type.py b/server/books/schema/nodes/module_level.py
similarity index 66%
rename from server/books/schema/nodes/module_category_type.py
rename to server/books/schema/nodes/module_level.py
index 59159a0e..165d8e83 100644
--- a/server/books/schema/nodes/module_category_type.py
+++ b/server/books/schema/nodes/module_level.py
@@ -2,12 +2,12 @@ from graphene import relay
from graphene import relay
from graphene_django import DjangoObjectType
-from books.models import ModuleType
+from books.models import ModuleLevel
-class ModuleCategoryTypeNode(DjangoObjectType):
+class ModuleLevelNode(DjangoObjectType):
class Meta:
- model = ModuleType
+ model = ModuleLevel
interfaces = (relay.Node,)
only_fields = [
"id",
diff --git a/server/books/schema/queries.py b/server/books/schema/queries.py
index 7793140b..1de8e190 100644
--- a/server/books/schema/queries.py
+++ b/server/books/schema/queries.py
@@ -7,9 +7,9 @@ from core.logger import get_logger
from .connections import TopicConnection, ModuleConnection
from .nodes import ContentBlockNode, ChapterNode, ModuleNode, NotFoundFailure, SnapshotNode, \
TopicOr404Node
-from .nodes.module_category import ModuleLevelNode
-from .nodes.module_category_type import ModuleCategoryTypeNode
-from ..models import Book, Topic, Module, Chapter, Snapshot, ModuleLevel, ModuleType
+from .nodes.module_level import ModuleLevelNode
+from .nodes.module_category import ModuleCategoryNode
+from ..models import Book, Topic, Module, Chapter, Snapshot, ModuleLevel, ModuleCategory
logger = get_logger(__name__)
@@ -30,8 +30,8 @@ class BookQuery(object):
module_level = graphene.Field(ModuleLevelNode, id=graphene.ID(required=True))
module_levels = graphene.List(ModuleLevelNode)
- module_category_type= graphene.Field(ModuleCategoryTypeNode, id=graphene.ID(required=True))
- module_category_types = graphene.List(ModuleCategoryTypeNode)
+ module_category = graphene.Field(ModuleCategoryNode, id=graphene.ID(required=True))
+ module_categories = graphene.List(ModuleCategoryNode)
def resolve_books(self, *args, **kwargs):
return Book.objects.filter(**kwargs).live()
@@ -92,18 +92,17 @@ class BookQuery(object):
def resolve_module_levels(self, *args, **kwargs):
return ModuleLevel.objects.filter(**kwargs)
- def resolve_module_category_type(self, info, **kwargs):
+ def resolve_module_category(self, info, **kwargs):
id = kwargs.get('id')
try:
if id is not None:
- module_category_type = get_object(Module, id)
- return module_category_type
+ return get_object(Module, id)
except Module.DoesNotExist:
return None
- def resolve_module_category_types(self, *args, **kwargs):
- return ModuleType.objects.filter(**kwargs)
+ def resolve_module_categories(self, *args, **kwargs):
+ return ModuleCategory.objects.filter(**kwargs)
diff --git a/server/books/wagtail_hooks.py b/server/books/wagtail_hooks.py
index 570e006c..00630ef5 100644
--- a/server/books/wagtail_hooks.py
+++ b/server/books/wagtail_hooks.py
@@ -5,15 +5,15 @@ from wagtail.contrib.modeladmin.options import (
)
from wagtail import hooks
-from .models.module import ModuleLevel, ModuleType, Module
+from .models.module import ModuleLevel, ModuleCategory, Module
from django.utils.translation import gettext_lazy as _
class ModuleAdmin(ModelAdmin):
model = Module
- list_display = ("title", "meta_title", "level", "category_type")
+ list_display = ("title", "meta_title", "level", "category")
search_fields = ("title", "meta_title")
- list_filter = ("level", "category_type")
+ list_filter = ("level", "category")
class ModuleLevelAdmin(ModelAdmin):
@@ -22,8 +22,8 @@ class ModuleLevelAdmin(ModelAdmin):
ordering = ("name",)
-class ModuleTypeAdmin(ModelAdmin):
- model = ModuleType
+class ModuleCategoryAdmin(ModelAdmin):
+ model = ModuleCategory
list_display = ("name",)
ordering = ("name",)
inspect_view_fields = ("name",)
@@ -34,7 +34,7 @@ class InstrumentGroup(ModelAdminGroup):
items = (
ModuleAdmin,
ModuleLevelAdmin,
- ModuleTypeAdmin,
+ ModuleCategoryAdmin,
)