Для этого проекта я могу помочь с базовой структурой кода, чтобы создать серверную часть с возможностью создания, редактирования и удаления опросов, с учетом требований, которые ты указал. Давай рассмотрим версию с использованием `MySQL` для хранения данных. Мы будем использовать `Node.js` и `Express.js` для создания API и `MySQL` для базы данных.

### Структура проекта

Проект будет включать следующие основные файлы:
- `server.js`: Основной файл сервера.
- `db.js`: Файл для настройки подключения к базе данных.
- `models/surveyModel.js`: Модель для работы с таблицей опросов.
- `routes/surveyRoutes.js`: Роуты для CRUD-операций с опросами.

### Шаги по реализации

#### 1. Установка зависимостей
В папке проекта установим необходимые модули:

```bash
npm init -y
npm install express mysql2
```

#### 2. Настройка подключения к базе данных (`db.js`)

Создадим файл `db.js` для подключения к MySQL.

```javascript
// db.js
const mysql = require('mysql2');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'yourpassword',
database: 'survey_db'
});

connection.connect((err) => {
if (err) throw err;
console.log('Connected to MySQL database');
});

module.exports = connection;
```

#### 3. Модель опроса (`models/surveyModel.js`)

Создадим модель для взаимодействия с таблицей опросов.

```javascript
// models/surveyModel.js
const db = require('../db');

const Survey = {
create: (title, description, callback) => {
const query = 'INSERT INTO surveys (title, description, editable) VALUES (?, ?, ?)';
db.query(query, [title, description, true], callback);
},

update: (id, title, description, callback) => {
const query = 'UPDATE surveys SET title = ?, description = ?, editable = ? WHERE id = ? AND editable = true';
db.query(query, [title, description, false, id], callback);
},

delete: (id, callback) => {
const query = 'DELETE FROM surveys WHERE id = ?';
db.query(query, [id], callback);
},

getAll: (callback) => {
const query = 'SELECT * FROM surveys';
db.query(query, callback);
}

};

module.exports = Survey;
```

#### 4. Роуты для опросов (`routes/surveyRoutes.js`)

Создадим роуты для работы с опросами.

```javascript
// routes/surveyRoutes.js
const express = require('express');
const router = express.Router();
const Survey = require('../models/surveyModel');

// Создать новый опрос
router.post('/create', (req, res) => {
const { title, description } = req.body;
Survey.create(title, description, (err, results) => {
if (err) return res.status(500).json(err);
res.status(201).json({ message: 'Survey created', surveyId: results.insertId });
});
});

// Обновить опрос (доступно только один раз)
router.put('/update/:id', (req, res) => {
const { id } = req.params;
const { title, description } = req.body;
Survey.update(id, title, description, (err, results) => {
if (err) return res.status(500).json(err);
if (results.affectedRows === 0) return res.status(403).json({ message: 'Survey cannot be edited' });
res.json({ message: 'Survey updated' });
});
});

// Удалить опрос
router.delete('/delete/:id', (req, res) => {
const { id } = req.params;
Survey.delete(id, (err, results) => {
if (err) return res.status(500).json(err);
res.json({ message: 'Survey deleted' });
});
});

// Получить все опросы
router.get('/', (req, res) => {
Survey.getAll((err, results) => {
if (err) return res.status(500).json(err);
res.json(results);
});
});

module.exports = router;
```

#### 5. Основной серверный файл (`server.js`)

Создадим основной файл для запуска сервера и подключения роутов.

```javascript
// server.js
const express = require('express');
const app = express();
const surveyRoutes = require('./routes/surveyRoutes');

app.use(express.json());
app.use('/api/surveys', surveyRoutes);

const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
```

#### 6. Создание таблицы `surveys` в базе данных MySQL

Выполни следующий SQL-запрос для создания таблицы:

```sql
CREATE TABLE surveys (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
editable BOOLEAN DEFAULT TRUE
);
```

### Запуск проекта

1. Убедись, что MySQL сервер запущен и база данных настроена.
2. Запусти сервер:

```bash
node server.js
```

Теперь ты можешь тестировать API, используя инструменты вроде Postman или curl для отправки запросов к серверу:

- `POST /api/surveys/create` — создать новый опрос.
- `PUT /api/surveys/update/:id` — обновить опрос (возможно только один раз).
- `DELETE /api/surveys/delete/:id` — удалить опрос.
- `GET /api/surveys` — получить все опросы.

Этот проект представляет базовую структуру, которую можно дорабатывать и настраивать под твои задачи. Удачи на соревнованиях!