Skip to content

Commit 540461c

Browse files
✨ Update document model and add S3 upload functionality
1 parent 5cc0889 commit 540461c

3 files changed

Lines changed: 33 additions & 6 deletions

File tree

.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ SMTP_SSL=False
3232
SMTP_PORT=587
3333

3434
# Postgres
35-
POSTGRES_SERVER=localhost
35+
POSTGRES_SERVER=db
3636
POSTGRES_PORT=5432
3737
POSTGRES_DB=app
3838
POSTGRES_USER=postgres

backend/app/models.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,20 @@ class UsersPublic(SQLModel):
5858

5959
# Shared properties
6060
class DocumentBase(SQLModel):
61-
title: str = Field(min_length=1, max_length=255)
62-
description: str | None = Field(default=None, max_length=255)
61+
filename: str = Field(min_length=1, max_length=255)
62+
s3_url: str | None = Field(default=None, max_length=255) # URL to the document in S3
63+
content_type: str | None = Field(default=None, max_length=255)
64+
size: int | None = Field(default=None, ge=0) # Size in bytes
65+
6366

6467

6568
# Properties to receive on document creation
6669
class DocumentCreate(DocumentBase):
6770
pass
6871

69-
7072
# Properties to receive on document update
7173
class DocumentUpdate(DocumentBase):
72-
title: str | None = Field(default=None, min_length=1, max_length=255) # type: ignore
74+
filename: str | None = Field(default=None, min_length=1, max_length=255) # type: ignore
7375

7476

7577
# Database model, database table inferred from class name
@@ -82,10 +84,17 @@ class Document(DocumentBase, table=True):
8284

8385

8486
# Properties to return via API, id is always required
87+
# class DocumentPublic(DocumentBase):
88+
# id: uuid.UUID
89+
# owner_id: uuid.UUID
90+
8591
class DocumentPublic(DocumentBase):
8692
id: uuid.UUID
8793
owner_id: uuid.UUID
88-
94+
s3_url: str | None = None
95+
filename: str | None = None
96+
content_type: str | None = None
97+
size: int | None = None
8998

9099
class DocumentsPublic(SQLModel):
91100
data: list[DocumentPublic]

backend/app/s3.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import boto3
2+
import uuid
3+
from fastapi import UploadFile
4+
from app.core.config import settings
5+
6+
s3 = boto3.client("s3")
7+
8+
def upload_file_to_s3(file: UploadFile, user_id: str) -> str:
9+
extension = file.filename.split(".")[-1]
10+
key = f"documents/{user_id}/{uuid.uuid4()}.{extension}"
11+
12+
s3.upload_fileobj(file.file, settings.S3_BUCKET_NAME, key)
13+
14+
return key
15+
16+
17+
def generate_s3_url(key: str) -> str:
18+
return f"https://{settings.S3_BUCKET_NAME}.s3.amazonaws.com/{key}"

0 commit comments

Comments
 (0)