ProjectMemory / backend /app /schemas.py
Amal Nimmy Lal
feat : Project Memory
35765b5
"""Pydantic schemas for FastAPI request/response models."""
from pydantic import BaseModel
from typing import Optional, List, Dict, Any
from datetime import datetime
# ==================== User Schemas ====================
class UserBase(BaseModel):
firstName: str
lastName: str
avatar_url: Optional[str] = None
class UserCreate(UserBase):
pass
class User(UserBase):
id: str
created_at: datetime
class Config:
from_attributes = True
# ==================== Project Schemas ====================
class ProjectBase(BaseModel):
name: str
description: str
class ProjectCreate(ProjectBase):
userId: str
class ProjectJoin(BaseModel):
userId: str
class Project(ProjectBase):
id: str
created_by: str
created_at: datetime
class Config:
from_attributes = True
class ProjectWithRole(Project):
role: str # "owner" or "member"
# ==================== Task Schemas ====================
class TaskBase(BaseModel):
title: str
description: Optional[str] = None
class TaskCreate(TaskBase):
assignedTo: Optional[str] = None
class Task(TaskBase):
id: str
project_id: str
status: str # "todo", "in_progress", "done"
assigned_to: Optional[str] = None
created_at: datetime
completed_at: Optional[datetime] = None
class Config:
from_attributes = True
# ==================== Task Completion Schemas ====================
class TaskCompleteRequest(BaseModel):
userId: str
whatIDid: str
codeSnippet: Optional[str] = None
class TaskCompleteResponse(BaseModel):
success: bool
log_entry_id: str
# ==================== Activity Log Schemas ====================
class LogEntry(BaseModel):
id: str
project_id: str
task_id: Optional[str] = None
user_id: Optional[str] = None
actor_type: str # "human" or "agent"
action_type: str # "task_completed", "doc_generated", "query_answered"
raw_input: str
code_snippet: Optional[str] = None
generated_doc: str
tags: List[str] = []
created_at: datetime
class Config:
from_attributes = True
class ActivityResponse(BaseModel):
entries: List[LogEntry]
# ==================== Search Schemas ====================
class SearchFilters(BaseModel):
userId: Optional[str] = None
dateFrom: Optional[str] = None
dateTo: Optional[str] = None
tags: Optional[List[str]] = None
class SearchRequest(BaseModel):
query: str
filters: Optional[SearchFilters] = None
class SearchSource(BaseModel):
id: str
summary: str
class SearchResponse(BaseModel):
answer: str
sources: List[SearchSource]
# ==================== Smart Query Schemas ====================
class SmartQueryRequest(BaseModel):
query: str
currentUserId: str
currentDatetime: Optional[str] = None
class SmartQuerySource(BaseModel):
id: str
type: str # "activity", "memory", "task"
summary: str
date: Optional[str] = None
relevance: Optional[float] = None
status: Optional[str] = None
class SmartQueryResponse(BaseModel):
answer: str
tools_used: List[str] = []
sources: List[SmartQuerySource] = []
# ==================== Chat Schemas ====================
class ChatMessage(BaseModel):
role: str # "user", "assistant", "system"
content: str
class ChatRequest(BaseModel):
messages: List[ChatMessage]
projectId: str
class ChatResponse(BaseModel):
message: str
# ==================== Error Schema ====================
class ErrorResponse(BaseModel):
error: str
detail: Optional[str] = None