diff --git a/back/pom.xml b/back/pom.xml
index 216ff23..bd7a1c0 100644
--- a/back/pom.xml
+++ b/back/pom.xml
@@ -20,7 +20,7 @@
kangaroo-and-rabbit
archidata
- 0.6.1
+ 0.6.3
org.slf4j
diff --git a/back/src/org/kar/karideo/WebLauncher.java b/back/src/org/kar/karideo/WebLauncher.java
index cfef1cf..dc54114 100755
--- a/back/src/org/kar/karideo/WebLauncher.java
+++ b/back/src/org/kar/karideo/WebLauncher.java
@@ -32,6 +32,7 @@ import org.kar.karideo.migration.Initialization;
import org.kar.karideo.migration.Migration20230810;
import org.kar.karideo.migration.Migration20231015;
import org.kar.karideo.migration.Migration20231126;
+import org.kar.karideo.migration.Migration20240226;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -60,7 +61,7 @@ public class WebLauncher {
migrationEngine.add(new Migration20230810());
migrationEngine.add(new Migration20231015());
migrationEngine.add(new Migration20231126());
- //migrationEngine.add(new Migration20231126());
+ migrationEngine.add(new Migration20240226());
WebLauncher.LOGGER.info("Migrate the DB [START]");
migrationEngine.migrateWaitAdmin(GlobalConfiguration.dbConfig);
WebLauncher.LOGGER.info("Migrate the DB [STOP]");
diff --git a/back/src/org/kar/karideo/api/SeasonResource.java b/back/src/org/kar/karideo/api/SeasonResource.java
index 62ec4b6..4f06f41 100644
--- a/back/src/org/kar/karideo/api/SeasonResource.java
+++ b/back/src/org/kar/karideo/api/SeasonResource.java
@@ -2,6 +2,7 @@ package org.kar.karideo.api;
import java.io.InputStream;
import java.util.List;
+import java.util.UUID;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;
@@ -31,20 +32,20 @@ import jakarta.ws.rs.core.Response;
@Produces({ MediaType.APPLICATION_JSON })
public class SeasonResource {
static final Logger LOGGER = LoggerFactory.getLogger(SeasonResource.class);
-
+
@GET
@Path("{id}")
@RolesAllowed("USER")
public static Season getWithId(@PathParam("id") final Long id) throws Exception {
return DataAccess.get(Season.class, id);
}
-
+
@GET
@RolesAllowed("USER")
public List get() throws Exception {
return DataAccess.gets(Season.class);
}
-
+
@GET
@Path("{id}")
@RolesAllowed("USER")
@@ -52,18 +53,18 @@ public class SeasonResource {
public Season get(@PathParam("id") final Long id) throws Exception {
return DataAccess.get(Season.class, id);
}
-
+
/* =============================================================================
* ADMIN SECTION:
* ============================================================================= */
-
+
@POST
@RolesAllowed("ADMIN")
@Consumes(MediaType.APPLICATION_JSON)
public Season put(final String jsonRequest) throws Exception {
return DataAccess.insertWithJson(Season.class, jsonRequest);
}
-
+
@PATCH
@Path("{id}")
@RolesAllowed("ADMIN")
@@ -72,7 +73,7 @@ public class SeasonResource {
DataAccess.updateWithJson(Season.class, id, jsonRequest);
return DataAccess.get(Season.class, id);
}
-
+
@DELETE
@Path("{id}")
@RolesAllowed("ADMIN")
@@ -80,7 +81,7 @@ public class SeasonResource {
DataAccess.delete(Season.class, id);
return Response.ok().build();
}
-
+
@POST
@Path("{id}/add_cover")
@RolesAllowed("ADMIN")
@@ -89,7 +90,7 @@ public class SeasonResource {
@FormDataParam("file") final FormDataContentDisposition fileMetaData) {
return DataTools.uploadCover(Season.class, id, fileName, fileInputStream, fileMetaData);
}
-
+
@GET
@Path("{id}/rm_cover/{coverId}")
@RolesAllowed("ADMIN")
@@ -97,8 +98,8 @@ public class SeasonResource {
AddOnManyToMany.removeLink(Season.class, id, "cover", coverId);
return Response.ok(DataAccess.get(Season.class, id)).build();
}
-
- public static Season getOrCreate(final String name, final Long seriesId) {
+
+ public static Season getOrCreate(final String name, final UUID seriesId) {
try {
Season out = DataAccess.getWhere(Season.class, new Condition(new QueryAnd(new QueryCondition("name", "=", name), new QueryCondition("parentId", "=", seriesId))));
if (out == null) {
@@ -114,5 +115,5 @@ public class SeasonResource {
}
return null;
}
-
+
}
diff --git a/back/src/org/kar/karideo/api/SeriesResource.java b/back/src/org/kar/karideo/api/SeriesResource.java
index c8a6d6d..c295a05 100644
--- a/back/src/org/kar/karideo/api/SeriesResource.java
+++ b/back/src/org/kar/karideo/api/SeriesResource.java
@@ -2,6 +2,7 @@ package org.kar.karideo.api;
import java.io.InputStream;
import java.util.List;
+import java.util.UUID;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;
@@ -98,7 +99,7 @@ public class SeriesResource {
return Response.ok(DataAccess.get(Series.class, id)).build();
}
- public static Series getOrCreate(final String name, final Long typeId) {
+ public static Series getOrCreate(final String name, final UUID typeId) {
try {
Series out = DataAccess.getWhere(Series.class, new Condition(new QueryAnd(new QueryCondition("name", "=", name), new QueryCondition("parentId", "=", typeId))));
if (out == null) {
diff --git a/back/src/org/kar/karideo/api/VideoResource.java b/back/src/org/kar/karideo/api/VideoResource.java
index 5508f04..9780bdb 100644
--- a/back/src/org/kar/karideo/api/VideoResource.java
+++ b/back/src/org/kar/karideo/api/VideoResource.java
@@ -4,6 +4,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.List;
+import java.util.UUID;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;
@@ -37,20 +38,20 @@ import jakarta.ws.rs.core.Response;
@Produces({ MediaType.APPLICATION_JSON })
public class VideoResource {
static final Logger LOGGER = LoggerFactory.getLogger(VideoResource.class);
-
+
@GET
@RolesAllowed("USER")
public List get() throws Exception {
return DataAccess.gets(Media.class);
}
-
+
@GET
@Path("{id}")
@RolesAllowed("USER")
public Media get(@PathParam("id") final Long id) throws Exception {
return DataAccess.get(Media.class, id);
}
-
+
@PATCH
@Path("{id}")
@RolesAllowed("ADMIN")
@@ -60,7 +61,7 @@ public class VideoResource {
DataAccess.updateWithJson(Media.class, id, jsonRequest);
return DataAccess.get(Media.class, id);
}
-
+
private String multipartCorrection(final String data) {
if (data == null) {
return null;
@@ -73,7 +74,7 @@ public class VideoResource {
}
return data;
}
-
+
@POST
@Path("/upload/")
@RolesAllowed("ADMIN")
@@ -91,7 +92,7 @@ public class VideoResource {
episode = multipartCorrection(episode);
title = multipartCorrection(title);
typeId = multipartCorrection(typeId);
-
+
//public NodeSmall uploadFile(final FormDataMultiPart form) {
System.out.println("Upload media file: " + fileMetaData);
System.out.println(" - fileName: " + fileName);
@@ -107,7 +108,7 @@ public class VideoResource {
if (typeId == null) {
throw new InputException("typeId", "TypiId is not specified");
}
-
+
final long tmpUID = DataResource.getTmpDataId();
final String sha512 = DataResource.saveTemporaryFile(fileInputStream, tmpUID);
Data data = DataResource.getWithSha512(sha512);
@@ -145,7 +146,7 @@ public class VideoResource {
if (series != null) {
seriesNode = SeriesResource.getOrCreate(series, typeNode.id);
}
-
+
System.out.println(" ==> " + seriesNode);
System.out.println("Find seasonNode");
// get uid of season:
@@ -157,10 +158,10 @@ public class VideoResource {
if (season != null) {
seasonNode = SeasonResource.getOrCreate(season, seriesNode.id);
}
-
+
System.out.println(" ==> " + seasonNode);
System.out.println("add media");
-
+
final long uniqueSQLID = -1;
try {
final Media media = new Media();
@@ -195,28 +196,28 @@ public class VideoResource {
throw new FailException("Catch Exception ==> check server logs");
}
}
-
+
@POST
@Path("{id}/add_cover")
@RolesAllowed("ADMIN")
@Consumes({ MediaType.MULTIPART_FORM_DATA })
- public Response uploadCover(@PathParam("id") final Long id, @FormDataParam("fileName") final String fileName, @FormDataParam("file") final InputStream fileInputStream,
+ public Response uploadCover(@PathParam("id") final UUID id, @FormDataParam("fileName") final String fileName, @FormDataParam("file") final InputStream fileInputStream,
@FormDataParam("file") final FormDataContentDisposition fileMetaData) {
return DataTools.uploadCover(Media.class, id, fileName, fileInputStream, fileMetaData);
}
-
+
@GET
@Path("{id}/rm_cover/{coverId}")
@RolesAllowed("ADMIN")
- public Response removeCover(@PathParam("id") final Long id, @PathParam("coverId") final Long coverId) throws Exception {
+ public Response removeCover(@PathParam("id") final UUID id, @PathParam("coverId") final UUID coverId) throws Exception {
AddOnManyToMany.removeLink(Media.class, id, "cover", coverId);
return Response.ok(DataAccess.get(Media.class, id)).build();
}
-
+
@DELETE
@Path("{id}")
@RolesAllowed("ADMIN")
- public Response delete(@PathParam("id") final Long id) throws Exception {
+ public Response delete(@PathParam("id") final UUID id) throws Exception {
DataAccess.delete(Media.class, id);
return Response.ok().build();
}
diff --git a/back/src/org/kar/karideo/migration/Initialization.java b/back/src/org/kar/karideo/migration/Initialization.java
index 26f3028..e916bc0 100644
--- a/back/src/org/kar/karideo/migration/Initialization.java
+++ b/back/src/org/kar/karideo/migration/Initialization.java
@@ -34,16 +34,16 @@ public class Initialization extends MigrationSqlStep {
addAction("""
INSERT INTO `type` (`id`, `name`, `description`) VALUES
- (1, 'Documentary', 'Documentary (animals, space, earth...)'),
- (2, 'Movie', 'Movie with real humans (film)'),
- (3, 'Animation', 'Animation movies (film)'),
- (4, 'Short movie', 'Small movies (less 2 minutes)'),
- (5, 'TV show', 'TV show for old peoples'),
- (6, 'Animation TV show', 'TV show for young peoples'),
- (7, 'Theater', 'Theater play'),
- (8, 'One man show', 'Recorded stand up'),
- (9, 'Concert', 'Recorded concert'),
- (10, 'Opera', 'Recorded opera');
+ (UUID_TO_BIN('15237fd7-d4ee-11ee-a8dd-02420a030203'), 'Documentary', 'Documentary (animals, space, earth...)'),
+ (UUID_TO_BIN('553146c1-d4ee-11ee-a8dd-02420a030203'), 'Movie', 'Movie with real humans (film)'),
+ (UUID_TO_BIN('59c430a3-d4ee-11ee-a8dd-02420a030203'), 'Animation', 'Animation movies (film)'),
+ (UUID_TO_BIN('5cd619e3-d4ee-11ee-a8dd-02420a030203'), 'Short movie', 'Small movies (less 2 minutes)'),
+ (UUID_TO_BIN('5fbbf085-d4ee-11ee-a8dd-02420a030203'), 'TV show', 'TV show for old peoples'),
+ (UUID_TO_BIN('66dcb6ba-d4ee-11ee-a8dd-02420a030203'), 'Animation TV show', 'TV show for young peoples'),
+ (UUID_TO_BIN('69ee5c15-d4ee-11ee-a8dd-02420a030203'), 'Theater', 'Theater play'),
+ (UUID_TO_BIN('6ce72530-d4ee-11ee-a8dd-02420a030203'), 'One man show', 'Recorded stand up'),
+ (UUID_TO_BIN('6ff1691a-d4ee-11ee-a8dd-02420a030203'), 'Concert', 'Recorded concert'),
+ (UUID_TO_BIN('730815ef-d4ee-11ee-a8dd-02420a030203'), 'Opera', 'Recorded opera');
""");
// set start increment element to permit to add after default elements
addAction("""
diff --git a/back/src/org/kar/karideo/migration/Migration20240226.java b/back/src/org/kar/karideo/migration/Migration20240226.java
new file mode 100644
index 0000000..02a1e1f
--- /dev/null
+++ b/back/src/org/kar/karideo/migration/Migration20240226.java
@@ -0,0 +1,44 @@
+package org.kar.karideo.migration;
+
+import java.util.List;
+import java.util.UUID;
+
+import org.kar.archidata.dataAccess.DataAccess;
+import org.kar.archidata.dataAccess.options.AccessDeletedItems;
+import org.kar.archidata.dataAccess.options.OverrideTableName;
+import org.kar.archidata.migration.MigrationSqlStep;
+import org.kar.karideo.migration.model.UUIDConversion;
+
+public class Migration20240226 extends MigrationSqlStep {
+
+ public static final int KARSO_INITIALISATION_ID = 1;
+
+ @Override
+ public String getName() {
+ return "migration-2024-02-26: convert base with UUID";
+ }
+
+ public Migration20240226() {
+
+ }
+
+ @Override
+ public void generateStep() throws Exception {
+
+ // update migration update (last one)
+ addAction("""
+ ALTER TABLE `media` ADD `uuid` binary(16) AFTER `id`;
+ """);
+ addAction(() -> {
+ final List medias = DataAccess.gets(UUIDConversion.class, new AccessDeletedItems(), new OverrideTableName("media"));
+ for (final UUIDConversion elem: medias) {
+ elem.uuid = UUID.randomUUID();
+ }
+ for (final UUIDConversion elem: medias) {
+ DataAccess.update(elem, elem.id, List.of("uuid"), new OverrideTableName("media"));
+ }
+ });
+
+ }
+
+}
diff --git a/back/src/org/kar/karideo/migration/model/UUIDConversion.java b/back/src/org/kar/karideo/migration/model/UUIDConversion.java
new file mode 100644
index 0000000..a6e43c4
--- /dev/null
+++ b/back/src/org/kar/karideo/migration/model/UUIDConversion.java
@@ -0,0 +1,11 @@
+package org.kar.karideo.migration.model;
+
+import java.util.UUID;
+
+import jakarta.persistence.Id;
+
+public class UUIDConversion {
+ @Id
+ public Long id = null;
+ public UUID uuid = null;
+}
diff --git a/back/src/org/kar/karideo/model/Media.java b/back/src/org/kar/karideo/model/Media.java
index c80ab49..a2978f7 100644
--- a/back/src/org/kar/karideo/model/Media.java
+++ b/back/src/org/kar/karideo/model/Media.java
@@ -1,16 +1,17 @@
package org.kar.karideo.model;
import java.util.List;
+import java.util.UUID;
+import org.kar.archidata.annotation.DataJson;
import org.kar.archidata.model.Data;
-import org.kar.archidata.model.GenericDataSoftDelete;
+import org.kar.archidata.model.UUIDGenericDataSoftDelete;
import com.fasterxml.jackson.annotation.JsonInclude;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
-import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
@@ -19,7 +20,7 @@ import jakarta.persistence.Table;
@JsonInclude(JsonInclude.Include.NON_NULL)
//@SQLDelete(sql = "UPDATE table_product SET deleted = true WHERE id=?")
//@Where(clause = "deleted=false")
-public class Media extends GenericDataSoftDelete {
+public class Media extends UUIDGenericDataSoftDelete {
// Name of the media (this represent the title)
@Column(nullable = false, length = 0)
public String name;
@@ -29,16 +30,16 @@ public class Media extends GenericDataSoftDelete {
// Foreign Key Id of the data
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Data.class)
@Column(nullable = false)
- public Long dataId;
+ public UUID dataId;
// Type of the media")
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Type.class)
- public Long typeId;
+ public UUID typeId;
// Series reference of the media
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Series.class)
- public Long seriesId;
+ public UUID seriesId;
// Saison reference of the media
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Season.class)
- public Long seasonId;
+ public UUID seasonId;
// Episide Id
public Integer episode;
// ")
@@ -48,6 +49,6 @@ public class Media extends GenericDataSoftDelete {
// Limitation Age of the media
public Integer ageLimit;
// List of Id of the specific covers
- @ManyToMany(fetch = FetchType.LAZY, targetEntity = Data.class)
- public List covers = null;
+ @DataJson()
+ public List covers = null;
}
diff --git a/back/src/org/kar/karideo/model/Season.java b/back/src/org/kar/karideo/model/Season.java
index ef19342..03bd30c 100644
--- a/back/src/org/kar/karideo/model/Season.java
+++ b/back/src/org/kar/karideo/model/Season.java
@@ -1,24 +1,24 @@
package org.kar.karideo.model;
import java.util.List;
+import java.util.UUID;
import org.kar.archidata.annotation.DataIfNotExists;
-import org.kar.archidata.model.Data;
-import org.kar.archidata.model.GenericDataSoftDelete;
+import org.kar.archidata.annotation.DataJson;
+import org.kar.archidata.model.UUIDGenericDataSoftDelete;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.Column;
import jakarta.persistence.FetchType;
-import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
@Table(name = "season")
@DataIfNotExists
@JsonInclude(JsonInclude.Include.NON_NULL)
-public class Season extends GenericDataSoftDelete {
+public class Season extends UUIDGenericDataSoftDelete {
@Column(nullable = false, length = 0)
@Schema(description = "Name of the media (this represent the title)")
public String name;
@@ -28,8 +28,8 @@ public class Season extends GenericDataSoftDelete {
@Column(nullable = false)
@Schema(description = "series parent ID")
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Series.class)
- public Long parentId;
+ public UUID parentId;
@Schema(description = "List of Id of the sopecific covers")
- @ManyToMany(fetch = FetchType.LAZY, targetEntity = Data.class)
- public List covers = null;
+ @DataJson()
+ public List covers = null;
}
\ No newline at end of file
diff --git a/back/src/org/kar/karideo/model/Series.java b/back/src/org/kar/karideo/model/Series.java
index cf89d02..f9d0c00 100644
--- a/back/src/org/kar/karideo/model/Series.java
+++ b/back/src/org/kar/karideo/model/Series.java
@@ -1,24 +1,24 @@
package org.kar.karideo.model;
import java.util.List;
+import java.util.UUID;
import org.kar.archidata.annotation.DataIfNotExists;
-import org.kar.archidata.model.Data;
-import org.kar.archidata.model.GenericDataSoftDelete;
+import org.kar.archidata.annotation.DataJson;
+import org.kar.archidata.model.UUIDGenericDataSoftDelete;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.Column;
import jakarta.persistence.FetchType;
-import jakarta.persistence.ManyToMany;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
@Table(name = "series")
@DataIfNotExists
@JsonInclude(JsonInclude.Include.NON_NULL)
-public class Series extends GenericDataSoftDelete {
+public class Series extends UUIDGenericDataSoftDelete {
@Column(nullable = false, length = 0)
@Schema(description = "Name of the media (this represent the title)")
public String name;
@@ -28,8 +28,8 @@ public class Series extends GenericDataSoftDelete {
@Column(nullable = false)
@Schema(description = "series parent ID")
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Type.class)
- public Long parentId;
+ public UUID parentId;
@Schema(description = "List of Id of the sopecific covers")
- @ManyToMany(fetch = FetchType.LAZY, targetEntity = Data.class)
- public List covers = null;
+ @DataJson()
+ public List covers = null;
}
diff --git a/back/src/org/kar/karideo/model/Type.java b/back/src/org/kar/karideo/model/Type.java
index 5a387f6..051eeab 100644
--- a/back/src/org/kar/karideo/model/Type.java
+++ b/back/src/org/kar/karideo/model/Type.java
@@ -1,23 +1,22 @@
package org.kar.karideo.model;
import java.util.List;
+import java.util.UUID;
import org.kar.archidata.annotation.DataIfNotExists;
-import org.kar.archidata.model.Data;
-import org.kar.archidata.model.GenericDataSoftDelete;
+import org.kar.archidata.annotation.DataJson;
+import org.kar.archidata.model.UUIDGenericDataSoftDelete;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.persistence.Column;
-import jakarta.persistence.FetchType;
-import jakarta.persistence.ManyToMany;
import jakarta.persistence.Table;
@Table(name = "type")
@DataIfNotExists
@JsonInclude(JsonInclude.Include.NON_NULL)
-public class Type extends GenericDataSoftDelete {
+public class Type extends UUIDGenericDataSoftDelete {
@Column(nullable = false, length = 0)
@Schema(description = "Name of the media (this represent the title)")
public String name;
@@ -25,6 +24,6 @@ public class Type extends GenericDataSoftDelete {
@Schema(description = "Description of the media")
public String description;
@Schema(description = "List of Id of the sopecific covers")
- @ManyToMany(fetch = FetchType.LAZY, targetEntity = Data.class)
- public List covers = null;
+ @DataJson()
+ public List covers = null;
}
diff --git a/front/angular.json b/front/angular.json
index 023bec3..15825e3 100644
--- a/front/angular.json
+++ b/front/angular.json
@@ -1,88 +1,112 @@
{
- "$schema" : "./node_modules/@angular/cli/lib/config/schema.json",
- "version" : 1,
- "newProjectRoot" : "projects",
- "defaultProject" : "karideo",
- "projects" : {
- "karideo" : {
- "root" : "",
- "sourceRoot" : "src",
- "projectType" : "application",
- "architect" : {
- "build" : {
- "builder" : "@angular-devkit/build-angular:browser",
- "options" : {
- "outputPath" : "dist",
- "index" : "src/index.html",
- "main" : "src/main.ts",
- "tsConfig" : "src/tsconfig.app.json",
- "polyfills" : "src/polyfills.ts",
- "assets" : [ "src/assets", "src/favicon.ico" ],
- "styles" : [ "src/styles.less", "src/generic_page.less", "src/theme.color.blue.less", "src/theme.checkbox.less", "src/theme.modal.less" ],
- "scripts" : [ ]
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+ "version": 1,
+ "newProjectRoot": "projects",
+ "defaultProject": "karideo",
+ "projects": {
+ "karideo": {
+ "root": "",
+ "sourceRoot": "src",
+ "projectType": "application",
+ "architect": {
+ "build": {
+ "builder": "@angular-devkit/build-angular:browser",
+ "options": {
+ "outputPath": "dist",
+ "index": "src/index.html",
+ "main": "src/main.ts",
+ "tsConfig": "src/tsconfig.app.json",
+ "polyfills": [
+ "zone.js"
+ ],
+ "assets": [
+ "src/assets",
+ "src/favicon.ico"
+ ],
+ "styles": [
+ "src/styles.less",
+ "src/generic_page.less",
+ "src/theme.color.blue.less",
+ "src/theme.checkbox.less",
+ "src/theme.modal.less"
+ ],
+ "scripts": []
},
- "configurations" : {
- "production" : {
- "optimization" : true,
- "outputHashing" : "all",
- "sourceMap" : false,
- "namedChunks" : false,
- "aot" : true,
- "extractLicenses" : true,
- "vendorChunk" : false,
- "buildOptimizer" : true,
- "fileReplacements" : [ {
- "replace" : "src/environments/environment.ts",
- "with" : "src/environments/environment.prod.ts"
- } ]
+ "configurations": {
+ "production": {
+ "optimization": true,
+ "outputHashing": "all",
+ "sourceMap": false,
+ "namedChunks": false,
+ "aot": true,
+ "extractLicenses": true,
+ "vendorChunk": false,
+ "buildOptimizer": true,
+ "fileReplacements": [
+ {
+ "replace": "src/environments/environment.ts",
+ "with": "src/environments/environment.prod.ts"
+ }
+ ]
},
- "develop" : {
- "optimization" : false,
- "outputHashing" : "none",
- "sourceMap" : true,
- "namedChunks" : true,
- "aot" : true,
- "extractLicenses" : true,
- "vendorChunk" : true,
- "buildOptimizer" : false
+ "develop": {
+ "optimization": false,
+ "outputHashing": "none",
+ "sourceMap": true,
+ "namedChunks": true,
+ "aot": true,
+ "extractLicenses": true,
+ "vendorChunk": true,
+ "buildOptimizer": false
}
}
},
- "serve" : {
- "builder" : "@angular-devkit/build-angular:dev-server",
- "options" : {
- "browserTarget" : "karideo:build"
+ "serve": {
+ "builder": "@angular-devkit/build-angular:dev-server",
+ "options": {
+ "browserTarget": "karideo:build"
},
- "configurations" : {
- "production" : {
- "browserTarget" : "karideo:build:production"
+ "configurations": {
+ "production": {
+ "browserTarget": "karideo:build:production"
},
- "develop" : {
- "browserTarget" : "karideo:build:develop"
+ "develop": {
+ "browserTarget": "karideo:build:develop"
}
}
},
- "extract-i18n" : {
- "builder" : "@angular-devkit/build-angular:extract-i18n",
- "options" : {
- "browserTarget" : "karideo:build"
+ "extract-i18n": {
+ "builder": "@angular-devkit/build-angular:extract-i18n",
+ "options": {
+ "browserTarget": "karideo:build"
}
},
- "test" : {
- "builder" : "@angular-devkit/build-angular:karma",
- "options" : {
- "main" : "src/test.ts",
- "karmaConfig" : "./karma.conf.js",
- "polyfills" : "src/polyfills.ts",
- "tsConfig" : "src/tsconfig.spec.json",
- "scripts" : [ ],
- "styles" : [ "src/styles.less", "src/generic_page.less", "src/theme.color.blue.less", "src/theme.checkbox.less", "src/theme.modal.less" ],
- "assets" : [ "src/assets", "src/favicon.ico" ]
+ "test": {
+ "builder": "@angular-devkit/build-angular:karma",
+ "options": {
+ "main": "src/test.ts",
+ "karmaConfig": "./karma.conf.js",
+ "polyfills": [
+ "zone.js"
+ ],
+ "tsConfig": "src/tsconfig.spec.json",
+ "scripts": [],
+ "styles": [
+ "src/styles.less",
+ "src/generic_page.less",
+ "src/theme.color.blue.less",
+ "src/theme.checkbox.less",
+ "src/theme.modal.less"
+ ],
+ "assets": [
+ "src/assets",
+ "src/favicon.ico"
+ ]
}
},
- "lint" : {
- "builder" : "@angular-eslint/builder:lint",
- "options" : {
+ "lint": {
+ "builder": "@angular-eslint/builder:lint",
+ "options": {
"fix": true,
"eslintConfig": ".eslintrc.js",
"lintFilePatterns": [
@@ -91,44 +115,53 @@
]
}
},
- "TTTTTTlint" : {
- "builder" : "@angular-devkit/build-angular:tslint",
- "options" : {
- "tsConfig" : [ "src/tsconfig.app.json", "src/tsconfig.spec.json" ],
- "exclude" : [ "**/node_modules/**" ]
+ "TTTTTTlint": {
+ "builder": "@angular-devkit/build-angular:tslint",
+ "options": {
+ "tsConfig": [
+ "src/tsconfig.app.json",
+ "src/tsconfig.spec.json"
+ ],
+ "exclude": [
+ "**/node_modules/**"
+ ]
}
}
}
},
- "karideo-e2e" : {
- "root" : "e2e",
- "sourceRoot" : "e2e",
- "projectType" : "application",
- "architect" : {
- "e2e" : {
- "builder" : "@angular-devkit/build-angular:protractor",
- "options" : {
- "protractorConfig" : "./protractor.conf.js",
- "devServerTarget" : "karideo:serve"
+ "karideo-e2e": {
+ "root": "e2e",
+ "sourceRoot": "e2e",
+ "projectType": "application",
+ "architect": {
+ "e2e": {
+ "builder": "@angular-devkit/build-angular:protractor",
+ "options": {
+ "protractorConfig": "./protractor.conf.js",
+ "devServerTarget": "karideo:serve"
}
},
- "lint" : {
- "builder" : "@angular-devkit/build-angular:tslint",
- "options" : {
- "tsConfig" : [ "e2e/tsconfig.e2e.json" ],
- "exclude" : [ "**/node_modules/**" ]
+ "lint": {
+ "builder": "@angular-devkit/build-angular:tslint",
+ "options": {
+ "tsConfig": [
+ "e2e/tsconfig.e2e.json"
+ ],
+ "exclude": [
+ "**/node_modules/**"
+ ]
}
}
}
}
},
- "schematics" : {
- "@schematics/angular:component" : {
- "prefix" : "app",
- "style" : "less"
+ "schematics": {
+ "@schematics/angular:component": {
+ "prefix": "app",
+ "style": "less"
},
- "@schematics/angular:directive" : {
- "prefix" : "app"
+ "@schematics/angular:directive": {
+ "prefix": "app"
}
}
-}
+}
\ No newline at end of file
diff --git a/front/src/app/model/user-media-advancement.ts b/front/src/app/model/user-media-advancement.ts
index 0846675..ec60e55 100644
--- a/front/src/app/model/user-media-advancement.ts
+++ b/front/src/app/model/user-media-advancement.ts
@@ -1,5 +1,4 @@
-import { isNumberFinite, isString, isOptionalOf, isNumber } from "common/utils";
-import { isNodeData, NodeData } from "common/model/node";
+import { isNumberFinite, isNumber } from "common/utils";
export interface UserMediaAdvancement {
diff --git a/front/src/app/scene/video/video.ts b/front/src/app/scene/video/video.ts
index 48285ff..d4128e7 100644
--- a/front/src/app/scene/video/video.ts
+++ b/front/src/app/scene/video/video.ts
@@ -74,7 +74,7 @@ export class VideoScene implements OnInit {
timeLeft: number = 10;
interval = null;
- userMetaData: UserMediaAdvancement & { percentDisplay: number } = undefined
+ userMetaData: UserMediaAdvancement & { percentDisplay?: number } = undefined
previousTime: number = 0;
startPlayingTime: number = undefined;