Skip to content

Instantly share code, notes, and snippets.

@stalniy
Last active July 15, 2019 10:33
Show Gist options
  • Save stalniy/e15a2fc99814c2e1c26edad865d32544 to your computer and use it in GitHub Desktop.
Save stalniy/e15a2fc99814c2e1c26edad865d32544 to your computer and use it in GitHub Desktop.
Junior .NET test task

Завдання

У систему приходить структурована інформація, але її типи не можуть бути визначені на етапі розробки. Типи об'єктів, як і самі дані додаються через API.

Необхідно

  1. Створити API-сервіс, який дозволяє працювати з сутностями будь-яких типів.
  2. Реалізувати CRUD для типів сутностей. Наприклад, створимо тип Person, з атрибутами name та age: POST /api/types/person
    {
      "name": "Person",
      "attributes": ["name", "age"]
    }
  3. Реалізувати CRUD (create, read, update, delete) сутностей і читання всієї колекції. Атрибути яких не має в сутності не повинні прийматись. У відповідь помилка.
  4. Запит POST /api/entities/person повинен створити сутність Person з атрибутами name, age:
{
  "name": "Ivan Ivanov",
  "age": "33"
}
  1. Запит GET /api/entities/person повинен повернути всіх Person-ів
  2. Підтримуються лише строкові атрибути

Основні вимоги

  1. ASP .NET Core
  2. Конфіги винесені в окремий файл
  3. Логіка в коді має бути прозорою
  4. Використовуй шаблони програмування (GoF patterns)
  5. Використовуй SQL базу данних (ми використовуємо PostgreSQL)
  6. Правильно обробляти помилки, відділяти помилки клієнта і сервера
  7. REST API повинен слідувати best practices включаючи правильну видачу статус кодів
  8. Використовуй EAV структуру таблиць

Що робити не можна?

  1. Створювати динамічно таблички або view не можна.

Бонус пойнти

  1. Реалізувати можливість створювати атрибути, які посилаються на інші типи. Наприклад, Person -> Address:
    {
      "name": "John",
      "age": "12",
      "address": {
        "city": "Kyiv",
        "street": "..."
      }
    }
  2. Додати можливість валідувати атрибути (e.g., required, maxlength, minlength)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment