salesiq / backend /app /db /database_dynamodb.py
richlai's picture
added new UI, added form, added api message
3bb94b1
raw
history blame
1.8 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 []