Практикум на ЭВМ (2020)/Бонусное задание

Материал из SecSem Wiki
Перейти к навигации Перейти к поиску

Формулировка

Вам нужно написать маленькое веб-приложение, в котором для хранения данных будет использоваться SQL-база данных. В базе данных должно быть две таблицы, хранящие данные о пользователях приложения. Первая таблица должна называться "users" и иметь следующие колонки:

  • id пользователя (число) - должно быть уникальным для каждого пользователя
  • login - имя пользователя (строка)
  • money_amount (число)
  • card_number - (строка) номер его кредитной карты (кстати, правдоподобные номера карт можно брать тут)
  • status - статус активен/неактивен (любой тип данных по выбору, главное, чтобы было два различимых значения).

Вторая таблица должна хранить пароли пользователей, в ней должно быть две колонки: id пользователя и собственно пароль. Имя этой второй таблицы может быть произвольным. Вместе с кодом приложения должен поставляться скрипт "init-db.sql", который инициализирует эти таблицы, т. е. создает их (CREATE TABLE) и заполняет данными (INSERT). Всего должно быть не меньше 5 пользователей, минимум 3 активных, соответственно, минимум 2 неактивных. У первого активного пользователя должно быть имя "admin". У каждого пользователя в таблице с паролями должен лежать пароль.

  • Веб-приложение должно по url "/users" отдавать страницу со списком АКТИВНЫХ пользователей, на каждой строке списка должен быть id, имя пользователя. Оформить список можно как bullet list или таблицу или как хотите, главное, чтобы данные пользователей были на разных строках и чтобы смотреть было не больно. Данные для списка должны получаться SQL-запросом из базы (SELECT), а не быть вписанными в код вручную, то есть, если добавить в базу еще одного активного пользователя, он должен появиться при следующем заходе на страницу в списке. Определять активный пользователь или нет должен SQL-запрос по значению поля "status".
  • Должна быть выборка пользователей по login и id, данные в ней должны быть такие же как в выборке всех пользователей по "/users". Параметр, по которому должен отбираться пользователь, передается в параметре query string. То есть:
    • по url "/by-login?login=admin" должна выдаваться страница с данными пользователя c именем "admin". Ну и если не "admin" а другое имя, то инфа о пользователе с таким именем, а если такого пользователя не существует, то пусть что угодно происходит (хоть ошибка, хоть пустая страница)
    • по url "/by-id?id=3" должны выдаваться данные пользователя с id=3 и т.д.

На главной странице приложения может быть что угодно, главное, чтобы там была ссылка на "/users", а также либо формы, где можно указать login и id (чтобы потом сделать соответствующий запрос), либо просто ссылки - примеры (например ссылки на url "/by-login?login=admin" и "/by-id?id=3"). База данных может быть любой. Язык программирования/фреймворк/веб-сервер тоже любой. Если совсем не знаете на каком языке писать, возьмите тот на котором написать будет легче/быстрее, например, PHP или Python.

Критерии

Чтобы засчитать задание, вы должны прислать ссылку на код своего мини-приложения на почту: OkunevaA@seclab.cs.msu.ru. К коду обязательно должен прилагаться README, где есть список всех зависимостей (всего, что ваш код использует) и есть инструкция по установке/запуску. Кроме того, обязательно должен присутствовать файл "init-db.sql". Приложение должно запускаться и правильно отрабатывать (отдавать список пользователей из базы). Автором присланного кода должны быть вы сами, запрещается присылать приложение, сделанное кем-то еще. В своем сообщении или теме письма не забудьте указать по какому поводу пишете (например "Задание по SQL по практикуму на ЭВМ" и ФИО).

Дедлайн и баллы

Те, кто пришлёт работающее и отвечающее критериям приложение до 8:00 30 сентября, получат за задание 120 баллов. (сверх тех 2000 баллов, которые будут даваться за основные задания). Приславшие между 8:00 и 20:00 30 сентября получат за задание 80 баллов.

20:00 30 сентября - крайний срок приёма задания.

Приславшие засчитанное приложение первыми получат дополнительный бонус. Также отдельный бонус получит приложение, которое выглядит приятнее всего (но при этом отвечает требованиям)