Skip to content

Releases: sabudilovskiy/timetable_vsu_backend

Последние наработки тут

22 Feb 19:15
Compare
Choose a tag to compare

Не влито в транк, навряд-ли когда-нибудь доделаю, но для истории. Работа проделана до выхода boost.pfr.name, благодаря которому можно сделать более красивое и понятное api. Написал вокруг boost.pfr декларативный способ создания структур, которые можно сериализовать и парсить, а так же использовать в качестве запросов и ответов. Увы приходилось явно писать имя поля, гипотетически можно когда-нибудь переписать.

Примеры:

  1. использование массивов
    https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/utests/openapi/json/parse/basic_array.cpp
  2. написание одного эндпоинта:
    2.1) тип боди: https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/src/models/lesson_filter/type.hpp
    2.2) запросы и ответы: https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/src/views/timetable/declarations.hpp
    2.3) логика самой ручки:
    View: https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/src/views/timetable/view.cpp
  3. Опенапи схема генерируется на старте сервиса и отдаётся в эндпоинте /openapi.
    3.1) Тестируется поведение тут:
    https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/utests/openapi/doc/serialize/basic_path.cpp
    3.2)
    implementation of abstract handler https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/src/openapi/http/handler.hpp
    3.3) test with body and header in response: https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/utests/openapi/http/basic_http_response.cpp
    3.4) test with body, cookie and header in request:
    https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/utests/openapi/http/basic_http_request.cpp
    3.5) full complete impl enums:
    macro to declare: https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/src/openapi/enum/declare.hpp
    3.6) enumerator func to pg:
    https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/src/openapi/enum/enumerator_func.hpp
    3.7) enum to OpenApi Doc:
    https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/src/openapi/doc/enum.hpp
    3.8) generate OpenApi doc in this folder:
    https://github.com/sabudilovskiy/timetable_vsu_backend/tree/new_openapi/src/openapi/doc
    3.9) For example, structures:
    https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/src/openapi/doc/reflective.hpp
    3.10)
    My structures can use additionalProperties: true,
    examples:
    3.11)serialize: https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/utests/openapi/json/serialize/basic_object.cpp#L36
    3.12) parse:
    https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/utests/openapi/json/parse/basic_object.cpp#L59
    3.13) openapi:
    https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/src/openapi/doc/reflective.hpp
    3.14) example of generated openapi schema by my server:
    https://pastebin.com/9vpFZgES
    3.15) This openapi generated from all OpenApiViews and settings in static config:
    https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/configs/static_config.yaml.in#L101
    3.16) impl openapi::types::Array, it can use min, max and uniqueItems as restrictions and user can write it in any order:
    https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/src/openapi/types/array.hpp