Евгений Колесников 11 месяцев назад
Родитель
Сommit
e73da3e0b9
6 измененных файлов с 77 добавлено и 0 удалено
  1. BIN
      data/api_info.pdf
  2. 51 0
      data/module4.md
  3. BIN
      data/ТестКейс.docx
  4. 1 0
      readme.md
  5. BIN
      solution/module4_01.png
  6. 25 0
      solution/server.py

BIN
data/api_info.pdf


+ 51 - 0
data/module4.md

@@ -0,0 +1,51 @@
+# Модуль № 4: Осуществление интеграции программных модулей
+
+## Текст задания
+
+Для проверки данных от клиентов разработайте приложение, которое позволит провести валидацию на корректность данных. Результат проверки необходимо фиксировать в документе [ТестКейс.docx](./ТестКейс.docx).
+
+Сначала заполните в документе `ТестКейс.docx` столбец "Действие" и "Ожидаемый результат" используя предоставленный текстовый редактор. Добавьте закладки в столбец "Результат". Необходимо провести валидацию ФИО клиента на вхождение запрещенных символов. Проверьте два любых критерия.
+
+~~Для эмуляции отправки данных от клиента Вам необходимо запустить приложение `TransferSimulator.exe`.~~ Методы эмулятора описаны в файле [api_info.pdf](./api_info.pdf).
+
+Я написал простенький эмулятор на питоне [server.py](../solution/server.py). Возвращается ФИО в которое случайным образом добавляется "мусор".
+
+Макет формы представлен на рисунке.
+
+![](../solution/module4_01.png)
+
+При нажатии на кнопку "Получить данные" данные загружаются с эмулятора и отображаются на форме.
+
+После нажатия на кнопку "Отправить результат теста" происходит проверка данных по заполненному шаблону, и результат проверки отображается на форме и в соответствующей строке таблицы в столбце "Результат".
+
+**Важно**: Разрабатывать API Вам не нужно. Используйте предоставленный API.
+
+Необходимые приложения (находятся в каталоге `data` этого репозитория): `api_info.pdf`,`TransferSimulator.exe`, `ТестКейс.docx`, `Требования к разработке.pdf`, `Настройка ПК для эмулятора.pdf`
+
+## Решение
+
+Задание, ИМХО, написано криво. Своими словами: Вы должны написать оконное приложение с двумя кнопками (скрин есть выше). При клике на кнопку "Получить данные" вы должны получить данные из АПИ (http сервер прилагается) и показать полученные данные в окне (справа от кнопки). При клике на кнопку "Отправить результаты теста" Вы должны вызвать **свой** метод проверки и результат проверки вывести справа от кнопки. Потом руками переписать полученные данные в приложенный файл `ТестКейс.docx`.
+
+1. Получение данных из АПИ
+
+    Код взят из чата "как есть", надо проверить
+
+    ```cs
+    // обработчик клика на кнопку
+    private async void GetFIOFromApi(object sender, RoutedEventArgs e)
+    {
+        HttpClient client = new HttpClient();
+        var resp = await client.GetAsync("http://localhost:4444");
+        var stringResp = await resp.Content.ReadAsStringAsync();
+
+        JObject jObject = JObject.parse(stringResp);
+
+        FullNameTextButton.Text = JObject["value"].ToString();
+    }
+    ```
+
+1. Проверка валидности ФИО
+
+    Вариантов может быть несколько: либо создать массив запрещённых символов и перебрать их в цикле сравнив с ФИО из предыдущего пункта, либо написать регулярку
+
+    Сделайте самостоятельно

BIN
data/ТестКейс.docx


+ 1 - 0
readme.md

@@ -3,3 +3,4 @@
 1. [Модуль № 1: Проектирование и разработка информационных систем](./data/module1.md)
 1. [Модуль № 2: Соадминистрирование баз данных и серверов](./data/module2.md)
 1. [Модуль № 3: Проектирование и разработка информационных систем](./data/module3.md)
+1. [Модуль № 4: Осуществление интеграции программных модулей](./data/module4.md)

BIN
solution/module4_01.png


+ 25 - 0
solution/server.py

@@ -0,0 +1,25 @@
+from http.server import BaseHTTPRequestHandler
+from http.server import HTTPServer
+import random
+
+class HttpGetHandler(BaseHTTPRequestHandler):
+    """Обработчик с реализованным методом do_GET."""
+
+    def do_GET(self):
+        self.send_response(200)
+        self.send_header('Content-Type', 'application/json')
+        self.end_headers()
+        bad_symbol = "" if random.randint(0, 10) > 4 else "!@^$*#"[random.randint(0,5)]
+        self.wfile.write(f'{{"value":"Иванов{bad_symbol} Иван Иванович"}}'.encode(encoding='utf_8'))
+
+
+def run():
+  server_address = ('', 4444)
+  httpd = HTTPServer(server_address, HttpGetHandler)
+  try:
+      httpd.serve_forever()
+  except KeyboardInterrupt:
+      httpd.server_close()
+
+if __name__ == "__main__":
+    run()