Техническое задание (ТЗ) для начинающего full-stack разработчика
Название проекта: "Список задач" (To-Do List)
Описание проекта
Необходимо разработать простое веб-приложение, которое позволяет пользователю:

Добавлять задачи в список.
Просматривать список всех задач.
Отмечать задачи как выполненные.
Удалять задачи.
Приложение должно иметь бэкенд для хранения данных в базе PostgreSQL и фронтенд для взаимодействия с пользователем.

Требования к проекту
1. Технологический стек
Бэкенд:
Язык программирования: Python.
Фреймворк: Flask.
База данных: PostgreSQL.
ORM (опционально): SQLAlchemy (для упрощения работы с базой данных).
Фронтенд:
HTML для структуры страниц.
CSS для стилизации (можно использовать простые стили или фреймворк, например, Bootstrap).
JavaScript для взаимодействия с бэкендом (например, через Fetch API).
Дополнительно:
Использовать виртуальное окружение Python (venv) для изоляции зависимостей.
Хранение данных в базе данных PostgreSQL.
2. Функциональные требования
Приложение должно предоставлять следующий функционал:

Добавление задачи:
Пользователь вводит название задачи в текстовое поле и нажимает кнопку "Добавить".
Задача сохраняется в базе данных.
Просмотр списка задач:
На главной странице отображается список всех задач с их статусом (выполнена/не выполнена).
Отметка задачи как выполненной:
Пользователь может нажать на задачу (или кнопку рядом с ней), чтобы отметить её как выполненную.
Статус задачи обновляется в базе данных.
Удаление задачи:
Пользователь может удалить задачу, нажав на кнопку "Удалить" рядом с задачей.
Задача удаляется из базы данных.
3. Нефункциональные требования
Приложение должно быть простым и интуитивно понятным.
Код должен быть структурирован и содержать минимальные комментарии для пояснения логики.
База данных должна содержать одну таблицу tasks с полями:
id (уникальный идентификатор, автоинкремент).
title (название задачи, строка).
completed (статус выполнения, булево значение: True — выполнена, False — не выполнена).
4. Структура проекта
Рекомендуемая структура проекта:


todo_app/
│
├── static/
│   ├── css/
│   │   └── style.css        # Стили для фронтенда
│   └── js/
│       └── script.js        # Логика фронтенда (взаимодействие с API)
│
├── templates/
│   └── index.html           # Главная страница приложения
│
├── app.py                   # Основной файл бэкенда (Flask)
├── models.py                # Модели базы данных (если используется SQLAlchemy)
├── requirements.txt         # Список зависимостей
└── README.md                # Описание проекта и инструкция по запуску
Этапы разработки
1. Настройка окружения
Установить Python и PostgreSQL на локальной машине.
Создать виртуальное окружение:

python -m venv venv
source venv/bin/activate  # Для Linux/Mac
venv\Scripts\activate     # Для Windows
Установить зависимости:

pip install flask psycopg2-binary sqlalchemy
Создать файл requirements.txt:

pip freeze > requirements.txt
Создать базу данных в PostgreSQL:

CREATE DATABASE todo_app;
2. Разработка бэкенда
Создать Flask-приложение в файле app.py.
Настроить подключение к PostgreSQL (использовать psycopg2 или SQLAlchemy).
Создать таблицу tasks в базе данных:

CREATE TABLE tasks (
    id SERIAL PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    completed BOOLEAN DEFAULT FALSE
);
Реализовать API-эндпоинты:
GET /api/tasks — получить список всех задач.
POST /api/tasks — добавить новую задачу (передаётся JSON с полем title).
PUT /api/tasks/<id> — обновить статус задачи (передаётся JSON с полем completed).
DELETE /api/tasks/<id> — удалить задачу.
Пример кода для app.py:


from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# Настройка подключения к PostgreSQL
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://username:password@localhost/todo_app'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app) сделай без sql alchemy