Add pagination and build.dockerfile

This commit is contained in:
2021-12-03 23:27:20 +03:00
parent 27f35df97a
commit 19cc8b5eea
4 changed files with 45 additions and 4 deletions

35
docker/build.dockerfile Normal file
View File

@@ -0,0 +1,35 @@
FROM python:3.10-slim as build-image
RUN apt-get update \
&& apt-get install --no-install-recommends -y gcc build-essential python3-dev libpq-dev libffi-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /root/venv
COPY ./requirements.txt /root/venv/
ENV VENV_PATH=/opt/venv
RUN python -m venv $VENV_PATH \
&& . /opt/venv/bin/activate \
&& pip install -r requirements.txt --no-cache-dir
FROM python:3.10-slim as runtime-image
RUN apt-get update \
&& apt-get install --no-install-recommends -y python3-dev libpq-dev libffi-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY ./src/ /app/
ENV VENV_PATH=/opt/venv
COPY --from=build-image $VENV_PATH $VENV_PATH
ENV PATH="$VENV_PATH/bin:$PATH"
COPY ./scripts/start_production.sh /root/
EXPOSE 8080
CMD bash /root/start_production.sh

View File

@@ -3,6 +3,6 @@ fastapi-pagination
pydantic pydantic
alembic alembic
ormar ormar
uvicorn uvicorn[standart]
asyncpg asyncpg
psycopg2 psycopg2

View File

@@ -0,0 +1,3 @@
cd /app
alembic -c ./app/alembic.ini upgrade head
uvicorn main:app --host="0.0.0.0" --port="8080"

View File

@@ -1,4 +1,7 @@
from fastapi import APIRouter, HTTPException, status from fastapi import APIRouter, HTTPException, status, Depends
from fastapi_pagination import Page, Params
from fastapi_pagination.ext.ormar import paginate
from app.serializers import UserCreateOrUpdate, UserDetail, LanguageDetail from app.serializers import UserCreateOrUpdate, UserDetail, LanguageDetail
from app.models import User, Language from app.models import User, Language
@@ -13,9 +16,9 @@ users_router = APIRouter(
) )
@users_router.get("/", response_model=list[UserDetail]) @users_router.get("/", dependencies=[Depends(Params)], response_model=Page[UserDetail])
async def get_users(): async def get_users():
return await User.objects.select_related("allowed_langs").all() return await paginate(User.objects.select_related("allowed_langs"))
@users_router.get("/{user_id}", response_model=UserDetail) @users_router.get("/{user_id}", response_model=UserDetail)