feat(logs): add workspace activity log api

This commit is contained in:
2026-04-28 16:42:37 +03:30
parent c8a118788b
commit 71924ce6fb
32 changed files with 1118 additions and 122 deletions

View File

@@ -1,6 +1,12 @@
from django.contrib.auth import get_user_model
from django.db import models
from apps.logs.services import build_workspace_log_metadata
from apps.logs.services.constants import (
SECTION_RATES,
SECTION_WORKSPACE,
SECTION_WORKSPACE_MEMBERS,
)
from core.models.base import BaseModel
User = get_user_model()
@@ -26,6 +32,15 @@ class Workspace(BaseModel):
def __str__(self):
return self.name
def get_additional_data(self):
return build_workspace_log_metadata(
section=SECTION_WORKSPACE,
workspace_id=self.id,
target_id=self.id,
target_label=self.name,
extra={"owner_id": str(self.owner_id)},
)
@property
def members(self):
return User.objects.filter(
@@ -77,6 +92,21 @@ class WorkspaceMembership(BaseModel):
def __str__(self):
return f"{self.user} @ {self.workspace}"
def get_additional_data(self):
return build_workspace_log_metadata(
section=SECTION_WORKSPACE_MEMBERS,
workspace_id=self.workspace_id,
target_id=self.id,
target_label=self.user.full_name or self.user.mobile,
extra={
"member_user_id": str(self.user_id),
"role": self.role,
"canonical_owner_membership": (
self.role == self.Role.OWNER and self.user_id == self.workspace.owner_id
),
},
)
class PriceUnit(BaseModel):
code = models.CharField(max_length=8, unique=True)
@@ -130,3 +160,15 @@ class WorkspaceUserRate(BaseModel):
models.Index(fields=["workspace"], name="wur_workspace_idx"),
models.Index(fields=["user"], name="wur_user_idx"),
]
def get_additional_data(self):
return build_workspace_log_metadata(
section=SECTION_RATES,
workspace_id=self.workspace_id,
target_id=self.id,
target_label=self.user.full_name or self.user.mobile,
extra={
"rate_user_id": str(self.user_id),
"currency": self.currency,
},
)