Init Repo
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class NotificationType(str, Enum):
|
||||
TASK_ASSIGNED = "task_assigned"
|
||||
TASK_STATUS_CHANGED = "task_status_changed"
|
||||
SUBMISSION_REVIEWED = "submission_reviewed"
|
||||
WORK_SUBMITTED = "work_submitted"
|
||||
DEADLINE_APPROACHING = "deadline_approaching"
|
||||
PROJECT_UPDATE = "project_update"
|
||||
COMMENT_ADDED = "comment_added"
|
||||
|
||||
|
||||
class NotificationPriority(str, Enum):
|
||||
LOW = "low"
|
||||
NORMAL = "normal"
|
||||
HIGH = "high"
|
||||
URGENT = "urgent"
|
||||
|
||||
|
||||
class NotificationBase(BaseModel):
|
||||
type: NotificationType
|
||||
priority: NotificationPriority = NotificationPriority.NORMAL
|
||||
title: str = Field(..., max_length=255)
|
||||
message: str
|
||||
project_id: Optional[int] = None
|
||||
task_id: Optional[int] = None
|
||||
submission_id: Optional[int] = None
|
||||
|
||||
|
||||
class NotificationCreate(NotificationBase):
|
||||
user_id: int
|
||||
|
||||
|
||||
class NotificationResponse(NotificationBase):
|
||||
id: int
|
||||
user_id: int
|
||||
read: bool
|
||||
email_sent: bool
|
||||
email_sent_at: Optional[datetime] = None
|
||||
created_at: datetime
|
||||
read_at: Optional[datetime] = None
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class NotificationMarkRead(BaseModel):
|
||||
notification_ids: list[int]
|
||||
|
||||
|
||||
class NotificationPreferencesBase(BaseModel):
|
||||
# Email notification preferences
|
||||
email_enabled: bool = True
|
||||
email_task_assigned: bool = True
|
||||
email_task_status_changed: bool = True
|
||||
email_submission_reviewed: bool = True
|
||||
email_work_submitted: bool = True
|
||||
email_deadline_approaching: bool = True
|
||||
email_project_update: bool = True
|
||||
email_comment_added: bool = True
|
||||
|
||||
# In-app notification preferences
|
||||
inapp_enabled: bool = True
|
||||
inapp_task_assigned: bool = True
|
||||
inapp_task_status_changed: bool = True
|
||||
inapp_submission_reviewed: bool = True
|
||||
inapp_work_submitted: bool = True
|
||||
inapp_deadline_approaching: bool = True
|
||||
inapp_project_update: bool = True
|
||||
inapp_comment_added: bool = True
|
||||
|
||||
# Digest settings
|
||||
email_digest_enabled: bool = False
|
||||
email_digest_frequency: str = "daily"
|
||||
|
||||
|
||||
class NotificationPreferencesUpdate(NotificationPreferencesBase):
|
||||
pass
|
||||
|
||||
|
||||
class NotificationPreferencesResponse(NotificationPreferencesBase):
|
||||
id: int
|
||||
user_id: int
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class NotificationStats(BaseModel):
|
||||
total: int
|
||||
unread: int
|
||||
by_type: dict[str, int]
|
||||
Reference in New Issue
Block a user