srivatsavdamaraju's picture
Upload 39 files
fd21f0c verified
# schemas.py
from pydantic import BaseModel, EmailStr , UUID4 , Field
from typing import Optional , Any
from uuid import UUID
from datetime import datetime
import os
import sys
from pathlib import Path
# ensure project root (agent/) is on sys.path so sibling packages like "s3" can be imported
project_root = Path(__file__).resolve().parents[2] # -> ...\openai_agents\agent
if str(project_root) not in sys.path:
sys.path.insert(0, str(project_root))
from .models import UserRole,DatasetStatus
# -----------------------------
# USER SCHEMAS
# -----------------------------
class UserBase(BaseModel):
fullname: str
username: str
email: EmailStr
class UserCreate(UserBase):
password: str
role: Optional[UserRole] = UserRole.employee
is_active: Optional[bool] = True
organization_id: Optional[UUID] = None
provider_id: Optional[UUID] = None
class UserResponse(BaseModel):
id: UUID
fullname: str
username: str
email: EmailStr
role: UserRole
is_active: bool
last_login: Optional[datetime]
organization_id: Optional[UUID]
provider_id: Optional[UUID]
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class LoginRequest(BaseModel):
email: EmailStr
password: str
# -----------------------------
# CONVERSATION SCHEMAS
# -----------------------------
class ConversationCreate(BaseModel):
convo_id: str
user_query: dict
response: dict
file_metadata: Optional[dict] = None
is_saved: Optional[bool] = False
class ConversationResponse(BaseModel):
id: UUID
convo_id: str
user_query: dict
response: dict
file_metadata: Optional[dict] = None
is_saved: bool
user_id: UUID
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
# -----------------------------
# ORGANIZATION SCHEMAS
# -----------------------------
class OrganizationCreate(BaseModel):
name: str
plan_id: UUID
domain: Optional[str] = None
location: Optional[str] = None
city: Optional[str] = None
state: Optional[str] = None
country: Optional[str] = None
is_active: Optional[bool] = True
class OrganizationResponse(BaseModel):
id: UUID
name: str
domain: Optional[str] = None
plan_id: UUID
location: Optional[str] = None
city: Optional[str] = None
state: Optional[str] = None
country: Optional[str] = None
is_active: bool
class Config:
from_attributes = True
# -----------------------------
# PLAN SCHEMAS
# -----------------------------
class PlanCreate(BaseModel):
plan_type: str
price: float
features: Optional[str] = None
class PlanResponse(BaseModel):
id: UUID
plan_type: str
price: float
features: Optional[str] = None
class Config:
from_attributes = True
# -----------------------------
# DATASET SCHEMAS
# --------------------------------
class DatasetBase(BaseModel):
name: str
description: Optional[str] = None
category: Optional[str] = None
tags: Optional[list[str]] = None
metadata: Optional[dict] = None
class DatasetCreate(DatasetBase):
organization_id: UUID
# status defaults to "pending" in database
file_key: Optional[str] = None # S3 file reference
file_size: Optional[int] = None
file_type: Optional[str] = None
class DatasetUpdate(BaseModel):
name: Optional[str] = None
description: Optional[str] = None
category: Optional[str] = None
tags: Optional[list[str]] = None
metadata: Optional[dict] = None
status: Optional[DatasetStatus] = None
rejection_reason: Optional[str] = None
class DatasetResponse(DatasetBase):
id: UUID
organization_id: UUID
status: DatasetStatus
file_key: Optional[str] = None
file_size: Optional[int] = None
file_type: Optional[str] = None
rejection_reason: Optional[str] = None
created_at: datetime
updated_at: datetime
submitted_by: Optional[UUID] = None # User ID who submitted
class Config:
from_attributes = True
# -----------------------------
# USERMETADATA SCHEMAS
# --------------------------------
class UserDatasetsMetadataBase(BaseModel):
user_id: UUID
user_metadata: Any # will store full JSON response
class UserDatasetsMetadataCreate(UserDatasetsMetadataBase):
pass
class UserDatasetsMetadataResponse(UserDatasetsMetadataBase):
id: UUID
created_at: datetime
updated_at: datetime
class Config:
orm_mode = True
# -----------------------------
# ORGANIZATIONS SCHEMAS
# --------------------------------
class OrganizationBase(BaseModel):
name: str
domain: Optional[str] = None
plan_id: UUID
location: Optional[str] = None
city: Optional[str] = None
state: Optional[str] = None
country: Optional[str] = None
is_active: Optional[bool] = True
class OrganizationCreate(OrganizationBase):
pass
class OrganizationUpdate(BaseModel):
name: Optional[str] = None
domain: Optional[str] = None
location: Optional[str] = None
city: Optional[str] = None
state: Optional[str] = None
country: Optional[str] = None
is_active: Optional[bool] = None
class OrganizationResponse(OrganizationBase):
id: UUID
created_by: Optional[UUID] = None
created_at: datetime
updated_at: datetime
deleted_at: Optional[datetime] = None
class Config:
orm_mode = True