**1. Sformułowanie zadania projektowego** Celem projektu jest stworzenie aplikacji stacjonarnej uzupełniającej funkcjonalność serwisu Catch.com. Aplikacja ta będzie umożliwiać przeglądanie, tworzenie, edycję, usuwanie oraz wspóldzielenie notatek, list zadań i przypomnień. Utworzone w ten sposób dane będa mogły być synchronizowane z treściami umieszczonymi na serwerach serwisu Catch.com. Aplikacja pozwoli na logowanie się przy pomocy konta utworzonego wcześniej w serwisie Catch.com. Synchronizacja treści z serwerem będzie dokonywana na żądanie użytkownika. Kluczowymi cechami aplikacji powinna być prosta obsługa i przyjazny interfejs. Nawigacja powinna być zbliżona do tej znanej z aplikacji mobilnej udostępnianej przez twórców serwisu Catch.com. Istotna jest także wieloplatformowość dostarczonego rozwiązania. **2. Analiza stanu wyjściowego** W chwili obecnej na rynku obecna jest aplikacja stacjonarna wspierająca konkurencyjny system zarządzania notatkami, uzupełniająca funkcjonalności serwisu Evernote. Warto przeanalizować funkcjonalność tego produktu i postarać się wykorzystać trafne rozwiązania, nie powielając przy tym błędów autorów. Jako istotny element stanu wyjściowego należy uznać samą obecność serwisu Catch.com, która determinuje funkcjonalności, jakie mogą być zaimplementowane w aplikacji stacjonarnej. Serwis Catch.com udostępnia oparte na REST API, które słuzyć będzie do komunikacji z jego serwerem. Dane użytkowników nie będę gromadzone przez twórców projektu, natomiast po synchronizacji treści z serwerem będą one przechowywane przez Catch.com zgodnie z polityką prywatności, która jest akceptowana przez każdego użytkownika w momencie zakładania konta. **3. Analiza wymagań użytkownika** Gromadzenie notatek powinno być czynności intuicyjną i mało absorbującą ze strony użytkownika. Użytkownikami projektu będą użytkownicy serwisu i aplikacji Catch.com, dlatego pełna zgodność funkcjonalności z tymi źródłami jest kluczowa. * Tworzenie nowych “obiektów” : notatek, list zadań, alarmów, notatek dźwiekowych i graficznych * Edycja, usuwanie, zarządzanie obiektami * Tworzenie i zarządzanie strumieniami - przestrzeniami, w której znajdują się obiekty * Definiowanie znaczników dla obiektów * Dodawanie komentarzy pod notatkami * Udostępnianie notatek innym użytkownikom * Oznaczenia obiektów gwiazdką, dodawanie lokalizacji Z aplikacji korzystać będzie można tylko po zalogowaniu, występuję więc w systemie tylko jeden rodzaj roli. Pobieranie notatek z serwera i wysyłanie nowych danych na serwer powinno odbywać się na żądanie. Sensownym wydaje się jednak umożliwienie także synchronizacji automatycznej, aby użytkownik nie zapomniał wysłać na serwer notatek, z których chciałby potem skorzystać w aplikacji mobilnej. **4. Określenie scenariuszy użycia** a) Pierwsze logowanie do aplikacji * Pusta przestrzeń robocza - informacja o tym, że treści pojawią się po synchronizacji * Kliknięcie przycisku synchronizuj: następuje szereg różnych zapytań na serwer Catch.com : * GET /v3/streams : w odpowiedzi lista streamow danego uzytkownika. Ich ID i nazwy, ilosc kontrybutorów, daty modyfikacji, kolor w jakim wyswietlany jest w aplikacji webowej. Wszystkie te dane beda wykorzystane do dalszych zapytan oraz do graficznego przedstawienia przestrzeni roboczej * GET /v3/streams///stream_id//: takie zapytanie będzie wysłane dla każdego stream_id z poprzedniego requestu. W odpowiedzi otrzymuje się ID i typy wszystkich obiektow w tym streamie: notatek, chechlist, komentarzy, plików. Nadrzednym typem jest notatka, i to wlasnie ich ID bedzie zapamietane po tej operacji. Komentarze, checklisty etc pojawia sie jako “dzieci” danej notatki po zapytaniu o jej szczegóły. *GET /v3/streams///stream_id///contributors : takie zapytanie dla każdego stream_id. Otrzymujemy nazwy i id wszystkich kontrybutorów danego streama *GET /v3/streams///stream_id///tags - lista tagów użytych w danym streamie *GET /v3/streams///stream_id///$object - zapytanie o szczegóły notatki. Zwraca daty utworzenia, edycji i usuniecia na serwerze, tresc, tagi, wlasciciel, oraz sekcje “children”, gdzie znajduja sie ID wszystkich powiazanych obiektów. Wazne - po usunieciu notatki na serwerze ten request dalej dziala, lecz ma niezerowa date usuniecia z serwera - jest to istotne do obsługi usuwania notatek przez użytkownika lokalnie. *GET /v3/streams///stream_id/////object_id///raw - pozwala na pobranie notatki dzwiekowej, obazu, badz zalacznika b) Tworzenie nowego obiektu: *Menu podobne do znanego z aplikacji mobilnej - przyciski odpowiadajace poszczególnym typom obiektów *Po wybraniu typu - okno edycji obiektu: treść, tagi, stream, lokalizacja, załączniki. *Po zakonczeniu edycji - obiekt widoczny w przestrzeni roboczej jako lokalny, oznaczenie to zniknie po synchronizacji *Elementy API konieczne do przeniesienia stworzonej notatki na serwer: *POST /v3/streams///stream_id// - tutaj tworzymy notatke, w strumieniu o zadanym ID a po otrzymaniu jej ID wysylamy tym samym rodzajem zapytanie wszystkie dodatkowe elementy (checklisty, zalaczniki), które maja w zapytaniu ustawiony parametr child_of z wartoscia ID tworzonej notatki c) Tworzenie nowego strumienia *kliknięcie przycisku “New space”, *wpisanie nazwy *Elementy API konieczne do wykonania zapytania: *POST /v3/streams - wystarczy podac nazwe strumienia i zostanie on utworzony d) Edycja notatki: *Podczas przeglądania treści notatki kliknięcie przycisku Edit i modyfikacja treści *Notatka edytowana lokalnie oznaczona jako wymagająca synchronizacji *API: *PUT /v3/streams/sync///object_id// e) Zapraszanie użytkowników do współdzielenia strumienia *Przycisk “Invite People” na poziomie strumienia *Koniecnej podanie adresów email użytkowników *API: *POST /v3/invites konieczne podanie emaila i ID strumienia f) Dodawanie tagów, komentarzy, zalacznikow, checklist *notatki będą tagowane tak samo jak w gotowych produktach rodziny Catch - poprzez dopisanie znaku #przed nazwa tagu. *Po klinięciu w nazwę tagu powinny pojawić się wszystkie notatki z otagowane. *API: takie samo jak przy tworzeniu notatek lub ich modyfikacji. g) Usuwania strumienia / notatki * przy kazdym strumieniu oraz kazdej notatce będzie ikonka do jego usuwania * Po kliknięciu takiej ikonki powinno pojawić się ostrzeżenie o usuwaniu treści lokalnie i zaleceniu natychmiastowej synchronizacji * w API zrealizowane jest to poprzez odpowiednie zapytania typu DELETE **5. Identyfikacja funkcji** Patrz punkty 3 i 4 **6.** [[http://ai.ia.agh.edu.pl/wiki/pl:dydaktyka:sbd:2012:projekty:catch:start:konceptualny:fhd|Analiza hierarchii funkcji projektowanej aplikacji]] **7.** [[http://ai.ia.agh.edu.pl/wiki/pl:dydaktyka:sbd:2012:projekty:catch:start:konceptualny:dhd|DFD:Budowa i analiza diagramu przepływu danych]] **8. Wybór encji i ich atrybutów. ** -//Streams:// * stream_id (varchar) * name (varchar) * user_id (varchar) * server_modified_at (date) * local_modified_at (date) * deleted_locally (bool) * was_synchronised(bool) * color (varchar) * is_deleted (bool) -//Objects:// * object_id (varchar) * type (varchar) * text (text) * created_at (date) * location_id (varchar) * stream_id (varchar) * server_modified_at (date) * local_modified_at (date) * legacy_v2_share (bool) * user_id (varchar) * server_deleted_at (date) * starred (bool) * child_of (varchar) * reminder_at (date) * deleted_locally (bool) * was_synchronised (bool) * is_deleted (bool) -//Users:// * user_id (varchar) * user_name (varchar) * password (varchar) * e_mail_address (varchar) -//Locations:// * location_id (varchar) * longitude (varchar) * latitude (varchar) * altitude (varchar) * bearing * accuracy * altitude_accuracy * speed * name (varchar) * zoom -//Tags:// * tag_id (varchar) * tag_text (varchar) * object_id (varchar) -//Shared_stream:// * shared_stream_id (varchar) * stream_id (varchar) * user_name (varchar) -//Comments:// * object_id (varchar) * e_mail_address (varchar) * added_date (date) * comment_text (text) * server_modified_at (date) * local_modified_at (date) * is_deleted (bool) -//To_do// * to_do_id (varchar) * object_id (varchar) * to_do_text (text) * is_checked (bool) * is_deleted (bool) * server_modified_at (date) * local_modified_at (date) **9. Projektowanie powiązań pomiędzy encjami.** {{:pl:dydaktyka:sbd:2012:projekty:catch:start:erd.png|}} **10. Projekt diagramów STD** {{:pl:dydaktyka:sbd:2012:projekty:catch:start:std.png|}}