Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 25 additions & 6 deletions fast_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ def get_desk_place(database, service_id, ticket):

@app.get("/")
async def root():
"""
Не понятно для чего этот метод
Если делаешь заглушку, то тогда можешь выводить какую-то статистику по кол-ву услуг, касс, талончиков
чтобы метод нес какую-то пользу
"""
return {"message": "Выберите услугу"}


Expand All @@ -48,6 +53,13 @@ async def get_service_info(service_id: int, database=Depends(get_database)):

@app.post("/services/{service_id}/confirm/")
async def get_in_queue(service_id: int, database=Depends(get_database)):
"""
Название метода совсем не дает понять что он делает.
Если мы выдаем талон на услугу то надо так и написать
/tickets/new/ а в тело передовать информацию об услуге (и возможно что-то еще)

не понятно почему талончик только один и как он помещается в очередь
"""
try:
ticket = database.ticket
service = database.get_service(service_id)
Expand All @@ -60,12 +72,15 @@ async def get_in_queue(service_id: int, database=Depends(get_database)):
return {"message": "Все кассы закрыты"}
return {"place": ticket.queue_place, "service": ticket.service}


#точка входа не по REST
@app.get("/desk_info/")
async def get_desk_info(database=Depends(get_database)):
"""
Мне тут не хватает информации о том кто стоит в очередь в эту кассу
"""
return database.get_desk_info()


#точка входа не по REST
@app.post("/{desk_id}/done/")
async def go_to_next_ticket(desk_id: int, database=Depends(get_database)):
queue = database.get_desk(desk_id).queue
Expand All @@ -76,7 +91,7 @@ async def go_to_next_ticket(desk_id: int, database=Depends(get_database)):
database.get_desk(desk_id).in_service = None
return {"ticket": database.get_desk(desk_id).in_service}


#точка входа не по REST
@app.post("/{desk_id}/close/}")
async def close_desk(desk_id: int, database=Depends(get_database)):
try:
Expand All @@ -88,31 +103,35 @@ async def close_desk(desk_id: int, database=Depends(get_database)):
queue.clear()
except ValueError:
return {"message": "Все кассы закрыты"}
# тут в сообщении можно добавить какая конкретно касса закрыта
return {"message": "Касса закрыта"}


#точка входа не по REST
@app.post("/{desk_id}/open/")
async def open_desk(desk_id: int, database=Depends(get_database)):
database.get_desk(desk_id).is_open = True
return {"message": "Касса открыта"}


#точка входа не по REST
@app.post("/new_service/")
async def add_new_service(service: Service, desk_keys: List[int],
database=Depends(get_database)):
service_key = database.get_new_service_key()
database.services[service_key] = service
for desk_key in desk_keys:
database.desks[desk_key].services.append(service_key)
# тут надо вернуть сам созданный объект, можно и с сообщением об успехе
return {"message": "Сервис успешно добавлен"}


#точка входа не по REST
@app.post("/new_desk/")
async def add_new_desk(desk: Desk, database=Depends(get_database)):
desk_key = database.get_new_desk_key()
database.desks[desk_key] = desk
# тут надо вернуть сам созданный объект, можно и с сообщением об успехе
return {"message": "Касса успешно добавлена"}


if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
uvicorn.run(app, host="127.0.0.1", port=8000)
1 change: 1 addition & 0 deletions fast_api_db.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class Database:
queue=[],
)
}
# почему талончик только один?
ticket = Ticket(
queue_place=0,
)
Expand Down
7 changes: 7 additions & 0 deletions models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from typing import List, Union
# Хорошо что используешь pydantic
from pydantic import BaseModel


Expand All @@ -20,7 +21,13 @@ class Config:
}
}

"""
Я не поняла назначение этого класса
Предполагается что мы заказываем талон на услугу,
генерируем его номер (в зависимости от услуги) и талон помещаем в очередь конкретной кассы

Помещать в очередь можно доверить какому-нибудь классу-менеджеру
"""
class Ticket(BaseModel):
queue_place: int
service: Union[str, None] = None
Expand Down
1 change: 0 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,5 @@ sniffio==1.3.0
starlette==0.20.4
typing_extensions==4.3.0
uvicorn==0.18.3
uvloop==0.17.0
watchfiles==0.17.0
websockets==10.3
23 changes: 23 additions & 0 deletions ОБРАТНАЯ СВЯЗЬ.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
* разделение на модули - ОК
* структура API - надо переделать по REST.
Для каждой сущности надо сделать отдельную точку входа.
Т.е. для кассы
/desks/...

GET DELETE /desks/<id>
GET /desks/ - Для общего списка
POST /desks/close/<id>
POST /desks/open/<id>
POST /desks/new/

Т.е. для услуг
/services/...

POST /services/new/
GET DELETE /services/<id>
GET /services/

* не хватает описания структуры и как она работает
* хотелось бы увидеть примеры работы (можно добавить в README)

Остальное - в комментариях к коду