{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "784660d5",
   "metadata": {},
   "source": [
    "# 22-16 · Формируем API-ответ\n",
    "\n",
    "Практика к разделу [«HTTP API: обмен данными между программами»](../../site/chapters/glava-22/22-16-api.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1e42b77a",
   "metadata": {},
   "source": [
    "## Цель\n",
    "\n",
    "Написать чистую функцию, которая превращает внутреннее представление задачи в словарь, готовый для API-ответа — без Flask, чистой логикой."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbf423d5",
   "metadata": {},
   "source": [
    "## Рабочий пример"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "906ae03d",
   "metadata": {},
   "outputs": [],
   "source": [
    "def zadacha_dlya_api(id_, title, done):\n",
    "    return {\"id\": id_, \"title\": title, \"done\": bool(done)}\n",
    "\n",
    "\n",
    "zapis_iz_bazy = (1, \"Купить хлеб\", 0)   # так вернёт sqlite3.Row/tuple\n",
    "otvet = zadacha_dlya_api(*zapis_iz_bazy)\n",
    "print(otvet)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "25867d18",
   "metadata": {},
   "source": [
    "## Проверка результата"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7bea3390",
   "metadata": {},
   "outputs": [],
   "source": [
    "assert otvet == {\"id\": 1, \"title\": \"Купить хлеб\", \"done\": False}\n",
    "assert otvet[\"done\"] is False   # bool, а не 0 — так короче JSON-ответ\n",
    "print(\"Верно: числовой флаг из базы превращён в настоящий bool для API-ответа.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ba9b7e43",
   "metadata": {},
   "source": [
    "## Задание ★★ Самостоятельная задача\n",
    "\n",
    "Напишите функцию `spisok_dlya_api(zapisi)`, которая применяет `zadacha_dlya_api()` к списку кортежей и возвращает список словарей."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e79c462f",
   "metadata": {},
   "outputs": [],
   "source": [
    "def spisok_dlya_api(zapisi):\n",
    "    return [zadacha_dlya_api(*z) for z in zapisi]\n",
    "\n",
    "\n",
    "rezultat = spisok_dlya_api([(1, \"A\", 1), (2, \"B\", 0)])\n",
    "assert rezultat == [{\"id\": 1, \"title\": \"A\", \"done\": True}, {\"id\": 2, \"title\": \"B\", \"done\": False}]\n",
    "print(\"Верно:\", rezultat)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Cartesian Python 3.14",
   "language": "python",
   "name": "cartesian-python314"
  },
  "language_info": {
   "name": "python",
   "version": "3.14.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
