feat: init org thumbnails creation & edition & redesign dash org config page

This commit is contained in:
swve 2024-09-27 11:03:33 +02:00
parent 41a11c5f83
commit aecf03404f
17 changed files with 661 additions and 99 deletions

View file

@ -0,0 +1,30 @@
"""Add thumbnail image to orgs
Revision ID: 040ccb1d456e
Revises: 83b6d9d6f57a
Create Date: 2024-09-27 10:23:50.508031
"""
from typing import Sequence, Union
from alembic import op
import sqlalchemy as sa # noqa: F401
import sqlmodel # noqa: F401
# revision identifiers, used by Alembic.
revision: str = '040ccb1d456e'
down_revision: Union[str, None] = '83b6d9d6f57a'
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.add_column('organization', sa.Column('thumbnail_image', sa.String(), nullable=True))
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('organization', 'thumbnail_image')
# ### end Alembic commands ###

View file

@ -12,6 +12,7 @@ class OrganizationBase(SQLModel):
slug: str
email: str
logo_image: Optional[str]
thumbnail_image: Optional[str]
class Organization(OrganizationBase, table=True):

View file

@ -38,6 +38,7 @@ from src.services.orgs.orgs import (
update_org,
update_org_logo,
update_org_signup_mechanism,
update_org_thumbnail,
)
@ -303,7 +304,7 @@ async def api_update_org_logo(
db_session: Session = Depends(get_db_session),
):
"""
Get single Org by Slug
Update org logo
"""
return await update_org_logo(
request=request,
@ -314,6 +315,26 @@ async def api_update_org_logo(
)
@router.put("/{org_id}/thumbnail")
async def api_update_org_thumbnail(
request: Request,
org_id: str,
thumbnail_file: UploadFile,
current_user: PublicUser = Depends(get_current_user),
db_session: Session = Depends(get_db_session),
):
"""
Update org thumbnail
"""
return await update_org_thumbnail(
request=request,
thumbnail_file=thumbnail_file,
org_id=org_id,
current_user=current_user,
db_session=db_session,
)
@router.get("/user/page/{page}/limit/{limit}")
async def api_user_orgs(
request: Request,

View file

@ -34,9 +34,10 @@ from src.db.organizations import (
OrganizationRead,
OrganizationUpdate,
)
from src.services.orgs.logos import upload_org_logo
from fastapi import HTTPException, UploadFile, status, Request
from src.services.orgs.uploads import upload_org_logo, upload_org_thumbnail
async def get_organization(
request: Request,
@ -421,6 +422,42 @@ async def update_org_logo(
return {"detail": "Logo updated"}
async def update_org_thumbnail(
request: Request,
thumbnail_file: UploadFile,
org_id: str,
current_user: PublicUser | AnonymousUser,
db_session: Session,
):
statement = select(Organization).where(Organization.id == org_id)
result = db_session.exec(statement)
org = result.first()
if not org:
raise HTTPException(
status_code=404,
detail="Organization not found",
)
# RBAC check
await rbac_check(request, org.org_uuid, current_user, "update", db_session)
# Upload logo
name_in_disk = await upload_org_thumbnail(thumbnail_file, org.org_uuid)
# Update org
org.thumbnail_image = name_in_disk
# Complete the org object
org.update_date = str(datetime.now())
db_session.add(org)
db_session.commit()
db_session.refresh(org)
return {"detail": "Thumbnail updated"}
async def delete_org(
request: Request,

View file

@ -16,3 +16,18 @@ async def upload_org_logo(logo_file, org_uuid):
)
return name_in_disk
async def upload_org_thumbnail(thumbnail_file, org_uuid):
contents = thumbnail_file.file.read()
name_in_disk = f"{uuid4()}.{thumbnail_file.filename.split('.')[-1]}"
await upload_content(
"thumbnails",
"orgs",
org_uuid,
contents,
name_in_disk,
)
return name_in_disk