<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://course.secsem.ru/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_%282026%29%2F%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_0_%28%D0%B1%D0%BE%D0%BD%D1%83%D1%81%D0%BD%D0%BE%D0%B5%29</id>
	<title>Практикум на ЭВМ (2026)/Задание 0 (бонусное) - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://course.secsem.ru/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_%282026%29%2F%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_0_%28%D0%B1%D0%BE%D0%BD%D1%83%D1%81%D0%BD%D0%BE%D0%B5%29"/>
	<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2026)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_0_(%D0%B1%D0%BE%D0%BD%D1%83%D1%81%D0%BD%D0%BE%D0%B5)&amp;action=history"/>
	<updated>2026-09-26T10:12:19Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2026)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_0_(%D0%B1%D0%BE%D0%BD%D1%83%D1%81%D0%BD%D0%BE%D0%B5)&amp;diff=985&amp;oldid=prev</id>
		<title>Dzeni: Новая страница: «==Формулировка== Вам достался в наследство модуль от старой внутренней системы компании. В архиве есть файл legacy_db.py, где уже частично настроено подключение к базе данных и написано несколько базовых функций поиска.  В базе данных модуля три таблицы, хран...»</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D1%83%D0%BC_%D0%BD%D0%B0_%D0%AD%D0%92%D0%9C_(2026)/%D0%97%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_0_(%D0%B1%D0%BE%D0%BD%D1%83%D1%81%D0%BD%D0%BE%D0%B5)&amp;diff=985&amp;oldid=prev"/>
		<updated>2026-09-26T07:07:37Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «==Формулировка== Вам достался в наследство модуль от старой внутренней системы компании. В архиве есть файл legacy_db.py, где уже частично настроено подключение к базе данных и написано несколько базовых функций поиска.  В базе данных модуля три таблицы, хран...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Формулировка==&lt;br /&gt;
Вам достался в наследство модуль от старой внутренней системы компании. В архиве есть файл legacy_db.py, где уже частично настроено подключение к базе данных и написано несколько базовых функций поиска.&lt;br /&gt;
&lt;br /&gt;
В базе данных модуля три таблицы, хранящие данные о пользователях приложения. Первая таблица &amp;quot;users&amp;quot; имееет следующие колонки:&lt;br /&gt;
* id пользователя (число) - универсальное для каждого пользователя&lt;br /&gt;
* login - имя пользователя (строка)&lt;br /&gt;
* money_amount (число)&lt;br /&gt;
* card_number - (строка) номер его кредитной карты &lt;br /&gt;
* status - статус активен/неактивен (любой тип данных по выбору, главное, чтобы было два различимых значения).&lt;br /&gt;
Вторая таблица &amp;quot;passwords&amp;quot; хранит пароли пользователей, в ней две колонки: id пользователя и собственно пароль. &lt;br /&gt;
Третья таблица &amp;quot;banks&amp;quot; хранит соответствие пользователей и их банков и имеет две колонки: id  и название банка.&lt;br /&gt;
&lt;br /&gt;
Веб-приложение по &amp;#039;/users&amp;#039; отдает страницу со списком активных пользователей. &lt;br /&gt;
Реализована выборка пользователей по login и id. Параметр, по которому должен отбираться пользователь, передается в параметре query string. То есть:&lt;br /&gt;
* по url &amp;quot;/by-login?login=username&amp;quot; выдается страница с данными пользователя с именем &amp;quot;username&amp;quot;&lt;br /&gt;
* по url &amp;quot;/by-id?id=3&amp;quot; выдаются данные пользователя с id=3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ваша задача — доработать этот модуль (нельзя удалять старый код, только добавлять свой).&lt;br /&gt;
&lt;br /&gt;
Реализуйте следующие функции: &lt;br /&gt;
&lt;br /&gt;
* Универсальный живой поиск (/search)&lt;br /&gt;
&lt;br /&gt;
Необходимо найти всех пользователей, у которых строка поиска частично совпадает (LIKE) с их login (параметр поиска передается через query-параметр q).&lt;br /&gt;
Если параметр q пустой или отсутствует, приложение должно выводить топ-5 самых богатых пользователей по значению money_amount.&lt;br /&gt;
&lt;br /&gt;
* Аналитический срез (/analytics)&lt;br /&gt;
&lt;br /&gt;
Запрос на /analytics выводит пользователей, чей баланс (money_amount) строго выше среднего баланса по всей базе данных.&lt;br /&gt;
При этом список должен фильтроваться по статусу, который пользователь передает через query-параметр /analytics?target_status=active.&lt;br /&gt;
Рядом с каждым пользователем в выдаче должн отображаться информация о его банке, полученная «на лету» с помощью JOIN с третьей таблицей.&lt;br /&gt;
&lt;br /&gt;
* Расширение функционала &lt;br /&gt;
&lt;br /&gt;
Добавьте эндпоинт /transfer_status. Он должен принимать список ID через запятую (например, ids=1,3,4) и массово обновлять их status на противоположный одним SQL-запросом.&lt;br /&gt;
&lt;br /&gt;
==Файлы задания==&lt;br /&gt;
[[Файл:Mini-app.zip]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Критерии==&lt;br /&gt;
Чтобы засчитать задание, вы должны прислать ссылку на код своего мини-приложения на почту: OkunevaA@seclab.cs.msu.ru. Если вы используете git, то первый коммит должен содержать файлы из архива, последующие - ваш добавленный код. Приложение должно запускаться и правильно отрабатывать. Автором присланного кода должны быть вы сами, запрещается присылать приложение, сделанное кем-то еще. В своем сообщении или теме письма не забудьте указать по какому поводу пишете (например &amp;quot;Задание по SQL по практикуму на ЭВМ&amp;quot; и ФИО).&lt;br /&gt;
&lt;br /&gt;
==Дедлайн и баллы==&lt;br /&gt;
Те, кто пришлёт работающее и отвечающее критериям приложение до 12:30 26 сентября, получат за задание 120 баллов. (сверх тех 2000 баллов, которые будут даваться за основные задания). Приславшие между 12:30 26 сентября и 14:30 26 сентября получат за задание 80 баллов.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;14:30 26 сентября- крайний срок приёма задания.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Приславшие засчитанное приложение первыми получат дополнительный бонус.&lt;/div&gt;</summary>
		<author><name>Dzeni</name></author>
	</entry>
</feed>