diff --git a/kerckhoff/activities/__init__.py b/kerckhoff/activities/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/kerckhoff/activities/admin.py b/kerckhoff/activities/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/kerckhoff/activities/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/kerckhoff/activities/apps.py b/kerckhoff/activities/apps.py new file mode 100644 index 0000000..39325dd --- /dev/null +++ b/kerckhoff/activities/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class ActivitiesConfig(AppConfig): + name = 'activities' diff --git a/kerckhoff/activities/migrations/__init__.py b/kerckhoff/activities/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/kerckhoff/activities/models.py b/kerckhoff/activities/models.py new file mode 100644 index 0000000..e9cb95e --- /dev/null +++ b/kerckhoff/activities/models.py @@ -0,0 +1,44 @@ +from enum import Enum + +from django.contrib.postgres.fields import JSONField, ArrayField +from django.dispatch import receiver +from packages.models import PackageVersion + +from .signals import package_updated, package_created + +class ActivityType(Enum): + PACKAGE_UPDATED: 'package_updated' + PACKAGE_CREATED: 'package_created' + +# Notes + # **kwargs allows you to handle named arguments that you have not defined + # in advance + + # the create method "creates" and "saves" the object in a single step + + # enum AcitivityType class created for cleaner code + +class Activities(models.Model): + # a dict that logs user actions + user = models.ForeignKey(User) + action = JSONField(blank=True, default=dict, null=True) + + # post_save is a signal that triggers this func log + @receiver(post_save, sender=PackageVersion) + def log(sender, instance: PackageVersion, created, **kwargs): + if created: + Activities.objects.create(user=instance.creator, action={ + "event_type": ActivityType.PACKAGE_CREATED, + "data": { + "package_id": instance.package, + "commit_message": instance.version_description + } + }) + else: + Activities.objects.create(user=instance.creator, action={ + "event_type": ActivityType.PACKAGE_UPDATED, + "data": { + "package_id": instance.package, + "commit_message": instance.version_description + } + }) \ No newline at end of file diff --git a/kerckhoff/activities/signals.py b/kerckhoff/activities/signals.py new file mode 100644 index 0000000..e59103c --- /dev/null +++ b/kerckhoff/activities/signals.py @@ -0,0 +1,4 @@ +import django.dispatch + +package_updated = django.dispatch.Signal(providing_args=["user, package"]) +package_created = django.dispatch.Signal(providing_args=["user, pacakge"]) diff --git a/kerckhoff/activities/tests.py b/kerckhoff/activities/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/kerckhoff/activities/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/kerckhoff/activities/views.py b/kerckhoff/activities/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/kerckhoff/activities/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here.