Skip to content

Commit 9968570

Browse files
committed
update finish
1 parent 4554fb9 commit 9968570

File tree

20 files changed

+104
-143
lines changed

20 files changed

+104
-143
lines changed

.env.dist

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
APP_TITLE=
2+
APP_VERSION=
3+
APP_DESCRIPTION=
14
APP_API_PREFIX=
25
APP_SECRET_KEY=
36

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
### app - Backend FastAPI
44

5+
#### Шаблон для написания backend-приложений
6+
57
# Настройка
68

79
### Настройка происходит в файле .env его нет в репозитории, т.к. он конфиденциален, но я предоставил файл .env.dist создайте на его основе файл .env и проведите все необходимые настройки.

app/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77
from app import api
88
from app.core import settings
99

10-
app = FastAPI(openapi_url=f"{settings.APP_API_PREFIX}/openapi.json")
10+
app = FastAPI(
11+
title=settings.APP_TITLE,
12+
version=settings.APP_VERSION,
13+
description=settings.APP_DESCRIPTION,
14+
openapi_url=f"{settings.APP_API_PREFIX}/openapi.json"
15+
)
1116

1217
app.include_router(api.api_router, prefix=settings.APP_API_PREFIX)

app/api/deps.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,21 @@ async def get_db() -> Database:
1515

1616

1717
async def get_current_user(
18-
short_token: str = Header(),
19-
db: Database = Depends(get_db),
18+
short_token: str = Header(),
19+
db: Database = Depends(get_db),
2020
) -> models.User:
2121
payload = security.tkn_manager.decode_short_token(short_token)
22-
if not (user := await db.user.get(payload.get("id"))):
22+
if not (user := await db.user.read(payload.get("id"))):
2323
raise HTTPException(
2424
status_code=status.HTTP_401_UNAUTHORIZED, detail="User not found"
2525
)
26-
2726
return user
2827

2928

30-
async def staff_access(
31-
user: models.User = Depends(get_current_user),
29+
async def is_superuser(
30+
user: models.User = Depends(get_current_user),
3231
) -> None:
33-
if not user.staff:
32+
if not user.is_superuser:
3433
raise HTTPException(
3534
status_code=status.HTTP_403_FORBIDDEN,
3635
detail="You do not have access to this section",

app/api/endpoints/tokens/auth.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,13 @@
1212
@router.post("/auth/", response_model=models.AuthToken)
1313
async def new_auth_token(data: models.UserCreate, db: Database = Depends(deps.get_db)):
1414
"""
15-
Получить токен аутентификации:
16-
17-
- **email**: Email-пользователя
18-
- **password**: Password-Пользователя
15+
Получить токен аутентификации
1916
"""
2017
if not (user := await db.user.get_by_email(data.email)):
2118
raise exps.USER_NOT_REGISTERED
2219

2320
if not pwd_manager.verify_password(data.password, user.password):
2421
raise exps.USER_INCORRECT_PASSWORD
2522

26-
auth_token = tkn_manager.create_auth_token({"id": user.id})
23+
auth_token = tkn_manager.create_auth_token({"id": str(user.id)})
2724
return models.AuthToken(auth_token=auth_token)

app/api/endpoints/tokens/pair.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
@router.post("/pair/", response_model=models.PairTokens)
1010
async def new_pair_tokens(data: models.AuthToken):
1111
"""
12-
Получить парные токены:
13-
14-
- **auth_token**: Токен аутентификации
12+
Получить парные токены
1513
"""
1614
payload = tkn_manager.decode_auth_token(data.auth_token)
1715
long_token = tkn_manager.create_long_token(payload)

app/api/endpoints/tokens/refresh.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,10 @@ async def refresh_short_token(
1414
data: models.LongToken, db: Database = Depends(deps.get_db)
1515
):
1616
"""
17-
Обновить короткий токен:
18-
19-
- **long_token**: Длинный токен
17+
Обновить короткий токен
2018
"""
2119
payload = tkn_manager.decode_long_token(data.long_token)
22-
if not await db.user.get(payload.get("id")):
20+
if not await db.user.read(payload.get("id")):
2321
raise exps.USER_NOT_FOUND
2422
short_token = tkn_manager.create_short_token(payload)
2523
return models.ShortToken(short_token=short_token)

app/api/endpoints/users/create.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,13 @@
1616
@router.post("/", response_model=models.UserRead)
1717
async def create(data: models.UserCreate, db: Database = Depends(deps.get_db)):
1818
"""
19-
Создать нового пользователя:
20-
21-
- **id**: ID-пользователя
22-
- **role**: Role-Пользователя
23-
- **email**: Email-Пользователя
19+
Создать нового пользователя
2420
"""
2521

2622
if await db.user.get_by_email(data.email):
2723
raise exps.USER_EXISTS
2824

29-
hash_password = pwd_manager.hash_password(data.password)
30-
user = await db.user.new(data.email, hash_password)
31-
await db.session.commit()
25+
data.password = pwd_manager.hash_password(data.password)
26+
model = models.User(**data.model_dump())
27+
user = await db.user.create(model)
3228
return user

app/api/endpoints/users/read.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,6 @@
1313
@router.get("/", response_model=models.UserRead)
1414
async def read(user: models.User = Depends(deps.get_current_user)):
1515
"""
16-
Получить информацию о пользователе:
17-
18-
- **id**: ID-пользователя
19-
- **staff**: Персонал ли
20-
- **email**: Email-Пользователя
16+
Получить информацию о пользователе
2117
"""
2218
return user

app/core/security/token_manager/token_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def expand_payload(cls, token_type: TokenType, payload: dict, minutes: int) -> d
3333
@classmethod
3434
def validate_payload(cls, token_type: TokenType, payload: dict) -> None:
3535
exp: float = payload.get("exp")
36-
if not (datetime.fromtimestamp(exp) > datetime.now()):
36+
if not (exp > datetime.now().timestamp()):
3737
raise exps.TOKEN_EXPIRED
3838
if payload.get("token_type") != token_type.value:
3939
raise exps.TOKEN_INVALID_TYPE

0 commit comments

Comments
 (0)