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

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
"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")
);

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/entity-table.tex}