Тема: CRUD на Spring MVC

Потрібно зробити список завдань (todo-list) із можливістю переглядати його, додавати нові завдання, редагувати та видаляти існуючі завдання.

Бажано, не використовувати Spring Boot, а самому розібратися, як все налаштувати.

Що потрібно зробити:

  1. Розгорнути скрипт sql
  2. 
    CREATE DATABASE IF NOT EXISTS `todo` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
    USE `todo`;
    DROP TABLE IF EXISTS `task`;
    /*!40101 SET @saved_cs_client = @character_set_client */;
    /*!40101 SET character_set_client = utf8 */;
    CREATE TABLE `task` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `description` varchar(100) NOT NULL,
      `status` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4;
    /*!40101 SET character_set_client = @saved_cs_client */;
    
    LOCK TABLES `task` WRITE;
    /*!40000 ALTER TABLE `task` DISABLE KEYS */;
    INSERT IGNORE INTO `task` VALUES (1,'aaa',1),(2,'bbb',2),(3,'ccc',0),(4,'ddd',1),(5, 'eee',2),(6,'fff',0),(7,'ggg',1),(8,'hhh',2),(9,'jjj',0),(10, 'kkk',1),(11,'lll',2),(12,'mmm',0),(13,'nnn',1),(14,'ooo',2),(15, 'ppp',0);
    /*!40000 ALTER TABLE `task` ENABLE KEYS */;
    UNLOCK TABLES;
    
  3. Створити новий проєкт Maven.
  4. Додати залежності, які потрібні для роботи з MySQL, Hibernate, Spring, Spring MVC, Thymeleaf.
  5. Додати до проєкту ентіті шар (пакет domain). Додати клас Task — він відповідатиме за завдання у списку справ. Необхідні поля: description — опис завдання, status — статус виконання завдання. Як статус використовуй енам:
  6. 
    public enum Status {
        IN_PROGRESS,
        DONE,
        PAUSED
    }
    
  7. Додай пакет config. У ньому розмісти необхідні класи налаштування Spring MVC програми, роботи з БД (через Hibernate) та інші налаштування.
  8. Додай dao шар, у якому має бути клас TaskDAO, який відповідатиме за роботу з БД. Методи, які мають бути — CRUD та підтримка пейджингу.
  9. Додай сервісний шар, в якому розмісти логіку щодо створення та редагування завдань.
  10. Тепер шар контролера: у ньому мають бути методи:
    • отримати список завдань (з урахуванням пейджингу)
    • додати нове завдання
    • відредагувати існуюче завдання
    • видалити завдання

    Якими повинні бути методи та їх мапінги — продумай сам.

  11. Останній крок — шаблон (html або js файл). Опціонально, можна винести стилі та скрипти до різних файлів за типами. Як завжди, для бекенд-розробника важливий функціонал, а не зовнішній вигляд, тому яким буде візуал додатку — на твій розсуд. У мене вийшло так:

Опціональне завдання:

Упакувати наш додаток у docker контейнер, додати docker-compose файл, в якому налаштувати роботу зв'язки додаток-БД у docker-контейнерах.


Виконання проєкту: