File size: 2,561 Bytes
7183ec8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from typing import List, Optional, Dict, Any
from pydantic import BaseModel, Field # Import Field
from datetime import datetime # Import datetime

# Pydantic models for reading data from the database

class KeyCategoryBase(BaseModel):
    name: str
    type: str
    tags: Optional[List[str]] = None
    # metadata: Optional[Dict[str, Any]] = None # Removed from base

class KeyCategory(KeyCategoryBase):
    id: int
    # Map metadata_ from SQLAlchemy model to metadata in schema
    metadata: Optional[Dict[str, Any]] = Field(None, alias="metadata_")
    created_at: Optional[datetime] = None # Use datetime type
    updated_at: Optional[datetime] = None # Use datetime type

    class Config:
        orm_mode = True # Enable ORM mode
        by_alias = True # Use aliases for serialization
        # Configure JSON encoding for datetime objects if needed (orm_mode might handle this)
        # json_encoders = {
        #     datetime: lambda v: v.isoformat() if v else None
        # }


class APIKeyBase(BaseModel):
    value: str
    category_id: int
    status: str = "active"
    # metadata: Optional[Dict[str, Any]] = None # Removed from base

class APIKey(APIKeyBase):
    id: int
    usage_count: int
    last_used: Optional[datetime] = None # Use datetime type
    # Map metadata_ from SQLAlchemy model to metadata in schema
    metadata: Optional[Dict[str, Any]] = Field(None, alias="metadata_")
    created_at: Optional[datetime] = None # Use datetime type
    updated_at: Optional[datetime] = None # Use datetime type

    class Config:
        orm_mode = True # Enable ORM mode
        by_alias = True # Use aliases for serialization
        # Configure JSON encoding for datetime objects if needed
        # json_encoders = {
        #     datetime: lambda v: v.isoformat() if v else None
        # }


# Pydantic models for creating data (less fields, e.g., no ID, timestamps)

class KeyCategoryCreate(KeyCategoryBase):
    metadata: Optional[Dict[str, Any]] = None # Add metadata back to create schema

class APIKeyCreate(APIKeyBase):
    metadata: Optional[Dict[str, Any]] = None # Add metadata back to create schema


# Pydantic models for updating data (all fields optional)

class KeyCategoryUpdate(BaseModel):
    name: Optional[str] = None
    type: Optional[str] = None
    tags: Optional[List[str]] = None
    metadata: Optional[Dict[str, Any]] = None

class APIKeyUpdate(BaseModel):
    value: Optional[str] = None
    category_id: Optional[int] = None
    status: Optional[str] = None
    metadata: Optional[Dict[str, Any]] = None