Skip to content

This repository contains realisation of client-server console application that manages to-do-list tasks

Notifications You must be signed in to change notification settings

DenitsaStoianova/Todoist-App

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 

Repository files navigation

Todoist 📋 ✔️

Напишете клиент-сървър приложение с функционалност, наподобяваща тази на Todoist.

Todoist e task manager или, иначе казано, приложение, което менажира to-do-list задачки. То цели улесняването на създаване, организиране и проследяване на прогреса на прости задачи от всекидневието или на големи проекти. Задачите може да са всекидневни: "да купя вечеря"; "да нахраня кучето", до цял проект, който да проследи създаването на дипломна работа.

Условие

Създайте клиентско конзолно приложение, което приема потребителски команди, изпраща ги за обработка на сървъра, приема отговора му и го предоставя на потребителя в human-readable формат.

Note: Командите и output-ът в условието са примерни, свободни сте да ги преименувате и форматирате. Единственото условие е, те да бъдат интуитивни. За улеснение на потребителя, може да имплементирате команда help.

Функционални изисквания

Задача

Една задача се състои от следните атрибути:

  • name - име на задачата
  • date (optional) - дата, на която искаме да изпълним задачата
  • due date (optional) - дата, до която със сигурност трябва да изпълним задачата
  • description (optional) - описание на задачата

Note: Приемаме, че една задача се характеризира от името си и датата, ако има такава. Задачи без date отиват в така наречения Inbox - задачи, без фиксиран date. Следователно, в Inbox-а не можем да имаме повече от една задача с едно и също име. За конкретен ден, също не можем да имаме повече от една задача с едно и също име. При изпълнението на командите, ако не укажем параметъра за дата, приемаме, че задачата се очаква да бъде в Inbox-a.

  • register - регистрация на потребител с username и password. Регистрираните потребители се пазят във файл на сървъра - той служи като база от данни. При спиране и повторно пускане, сървърът може да зареди в паметта си вече регистрираните потребители.

  • login - потребителят влиза в системата

  • add-task - добавяне на нова задача. Ако задачата няма --date, тя бива добавена директно в Inbox-а.

    $ add-task --name=<name> --date=<date> --due-date=<due-date> --description=<description>
  • update-task - промяна на някой от атрибутите на задача. Единственият атрибут, който не можем да променяме, е името.

    $ update-task --name=<name> --date=<date> --due-date=<due-date> --description=<description>
  • delete-task - изтриване на задача.

    $ delete-task --name=<task_name> 
    $ delete-task --name=<task_name> --date=<date> 
  • get-task - предоставя информацията за дадена задача в human-readable формат.

     $ get-task --name=<task_name> 
     $ get-task --name=<task_name> --date=<date> 
  • list-tasks - предоставя информацията за всички задачи от конкретен ден или от Inbox-a. Командата приема и опционален флаг completed и може да изведе и информация за всички вече завършени задачи.

     $ list-tasks 
     $ list-tasks --completed=true
     $ list-tasks --date=<date>
  • list-dashboard - предоставя информацията за всички задачи от днешния ден.

    $ list-dashboard 
  • finish-task - маркира конкретната задача като завършена.

    $ finish-task --name=<name> 

Колаборация

Колаборация (или collaboration) представлява споделен проект, в който могат да се добавят задачи, които са видими за всички участници в него. Задачите в колаборацията имат още един опционален атрибут - assignee, т.е. потребителят, който ще работи по задачата.

  • add-collaboration - добавя нова колаборация.
    $ add-collaboration --name=<name> 
  • delete-collaboration - изтрива колаборация. Една колаборация може да бъде изтрита само от потребителя, който я е създал. Изтриването на колаборацията автоматично трябва да изтрие и всички задачи, които са част от нея.
    $ delete-collaboration --name=<name> 
  • list-collaborations - предоставя информацията всички колаборации на съответния потребител. Това включва такива, които той е създал и такива към които е добавен.
    $ list-collaborations
  • add-user - добавя потребител към колаборацията.
    $ add-user --collaboration=<name> --user=<username>
  • assign-task - задава assignee за дадена задача в колаборацията.
    $ assign-task --collaboration=<name> --user=<username> --task=<name>
  • list-tasks --collaboration - предоставя информацията за всички задачи от колаборацията.
    $ list-tasks --collaboration=<name>
  • list-users --collaboration - извежда всички потребители, които са част от колаборацията.
    $ list-users --collaboration=<name>

Етикет (Бонус)

Етикетите (или labels) представляват споделен лесен начин, по който можем да групираме няколко задачи. Ако например имаме няколко различни задачи, свързани с университета, можем да им сложим етикет university.

  • add-label - добавя нов етикет, който е видим само в акаунта на потребителя, който изпълнява командата.
    $ add-label --name=<name>
  • delete-label - изтриване на етикет.
    $ delete-label --name=<name>
  • list-labels - предоставя информация за всички етикети, които потребителят е създал.
    $ list-labels 
  • label-task - добавя етикет на дадена задача.
    $ label-task --name=<name> --date=<date> --label=<name>
  • list-tasks --label - предоставя информацията за всички задачи, на които е поставен даденият етикет.
    $ list-tasks --label=<name>

Нефункционални изисквания

  • Сървърът може да обслужва множество потребители паралелно.
  • Сървърът пази информацията за потребители, задачи, колаборации по такъв начин, който му позволява след спиране или рестартиране да може да зареди тази информация отново. Помислете за подходящ формат на данни, в който може да съхранявате информацията от сървъра.

About

This repository contains realisation of client-server console application that manages to-do-list tasks

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages