feat: implement LMS core (CMS, Courses, Enrollment, Progress, Auth) (Admin + API)
Build & Push Docker Image (Backend) / build (push) Successful in 54s

This commit is contained in:
Flook
2026-05-03 09:36:47 +07:00
parent 1ec6fa68a1
commit fe67d491e2
25 changed files with 590 additions and 71 deletions
+9
View File
@@ -0,0 +1,9 @@
def auto_register(router, viewsets: dict):
"""
viewsets = {
"articles": ArticleViewSet,
"courses": CourseViewSet,
}
"""
for prefix, viewset in viewsets.items():
router.register(prefix, viewset, basename=prefix)
+11
View File
@@ -0,0 +1,11 @@
from rest_framework.serializers import ModelSerializer
class BaseModelSerializer(ModelSerializer):
"""
Base Serializer สำหรับ CMSlike API
- ใช้ fields = "__all__" เป็น default
"""
class Meta:
abstract = True
fields = "__all__"
+29
View File
@@ -0,0 +1,29 @@
from rest_framework.viewsets import ModelViewSet
from rest_framework.permissions import IsAuthenticated
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend
class BaseModelViewSet(ModelViewSet):
"""
CMS-like Base ViewSet
- CRUD อัตโนมัติ
- Pagination (จาก settings.py)
- Filter / Search / Ordering
- Permission กลาง
"""
# default permission (override ได้)
permission_classes = [IsAuthenticated]
# filter backend มาตรฐานแบบ CMS
filter_backends = [
DjangoFilterBackend,
SearchFilter,
OrderingFilter,
]
# ค่า default (override ต่อ model)
filterset_fields = "__all__"
search_fields = []
ordering_fields = "__all__"
ordering = ["-id"]
+12
View File
@@ -0,0 +1,12 @@
from rest_framework.permissions import BasePermission, SAFE_METHODS
class IsStaffOrReadOnly(BasePermission):
"""
- อ่านได้ทุกคน
- เขียนได้เฉพาะ staff
"""
def has_permission(self, request, view):
if request.method in SAFE_METHODS:
return True
return request.user and request.user.is_staff