Skip to content

Aplikacja zarządzająca bazą danych, wspomagająca organizację i przeprowadzenie konferencji.

Notifications You must be signed in to change notification settings

kbreczko/conference-organization

Repository files navigation

Conference_Organization

System wspomagający organizację konferencji
Dokumentacja: Piotr Wieczorek

Opis zadania
Jesteś odpowiedzialny za implementację systemu wspomagającego organizację i przeprowadzenie konferencji. Twoim zadaniem jest zaimplementowanie zdefiniowanego poniżej API. System ma udostępniać API niezależnym aplikacjom działającym na urządzeniach mobilnych uczestników konferencji. Niemniej jednak, ze względu na to, że interesuje nas tematyka baz danych przedmiotem projektu jest stworzenie wersji deweloperskiej systemu, w której wywołania API będą wczytywane z dostarczonego pliku.

Opis problemu
Konferencja obejmuje od kilku do kilkunastu wydarzeń, z których każde zawiera do kilkudziesięciu referatów. Każde wydarzenie posiada datę rozpoczęcia i zakończenia, wydarzenia mogą się pokrywać.

Uczestnicy (kilkaset osób) rejestrują się na dowolnie wybrane przez siebie wydarzenia. Każdy uczestnik może wygłaszać dowolną liczbę referatów (być może 0). Ponadto uczestnicy mogą nawiązywać (symetryczne) znajomości z innymi uczestnikami.

Uczestnicy korzystają z systemu poprzez aplikację na urządzeniu mobilnym, która umożliwia przeglądanie danych konferencji, planu wydarzeń dla danego uczestnika, a także proponowanie i dowiadywanie się o dodatkowych referatach organizowanych spontanicznie – uczestnik proponuje referat, organizator konferencji go zatwierdza, przydziela salę oraz upublicznia. Aplikacja rejestruje obecność uczestnika na poszczególnych referatach, uczestnik może ocenić każdy z referatów (niezależnie od tego czy referat się już odbył). Każdy uczestnik posiada unikalny login i hasło.

Organizator konferencji może definiować wydarzenia i ich zawartość, przeglądać wszystkie zbierane dane, w tym również rozmaite statystyki dotyczące aktywności uczestników.

Twój program po uruchomieniu powinien przeczytać ze standardowego wejścia ciąg wywołań funkcji API, a wyniki ich działania wypisać na standardowe wyjście.

Wszystkie dane powinny być przechowywane w bazie danych, efekt działania każdej funkcji modyfikującej bazę, dla której wypisano potwierdzenie wykonania (wartość OK) powinien być utrwalony. Program może być uruchamiany wielokrotnie np. najpierw wczytanie pliku z danymi początkowymi, a następnie kolejnych testów poprawnościowych. Przy pierwszym uruchomieniu program powinien utworzyć wszystkie niezbędne elementy bazy danych (tabele, więzy, funkcje wyzwalacze) zgodnie z przygotowanym przez studenta modelem fizycznym. Baza nie będzie modyfikowana pomiędzy kolejnymi uruchomieniami. Program nie będzie miał praw do tworzenia i zapisywania jakichkolwiek plików. Program będzie mógł czytać pliki z bieżącego katalogu.

Format pliku wejściowego
Każda linia pliku wejściowego zawiera obiekt JSON (http://www.json.org/json-pl.html). Każdy z obiektów opisuje wywołanie jednej funkcji API wraz z argumentami.
Przykład:
obiekt { "function": { "arg1": "val1", "arg2": "val2" } }
oznacza wywołanie funkcji o nazwie function z argumentem arg1 przyjmującym wartość "val1" oraz arg2 – "val2".
W pierwszej linii wejścia znajduje się wywołanie funkcji open z argumentami umożliwiającymi nawiązanie połączenia z bazą danych.

Format wyjścia
Dla każdego wywołania wypisz w osobnej linii obiekt JSON zawierający status wykonania funkcji OK/ERROR/NOT IMPLEMENTED oraz zwracane dane wg specyfikacji tej funkcji.
Format zwracanych danych:
{ "status":"OK","data": [ { "atr1":"v1","atr2":"v2" },{ "atr1":"v3","atr2":"v3" } ]}
Tabela data zawiera wszystkie wynikowe krotki. Każda krotka zawiera wartości dla wszystkich atrybutów.

Format opisu API
Oznaczenia:

O – wymaga autoryzacji jako organizator, 
U – wymaga autoryzacji jako zwykły uczestnik,
N – nie wymaga autoryzacji,
(*) - wymagana na zaliczenie
[function] [arg1] [arg2] … [argn] nazwa funkcji oraz nazwy jej argumentów


Nawiązywanie połączenia i definiowanie danych organizatora
(*) open [baza] [login] [password]
 przekazuje dane umożliwiające podłączenie Twojego programu do bazy - nazwę bazy, 
 login oraz hasło, wywoływane dokładnie jeden raz, w pierwszej linii wejścia
zwraca status OK/ERROR w zależności od tego czy udało się nawiązać połączenie z bazą

(*) organizer [secret] [newlogin] [newpassword] tworzy uczestnika [newlogin] z uprawnieniami organizatora i hasłem [newpassword], argument [secret] musi być równy d8578edf8458ce06fbc5bb76a58c5ca4 zwraca status OK/ERROR

Operacje modyfikujące bazę

Każde z poniższych wywołań powinno zwrócić obiekt JSON zawierający wyłącznie status wykonania: OK/ERROR/NOT IMPLEMENTED.

(*O) event [login] [password] [eventname] [start_timestamp] [end_timestamp]  
 rejestracja wydarzenia, napis  jest unikalny

(*O) user [login] [password] [newlogin] [newpassword]  
 rejestracja nowego uczestnika  i  służą do autoryzacji wywołującego 
 funkcję, który musi posiadać uprawnienia organizatora,   są danymi 
 nowego uczestnika,  jest unikalny

(*O) talk [login] [password] [speakerlogin] [talk] [title] [start_timestamp] [room] [initial_evaluation] [eventname]  
 rejestracja referatu/zatwierdzenie referatu spontanicznego,  jest unikalnym identyfikatorem referatu,
  jest oceną organizatora w skali 0-10 – jest to ocena traktowana tak samo jak ocena
 uczestnika obecnego na referacie,  jest nazwą wydarzenia, którego częścią jest dany 
 referat - może być pustym napisem, co oznacza, że referat nie jest przydzielony do jakiegokolwiek 
 wydarzenia

(*U) register_user_for_event [login] [password] [eventname]  
 rejestracja uczestnika [login] na wydarzenie 

(*U) attendance [login] [password] [talk] 
 odnotowanie faktycznej obecności uczestnika [login] na referacie [talk]

(*U) evaluation [login] [password] [talk] [rating] 
 ocena referatu [talk] w skali 0-10 przez uczestnika [login]

(O) reject [login] [password] [talk] 
 usuwa referat spontaniczny  z listy zaproponowanych,

(U) proposal  [login] [password] [talk] [title] [start_timestamp] 
 propozycja referatu spontanicznego, [talk] - unikalny identyfikator referatu

(U) friends [login1] [password] [login2] 
 uczestnik [login1] chce nawiązać znajomość z uczestnikiem [login2], znajomość uznajemy 
 za nawiązaną jeśli obaj uczestnicy chcą ją nawiązać tj. po wywołaniach 
 friends [login1] [password1] [login2] i friends [login2] [password2] [login1]


Pozostałe operacje
Każde z poniższych wywołań powinno zwrócić obiekt JSON zawierający status wykonania OK/ERROR, a także tabelę data zawierającą krotki wartości atrybutów wg specyfikacji poniżej.
(*N) user_plan [login] [limit] 
 zwraca plan najbliższych referatów z wydarzeń, na które dany uczestnik jest zapisany 
 (wg rejestracji na wydarzenia) posortowany wg czasu rozpoczęcia, wypisuje pierwsze  
 referatów, przy czym 0 oznacza, że należy wypisać wszystkie
 Atrybuty zwracanych krotek: 
   [login] [talk] [start_timestamp] [title] [room]

(*N) day_plan [timestamp] 
 zwraca listę wszystkich referatów zaplanowanych na dany dzień posortowaną rosnąco wg sal, w 
 drugiej kolejności wg czasu rozpoczęcia
 [talk] [start_timestamp] [title] [room]

(*N) best_talks [start_timestamp] [end_timestamp] [limit] [all]  
 zwraca referaty rozpoczynające się w  danym przedziale czasowym posortowane malejąco wg średniej oceny 
 uczestników, przy czym jeśli  jest równe 1 należy wziąć pod uwagę wszystkie oceny, w przeciwnym 
 przypadku tylko oceny uczestników, którzy byli na referacie obecni, wypisuje pierwsze  referatów,
 przy czym 0 oznacza, że należy wypisać wszystkie
 [talk] [start_timestamp] [title] [room]

(*N) most_popular_talks [start_timestamp] [end_timestamp] [limit] 
 zwraca referaty rozpoczynające się w podanym przedziału czasowego posortowane malejąco wg obecności, 
 wypisuje pierwsze  referatów, przy czym 0 oznacza, że należy wypisać wszystkie
 [talk] [start_timestamp] [title] [room]

(*U) attended_talks [login] [password] 
 zwraca dla danego uczestnika referaty, na których był obecny 
 [talk] [start_timestamp] [title] [room]

(*O) abandoned_talks [login] [password]  [limit] 
 zwraca listę referatów posortowaną malejąco wg liczby uczestników  zarejestrowanych na 
 wydarzenie obejmujące referat, którzy nie byli na tym referacie obecni, wypisuje pierwsze  
 referatów, przy czym 0 oznacza, że należy wypisać wszystkie
 [talk] [start_timestamp] [title] [room] [number]

(N) recently_added_talks [limit] 
 zwraca listę ostatnio zarejestrowanych referatów, wypisuje ostatnie  referatów wg daty 
 zarejestrowania, przy czym 0 oznacza, że należy wypisać wszystkie
 [talk] [speakerlogin] [start_timestamp] [title] [room]

(U/O) rejected_talks [login] [password] 
 jeśli wywołujący ma uprawnienia organizatora zwraca listę wszystkich odrzuconych referatów 
 spontanicznych, w przeciwnym przypadku listę odrzuconych referatów wywołującego ją uczestnika 
 [talk] [speakerlogin] [start_timestamp] [title]

(O) proposals [login] [password]  
 zwraca listę propozycji referatów spontanicznych do zatwierdzenia lub odrzucenia, 
 zatwierdzenie lub odrzucenie referatu polega na wywołaniu przez organizatora funkcji 
 talk lub reject z odpowiednimi parametrami
 [talk] [speakerlogin] [start_timestamp] [title]

(U) friends_talks [login] [password] [start_timestamp] [end_timestamp] [limit] 
 lista referatów  rozpoczynających się w podanym przedziale czasowym wygłaszanych przez znajomych 
 danego uczestnika   posortowana wg czasu rozpoczęcia, wypisuje pierwsze  referatów, przy 
 czym 0 oznacza, że należy wypisać wszystkie
 [talk] [speakerlogin] [start_timestamp] [title] [room]

(U) friends_events [login] [password] [eventname] 
 lista znajomych uczestniczących w danym wydarzeniu
 [login] [eventname] [friendlogin] 

(U) recommended_talks [login] [password] [start_timestamp] [end_timestamp] [limit] 
 zwraca referaty rozpoczynające się w podanym przedziale czasowym, które mogą zainteresować danego 
 uczestnika (zaproponuj parametr  obliczany na podstawie dostępnych danych – ocen, 
 obecności, znajomości itp.), wypisuje pierwsze  referatów wg nalepszego , przy 
 czym 0 oznacza, że należy wypisać wszystkie
  [talk] [speakerlogin] [start_timestamp] [title] [room] [score

About

Aplikacja zarządzająca bazą danych, wspomagająca organizację i przeprowadzenie konferencji.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published