- Користувач може зареєструватися на продукті
- Користувач може створити контакт
- Користувач може відреагувати контакт
- Користувач може видалити контакт. При цьому контакт буде переміщений у корзину. Справжнє видалення відбудеться через n днів після переміщення в корзину
- Користувач може отримати всі контакти або отримувати контакти з фільтром по імені
Було б добре
- Можливість додавати контакти у групи (окрема сутність). Відповідно, створювати, видаляти і редагувати групи.
- Можливість нагадувати про дні народження і памʼятні дати
- Подумати над зберіганням чутливої інформації у зашифрованому вигляді
Додаткові питання:
- пагінація
- відображення контактів
- валідація вхідного запиту та моделі
Для реалізації прочитати:
- патерн побудови даних Value Object in DDD
- Cron https://pkg.go.dev/github.com/robfig/cron#section-readme
- Time Ticker Golang https://gobyexample.com/tickers
- logout
User Table:
- id
- name
- surname
Contact Table
- user id (=foreign key)
- id
- name
- surname
- birthday
- remembrance
- isDeleted
- expiredDate
Contact Group Table
- id group
- id contact
User Model:
- name
- surname
- id
Contact Model
- user id (=foreign key)
- id
- name
- surname
- birthday
- remembrance
- isDeleted
- expireDate
Contact Group
- name
- id group
- id contact
-
\login
-
\logout
-
\user\create
-
\user\get-by-name
-
\users\get
-
\user\update
-
\user\delete
-
\contact\create
-
\contact\get-by-name
-
\contacts\get
-
\contact\update
-
\contact\delete
-
\group\create
-
\group\update
-
\group\get-contacts
-
\group\delete
-
реєстрація користувача: по відповідному рауту (\login) в тіло запиту прописуємо поля і відправляємо до БД, яка зберігає його та повертає відповідь 201 Створений.
-
створення контакту: по відповідному рауту (\contact\create) в тілі запиту заповнюємо поля і відправляємо до БД, яка зберігає його та повертає відповідь 201 Створений
-
редагування контакту: за id контакта шукаємо в БД і повертаємо його; перезаписуємо необхідні поля, по відповідному рауту (\contact\update) відправляємо оновлені дані у БД; повертаємо оновлений контакт.
-
переміщення до корзини (умовне видалення): коли користувач видаляє контакт, встановлюється isDeleted=true та expireDate встановлюється 30 діб. Нагадування про видалення реалізовується за допомогою Cron. Періодичність, з якою він буде перевіряти дату = кожен день. При запуску функції робити перевірку: якщо expireDate дорівнює 0, то запускати функцію видалення, яка у свою чергу робить пошук за id у БД та прибере його.
-
отримання всіх контактів або відфільтрований за іменем список: 5.1 список контактів складається лише з тих контактів, у яких isDeleted=false 5.2 отримуємо всіх контактів за раутом (\contacts\get) 5.3 звернутись до БД (\contact\get) за умови, що значення поля дорівнює введеному імені; повертаємо масив контактів
-
вихід користувача із додатку: по відповідному рауту (\logout) ...
-
нагадування про памятні події за допомогою Time Ticker.
Field | Validation |
---|---|
name, surname | строка, required, з великої літери, без цифр, до 20 символів |
строка, required, відповідає типу "email", до 20 символів | |
birthday, remembrance | строка, required, datetime=2006-01-02 (time.Parse (для парсингу рядка у формат дати)) |