Note
Этот финальный проект точно решаемый
Вам нужно создать приложение для работы с опросами, используя любую реляционную базу данных (на курсе была PostgreSQL), а также телеграмм, как посредник между клиентом (конечным пользователем) и программой (сервером).
- Приложение должно иметь разделение на админов (набор telegram IDов) и простых пользователей (всех остальных)
- Приложение должно использовать состояния
- Приложение должно иметь как минимум две связных таблички (чтобы в коде были не просто select/update/insert, а ещё и join). Вместо написания "сырых" sql запросов можно использовать какую-нибудь ORM, например (https://www.sqlalchemy.org/)
- При попытке пользователя ответить на вопрос он должен получать гарантированно уникальный вопрос (т.е. такой вопрос, на который он ещё не отвечал)
| Админы | Обычные пользователи | |
|---|---|---|
| проходят опрос | + | + |
| смотрят личную статистику | + | + |
| смотрят общую статистику | + | - |
| создают вопрос | + | - |
| удаляют вопрос | + | - |
| id(bigint) | question_text(varchar) | publish_date(timestamp) |
|---|---|---|
| 1 | Во всех ли городах России есть вечный огонь? | 2024-01-29T03:00:00Z |
| 2 | Вам нравится ваша школа? | 2024-02-21T13:00:00Z |
| id(bigint) | choice_text(varchar) | votes(integer) | question_id(bigint) |
|---|---|---|---|
| 1 | Да | 15 | 1 |
| 2 | Нет | 2 | 1 |
| 3 | Не знаю | 5 | 1 |
| 4 | Да, очень | 7 | 2 |
| 5 | Нет | 8 | 2 |
| id(bigint) | tg_user_id(integer) | question_id(bigint) | choice_id(bigint) |
|---|---|---|---|
| 1 | 228 | 1 | 1 |
| 2 | 228 | 3 | 2 |
| 3 | 228 | 2 | 4 |
| 4 | 1337 | 1 | 5 |
| 5 | 1337 | 3 | 1 |
| 6 | 1337 | 2 | 1 |
Жесткий дисклеймер. Это всё лишь пожелания, отходить от них можно, просто так будет чуть больше ясности что хочется видеть в результате :)
- Любой пользователь
- Пользователь жмет на кнопку "прохождение опроса" (или аналогичную ей)
- Пользователь получает вопрос [ вопрос обязательно должен быть опубликованным, мы же не из будующего :) ], ответ на который он ещё не давал, с вариантами ответа в тектовом виде и инлайн клавиатуру под сообщением
- Пользователь должен выбрать вариант ответа либо инлайн клавиатурой, либо напечатав и отправив номер ответа сообщением в ответ
Учтенный ответ пользователя
- Любой пользователь
- Пользователь жмет на кнопку "получить личную статистику" (или аналогичную ей)
Пользователь получает в ответном сообщении личную статистику по опросам
Примерный вывод
Вопрос 1: Во всех ли городах Росиии есть вечный огонь? -- Да
Вопрос 2: Вам нравится ваша школа? -- Да, очень
...
- Админ
- Админ жмет на кнопку "создать вопрос" (или аналогичную ей)
- После чего админ вводит сам вопрос
- Следующим сообщением админ отправляет список ответов. Каждый новый ответ на новой строке
- Вводит время публикации опроса
publish_date
В базу добавился новый вопрос
- Админ
- Админ жмет на кнопку "удалить вопрос" (или аналогичную ей)
- Админу отправляется список вопросов и клавиатура с номерами вопросов
- Админ должен выбрать номер вопроса либо инлайн клавиатурой, либо напечатав и отправив номер вопроса сообщением в ответ
Вопрос с его вариантами ответа, статистика всех пользователей, ответивших на этот вопрос с введенным номером удаляется из базы
- Админ
- Админ жмет на кнопку "получить общую статистику" (или аналогичную ей)
Админ получает в ответном сообщении общую статистику по опросам
Примерный вывод
Вопрос 1: Во всех ли городах России есть вечный огонь?
Приняло участие: 20 человек
Ответы:
- Да -- 15
- Нет -- 2
- Не знаю -- 5
Вопрос 2: Вам нравится ваша школа?
Приняло участие: 19 человек
Ответы:
- Да, очень -- 7
- Нет -- 8