Rename ModuleCategoryType to ModuleCategory

This commit is contained in:
Lorenz Padberg 2023-08-21 15:17:52 +02:00
parent 0b1954c570
commit 807c038a34
13 changed files with 80 additions and 81 deletions

View File

@ -9,9 +9,9 @@
<Dropdown
class="module-filter__dropdown"
:selected-item="selectedLernfeld"
:items="lernfeldOptions"
@update:selectedItem="newItem => selectedLernfeld = newItem"
:selected-item="selectedCategory"
:items="categoryOptions"
@update:selectedItem="newItem => selectedCategory = newItem"
></Dropdown>
<pill-radio-buttons :selectableItems="languageOptions"
:defaultSelectedItem="initialLanguage"
@ -67,7 +67,7 @@
}
`);
const nullCategory = {
const nullLevel = {
name: '---',
id: null,
};
@ -76,27 +76,27 @@
let selectedLevel = ref(defaultLevel);
const levelOptions = computed(() => {
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);

View File

@ -19,7 +19,7 @@
</p>
<div class="module-teaser__pills">
<pill :text="level?.name"></pill>
<pill :text="categoryType?.name"></pill>
<pill :text="category?.name"></pill>
</div>
</div>
</router-link>
@ -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: {

View File

@ -13,7 +13,7 @@ fragment ModuleParts on ModuleNode {
id
name
}
categoryType {
category {
id
name
}

View File

@ -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()

View File

@ -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'

View File

@ -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")

View File

@ -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")

View File

@ -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"),

View File

@ -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):

View File

@ -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",

View File

@ -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",

View File

@ -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)

View File

@ -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,
)