Ekaropolus db72590b8d
All checks were successful
continuous-integration/drone/push Build is passing
Models for comments and shares counts on meta pages
2025-05-20 14:57:17 -06:00

67 lines
2.3 KiB
Python

from django.db import models
from pxy_openai.assistants import OpenAIAssistant
class FacebookPageAssistant(models.Model):
"""
Model to link a Facebook page to an OpenAI assistant and manage webhook subscriptions.
"""
page_id = models.CharField(max_length=100, unique=True, help_text="Unique ID of the Facebook page")
page_name = models.CharField(max_length=200, help_text="Name of the Facebook page")
assistant = models.ForeignKey('pxy_openai.OpenAIAssistant', on_delete=models.CASCADE, related_name="facebook_pages")
is_subscribed = models.BooleanField(default=False, help_text="Indicates if the page is subscribed to webhooks")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f"{self.page_name} ({self.page_id}) -> {self.assistant.name}"
class EventType(models.Model):
"""
Catalog of possible event types for FacebookPageAssistant.
"""
code = models.CharField(
max_length=50,
unique=True,
help_text="Machine-readable code for the event type (e.g. 'comment', 'share')"
)
label = models.CharField(
max_length=100,
help_text="Human-readable label for the event type"
)
def __str__(self):
return self.label
class FacebookEvent(models.Model):
"""
Log of individual events (comments, shares, etc.) for a Facebook page.
"""
page = models.ForeignKey(
FacebookPageAssistant,
on_delete=models.CASCADE,
related_name="events"
)
event_type = models.ForeignKey(
EventType,
on_delete=models.PROTECT,
related_name="facebook_events"
)
sender_id = models.CharField(
max_length=100,
blank=True, null=True,
help_text="ID of the user who triggered the event"
)
object_id = models.CharField(
max_length=100,
help_text="Identifier of the comment or share object"
)
message = models.TextField(
blank=True, null=True,
help_text="Text content (for comments) or message attached to the event"
)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.page.page_name}: {self.event_type.code} @ {self.timestamp:%Y-%m-%d %H:%M}"