|
import boto3 |
|
from botocore.exceptions import ClientError |
|
import datetime |
|
from typing import Optional, List |
|
from .models import User, FileUpload |
|
|
|
dynamodb = boto3.resource('dynamodb') |
|
users_table = dynamodb.Table('Users') |
|
files_table = dynamodb.Table('Files') |
|
|
|
async def get_user_by_username(username: str) -> Optional[User]: |
|
try: |
|
response = users_table.get_item(Key={'username': username}) |
|
if 'Item' in response: |
|
return User(**response['Item']) |
|
return None |
|
except ClientError: |
|
return None |
|
|
|
async def create_user(user: User) -> bool: |
|
try: |
|
users_table.put_item( |
|
Item={ |
|
'username': user.username, |
|
'email': user.email, |
|
'password': user.password, |
|
}, |
|
ConditionExpression='attribute_not_exists(username)' |
|
) |
|
return True |
|
except ClientError: |
|
return False |
|
|
|
async def save_file(username: str, file_upload: FileUpload) -> bool: |
|
try: |
|
files_table.put_item( |
|
Item={ |
|
'username': username, |
|
'filename': file_upload.filename, |
|
'content': file_upload.content, |
|
'created_at': datetime.datetime.now(datetime.UTC).isoformat(), |
|
'updated_at': datetime.datetime.now(datetime.UTC).isoformat() |
|
} |
|
) |
|
|
|
return True |
|
except ClientError: |
|
return False |
|
|
|
async def get_user_files(username: str) -> List[FileUpload]: |
|
try: |
|
response = files_table.query( |
|
KeyConditionExpression='username = :username', |
|
ExpressionAttributeValues={':username': username} |
|
) |
|
return [FileUpload(**item) for item in response.get('Items', [])] |
|
except ClientError: |
|
return [] |