From 48dfaefa0cd0c61fb315f7fe9b4c52c79f7d18b7 Mon Sep 17 00:00:00 2001 From: Takiguchi Date: Sun, 2 Sep 2018 22:46:36 +0200 Subject: [PATCH 1/7] Add the version revisions system. --- .../core/entities/persistence/Version.java | 43 +++++++++++++++ .../entities/persistence/VersionRevision.java | 52 +++++++++++++++++++ .../core/repositories/VersionRepository.java | 16 ++++++ .../VersionRevisionRepository.java | 16 ++++++ .../VersionRevisionController.java | 33 ++++++++++++ src/main/sql/update_1.0.1.sql | 25 +++++++++ src/main/ts/src/app/app.module.ts | 6 ++- src/main/ts/src/app/app.routes.ts | 2 + src/main/ts/src/app/core/entities.ts | 28 +++++++--- .../ts/src/app/footer/footer.component.html | 6 ++- .../ts/src/app/footer/footer.component.scss | 4 ++ .../version-revisions.component.html | 22 ++++++++ .../version-revisions.component.ts | 48 +++++++++++++++++ .../version-revisions.service.ts | 23 ++++++++ 14 files changed, 315 insertions(+), 9 deletions(-) create mode 100755 src/main/java/org/codiki/core/entities/persistence/Version.java create mode 100755 src/main/java/org/codiki/core/entities/persistence/VersionRevision.java create mode 100755 src/main/java/org/codiki/core/repositories/VersionRepository.java create mode 100755 src/main/java/org/codiki/core/repositories/VersionRevisionRepository.java create mode 100755 src/main/java/org/codiki/versionrevisions/VersionRevisionController.java create mode 100755 src/main/sql/update_1.0.1.sql create mode 100755 src/main/ts/src/app/version-revisions/version-revisions.component.html create mode 100755 src/main/ts/src/app/version-revisions/version-revisions.component.ts create mode 100755 src/main/ts/src/app/version-revisions/version-revisions.service.ts diff --git a/src/main/java/org/codiki/core/entities/persistence/Version.java b/src/main/java/org/codiki/core/entities/persistence/Version.java new file mode 100755 index 0000000..d2230e0 --- /dev/null +++ b/src/main/java/org/codiki/core/entities/persistence/Version.java @@ -0,0 +1,43 @@ +package org.codiki.core.entities.persistence; + +import java.io.Serializable; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +/** + * Entity which represents a version for the version revisions panel. + * + * @author florian + * + */ +@Entity +@Table(name="version") +public class Version implements Serializable { + private static final long serialVersionUID = -8803744005903941330L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String number; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } +} diff --git a/src/main/java/org/codiki/core/entities/persistence/VersionRevision.java b/src/main/java/org/codiki/core/entities/persistence/VersionRevision.java new file mode 100755 index 0000000..6065fc0 --- /dev/null +++ b/src/main/java/org/codiki/core/entities/persistence/VersionRevision.java @@ -0,0 +1,52 @@ +package org.codiki.core.entities.persistence; + +import java.io.Serializable; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +@Entity +@Table(name="version_revision") +public class VersionRevision implements Serializable { + private static final long serialVersionUID = 1837590467941917225L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String text; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "version_id") + private Version version; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Version getVersion() { + return version; + } + + public void setVersion(Version version) { + this.version = version; + } +} diff --git a/src/main/java/org/codiki/core/repositories/VersionRepository.java b/src/main/java/org/codiki/core/repositories/VersionRepository.java new file mode 100755 index 0000000..8f0fdb9 --- /dev/null +++ b/src/main/java/org/codiki/core/repositories/VersionRepository.java @@ -0,0 +1,16 @@ +package org.codiki.core.repositories; + +import java.util.Optional; + +import org.codiki.core.entities.persistence.Version; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface VersionRepository extends CrudRepository { + @Query("SELECT v FROM Version v ORDER BY v.number DESC") + Iterable findAllOrderByNumber(); + + Optional findByNumber(String pNumber); +} diff --git a/src/main/java/org/codiki/core/repositories/VersionRevisionRepository.java b/src/main/java/org/codiki/core/repositories/VersionRevisionRepository.java new file mode 100755 index 0000000..32a3c1b --- /dev/null +++ b/src/main/java/org/codiki/core/repositories/VersionRevisionRepository.java @@ -0,0 +1,16 @@ +package org.codiki.core.repositories; + +import java.util.List; + +import org.codiki.core.entities.persistence.VersionRevision; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +@Repository +public interface VersionRevisionRepository extends CrudRepository { + + @Query("SELECT vr FROM VersionRevision vr JOIN FETCH vr.version WHERE vr.version.number = :versionNumber") + List findByVersionNumber(@Param("versionNumber") final String pVersionNumber); +} diff --git a/src/main/java/org/codiki/versionrevisions/VersionRevisionController.java b/src/main/java/org/codiki/versionrevisions/VersionRevisionController.java new file mode 100755 index 0000000..a8bea5f --- /dev/null +++ b/src/main/java/org/codiki/versionrevisions/VersionRevisionController.java @@ -0,0 +1,33 @@ +package org.codiki.versionrevisions; + +import org.codiki.core.entities.persistence.Version; +import org.codiki.core.entities.persistence.VersionRevision; +import org.codiki.core.repositories.VersionRepository; +import org.codiki.core.repositories.VersionRevisionRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/versionrevisions") +public class VersionRevisionController { + + @Autowired + private VersionRevisionRepository repository; + + @Autowired + private VersionRepository versionRepository; + + @GetMapping("/versions") + public Iterable getVersions() { + return versionRepository.findAllOrderByNumber(); + } + + @GetMapping("/{versionNumber}") + public Iterable getVersionRevisionByVersionNumber( + @PathVariable("versionNumber") final String pVersionNumber) { + return repository.findByVersionNumber(pVersionNumber); + } +} diff --git a/src/main/sql/update_1.0.1.sql b/src/main/sql/update_1.0.1.sql new file mode 100755 index 0000000..d97fde3 --- /dev/null +++ b/src/main/sql/update_1.0.1.sql @@ -0,0 +1,25 @@ +CREATE TABLE IF NOT EXISTS version ( + id SERIAL, + number VARCHAR, + CONSTRAINT pk_version PRIMARY KEY (id), + CONSTRAINT unique_number UNIQUE (number) +); + +CREATE TABLE IF NOT EXISTS version_revision ( + id SERIAL, + text VARCHAR, + version_id INTEGER, + CONSTRAINT pk_version_revision PRIMARY KEY (id), + CONSTRAINT fk_version_revision_version_id FOREIGN KEY (version_id) REFERENCES version (id) +); +CREATE INDEX IF NOT EXISTS version_id_idx ON version_revision (version_id); + +INSERT INTO version (number) VALUES ('1.0.0'), ('1.0.1'); + +INSERT INTO version_revision (version_id, text) VALUES +(2, 'Sécurisation des routes de modification du profil.'), +(2, 'Correction de l''injection de code pour les images dans l''écran d''édition de wikis.'), +(2, 'Correction du système de sessions pour pouvoir ouvrir plusieurs onglets sans être déconnecté.'), +(2, 'Correction de l''accès à la documentation d''utilisation.'), +(2, 'Correction du placement d''icônes dans l''écran des paramètres de compte.'), +(2, 'Ajout de l''écran de révisions de versions'); diff --git a/src/main/ts/src/app/app.module.ts b/src/main/ts/src/app/app.module.ts index 72a84a4..83a3a0f 100755 --- a/src/main/ts/src/app/app.module.ts +++ b/src/main/ts/src/app/app.module.ts @@ -30,6 +30,7 @@ import { CreateUpdatePostComponent } from './posts/create-update/create-update-p import { ForbiddenComponent } from './forbidden/forbidden.component'; import { SearchComponent } from './search/search.component'; import { SigninComponent } from './signin/signin.component'; +import { VersionRevisionComponent } from './version-revisions/version-revisions.component'; // html components import { ProgressBarComponent } from './core/directives/progress-bar/progress-bar.component'; @@ -48,6 +49,7 @@ import { ProfilEditionService } from './account-settings/profil-edition/profil-e import { HeaderService } from './header/header.service'; import { CreateUpdatePostService } from './posts/create-update/create-update-post.service'; import { SearchService } from './search/search.service'; +import { VersionRevisionService } from './version-revisions/version-revisions.service'; // Guards import { AuthGuard } from './core/guards/auth.guard'; @@ -78,7 +80,8 @@ import { SigninService } from './signin/signin.service'; SigninComponent, ProgressBarComponent, SpinnerComponent, - SearchBarComponent + SearchBarComponent, + VersionRevisionComponent ], imports: [ BrowserModule, @@ -104,6 +107,7 @@ import { SigninService } from './signin/signin.service'; HeaderService, CreateUpdatePostService, SearchService, + VersionRevisionService, AuthGuard, { provide: HTTP_INTERCEPTORS, diff --git a/src/main/ts/src/app/app.routes.ts b/src/main/ts/src/app/app.routes.ts index 760996e..c84ac12 100755 --- a/src/main/ts/src/app/app.routes.ts +++ b/src/main/ts/src/app/app.routes.ts @@ -14,6 +14,7 @@ import { CreateUpdatePostComponent } from './posts/create-update/create-update-p import { ForbiddenComponent } from './forbidden/forbidden.component'; import { ProfilEditionComponent } from './account-settings/profil-edition/profil-edition.component'; import { SearchComponent } from './search/search.component'; +import { VersionRevisionComponent } from './version-revisions/version-revisions.component'; import { AuthGuard } from './core/guards/auth.guard'; @@ -31,6 +32,7 @@ export const appRoutes: Routes = [ { path: 'accountSettings', component: AccountSettingsComponent, canActivate: [AuthGuard] }, { path: 'changePassword', component: ChangePasswordComponent, canActivate: [AuthGuard] }, { path: 'profilEdit', component: ProfilEditionComponent, canActivate: [AuthGuard] }, + { path: 'versionrevisions', component: VersionRevisionComponent }, { path: 'forbidden', component: ForbiddenComponent }, { path: '', redirectTo: '/home', pathMatch: 'full' }, { path: '**', component: NotFoundComponent } diff --git a/src/main/ts/src/app/core/entities.ts b/src/main/ts/src/app/core/entities.ts index 073f87e..f4653d5 100755 --- a/src/main/ts/src/app/core/entities.ts +++ b/src/main/ts/src/app/core/entities.ts @@ -2,7 +2,7 @@ export class Role { constructor( public id: number, public name: string - ) {} + ) { } } export class User { @@ -15,7 +15,7 @@ export class User { public inscriptionDate: Date, public role: Role, public token: string - ) {} + ) { } } export class Post { @@ -28,7 +28,7 @@ export class Post { public creationDate: Date, public author: User, public category: Category - ) {} + ) { } } export class Category { @@ -36,14 +36,14 @@ export class Category { public id: number, public name: string, public listSubCategories: Array - ) {} + ) { } } export class Image { constructor( public id: number, public link: string - ) {} + ) { } } /** @@ -54,5 +54,21 @@ export class PasswordWrapper { public oldPassword: string, public newPassword: string, public confirmPassword: string - ) {} + ) { } } + +export class Version { + constructor( + public id: number, + public number: string, + public active: boolean + ) { } +} + +export class VersionRevision { + constructor( + public id: number, + public text: string, + public version: Version + ) { } +} \ No newline at end of file diff --git a/src/main/ts/src/app/footer/footer.component.html b/src/main/ts/src/app/footer/footer.component.html index f52ac08..5f0c2c1 100755 --- a/src/main/ts/src/app/footer/footer.component.html +++ b/src/main/ts/src/app/footer/footer.component.html @@ -1,10 +1,12 @@