Merge branch 'Section-3/Description-of-the-Software-Design'

This commit is contained in:
Kristofers Solo 2023-10-30 18:57:20 +02:00
commit 9ae2a84497
24 changed files with 176 additions and 10 deletions

View File

@ -8,6 +8,7 @@
\usepackage{geometry} \usepackage{geometry}
\usepackage{graphicx} \usepackage{graphicx}
\usepackage{hyperref} \usepackage{hyperref}
\usepackage{array}
\usepackage{indentfirst} \usepackage{indentfirst}
\usepackage{multicol} \usepackage{multicol}
\usepackage{multirow} \usepackage{multirow}
@ -32,11 +33,10 @@
% \usepackage{mdframed} % \usepackage{mdframed}
\usetikzlibrary{positioning} \usetikzlibrary{positioning}
\hypersetup{ \hypersetup{
colorlinks=true, colorlinks=true,
linkcolor=black, linkcolor=black,
urlcolor=blue urlcolor=black
} }
\urlstyle{rm} \urlstyle{rm}
@ -130,6 +130,7 @@
\input{./src/legends.tex} \input{./src/legends.tex}
\input{./src/description/index.tex} \input{./src/description/index.tex}
\input{./src/requirements/index.tex} \input{./src/requirements/index.tex}
\input{./src/design/index.tex}
% \input{./src/test.tex} % \input{./src/test.tex}
\end{document} \end{document}

View File

@ -0,0 +1,3 @@
\begin{entityTable}{KontaStavoklis}{entity-account-status}
\entityTableRow{teksts}{varchar(255)}{unique, not null}{Konta stāvokļa apraksts}
\end{entityTable}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -0,0 +1,3 @@
\begin{entityTable}{IstabasStavoklis}{entity-room-status}
\entityTableRow{teksts}{varchar(255)}{unique, not null}{Istabas stāvokļa apraksts}
\end{entityTable}

View File

@ -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}

View File

@ -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}

View File

@ -0,0 +1,3 @@
\begin{entityTable}{AbonementaStavoklis}{entity-subscription-status}
\entityTableRow{teksts}{varchar(255)}{unique, not null}{Abonementa stāvokļa apraksts}
\end{entityTable}

View File

@ -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}

4
src/design/index.tex Normal file
View File

@ -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}

View File

@ -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}

View File

@ -15,7 +15,7 @@ CREATE TABLE
CREATE TABLE CREATE TABLE
"Attels" ( "Attels" (
"id" SERIAL8 PRIMARY KEY NOT NULL, "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 "pievienosanas_laiks" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
); );
@ -93,7 +93,7 @@ CREATE TABLE
); );
CREATE TABLE CREATE TABLE
"SpelesUzstadijums" ( "SpelesKonfiguracija" (
"id" SERIAL8 PRIMARY KEY NOT NULL, "id" SERIAL8 PRIMARY KEY NOT NULL,
"nosaukums" VARCHAR(255) UNIQUE NOT NULL, "nosaukums" VARCHAR(255) UNIQUE NOT NULL,
"apraksts" TEXT DEFAULT '' NOT NULL, "apraksts" TEXT DEFAULT '' NOT NULL,
@ -113,16 +113,16 @@ CREATE TABLE
"piekluves_kods" CHAR(6) UNIQUE, "piekluves_kods" CHAR(6) UNIQUE,
"vai_rada_miruso_lomu" BOOL DEFAULT FALSE NOT NULL, "vai_rada_miruso_lomu" BOOL DEFAULT FALSE NOT NULL,
"izveidosanas_laiks" TIMESTAMP DEFAULT CURRENT_TIMESTAMP 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 ("stavoklis") REFERENCES "IstabasStavoklis" ("id"),
FOREIGN KEY ("speles_uzstadijums") REFERENCES "SpelesUzstadijums" ("id") FOREIGN KEY ("speles_konfiguracija") REFERENCES "SpelesKonfiguracija" ("id")
); );
CREATE TABLE CREATE TABLE
"SpelesNotikums" ( "SpelesNotikums" (
"id" SERIAL8 PRIMARY KEY NOT NULL, "id" SERIAL8 PRIMARY KEY NOT NULL,
"nosaukums" VARCHAR(255) UNIQUE 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), "veids" VARCHAR(255),
"ir_redzams" BOOL DEFAULT FALSE NOT NULL, "ir_redzams" BOOL DEFAULT FALSE NOT NULL,
"izveidosanas_laiks" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, "izveidosanas_laiks" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
@ -189,10 +189,10 @@ CREATE TABLE
CREATE TABLE CREATE TABLE
"SpelesUzstatijumuLomas" ( "SpelesUzstatijumuLomas" (
"speles_uzstadijums" INT8 NOT NULL, "speles_konfiguracija" INT8 NOT NULL,
"speles_loma" INT8 NOT NULL, "speles_loma" INT8 NOT NULL,
PRIMARY KEY ("speles_uzstadijums", "speles_loma"), PRIMARY KEY ("speles_konfiguracija", "speles_loma"),
FOREIGN KEY ("speles_uzstadijums") REFERENCES "SpelesUzstadijums" ("id"), FOREIGN KEY ("speles_konfiguracija") REFERENCES "SpelesKonfiguracija" ("id"),
FOREIGN KEY ("speles_loma") REFERENCES "SpelesLoma" ("id") FOREIGN KEY ("speles_loma") REFERENCES "SpelesLoma" ("id")
); );

View File

@ -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
}

View File

@ -1 +1,2 @@
\input{./src/utils/function-table.tex} \input{./src/utils/function-table.tex}
\input{./src/utils/entity-table.tex}