# Курсовой проект

Дорабатываем курсовой проект за 3-й курс. В рамках этого курсового нужно сделать:

1. Инструкция по развертыванию инфраструктуры (DevOps)

    - Установка сервера MySql

        Расписать какие есть варианты (локальная железка или виртуальный сервер). Выбрать один из вариантов и обосновать его. 

        Написать инструкцию по развёртыванию выбранного варианта

    - инструкция по настройке подключения десктопного приложения к базе данных (скорее всего придется вынести строку подключения по внешний файл настроек)

    - у кого есть API: написать инструкцию по развертыванию на выбранном сервере

1. Обеспечение безопасности

    - в десктопном приложении сдалать авторизацию по ролям (админ/простой пользователь)
    - скрыть удаление/редактирование для простых пользователей

1. Обеспечение качества

    - разработайте тестовые сценарии
    - реализуйте модульные тесты по разработанным тестовым сценариям






<!-- Курсовой проект служит для закрепления и систематизации знаний и умений **ПМ.05**.

>Допускается командная работа: одна предметная область, общая диаграмма прецедентов, общая ER-диаграмма и база данных. Дальше каждый разрабатывает свою подсистему.

## Что должно быть реализовано

### Минимальные требования ("на троечку")

- бизнес анализ
    - описание предметной области
    - диаграмма прецедентов для всей системы
    - диаграмма последовательности для одного прецедента (выбирает преподаватель после разработки диаграммы прецедентов)
- ER диаграмма
- словарь данных
- скрипт для создания базы данных
- десктопное приложение для администрирования БД
    - авторизация
    - добавление
    - редактирование
    - удаление
    - поиск
    - фильтрация
    - сортировка

### На "хорошо"    

- разработка библиотеки классов (если в предметной области есть какая-то вычислительная задача, то вынести ее в библиотеку)
- написание тестовых сценариев для тестирования библиотеки классов
- реализация модульных тестов по разработанным сценариям

### На "отлично"

- АПИ-сервер
- мобильное приложение (android) или веб-приложение (vue/react), получающее данные через АПИ-сервер (просмотр/заказ) -->


## Важно!!!

USE-case и ER диаграммы рисуются для всей предметной области. 
 
## Методические рекомендации

### Общие положения

Курсовой проект выполняется в виде __приватного__ репозитория на сервере [kolei.ru](https://kolei.ru) или публичного репозитория на общедоступном сервере контроля версий (github, gitlab...). Пояснительная записка располагается в файле `readme.md` и, соответственно, должна быть написана в формате *MarkDown*.

Тема курсового проекта выбирается из списка, либо, по желанию студента. 

### Требования к структуре курсового проекта

* титульный лист.
* содержание;
* введение, в котором раскрываются актуальность и значение темы, формулируются цели и задачи работы, объект, предмет и методы исследования;
* теоретическая часть, в которой содержатся теоретические основы разрабатываемой темы:
    - разработать UseCase-диаграмму для основных пользователей системы. 
        - полную диаграмму в формате PDF положить в репозиторий
        - "свой" кусок картинкой прицепить к пояснительной записке (картинки в *MarkDown* внедряются разметкой: `![<alt>](<имя картинки с относительным путём в вашем репозитории>)`). Например, все свои ресурсы вы храните в подкаталоге `src`, тогда для картинки с названием `erd.png` команда будет выглядеть так: `![ER-диаграмма](./src/erd.png)`
    - разработать спецификацию к UseCase (к 3-м самым важным прецедентам). Формат **MarkDown**
    - разработать диаграмму последовательности для одного прецедента (в формате PDF)
    - проектирование ERD. Необходимо спроектировать максимально полную ERD для предметной области. Обязательна 3 нормальная форма с обеспечением ссылочной целостности.
        - полную диаграмму в формате PDF положить в репозиторий
        - "свой" кусок картинкой прицепить к пояснительной записке
    - разработать словарь данных (MarkDown).
* практическая часть, которая состоит из проектирования, описания его реализации

    - база данных (MYSQL):
        * создание DDL-скрипта для базы данных.

    - разработка (C#)
        * отображение основного списка товаров/услуг с:
            - условной раскраской (по доступности/цене... уточнить у преподавателя);
            - выводом изображений
            - сортировкой (уточнить у преподавателя)
            - фильтрацией (по справочному полю)
            - поиском (по нескольким полям)
            - вычисляемыми полями (по связям)
            - счетчиками общего количества записей и отображаемых

            Пример разметки "списком" есть [тут](https://github.com/kolei/de)

            все действия должны быть "живые", т.е. для фильтрации и поиска не нужно нажимать каких-то специальных кнопок.
            
        * добавление, удаление, редактирование записей списка товаров/услуг в отдельных модальных окнах, где это возможно. Если товар уже продавали (услугу оказывали), то выводить уведомление о невозможности удаления.
        * отображение дополнительного списка (продажи/оказанные услуги)
        * реализовать API для базы данных

    - разработка (мобильное или WEB приложение)
        * реализовать приложение для записи на услугу/заказ товара         

    - тестирование
        * разработать библиотеку классов (реализовать в ней метод для расчета вычисляемого поля в основной таблице)
        * разработать модульные тесты для метода из библиотеки классов (не менее 10)
        * разработка тестовых сценариев для удаления товара/услуги (не менее 5)
        * интеграционные тесты для АПИ
        * для тех, кто делает веб-приложение можно вместо модульных тестов сделать функциональные
    
    - запуск в контейнере
        - база данных
        - апи
        - веб-приложение (у кого есть)
        
* заключение, в котором содержатся выводы и рекомендации относительно возможностей практического применения полученных результатов;
