diff --git a/Mafia-the-Game.tex b/Mafia-the-Game.tex index 079543e..1d57780 100644 --- a/Mafia-the-Game.tex +++ b/Mafia-the-Game.tex @@ -8,6 +8,7 @@ \usepackage{geometry} \usepackage{graphicx} \usepackage{hyperref} +\usepackage{array} \usepackage{indentfirst} \usepackage{multicol} \usepackage{multirow} @@ -32,11 +33,10 @@ % \usepackage{mdframed} \usetikzlibrary{positioning} - \hypersetup{ colorlinks=true, linkcolor=black, - urlcolor=blue + urlcolor=black } \urlstyle{rm} @@ -130,6 +130,7 @@ \input{./src/legends.tex} \input{./src/description/index.tex} \input{./src/requirements/index.tex} +\input{./src/design/index.tex} % \input{./src/test.tex} \end{document} diff --git a/src/design/entities/account-status.tex b/src/design/entities/account-status.tex new file mode 100644 index 0000000..b0c8bdb --- /dev/null +++ b/src/design/entities/account-status.tex @@ -0,0 +1,3 @@ +\begin{entityTable}{KontaStavoklis}{entity-account-status} + \entityTableRow{teksts}{varchar(255)}{unique, not null}{Konta stāvokļa apraksts} +\end{entityTable} diff --git a/src/design/entities/email-confirmation.tex b/src/design/entities/email-confirmation.tex new file mode 100644 index 0000000..d61882b --- /dev/null +++ b/src/design/entities/email-confirmation.tex @@ -0,0 +1,4 @@ +\begin{entityTable}{EpastaApstiprinajums}{entity-email-confirmation} + \entityTableRow{markieris}{varchar(255)}{unique, not null}{Ģenerēts marķieris epasta lietotāja apstiprināšanai} + \entityTableRow{deriguma\_termins}{timestamp}{not null}{Laiks, līdz kuram e-pasta apstiprināša ir iespējama} +\end{entityTable} diff --git a/src/design/entities/game-event.tex b/src/design/entities/game-event.tex new file mode 100644 index 0000000..2cd5d7b --- /dev/null +++ b/src/design/entities/game-event.tex @@ -0,0 +1,6 @@ +\begin{entityTable}{SpelesNotikums}{entity-game-event} + \entityTableRow{nosaukums}{varchar(255)}{unique, not null}{Notikuma nosaukums} + \entityTableRow{nakts\_pk}{int2}{default 0, not null, check (\lowercase{nakts\_pk} >= 0)}{Spēles nakts pēc kārtas} + \entityTableRow{ir\_redzams}{bool}{default false, not null}{Vai notikums ir redzams spēlētājiem procesa laikā?} + \entityTableRow{izveidosanas\_laiks}{timestamp}{not null, default current\_timestamp}{Laiks, kad dotais spēles notikums tika izveidots/saglabāts datubāzē} +\end{entityTable} diff --git a/src/design/entities/game-role.tex b/src/design/entities/game-role.tex new file mode 100644 index 0000000..a27a3c1 --- /dev/null +++ b/src/design/entities/game-role.tex @@ -0,0 +1,8 @@ +\begin{entityTable}{SpelesLoma}{entity-game-role} + \entityTableRow{nosaukums}{varchar(255)}{unique, not null}{Lomas nosaukums} + \entityTableRow{apraksts}{text}{default '', not null}{Lomas apraksts} + \entityTableRow{max\_speletaju\_ skaits}{int4}{default 1, not null, check (\lowercase{max\_speletaju\_ skaits} > 0)}{Maksimālais spēlētāju skaiks spēlē ar doto lomu} + \entityTableRow{ir\_pamata}{bool}{default false, not null}{Vai loma ir spēles pamatā vai lietotāju izveidots?} + \entityTableRow{ir\_mafija}{bool}{default false, not null}{Vai loma ir mafija?} + \entityTableRow{attels}{int8}{}{Lomas attēls, \texttt{FOREING KEY} uz \hyperref[tab:entity-image]{Attels} tabulas id kolonnu} +\end{entityTable} diff --git a/src/design/entities/game-setup.tex b/src/design/entities/game-setup.tex new file mode 100644 index 0000000..559db70 --- /dev/null +++ b/src/design/entities/game-setup.tex @@ -0,0 +1,7 @@ +\begin{entityTable}{SpelesKonfiguracija}{entity-game-setup} + \entityTableRow{nosaukums}{varchar(255)}{unique, not null}{Konfigurācijas nosaukums} + \entityTableRow{apraksts}{text}{default '', not null}{Konfigurācijas apraksts} + \entityTableRow{ir\_pamata}{bool}{default false, not null}{Vai spēles konfigurācijas ir spēles pamatā vai lietotāju izveidots} + \entityTableRow{izveidosanas\_laiks}{timestamp}{not null, default current\_timestamp}{Laiks, kad dotais uzstādījums tika izveidots/saglabāts datubāzē} + \entityTableRow{autors}{int8}{not null}{Konfigurācijas autors, \texttt{FOREING KEY} uz \hyperref[tab:entity-user]{Lietotajs} tabulas id kolonnu} +\end{entityTable} diff --git a/src/design/entities/image.tex b/src/design/entities/image.tex new file mode 100644 index 0000000..4003ea4 --- /dev/null +++ b/src/design/entities/image.tex @@ -0,0 +1,4 @@ +\begin{entityTable}{Attels}{entity-image} + \entityTableRow{datnes\_adrese}{varchar(255)}{unique, not null}{Saglabātā attēla adrese operētājsistēmā} + \entityTableRow{pievienosanas\_laiks}{timestamp}{default current\_timestamp, not null}{Laiks, kad tika izveidots/saglabāts dotais attēls datubāzē} +\end{entityTable} diff --git a/src/design/entities/index.tex b/src/design/entities/index.tex new file mode 100644 index 0000000..3fec4d7 --- /dev/null +++ b/src/design/entities/index.tex @@ -0,0 +1,22 @@ +\subsection{Datu bāzes tabulu apraksts} +Datubāzes tabulu lauku, datu tipi, lauka atribūti - obligātums, noklusētās vērtības, primārā atslēga, +unikalitāte - ir aprakstītas atsevišķās tabulās (skat. x.1, x.2, … , x.n tab. % TODO: add all table references). +Visām tabulām, \texttt{VARCHAR} un \texttt{TEXT} laukiem tiek lietots UTF8 kodējums. + +\input{./src/design/entities/role-action.tex} +\input{./src/design/entities/role-disadvantage.tex} +\input{./src/design/entities/image.tex} +\input{./src/design/entities/subscription-price.tex} +\input{./src/design/entities/password-recovery.tex} +\input{./src/design/entities/email-confirmation.tex} +\input{./src/design/entities/game-role.tex} +\input{./src/design/entities/account-status.tex} +\input{./src/design/entities/subscription-status.tex} +\input{./src/design/entities/room-status.tex} +\input{./src/design/entities/user.tex} +\input{./src/design/entities/game-setup.tex} +\input{./src/design/entities/room.tex} +\input{./src/design/entities/game-event.tex} +\input{./src/design/entities/player.tex} +\input{./src/design/entities/paid-subscription.tex} +\input{./src/design/entities/message.tex} diff --git a/src/design/entities/message.tex b/src/design/entities/message.tex new file mode 100644 index 0000000..576bafd --- /dev/null +++ b/src/design/entities/message.tex @@ -0,0 +1,6 @@ +\begin{entityTable}{Iszina}{entity-message} + \entityTableRow{teksts}{text}{not null}{Īsziņas teksts} + \entityTableRow{if\_mafijas\_iszina}{bool}{default false, not null}{Vai īsziņas sūtītājs ir mafija?} + \entityTableRow{ir\_izmainita}{bool}{default false, not null}{Vai īsziņas staurs ir izmainīts?} + \entityTableRow{autors}{int8}{not null}{Īsziņas sūtītājs, \texttt{FOREING KEY} uz \hyperref[tab:entity-user]{Lietotajs} tabulas id kolonnu} +\end{entityTable} diff --git a/src/design/entities/paid-subscription.tex b/src/design/entities/paid-subscription.tex new file mode 100644 index 0000000..996ca01 --- /dev/null +++ b/src/design/entities/paid-subscription.tex @@ -0,0 +1,9 @@ +\begin{entityTable}{MaksasAbonements}{entity-paid-subscription} + \entityTableRow{stripe\_id}{varchar(255)}{unique, not null}{Unikālais identifikators, kurš tiek iegūts no maksājuma procesora klienta - \href{https://stripe.com}{Stripe}} % FIX: use correct url function + \entityTableRow{stavoklis}{int8}{not null}{Abonementa stāvoklis, \texttt{FOREING KEY} uz \hyperref[tab:entity-subscription-status]{AbonementaStavoklis} tabulas id kolonnu} + \entityTableRow{sakuma\_laiks}{timestamp}{not null, default current\_timestamp}{Laiks, kad abonements ir aktivizēts} + \entityTableRow{periods}{interval}{not null}{Laika periods dienās, cik ilgi abonements ir aktīvs} + \entityTableRow{atteikums\_laiks}{timestamp}{}{Laiks, kad lietotājs atteicās no abonementa} + \entityTableRow{lietotajs}{int8}{not null}{Abonementa lietotājs, \texttt{FOREING KEY} uz \hyperref[tab:entity-user]{Lietotajs} tabulas id kolonnu} + \entityTableRow{abonementa\_cena}{int8}{not null}{Abonementa cena, \texttt{FOREING KEY} uz \hyperref[tab:entity-subscription-price]{AbonementaCena} tabulas id kolonnu} +\end{entityTable} diff --git a/src/design/entities/password-recovery.tex b/src/design/entities/password-recovery.tex new file mode 100644 index 0000000..4f2e5f9 --- /dev/null +++ b/src/design/entities/password-recovery.tex @@ -0,0 +1,4 @@ +\begin{entityTable}{ParolesAtjaunosana}{entity-password-recovery} + \entityTableRow{markieris}{varchar(255)}{unique, not null}{Ģenerēts marķieris epasta lietotājaparoles atjaunošanai} + \entityTableRow{deriguma\_termins}{timestamp}{not null}{Laiks, līdz kurams paroles atjaunošana ir iespējama} +\end{entityTable} diff --git a/src/design/entities/player.tex b/src/design/entities/player.tex new file mode 100644 index 0000000..26ec59b --- /dev/null +++ b/src/design/entities/player.tex @@ -0,0 +1,10 @@ +\begin{entityTable}{Speletajs}{entity-player} + \entityTableRow{nosaukums}{varchar(255)}{unique, not null}{Notikuma nosaukums} + \entityTableRow{ir\_noslepkavots}{bool}{default false, not null}{Vai dotais spēlētājs ir noslepkavots?} + \entityTableRow{ir\_izbalsots}{bool}{default false, not null}{Vai dotais spēlētājs ir izbalsots?} + \entityTableRow{ir\_izslegts}{bool}{default false, not null}{Vai dotais spēlētājs ir izslēgts?} + \entityTableRow{ir\_aktivs}{bool}{default true, not null}{Vai dotais spēlētājs ir aktīvs?} + \entityTableRow{redz\_mafijas\_sakarus}{bool}{default false, not null}{Vai dotais spēlētājs ir redz mafijas sakarus?} + \entityTableRow{istaba}{int8}{}{Istaba, kurā spēlē dotais spēlētājs, \texttt{FOREING KEY} uz \hyperref[tab:entity-room]{Istaba} tabulas id kolonnu} + \entityTableRow{speles\_loma}{int8}{not null}{Loma, kuru spēlē dotais spēlētājs, \texttt{FOREING KEY} uz \hyperref[tab:entity-game-role]{SpelesLoma} tabulas id kolonnu} +\end{entityTable} diff --git a/src/design/entities/role-action.tex b/src/design/entities/role-action.tex new file mode 100644 index 0000000..af291fb --- /dev/null +++ b/src/design/entities/role-action.tex @@ -0,0 +1,4 @@ +\begin{entityTable}{LomasDarbiba}{entity-role-action} + \entityTableRow{nosaukums}{varchar(255)}{unique, not null}{Lomas darbības nosaukums} + \entityTableRow{is\_nekavejoties}{bool}{default false, not null}{Vai lomas darbība ir tūlītēja} +\end{entityTable} diff --git a/src/design/entities/role-disadvantage.tex b/src/design/entities/role-disadvantage.tex new file mode 100644 index 0000000..f4bbf46 --- /dev/null +++ b/src/design/entities/role-disadvantage.tex @@ -0,0 +1,4 @@ +\begin{entityTable}{LomasTrukums}{entity-role-disadvantage} + \entityTableRow{nosaukums}{varchar(255)}{unique, not null}{Lomas trūkuma nosaukums} + \entityTableRow{apraksts}{text}{default '', not null}{Lomas trūkuma apraksts} +\end{entityTable} diff --git a/src/design/entities/room-status.tex b/src/design/entities/room-status.tex new file mode 100644 index 0000000..d82f3f5 --- /dev/null +++ b/src/design/entities/room-status.tex @@ -0,0 +1,3 @@ +\begin{entityTable}{IstabasStavoklis}{entity-room-status} + \entityTableRow{teksts}{varchar(255)}{unique, not null}{Istabas stāvokļa apraksts} +\end{entityTable} diff --git a/src/design/entities/room.tex b/src/design/entities/room.tex new file mode 100644 index 0000000..71d79b0 --- /dev/null +++ b/src/design/entities/room.tex @@ -0,0 +1,10 @@ +\begin{entityTable}{Istaba}{entity-room} + \entityTableRow{nosaukums}{varchar(255)}{unique, not null}{Istabas Nosaukums} + \entityTableRow{speles\_saksanas\_ laiks}{timestamp}{}{Laiks, kad spēle sākas} + \entityTableRow{speles\_beigsanas\_ laiks}{timestamp}{}{Laiks, kad spēle beidzas} + \entityTableRow{stavoklis}{int8}{not null}{Pašreizējais spēles stāvoklis, \texttt{FOREING KEY} uz \hyperref[tab:entity-room-status]{IstabasStavoklis} tabulas id kolonnu} + \entityTableRow{piekluves\_kods}{char(6)}{unique}{Unikāls istabas piekļuves kods, 6 lielie burtcipari} + \entityTableRow{vai\_rada\_miruso\_ lomu}{bool}{default false, not null}{Vai pēc spēlētāja nāves var atklāt viņa lomu?} + \entityTableRow{izveidosanas\_laiks}{timestamp}{default current\_timestamp, not null}{Laiks, kad dotā spēles istaba tika izveidota/saglabāta datubāzē} + \entityTableRow{speles\_konfiguracija}{int8}{not null}{Spēles uzstādījumi, kurus izmanto dotā istaba, \texttt{FOREING KEY} uz \hyperref[tab:entity-game-setup]{SpelesKonfiguracija} tabulas id kolonnu} +\end{entityTable} diff --git a/src/design/entities/subscription-price.tex b/src/design/entities/subscription-price.tex new file mode 100644 index 0000000..c9de634 --- /dev/null +++ b/src/design/entities/subscription-price.tex @@ -0,0 +1,5 @@ +\begin{entityTable}{AbonementaCena}{entity-subscription-price} + \entityTableRow{cena}{decimal(16,2)}{default 0, not null, check (\lowercase{cena} >= 0)}{Abonementa cena, kuras garums var būt līdz 16 simboliem un tiek noapaļots līdz 2 cipariem aiz komata} + \entityTableRow{pievienosanas\_laiks}{timestamp}{default current\_timestamp, not null}{Laiks, kad tika izveidots/saglabāts dotā cena datubāzē} + \entityTableRow{aktivizesanas\_laiks}{timestamp}{not null, check (\lowercase{aktivizesanas\_ laiks} >= \lowercase{pievienosanas\_ laiks})}{Laiks, no kura ši cena ir aktīva} +\end{entityTable} diff --git a/src/design/entities/subscription-status.tex b/src/design/entities/subscription-status.tex new file mode 100644 index 0000000..ed527b5 --- /dev/null +++ b/src/design/entities/subscription-status.tex @@ -0,0 +1,3 @@ +\begin{entityTable}{AbonementaStavoklis}{entity-subscription-status} + \entityTableRow{teksts}{varchar(255)}{unique, not null}{Abonementa stāvokļa apraksts} +\end{entityTable} diff --git a/src/design/entities/user.tex b/src/design/entities/user.tex new file mode 100644 index 0000000..7ef862a --- /dev/null +++ b/src/design/entities/user.tex @@ -0,0 +1,14 @@ +\begin{entityTable}{Lietotajs}{entity-user} + \entityTableRow{segvards}{varchar(255)}{unique, not null}{Lietotājvārds} + \entityTableRow{epasts}{varchar(255)}{unique, not null}{Lietotāja e-pasts} + \entityTableRow{parole}{varchar(255)}{not null}{Šifrēta lietotāja parole} + \entityTableRow{vards}{varchar(255)}{default '', not null}{Lietotāja vārds} + \entityTableRow{uzvards}{varchar(255)}{default '', not null}{Lietotāja uzvārds} + \entityTableRow{dzimsanas\_datums}{date}{}{Lietotāja dzimšanas datums} + \entityTableRow{bio\_info}{text}{default ''}{Lietotāja apraksts par sevi} + \entityTableRow{izveidosanas\_laiks}{timestamp}{not null, default current\_timestamp}{Laiks, kad tika izveidots/saglabāts dotais lietotājs datubāzē} + \entityTableRow{attels}{int8}{}{Lietotāja profila attēls, \texttt{FOREING KEY} uz \hyperref[tab:entity-image]{Attels} tabulas id kolonnu} + \entityTableRow{konta\_stavoklis}{int8}{}{Lietotāja konta stāvoklis, \texttt{FOREING KEY} uz \hyperref[tab:entity-account-status]{KontaStavoklis} tabulas id kolonnu} + \entityTableRow{epasta\_apstiprinajums}{int8}{}{Lietotāja e-pasta apstiprinājums, \texttt{FOREING KEY} uz \hyperref[tab:entity-email-confirmation]{EpastaApstiprinajums} tabulas id kolonnu} + \entityTableRow{paroles\_atjaunosana}{int8}{}{Lietotāja paroles atjaunošana, \texttt{FOREING KEY} uz \hyperref[tab:entity-password-recovery]{ParolesAtjaunojana} tabulas id kolonnu} +\end{entityTable} diff --git a/src/design/index.tex b/src/design/index.tex new file mode 100644 index 0000000..afcec3b --- /dev/null +++ b/src/design/index.tex @@ -0,0 +1,4 @@ +\section{Programmatūras projektējuma apraksts} +\subsection{Datu bāzes projektējums} +\input{./src/design/logical-description.tex} +\input{./src/design/entities/index.tex} diff --git a/src/design/logical-description.tex b/src/design/logical-description.tex new file mode 100644 index 0000000..2ef5d6e --- /dev/null +++ b/src/design/logical-description.tex @@ -0,0 +1,7 @@ +\subsection{Datu bāzes loģiskais ER modelis} +\begin{figure}[htbp] + \centering + \includegraphics[width=\linewidth]{./src/img/KonceptualaisERModelis.png} % TODO: replace with correct picture + \caption{Datu bāzes loģiskais ER modelis} + \label{fig:logical-model} +\end{figure} diff --git a/src/sql/Mafia.sql b/src/sql/Mafia.sql index a665e8f..da029ff 100644 --- a/src/sql/Mafia.sql +++ b/src/sql/Mafia.sql @@ -15,7 +15,7 @@ CREATE TABLE CREATE TABLE "Attels" ( "id" SERIAL8 PRIMARY KEY NOT NULL, - "datnes_adrese" VARCHAR(255) UNIQUE, + "datnes_adrese" VARCHAR(255) UNIQUE NOT NULL, "pievienosanas_laiks" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL ); @@ -93,7 +93,7 @@ CREATE TABLE ); CREATE TABLE - "SpelesUzstadijums" ( + "SpelesKonfiguracija" ( "id" SERIAL8 PRIMARY KEY NOT NULL, "nosaukums" VARCHAR(255) UNIQUE NOT NULL, "apraksts" TEXT DEFAULT '' NOT NULL, @@ -113,16 +113,16 @@ CREATE TABLE "piekluves_kods" CHAR(6) UNIQUE, "vai_rada_miruso_lomu" BOOL DEFAULT FALSE NOT NULL, "izveidosanas_laiks" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, - "speles_uzstadijums" INT8 NOT NULL, + "speles_konfiguracija" INT8 NOT NULL, FOREIGN KEY ("stavoklis") REFERENCES "IstabasStavoklis" ("id"), - FOREIGN KEY ("speles_uzstadijums") REFERENCES "SpelesUzstadijums" ("id") + FOREIGN KEY ("speles_konfiguracija") REFERENCES "SpelesKonfiguracija" ("id") ); CREATE TABLE "SpelesNotikums" ( "id" SERIAL8 PRIMARY KEY NOT NULL, "nosaukums" VARCHAR(255) UNIQUE NOT NULL, - "nakts_pk" INT2 DEFAULT 0 NOT NULL, + "nakts_pk" INT2 DEFAULT 0 NOT NULL CHECK ("nakts_pk" >= 0), "veids" VARCHAR(255), "ir_redzams" BOOL DEFAULT FALSE NOT NULL, "izveidosanas_laiks" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, @@ -189,10 +189,10 @@ CREATE TABLE CREATE TABLE "SpelesUzstatijumuLomas" ( - "speles_uzstadijums" INT8 NOT NULL, + "speles_konfiguracija" INT8 NOT NULL, "speles_loma" INT8 NOT NULL, - PRIMARY KEY ("speles_uzstadijums", "speles_loma"), - FOREIGN KEY ("speles_uzstadijums") REFERENCES "SpelesUzstadijums" ("id"), + PRIMARY KEY ("speles_konfiguracija", "speles_loma"), + FOREIGN KEY ("speles_konfiguracija") REFERENCES "SpelesKonfiguracija" ("id"), FOREIGN KEY ("speles_loma") REFERENCES "SpelesLoma" ("id") ); diff --git a/src/utils/entity-table.tex b/src/utils/entity-table.tex new file mode 100644 index 0000000..3616004 --- /dev/null +++ b/src/utils/entity-table.tex @@ -0,0 +1,27 @@ +\newenvironment{entityTable}[2]{% +\tabularx{\linewidth}{|p{4cm}|p{2.7cm}|X|X|} +\caption{#1} \label{tab:#2} \\ + +\hline +\textbf{Lauks} & \textbf{Datu tips} & \textbf{Lauka atribūti} & \textbf{Apraksts} \\ \hline +\endfirsthead + +\hline \multicolumn{4}{r}{Turpinājums no iepriekšējās lapas} \\ \hline +\textbf{Lauks} & \textbf{Datu tips} & \textbf{Lauka atribūti} & \textbf{Apraksts} \\ \hline +\endhead + +\hline \multicolumn{4}{r}{Turpinājums nākamajā lapā} \\ \hline +\endfoot + +\hline +\endlastfoot + +\entityTableRow{id}{serial8}{primary key, not null}{Unikālais identifikators} +}{ +\endtabularx +} + + +\newcommand{\entityTableRow}[4]{ + #1 & \texttt{\uppercase{#2}} & \texttt{\uppercase{#3}} & #4 \\ \hline +} diff --git a/src/utils/index.tex b/src/utils/index.tex index 1f0f58d..31620d9 100644 --- a/src/utils/index.tex +++ b/src/utils/index.tex @@ -1 +1,2 @@ \input{./src/utils/function-table.tex} +\input{./src/utils/entity-table.tex}