Изменил бд и загрузку аватарок

This commit is contained in:
urec56 2024-03-10 13:51:25 +03:00
parent ef418252e2
commit e2cd40e553
9 changed files with 90 additions and 14 deletions

View file

@ -2,7 +2,7 @@ from fastapi import APIRouter, UploadFile, HTTPException
import httpx
from app.config import settings
from app.images.shemas import SImageUrl
from app.images.shemas import SImageUrl, SAvatarUrl
router = APIRouter(
prefix="/images",
@ -31,10 +31,19 @@ async def upload_file_returning_str(file: UploadFile, sub_str: str) -> str:
return image_url
@router.post('/upload_avatar', response_model=SImageUrl)
async def upload_avatar_returning_dict(file: UploadFile, sub_str: str) -> dict:
remote_server_url = settings.IMAGE_UPLOAD_SERVER + sub_str
response = await upload_file(file, remote_server_url)
image_url = response.json()['image_url']
hex_color = response.json()['hex_color']
image_url = settings.IMAGE_UPLOAD_SERVER + image_url
return {'image_url': image_url, 'hex_color': hex_color}
@router.post('/upload_avatar', response_model=SAvatarUrl)
async def upload_avatar(file: UploadFile):
image_url = await upload_file_returning_str(file, "upload_avatar")
return {'image_url': image_url}
image_data = await upload_avatar_returning_dict(file, "upload_avatar")
return image_data
@router.post('/upload_image', response_model=SImageUrl)

View file

@ -1,5 +1,10 @@
from pydantic import BaseModel
class SAvatarUrl(BaseModel):
image_url: str
hex_color: str
class SImageUrl(BaseModel):
image_url: str

View file

@ -0,0 +1,62 @@
"""Изменения таблицы юзеров
Revision ID: 28850415d498
Revises: e9b02df6e778
Create Date: 2024-03-10 13:47:01.603546
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision: str = '28850415d498'
down_revision: Union[str, None] = 'e9b02df6e778'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None
def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index('messages_message_idx', table_name='messages')
op.alter_column('pinnedchats', 'user_id',
existing_type=sa.INTEGER(),
nullable=True)
op.alter_column('pinnedchats', 'chat_id',
existing_type=sa.INTEGER(),
nullable=True)
op.alter_column('pinnedmessages', 'chat_id',
existing_type=sa.INTEGER(),
nullable=True)
op.alter_column('pinnedmessages', 'message_id',
existing_type=sa.INTEGER(),
nullable=True)
op.alter_column('pinnedmessages', 'user_id',
existing_type=sa.INTEGER(),
nullable=True)
op.add_column('users', sa.Column('avatar_hex', sa.String(), server_default='#30293f', nullable=True))
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('users', 'avatar_hex')
op.alter_column('pinnedmessages', 'user_id',
existing_type=sa.INTEGER(),
nullable=False)
op.alter_column('pinnedmessages', 'message_id',
existing_type=sa.INTEGER(),
nullable=False)
op.alter_column('pinnedmessages', 'chat_id',
existing_type=sa.INTEGER(),
nullable=False)
op.alter_column('pinnedchats', 'chat_id',
existing_type=sa.INTEGER(),
nullable=False)
op.alter_column('pinnedchats', 'user_id',
existing_type=sa.INTEGER(),
nullable=False)
op.create_index('messages_message_idx', 'messages', ['message'], unique=False)
# ### end Alembic commands ###

View file

@ -1,9 +1,7 @@
import smtplib
import random
import string
from pathlib import Path
from PIL import Image
from pydantic import EmailStr

View file

@ -10,8 +10,8 @@ from app.users.chat.shemas import SMessage, SLastMessages, SPinnedMessage, SPinn
from app.users.dao import UserDAO
from app.users.dependencies import get_current_user
from app.users.auth import validate_user_access_to_chat, validate_user_admin, get_user_allowed_chats_id, ADMIN_USER_ID, \
check_verificated_user_with_exc
from app.users.auth import validate_user_access_to_chat, validate_user_admin, get_user_allowed_chats_id, \
ADMIN_USER_ID, check_verificated_user_with_exc
from app.users.models import Users
from app.users.schemas import SCreateInvitationLink, SUserAddedToChat

View file

@ -1,7 +1,4 @@
from datetime import datetime
from sqlalchemy import update, select, insert, and_, func, text
from sqlalchemy.exc import SQLAlchemyError
from app.dao.base import BaseDAO
from app.database import async_session_maker, engine

View file

@ -14,11 +14,12 @@ class Users(Base):
email: Mapped[str]
username: Mapped[str]
hashed_password: Mapped[str]
role: Mapped[int] = mapped_column(server_default=f'0')
role: Mapped[int] = mapped_column(server_default='0')
black_phoenix: Mapped[bool] = mapped_column(server_default='false')
avatar_image: Mapped[str | None] = mapped_column(
server_default='https://images.black-phoenix.ru/static/images/%D1%82%D1%8B%20%D1%83%D0%B6%D0%B5%20%D0%BF%D0%B5%D1%88%D0%BA%D0%B0%20BP.png'
)
avatar_hex: Mapped[str | None] = mapped_column(server_default='#30293f')
date_of_birth: Mapped[date]
date_of_registration: Mapped[date] = mapped_column(server_default=func.now())

View file

@ -104,8 +104,10 @@ async def change_avatar(user_data: SUserAvatar, current_user: Users = Depends(ge
await check_verificated_user_with_exc(user_id=current_user.id)
if not verify_password(user_data.password, current_user.hashed_password):
raise IncorrectPasswordException
if await UserDAO.change_data(current_user.id, avatar_image=user_data.new_avatar_image):
return {'new_avatar_image': user_data.new_avatar_image}
if await UserDAO.change_data(
current_user.id, avatar_image=user_data.new_avatar_image, avatar_hex=SUserAvatar.avatar_hex
):
return {'new_avatar_image': user_data.new_avatar_image, 'avatar_hex': SUserAvatar.avatar_hex}
raise SomethingWentWrongException

View file

@ -57,6 +57,7 @@ class SUserRename(BaseModel):
class SUserAvatar(BaseModel):
password: str
new_avatar_image: str
avatar_hex: str
class SUserPassword(BaseModel):
@ -97,6 +98,7 @@ class SUserName(BaseModel):
class SNewAvatar(BaseModel):
new_avatar_image: str
avatar_hex: str
class SConfirmPasswordRecovery(BaseModel):