salesiq / backend /app /db /database_dynamodb.py
richlai's picture
working on docker
902845d
raw
history blame
1.79 kB
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 []