Изменил бд и загрузку аватарок
This commit is contained in:
parent
ef418252e2
commit
e2cd40e553
9 changed files with 90 additions and 14 deletions
|
@ -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)
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class SAvatarUrl(BaseModel):
|
||||
image_url: str
|
||||
hex_color: str
|
||||
|
||||
|
||||
class SImageUrl(BaseModel):
|
||||
image_url: str
|
||||
|
|
|
@ -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 ###
|
|
@ -1,9 +1,7 @@
|
|||
import smtplib
|
||||
import random
|
||||
import string
|
||||
from pathlib import Path
|
||||
|
||||
from PIL import Image
|
||||
from pydantic import EmailStr
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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())
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Reference in a new issue