Pridan nginx pro servirovani statickych souboru, uprava fotek

This commit is contained in:
Michal Kváček
2023-07-10 08:12:20 +02:00
parent f8245492b9
commit 208d51bbc2
5 changed files with 48 additions and 23 deletions
+7
View File
@@ -0,0 +1,7 @@
server {
listen 8999;
listen [::]:8999;
root /app/uploads;
gzip_static on;
}
+9
View File
@@ -17,5 +17,14 @@ services:
- 8000:8000
volumes:
- .:/app
nginx:
image: nginx:alpine
restart: always
volumes:
- ./config/nginx.dev.yml:/etc/nginx/conf.d/app-dev.conf
- ./uploads:/app/uploads
ports:
- "8999:8999"
volumes:
db-data: { }
+1 -3
View File
@@ -128,6 +128,4 @@ class EditFlightMutation:
@strawberry.mutation
async def edit_flight(self, info, id: int, input: EditFlightInput) -> Flight:
input_data = input.to_dict()
return await models.Flight.update(info.context.db, id=id, data=input_data)
return await models.Flight.update(info.context.db, id=id, data=input.to_dict())
+30 -18
View File
@@ -4,13 +4,17 @@ from sqlalchemy import select
from strawberry.file_uploads import Upload
from database import models
from graphql_schema.sqlalchemy_to_strawberry_type import strawberry_sqlalchemy_type, strawberry_sqlalchemy_input
from upload_utils import get_public_url, handle_file_upload
from upload_utils import get_public_url, handle_file_upload, delete_file
@strawberry_sqlalchemy_type(models.Photo)
class Photo:
url: str = strawberry.field(resolver=lambda root: get_public_url(root.filename))
thumbnail_url: str = strawberry.field(resolver=lambda root: get_public_url(f"thumbs/{root.filename}"))
url: str = strawberry.field(
resolver=lambda root: get_public_url(f"photos/{root.flight_id}/{root.filename}")
)
thumbnail_url: str = strawberry.field(
resolver=lambda root: get_public_url(f"photos/{root.flight_id}/{root.filename}") # TODO: doplnit thumb!
)
def get_base_query(user_id: int):
@@ -21,6 +25,10 @@ def get_base_query(user_id: int):
)
def get_photo_basepath(flight_id: int) -> str:
return f"/app/uploads/photos/{flight_id}"
@strawberry.type
class PhotoQueries:
@strawberry.field
@@ -37,8 +45,7 @@ class UploadPhotoMutation:
@strawberry.mutation
async def upload_photo(self, info, input: UploadPhotoInput) -> Photo:
photos_dest = f"/app/uploads/photos/{input.flight_id}/"
filename = await handle_file_upload(input.photo, photos_dest)
filename = await handle_file_upload(input.photo, get_photo_basepath(input.flight_id))
# todo: udelat nahled do thumbs slozky
@@ -55,27 +62,32 @@ class UploadPhotoMutation:
@strawberry.type
class EditPhotoMutation:
@strawberry_sqlalchemy_input(models.Photo, exclude_fields=[], all_optional=True)
@strawberry_sqlalchemy_input(models.Photo, exclude_fields=["id"], all_optional=True)
class EditPhotoInput:
pass
@strawberry.mutation
async def update_photo(self, info, input: EditPhotoInput) -> Photo:
async def edit_photo(self, info, id: int, input: EditPhotoInput) -> Photo:
query = get_base_query(info.context.user_id)
photo = info.context.db.scalars(query.filter(models.Photo.id == input.id))
photo = (await info.context.db.scalars(query.filter(models.Photo.id == id))).one()
update_data = input.to_dict()
photo.update(**update_data)
return photo
return await models.Photo.update(info.context.db, obj=photo, data=input.to_dict())
@strawberry.type
class DeletePhotoMutation:
@strawberry.input
class DeletePhotoInput:
id: int
@strawberry.mutation
async def delete_photo(self, info, input: DeletePhotoInput) -> Photo:
pass
async def delete_photo(self, info, id: int) -> Photo:
query = get_base_query(info.context.user_id)
photo = (await info.context.db.scalars(query.filter(models.Photo.id == id))).one()
base_path = get_photo_basepath(photo.flight_id)
try:
delete_file(f"{base_path}/{photo.filename}")
# TODO: odstranit nahledy
except Exception as e:
print("ERROR", e)
await info.context.db.delete(photo)
return photo
+1 -2
View File
@@ -1,12 +1,11 @@
import os
import uuid
from typing import Optional
from strawberry.file_uploads import Upload
def get_public_url(filename: Optional[str]):
return f"http://localhost:8000/uploads/{filename}" if filename else None
return f"http://localhost:8999/{filename}" if filename else None
def check_directories(path: str):