GGk77 / ToDo

πŸ“‹Task manager on java core

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π·Π°Π΄Π°Ρ‡

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ:

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² сСбС Π·Π°Π΄Π°Ρ‡ΠΈ/ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ/эпики. КаТдая Π·Π°Π΄Π°Ρ‡Π° ΠΈΠΌΠ΅Π΅Ρ‚:

  1. НазваниС;
  2. ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС;
  3. Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€;
  4. Бтатус (New, In_progress, Done);
  5. ΠŸΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ индСкс эпика, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚;
  6. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ выполнСния;
  7. ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ΅ врСмя Π½Π°Ρ‡Π°Π»Π° выполнСния;

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ/ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡Ρƒ/эпик;
  2. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ/ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡Ρƒ/эпик;
  3. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх Π·Π°Π΄Π°Ρ‡/ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡/эпиков;
  4. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ/ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡Ρƒ/эпик ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ;
  5. Π£Π΄Π°Π»ΠΈΡ‚ΡŒ всС Π·Π°Π΄Π°Ρ‡ΠΈ/ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ/эпики;
  6. Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ/ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡Ρƒ/эпик ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ;
  7. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ эпика;
  8. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ просмотра Π·Π°Π΄Π°Ρ‡;
  9. Π—Π°ΠΏΠΈΡΡŒ (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅) Π·Π°Π΄Π°Ρ‡/ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡/эпиков Π² (ΠΈΠ·) Ρ„Π°ΠΉΠ»(Π°);
  10. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ;

Для хранСния истории просмотров Π·Π°Π΄Π°Ρ‡ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ О(1). Π­Ρ‚ΠΎ достигаСтся Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ двусвязанного списка ΠΈ HashMap.

Доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ HTTP-запросов ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ своС состояниС Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ сСрвСрС. Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ UNIT-тСсты Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ классов. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° написана Π½Π° Java. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

public class InMemoryTaskManager implements TaskManager {
    protected long generateId = 0;
    protected Map<Long, Task> singleTask = new HashMap<>();
    protected Map<Long, Sub> subTask = new HashMap<>();
    protected Map<Long, Epic> epicTask = new HashMap<>();
    protected static HistoryManager historyManager = Managers.getHistoryDefault();

    protected Map<LocalDateTime, Task> sortedPrioritization = new TreeMap<>();

    //Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρƒ
    public Map<LocalDateTime, Task> getSortedPrioritization() {
        return sortedPrioritization;
    }

    // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ список всСх Π·Π°Π΄Π°Ρ‡.
    @Override
    public List<Task> getTasks() {
        return new ArrayList<>(singleTask.values());
    }

    @Override
    public List<Epic> getEpics() {
        return new ArrayList<>(epicTask.values());
    }

    // ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ID
    @Override
    public Task getTask(long id) {
        Task task = singleTask.get(id);
        if (task != null) {
            historyManager.add(task);
        }
        return task;
    }

    // ОбновлСниС статуса
    @Override
    public void updateEpicStatus(Epic epic) {
        int statusNew = 0;
        int statusDone = 0;
        List<Sub> sublist = new ArrayList<>(epic.getSubTaskIds());
        if (sublist.size() == 0) {
            epic.setStatus(TaskStatus.NEW);
        } else {
            for (Sub value : sublist) {
                TaskStatus status = value.getStatus();
                if (status.equals(TaskStatus.NEW)) {
                    statusNew++;
                } else if (status.equals(TaskStatus.DONE)) {
                    statusDone++;
                }
            }
            if (statusNew == sublist.size()) {
                epic.setStatus(TaskStatus.NEW);
            } else if (statusDone == sublist.size()) {
                epic.setStatus(TaskStatus.DONE);
            } else {
                epic.setStatus(TaskStatus.IN_PROGRESS);
            }
        }
    }
    
    @Test
    void getHistoryTest() throws IOException, InterruptedException {
        HttpClient client = HttpClient.newHttpClient();
        URI url = URI.create("http://localhost:8080/tasks/history");
        HttpRequest request = HttpRequest.newBuilder().uri(url).GET().build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
        assertEquals(200, response.statusCode());
    }
}

About

πŸ“‹Task manager on java core


Languages

Language:Java 100.0%