From acd9e79fce694eb504801063224dbd588abae9d0 Mon Sep 17 00:00:00 2001
From: grimsi <9295182+grimsi@users.noreply.github.com>
Date: Sun, 14 Aug 2022 15:26:09 +0200
Subject: [PATCH] Added field "addedToLibrary" to DetectedGame Integrated
Flyway for DB Migrations Removed unused DTO classes
---
backend/pom.xml | 8 +-
.../config/SecurityConfiguration.java | 1 +
.../java/de/grimsi/gameyfin/dto/GameDto.java | 24 ---
.../gameyfin/dto/UsernamePasswordDto.java | 9 --
.../gameyfin/entities/DetectedGame.java | 4 +
.../src/main/resources/config/database.yml | 4 +-
.../V1_0_0__Initial_Database_Setup.sql | 148 ++++++++++++++++++
...d_Field_addedToLibrary_to_DetectedGame.sql | 4 +
.../src/app/models/dtos/DetectedGameDto.ts | 1 +
9 files changed, 168 insertions(+), 35 deletions(-)
delete mode 100644 backend/src/main/java/de/grimsi/gameyfin/dto/GameDto.java
delete mode 100644 backend/src/main/java/de/grimsi/gameyfin/dto/UsernamePasswordDto.java
create mode 100644 backend/src/main/resources/db/migration/V1_0_0__Initial_Database_Setup.sql
create mode 100644 backend/src/main/resources/db/migration/V1_1_0__Add_Field_addedToLibrary_to_DetectedGame.sql
diff --git a/backend/pom.xml b/backend/pom.xml
index 6906b6d..c795310 100644
--- a/backend/pom.xml
+++ b/backend/pom.xml
@@ -87,6 +87,11 @@
h2
runtime
+
+ org.flywaydb
+ flyway-core
+
+
@@ -144,8 +149,9 @@
**/*.properties
**/*.yml
**/*.yaml
- **/*.json
+ **/*.sql
**/*.txt
+ **/*.json
**/*.js
**/*.css
**/*.html
diff --git a/backend/src/main/java/de/grimsi/gameyfin/config/SecurityConfiguration.java b/backend/src/main/java/de/grimsi/gameyfin/config/SecurityConfiguration.java
index 22d2812..889989b 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/config/SecurityConfiguration.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/config/SecurityConfiguration.java
@@ -35,6 +35,7 @@ public class SecurityConfiguration {
@Bean
protected SecurityFilterChain httpSecurity(HttpSecurity http) throws Exception {
http.csrf().disable();
+ http.headers().frameOptions().disable();
http.httpBasic(Customizer.withDefaults());
return http.build();
}
diff --git a/backend/src/main/java/de/grimsi/gameyfin/dto/GameDto.java b/backend/src/main/java/de/grimsi/gameyfin/dto/GameDto.java
deleted file mode 100644
index 8f72c3a..0000000
--- a/backend/src/main/java/de/grimsi/gameyfin/dto/GameDto.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package de.grimsi.gameyfin.dto;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.File;
-import java.time.Instant;
-import java.util.List;
-
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class GameDto {
- private String name;
- private String publisher;
- private String slug;
- private Instant releaseDate;
-
- private List files;
- private Long fileSize;
-}
diff --git a/backend/src/main/java/de/grimsi/gameyfin/dto/UsernamePasswordDto.java b/backend/src/main/java/de/grimsi/gameyfin/dto/UsernamePasswordDto.java
deleted file mode 100644
index 2f16123..0000000
--- a/backend/src/main/java/de/grimsi/gameyfin/dto/UsernamePasswordDto.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package de.grimsi.gameyfin.dto;
-
-import lombok.Data;
-
-@Data
-public class UsernamePasswordDto {
- private String username;
- private String password;
-}
diff --git a/backend/src/main/java/de/grimsi/gameyfin/entities/DetectedGame.java b/backend/src/main/java/de/grimsi/gameyfin/entities/DetectedGame.java
index 5d27d91..7435cba 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/entities/DetectedGame.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/entities/DetectedGame.java
@@ -3,6 +3,7 @@ package de.grimsi.gameyfin.entities;
import lombok.*;
import org.hibernate.Hibernate;
+import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import java.time.Instant;
@@ -86,6 +87,9 @@ public class DetectedGame {
@Column(columnDefinition = "boolean default false")
private boolean confirmedMatch;
+ @CreationTimestamp
+ private Instant addedToLibrary;
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/backend/src/main/resources/config/database.yml b/backend/src/main/resources/config/database.yml
index 0e02ae7..7551f4d 100644
--- a/backend/src/main/resources/config/database.yml
+++ b/backend/src/main/resources/config/database.yml
@@ -9,7 +9,9 @@ spring:
entity_copy_observer: allow
database-platform: org.hibernate.dialect.H2Dialect
hibernate:
- ddl-auto: update
+ ddl-auto: none
+ flyway:
+ baseline-on-migrate: true
datasource:
username: gfadmin
password: gameyfin
diff --git a/backend/src/main/resources/db/migration/V1_0_0__Initial_Database_Setup.sql b/backend/src/main/resources/db/migration/V1_0_0__Initial_Database_Setup.sql
new file mode 100644
index 0000000..1c3687f
--- /dev/null
+++ b/backend/src/main/resources/db/migration/V1_0_0__Initial_Database_Setup.sql
@@ -0,0 +1,148 @@
+-- Automatically generated by JPA
+
+-- Hibernate sequence
+create sequence HIBERNATE_SEQUENCE start with 1 increment by 1;
+
+-- Detected Games
+create table DETECTED_GAME
+(
+ slug varchar(255) not null,
+ category varchar(255),
+ confirmed_match boolean default false,
+ cover_id varchar(255) not null,
+ critics_rating integer,
+ disk_size bigint not null,
+ lan_support boolean not null,
+ max_players integer not null,
+ offline_coop boolean not null,
+ online_coop boolean not null,
+ path varchar(255) not null,
+ release_date timestamp,
+ summary CLOB,
+ title varchar(255) not null,
+ total_rating integer,
+ user_rating integer,
+ primary key (slug)
+);
+
+-- Companies
+create table COMPANY
+(
+ slug varchar(255) not null,
+ logo_id varchar(255),
+ name varchar(255) not null,
+ primary key (slug)
+);
+
+-- Genres
+create table GENRE
+(
+ slug varchar(255) not null,
+ name varchar(255),
+ primary key (slug)
+);
+
+-- Themes
+create table THEME
+(
+ slug varchar(255) not null,
+ name varchar(255),
+ primary key (slug)
+);
+
+-- Keywords
+create table KEYWORD
+(
+ slug varchar(255) not null,
+ name varchar(255),
+ primary key (slug)
+);
+
+-- Player Perspectives
+create table PLAYER_PERSPECTIVE
+(
+ slug varchar(255) not null,
+ name varchar(255),
+ primary key (slug)
+);
+
+-- Unmappable files
+create table UNMAPPABLE_FILE
+(
+ id bigint not null,
+ path varchar(255),
+ primary key (id)
+);
+
+-- Game <-> Companies
+create table DETECTED_GAME_COMPANIES
+(
+ detected_game_slug varchar(255) not null,
+ companies_slug varchar(255) not null
+);
+alter table DETECTED_GAME_COMPANIES
+ add constraint companies_company_slug foreign key (companies_slug) references company;
+alter table DETECTED_GAME_COMPANIES
+ add constraint companies_detected_game_slug foreign key (detected_game_slug) references detected_game;
+
+-- Game <-> Genres
+create table DETECTED_GAME_GENRES
+(
+ detected_game_slug varchar(255) not null,
+ genres_slug varchar(255) not null
+);
+alter table DETECTED_GAME_GENRES
+ add constraint genres_genre_slug foreign key (genres_slug) references genre;
+alter table DETECTED_GAME_GENRES
+ add constraint genres_detected_game_slug foreign key (detected_game_slug) references detected_game;
+
+-- Game <-> Themes
+create table DETECTED_GAME_THEMES
+(
+ detected_game_slug varchar(255) not null,
+ themes_slug varchar(255) not null
+);
+alter table DETECTED_GAME_THEMES
+ add constraint themes_theme_slug foreign key (themes_slug) references theme;
+alter table DETECTED_GAME_THEMES
+ add constraint themes_detected_game_slug foreign key (detected_game_slug) references detected_game;
+
+-- Game <-> Keywords
+create table DETECTED_GAME_KEYWORDS
+(
+ detected_game_slug varchar(255) not null,
+ keywords_slug varchar(255) not null
+);
+alter table DETECTED_GAME_KEYWORDS
+ add constraint keywords_keyword_slug foreign key (keywords_slug) references keyword;
+alter table DETECTED_GAME_KEYWORDS
+ add constraint keywords_detected_game_slug foreign key (detected_game_slug) references detected_game;
+
+-- Game <-> Player Perspectives
+create table DETECTED_GAME_PLAYER_PERSPECTIVES
+(
+ detected_game_slug varchar(255) not null,
+ player_perspectives_slug varchar(255) not null
+);
+alter table DETECTED_GAME_PLAYER_PERSPECTIVES
+ add constraint player_perspectives_player_perspective_slug foreign key (player_perspectives_slug) references player_perspective;
+alter table DETECTED_GAME_PLAYER_PERSPECTIVES
+ add constraint player_perspectives_detected_game_slug foreign key (detected_game_slug) references detected_game;
+
+-- Game <-> Videos
+create table DETECTED_GAME_VIDEO_IDS
+(
+ detected_game_slug varchar(255) not null,
+ video_ids varchar(255)
+);
+alter table DETECTED_GAME_VIDEO_IDS
+ add constraint video_ids_detected_game_slug foreign key (detected_game_slug) references detected_game;
+
+-- Game <-> Screenshots
+create table DETECTED_GAME_SCREENSHOT_IDS
+(
+ detected_game_slug varchar(255) not null,
+ screenshot_ids varchar(255)
+);
+alter table DETECTED_GAME_SCREENSHOT_IDS
+ add constraint screenshot_ids_detected_game_slug foreign key (detected_game_slug) references detected_game;
diff --git a/backend/src/main/resources/db/migration/V1_1_0__Add_Field_addedToLibrary_to_DetectedGame.sql b/backend/src/main/resources/db/migration/V1_1_0__Add_Field_addedToLibrary_to_DetectedGame.sql
new file mode 100644
index 0000000..e75fe44
--- /dev/null
+++ b/backend/src/main/resources/db/migration/V1_1_0__Add_Field_addedToLibrary_to_DetectedGame.sql
@@ -0,0 +1,4 @@
+-- Add field "addedToLibrary" to the "DetectedGame" table with the default value of CURRENT_TIMESTAMP()
+
+alter table DETECTED_GAME
+add added_to_library timestamp not null default CURRENT_TIMESTAMP()
\ No newline at end of file
diff --git a/frontend/src/app/models/dtos/DetectedGameDto.ts b/frontend/src/app/models/dtos/DetectedGameDto.ts
index 543c091..ccb7bff 100644
--- a/frontend/src/app/models/dtos/DetectedGameDto.ts
+++ b/frontend/src/app/models/dtos/DetectedGameDto.ts
@@ -30,4 +30,5 @@ export class DetectedGameDto {
path!: string;
diskSize!: number;
confirmedMatch!: boolean | undefined;
+ addedToLibrary!: Date;
}