Releases: sabudilovskiy/timetable_vsu_backend
Releases · sabudilovskiy/timetable_vsu_backend
Последние наработки тут
Не влито в транк, навряд-ли когда-нибудь доделаю, но для истории. Работа проделана до выхода boost.pfr.name, благодаря которому можно сделать более красивое и понятное api. Написал вокруг boost.pfr декларативный способ создания структур, которые можно сериализовать и парсить, а так же использовать в качестве запросов и ответов. Увы приходилось явно писать имя поля, гипотетически можно когда-нибудь переписать.
Примеры:
- использование массивов
https://github.com/sabudilovskiy/timetable_vsu_backend/blob/new_openapi/utests/openapi/json/parse/basic_array.cpp - написание одного эндпоинта:
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 - Опенапи схема генерируется на старте сервиса и отдаётся в эндпоинте /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