Skip to content

Commit

Permalink
Rozwiązanie zadania numer 6
Browse files Browse the repository at this point in the history
Poprawki do rozwiązania
  • Loading branch information
fx30400 authored and Bartlomiej GORAJ committed Jan 25, 2023
1 parent a1f4a7e commit 5efe1b9
Show file tree
Hide file tree
Showing 68 changed files with 1,797 additions and 282 deletions.
44 changes: 44 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Handle line endings automatically for files detected as text
# and leave all files detected as binary untouched.
* text=auto

#
# The above will handle all files NOT found below
#
# These files are text and should be normalized (Convert crlf => lf)
*.gitattributes text
.gitignore text
*.md text diff=markdown
.sh text eol=lf

#
# Exclude files from exporting
#

.gitattributes export-ignore
.gitignore export-ignore

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
72 changes: 54 additions & 18 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,37 +1,73 @@
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
/build/

# Ignore Gradle GUI config
gradle-app.setting

### STS ###
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar

# Cache of project
.gradletasknamecache

# gradle/wrapper/gradle-wrapper.properties
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/

### Mac OS ###
.DS_Store

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
41 changes: 28 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,28 +1,38 @@
# Set Up

1. W folderze projektu otwórz terminal i wpisz "docker compose up" w celu pobrania i uruchomienia środowiska niezbędnego do poprawnego działania aplikacji.
1. W folderze projektu otwórz terminal i wpisz "docker compose up" w celu pobrania i uruchomienia środowiska niezbędnego
do poprawnego działania aplikacji.

2. Wpisz komendę "gradle build" w bash

3. Wejdź w folder build, następnie uruchom program używając komendy ```java -jar library-0.0.1-SNAPSHOT.jar --spring.datasource.url=jdbc:postgresql://localhost:5432/postgres --spring.datasource.username=admin --spring.datasource.password=admin```, w razie potrzeby podmieniając dane dostępu do bazy danych na własne
3. Wejdź w folder build, następnie uruchom program używając
komendy ```java -jar library-0.0.1-SNAPSHOT.jar --spring.datasource.url=jdbc:postgresql://localhost:5432/postgres --spring.datasource.username=admin --spring.datasource.password=admin```,
w razie potrzeby podmieniając dane dostępu do bazy danych na własne

# Rollback

- W celu cofnięcia bazy danych do poprzedniej wersji należy użyć polecenia "gradle rollbackCount -Purl=jdbc:postgresql://localhost:5432/postgres -Pusername=admin -Ppassword=admin -PliquibaseCommandValue=1", podmieniając liczbę 1 na ilość zmian, które chcemy cofnąć.
- W celu cofnięcia bazy danych do poprzedniej wersji należy użyć polecenia "gradle rollbackCount -Purl=jdbc:postgresql:
//localhost:5432/postgres -Pusername=admin -Ppassword=admin -PliquibaseCommandValue=1", podmieniając liczbę 1 na ilość
zmian, które chcemy cofnąć.

- W celu cofnięcia się do konkretnej daty należy użyć polecenia "gradle rollbackToDate -Purl=jdbc:postgresql://localhost:5432/postgres -Pusername=admin -Ppassword=admin -PliquibaseCommandValue=DATA" zamieniając DATA na datę, do której chcesz się cofnąć używając formatu ```YYYY-MM-DD HH:MM:SS``` lub ```YYYY-MM-DD'T'HH:MM:SS``` (Można podać wyłącznie datę lub czas)
- W celu cofnięcia się do konkretnej daty należy użyć polecenia "gradle rollbackToDate -Purl=jdbc:postgresql:
//localhost:5432/postgres -Pusername=admin -Ppassword=admin -PliquibaseCommandValue=DATA" zamieniając DATA na datę, do
której chcesz się cofnąć używając formatu ```YYYY-MM-DD HH:MM:SS``` lub ```YYYY-MM-DD'T'HH:MM:SS``` (Można podać
wyłącznie datę lub czas)

# Rodzaje dziedziczenia:

## Osobne tabele (Table per concrete class)

![alt Graficzne przedstawienie osobnych tabel](https://www.mimuw.edu.pl/~sroka/archiwalne/2006j2ee/lab9/10/WWW/table_per_concrete_class.png)

Rozwiązanie najbardziej podstawowe, w którym każdy obiekt ma swoją własną tabelę, nie mając ze sobą żadnych fizycznych powiązań i są w pełni niezależne od siebie nawzajem.
Rozwiązanie najbardziej podstawowe, w którym każdy obiekt ma swoją własną tabelę, nie mając ze sobą żadnych fizycznych
powiązań i są w pełni niezależne od siebie nawzajem.

### Cechy rozwiązania:

- Jest to mało optymalne rozwiązanie i wraz z rozrośnięciem się aplikacji zwiększa się obciążenie dla bazy danych, ponieważ takie rozwiązanie wymaga większej ilości zapytań
- Jest to mało optymalne rozwiązanie i wraz z rozrośnięciem się aplikacji zwiększa się obciążenie dla bazy danych,
ponieważ takie rozwiązanie wymaga większej ilości zapytań
- Zmiana jakiegokolwiek wspólnego pola wymaga ręcznego zmieniania każdej klasy, w której występowało takie pole.
- Jakiekolwiek bardziej zaawansowane operacje, jak np. więzy integralności stają się wyjątkowo trudne do wykonania

Expand All @@ -46,9 +56,9 @@ W takim rozwiązaniu klucz główny z tabeli "rodzic" oraz tabeli "dziecko" będ

![alt Graficzne przedstawienie dziedziczenia pojedynczej tabeli](http://db.fizyka.pw.edu.pl/~bzdak/bazy_danych_ed_20/_images/db-schema-single-table.svg)

Używamy jednej tabeli, która zawiera dane zarówno o rodzicach, jak i dzieciach, zawiera ona kolumny obu tych tabel.
Używamy jednej tabeli, która zawiera dane zarówno o rodzicach, jak i dzieciach, zawiera ona kolumny obu tych tabel.

Zawiera też dodatkową kolumnę, w której znajduje się informacja, czy dany wiersz reprezentuje rodzica, czy dziecko.
Zawiera też dodatkową kolumnę, w której znajduje się informacja, czy dany wiersz reprezentuje rodzica, czy dziecko.

Dane dotyczące rodzica w wierszu reprezentującym dziecko mają wartość NULL.

Expand All @@ -64,19 +74,24 @@ Dane dotyczące rodzica w wierszu reprezentującym dziecko mają wartość NULL.

![alt Graficzne przedstawienie dziedziczenia z wykorzystaniem metody z PostgreSQL](http://db.fizyka.pw.edu.pl/~bzdak/bazy_danych_ed_20/_images/db-schema-inherits.svg)

PostgreSQL umożliwia użycie wbudowanej metody dziedziczenia między tabelami o nazwie [INHERITS](https://www.postgresql.org/docs/current/ddl-inherit.html)
PostgreSQL umożliwia użycie wbudowanej metody dziedziczenia między tabelami o
nazwie [INHERITS](https://www.postgresql.org/docs/current/ddl-inherit.html)

Działa ona w podobny sposób do rozwiązania [Dziedziczenie tabel](#Dziedziczenie tabel (Table per subclass)) wykonując przy tym większość czynności za nas.
Działa ona w podobny sposób do rozwiązania [Dziedziczenie tabel](#Dziedziczenie tabel (Table per subclass)) wykonując
przy tym większość czynności za nas.

Tabela dziedzicząca z nadrzędnej (tutaj "czytelnik") oprócz PK (powstanie kolumna id, jednak z niezależną zawartością).

Jeśli zostaną dodane jakieś dane dla tabeli dziedziczącej (tutaj rodzic lub dziecko), to zostaną one również umieszczone w tabeli nadrzędnej ("czytelnik").
Jeśli zostaną dodane jakieś dane dla tabeli dziedziczącej (tutaj rodzic lub dziecko), to zostaną one również umieszczone
w tabeli nadrzędnej ("czytelnik").

### Cechy tego rozwiązania

- Może być problem z osobą, która jest i studentem i pracownikiem.
- Są problemy z unikalnymi SQL Constants. (nie pamiętam spolszczenia dlatego wrzucam nazwę po angielsku)
- Tabela, po której dziedziczą inne tabele, nie wspiera wszystkich operacji SQL.
- Działa wyłącznie na PostgreSQL i uniemożliwia użycie naszej aplikacji ze współpracy z jakimkolwiek innym silnikiem bazodanowym
- Działa wyłącznie na PostgreSQL i uniemożliwia użycie naszej aplikacji ze współpracy z jakimkolwiek innym silnikiem
bazodanowym

<sub><sup>Grafiki oraz w dużej mierze informacje kradzione ze strony [Politechniki Warszawskiej](http://db.fizyka.pw.edu.pl/~bzdak)
<sub><sup>Grafiki oraz w dużej mierze informacje kradzione ze
strony [Politechniki Warszawskiej](http://db.fizyka.pw.edu.pl/~bzdak)
40 changes: 13 additions & 27 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
buildscript {
ext {
springBootVersion = '2.7.3'
springBootVersion = '2.7.7'
}
repositories {
mavenLocal()
maven {
url "https://nexus.rbinternational.corp/nexus/repository/public" }
url "https://nexus.rbinternational.corp/nexus/repository/public"
}
mavenCentral()
gradlePluginPortal()
}
dependencies {
classpath("org.springframework.boot:spring-boot-starter:${springBootVersion}")
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath "org.postgresql:postgresql:42.4.2"
classpath "org.liquibase:liquibase-gradle-plugin:2.1.1"
classpath "org.yaml:snakeyaml:1.31"
}
}

apply plugin: 'org.liquibase.gradle'
apply plugin: 'org.springframework.boot'
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'
Expand All @@ -26,31 +23,20 @@ group = 'pl.com.rbinternational'
version = '0.0.1-SNAPSHOT'

repositories {
mavenLocal()
maven {
url "https://nexus.rbinternational.corp/nexus/repository/public" }
maven { url "https://nexus.rbinternational.corp/nexus/repository/public" }
maven { url "https://plugins.gradle.org/m2/" }
mavenCentral()
gradlePluginPortal()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.liquibase:liquibase-core'
implementation 'org.postgresql:postgresql'
implementation 'org.yaml:snakeyaml'
liquibaseRuntime 'org.liquibase:liquibase-core'
liquibaseRuntime 'org.postgresql:postgresql'
liquibaseRuntime 'org.yaml:snakeyaml'
liquibaseRuntime 'info.picocli:picocli:4.6.3'
}

liquibase {
activities {
main {
classPath "src/main/resources/"
changeLogFile "db/changelog/db.changelog-master.yaml"
url project.hasProperty("url")?project.getProperty("url"):"jdbc:postgresql://localhost:5432/postgres"
username project.hasProperty("username")?project.getProperty("username"):"admin"
password project.hasProperty("password")?project.getProperty("password"):"admin"
}
}
bootJar {
enabled = false
}

jar {
enabled = true
}
73 changes: 73 additions & 0 deletions library-app/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
buildscript {
ext {
springBootVersion = '2.7.7'
}
repositories {
maven {
url "https://nexus.rbinternational.corp/nexus/repository/public"
}
mavenCentral()
gradlePluginPortal()
}
dependencies {
classpath("org.springframework.boot:spring-boot-starter:${springBootVersion}")
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
classpath "org.postgresql:postgresql:42.4.2"
classpath "org.liquibase:liquibase-gradle-plugin:2.1.1"
classpath "org.yaml:snakeyaml:1.31"
}
}

apply plugin: 'org.liquibase.gradle'
apply plugin: 'org.springframework.boot'
apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'

group = 'pl.com.rbinternational'
version = '0.0.1-SNAPSHOT'

repositories {
maven { url "https://nexus.rbinternational.corp/nexus/repository/public" }
maven { url "https://plugins.gradle.org/m2/" }
mavenCentral()
gradlePluginPortal()
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa:2.7.7'
implementation 'org.liquibase:liquibase-core'
implementation 'org.postgresql:postgresql'
implementation 'org.yaml:snakeyaml'
liquibaseRuntime 'org.liquibase:liquibase-core'
liquibaseRuntime 'org.postgresql:postgresql'
liquibaseRuntime 'org.yaml:snakeyaml'
liquibaseRuntime 'info.picocli:picocli:4.7.0'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.9.0'
implementation project(':library-gui')
}

test {
useJUnitPlatform()
}

jar {
manifest {
attributes(
'Main-Class': 'pl.com.rbinternational.LibraryApplication'
)
}
}

liquibase {
activities {
main {
classPath "library-app/src/main/resources"
changeLogFile "db/changelog/db.changelog-master.yaml"
url project.hasProperty("url") ? project.getProperty("url") : "jdbc:postgresql://localhost:5432/postgres"
username project.hasProperty("username") ? project.getProperty("username") : "admin"
password project.hasProperty("password") ? project.getProperty("password") : "admin"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package pl.com.rbinternational;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class LibraryApplication {

public static void main(String[] args) {
SpringApplication.run(LibraryApplication.class, args);
}
}
Loading

0 comments on commit 5efe1b9

Please sign in to comment.