diff --git a/back/pom.xml b/back/pom.xml
index 301222c..c172ba3 100644
--- a/back/pom.xml
+++ b/back/pom.xml
@@ -20,7 +20,7 @@
kangaroo-and-rabbit
archidata
- 0.3.8
+ 0.4.0
org.slf4j
diff --git a/back/src/org/kar/karideo/WebLauncher.java b/back/src/org/kar/karideo/WebLauncher.java
index 733f60c..f83fecc 100755
--- a/back/src/org/kar/karideo/WebLauncher.java
+++ b/back/src/org/kar/karideo/WebLauncher.java
@@ -1,16 +1,12 @@
package org.kar.karideo;
-import org.glassfish.grizzly.http.server.HttpServer;
+import java.net.URI;
+import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
+import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.server.ResourceConfig;
-import org.kar.karideo.api.*;
-import org.kar.karideo.filter.KarideoAuthenticationFilter;
-import org.kar.karideo.migration.Initialization;
-import org.kar.karideo.migration.Migration20230810;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.kar.archidata.GlobalConfiguration;
import org.kar.archidata.UpdateJwtPublicKey;
import org.kar.archidata.api.DataResource;
@@ -23,23 +19,36 @@ import org.kar.archidata.filter.CORSFilter;
import org.kar.archidata.filter.OptionFilter;
import org.kar.archidata.migration.MigrationEngine;
import org.kar.archidata.util.ConfigBaseVariable;
-import org.glassfish.jersey.jackson.JacksonFeature;
+import org.kar.karideo.api.Front;
+import org.kar.karideo.api.HealthCheck;
+import org.kar.karideo.api.SeasonResource;
+import org.kar.karideo.api.SeriesResource;
+import org.kar.karideo.api.TypeResource;
+import org.kar.karideo.api.UserMediaAdvancementResource;
+import org.kar.karideo.api.UserResource;
+import org.kar.karideo.api.VideoResource;
+import org.kar.karideo.filter.KarideoAuthenticationFilter;
+import org.kar.karideo.migration.Initialization;
+import org.kar.karideo.migration.Migration20230810;
+import org.kar.karideo.migration.Migration20231015;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import jakarta.ws.rs.core.UriBuilder;
-import java.net.URI;
public class WebLauncher {
final static Logger LOGGER = LoggerFactory.getLogger(WebLauncher.class);
- public static DBConfig dbConfig;
- protected UpdateJwtPublicKey keyUpdater = null;
+ public static DBConfig dbConfig;
+ protected UpdateJwtPublicKey keyUpdater = null;
+
public WebLauncher() {
ConfigBaseVariable.bdDatabase = "karideo";
}
-
- private static URI getBaseURI() {
- return UriBuilder.fromUri(ConfigBaseVariable.getlocalAddress()).build();
- }
-
+
+ private static URI getBaseURI() {
+ return UriBuilder.fromUri(ConfigBaseVariable.getlocalAddress()).build();
+ }
+
public void migrateDB() throws Exception {
WebLauncher.LOGGER.info("Create migration engine");
MigrationEngine migrationEngine = new MigrationEngine();
@@ -47,15 +56,16 @@ public class WebLauncher {
migrationEngine.setInit(new Initialization());
WebLauncher.LOGGER.info("Add migration since last version");
migrationEngine.add(new Migration20230810());
+ migrationEngine.add(new Migration20231015());
WebLauncher.LOGGER.info("Migrate the DB [START]");
migrationEngine.migrate(GlobalConfiguration.dbConfig);
WebLauncher.LOGGER.info("Migrate the DB [STOP]");
}
-
+
public static void main(String[] args) throws Exception {
WebLauncher.LOGGER.info("[START] application wake UP");
WebLauncher launcher = new WebLauncher();
- launcher.migrateDB();
+ launcher.migrateDB();
launcher.process();
WebLauncher.LOGGER.info("end-configure the server & wait finish process:");
Thread.currentThread().join();
@@ -63,45 +73,44 @@ public class WebLauncher {
launcher.stopOther();
WebLauncher.LOGGER.info("STOP the REST server");
}
-
-
- public void process() throws InterruptedException {
+
+ public void process() throws InterruptedException {
// ===================================================================
// Configure resources
// ===================================================================
- ResourceConfig rc = new ResourceConfig();
+ ResourceConfig rc = new ResourceConfig();
+
+ // add multi-part models ..
+ rc.register(MultiPartFeature.class);
+ // global authentication system
+ rc.register(OptionFilter.class);
+ // remove cors ==> all time called by an other system...
+ rc.register(CORSFilter.class);
+ // global authentication system
+ rc.register(KarideoAuthenticationFilter.class);
+ // register exception catcher
+ rc.register(InputExceptionCatcher.class);
+ rc.register(SystemExceptionCatcher.class);
+ rc.register(FailExceptionCatcher.class);
+ rc.register(ExceptionCatcher.class);
+ // add default resource:
+ rc.register(UserResource.class);
+ rc.register(SeriesResource.class);
+ rc.register(DataResource.class);
+ rc.register(SeasonResource.class);
+ rc.register(TypeResource.class);
+ rc.register(VideoResource.class);
+ rc.register(UserMediaAdvancementResource.class);
+
+ rc.register(HealthCheck.class);
+ rc.register(Front.class);
+
+ // add jackson to be discover when we are ins stand-alone server
+ rc.register(JacksonFeature.class);
+ // enable this to show low level request
+ //rc.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER, Level.WARNING.getName());
- // add multi-part models ..
- rc.register(MultiPartFeature.class);
- // global authentication system
- rc.register(OptionFilter.class);
- // remove cors ==> all time called by an other system...
- rc.register(CORSFilter.class);
- // global authentication system
- rc.register(KarideoAuthenticationFilter.class);
- // register exception catcher
- rc.register(InputExceptionCatcher.class);
- rc.register(SystemExceptionCatcher.class);
- rc.register(FailExceptionCatcher.class);
- rc.register(ExceptionCatcher.class);
- // add default resource:
- rc.register(UserResource.class);
- rc.register(SeriesResource.class);
- rc.register(DataResource.class);
- rc.register(SeasonResource.class);
- rc.register(TypeResource.class);
- rc.register(VideoResource.class);
- rc.register(UserMediaAdvancementResource.class);
-
- rc.register(HealthCheck.class);
- rc.register(Front.class);
-
- // add jackson to be discover when we are ins stand-alone server
- rc.register(JacksonFeature.class);
- // enable this to show low level request
- //rc.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER, Level.WARNING.getName());
-
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(getBaseURI(), rc);
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
@@ -110,17 +119,16 @@ public class WebLauncher {
server.shutdownNow();
}
}, "shutdownHook"));
-
-
+
// ===================================================================
// start periodic update of the token ...
// ===================================================================
this.keyUpdater = new UpdateJwtPublicKey();
keyUpdater.start();
-
- // ===================================================================
+
+ // ===================================================================
// run JERSEY
- // ===================================================================
+ // ===================================================================
try {
server.start();
LOGGER.info("Jersey app started at {}", getBaseURI());
@@ -128,9 +136,9 @@ public class WebLauncher {
LOGGER.error("There was an error while starting Grizzly HTTP server.");
e.printStackTrace();
}
- }
-
- public void stopOther() {
+ }
+
+ public void stopOther() {
keyUpdater.kill();
try {
keyUpdater.join(4000, 0);
@@ -138,5 +146,5 @@ public class WebLauncher {
// TODO Auto-generated catch block
e.printStackTrace();
}
- }
+ }
}
diff --git a/back/src/org/kar/karideo/api/SeasonResource.java b/back/src/org/kar/karideo/api/SeasonResource.java
index 86a0980..b4f102d 100644
--- a/back/src/org/kar/karideo/api/SeasonResource.java
+++ b/back/src/org/kar/karideo/api/SeasonResource.java
@@ -1,97 +1,105 @@
package org.kar.karideo.api;
-import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
-import org.glassfish.jersey.media.multipart.FormDataParam;
-import org.kar.karideo.model.Season;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.kar.archidata.SqlWrapper;
-import org.kar.archidata.annotation.security.RolesAllowed;
-import org.kar.archidata.util.DataTools;
-
-import jakarta.ws.rs.*;
-import jakarta.ws.rs.core.MediaType;
-import jakarta.ws.rs.core.Response;
import java.io.InputStream;
import java.util.List;
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
+import org.glassfish.jersey.media.multipart.FormDataParam;
+import org.kar.archidata.annotation.security.RolesAllowed;
+import org.kar.archidata.sqlWrapper.QuerryAnd;
+import org.kar.archidata.sqlWrapper.QuerryCondition;
+import org.kar.archidata.sqlWrapper.SqlWrapper;
+import org.kar.archidata.sqlWrapper.addOn.AddOnManyToMany;
+import org.kar.archidata.util.DataTools;
+import org.kar.karideo.model.Season;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+
@Path("/season")
-@Produces({MediaType.APPLICATION_JSON})
+@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") Long id) throws Exception {
- return SqlWrapper.get(Season.class, id);
- }
-
- @GET
- @RolesAllowed("USER")
- public List get() throws Exception {
- return SqlWrapper.gets(Season.class, false);
- }
-
- @GET
- @Path("{id}")
- @RolesAllowed("USER")
- @Consumes(MediaType.APPLICATION_JSON)
- public Season get(@PathParam("id") Long id) throws Exception {
- return SqlWrapper.get(Season.class, id);
- }
-
- /* =============================================================================
- * ADMIN SECTION:
- * ============================================================================= */
-
- @POST
- @RolesAllowed("ADMIN")
- @Consumes(MediaType.APPLICATION_JSON)
- public Season put(String jsonRequest) throws Exception {
- return SqlWrapper.insertWithJson(Season.class, jsonRequest);
- }
-
- @PUT
- @Path("{id}")
- @RolesAllowed("ADMIN")
- @Consumes(MediaType.APPLICATION_JSON)
- public Season put(@PathParam("id") Long id, String jsonRequest) throws Exception {
- SqlWrapper.update(Season.class, id, jsonRequest);
- return SqlWrapper.get(Season.class, id);
- }
-
- @DELETE
- @Path("{id}")
- @RolesAllowed("ADMIN")
- public Response delete(@PathParam("id") Long id) throws Exception {
- SqlWrapper.setDelete(Season.class, id);
+
+ @GET
+ @Path("{id}")
+ @RolesAllowed("USER")
+ public static Season getWithId(@PathParam("id") Long id) throws Exception {
+ return SqlWrapper.get(Season.class, id);
+ }
+
+ @GET
+ @RolesAllowed("USER")
+ public List get() throws Exception {
+ return SqlWrapper.gets(Season.class);
+ }
+
+ @GET
+ @Path("{id}")
+ @RolesAllowed("USER")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Season get(@PathParam("id") Long id) throws Exception {
+ return SqlWrapper.get(Season.class, id);
+ }
+
+ /* =============================================================================
+ * ADMIN SECTION:
+ * ============================================================================= */
+
+ @POST
+ @RolesAllowed("ADMIN")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Season put(String jsonRequest) throws Exception {
+ return SqlWrapper.insertWithJson(Season.class, jsonRequest);
+ }
+
+ @PUT
+ @Path("{id}")
+ @RolesAllowed("ADMIN")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Season put(@PathParam("id") Long id, String jsonRequest) throws Exception {
+ SqlWrapper.update(Season.class, id, jsonRequest);
+ return SqlWrapper.get(Season.class, id);
+ }
+
+ @DELETE
+ @Path("{id}")
+ @RolesAllowed("ADMIN")
+ public Response delete(@PathParam("id") Long id) throws Exception {
+ SqlWrapper.delete(Season.class, id);
return Response.ok().build();
- }
-
- @POST
- @Path("{id}/add_cover")
- @RolesAllowed("ADMIN")
- @Consumes({MediaType.MULTIPART_FORM_DATA})
- public Response uploadCover(@PathParam("id") Long id,
- @FormDataParam("fileName") String fileName,
- @FormDataParam("file") InputStream fileInputStream,
- @FormDataParam("file") FormDataContentDisposition fileMetaData
- ) {
- return DataTools.uploadCover(Season.class, id, fileName, fileInputStream, fileMetaData);
- }
-
- @GET
- @Path("{id}/rm_cover/{coverId}")
- @RolesAllowed("ADMIN")
- public Response removeCover(@PathParam("id") Long id, @PathParam("coverId") Long coverId) throws Exception {
- SqlWrapper.removeLink(Season.class, id, "cover", coverId);
- return Response.ok(SqlWrapper.get(Season.class, id)).build();
- }
-
- public static Season getOrCreate(String name, Long seriesId) {
- try {
- Season out = SqlWrapper.getWhere(Season.class, "name", "=", name, "parentId", "=", seriesId);
+ }
+
+ @POST
+ @Path("{id}/add_cover")
+ @RolesAllowed("ADMIN")
+ @Consumes({ MediaType.MULTIPART_FORM_DATA })
+ public Response uploadCover(@PathParam("id") Long id, @FormDataParam("fileName") String fileName, @FormDataParam("file") InputStream fileInputStream,
+ @FormDataParam("file") FormDataContentDisposition fileMetaData) {
+ return DataTools.uploadCover(Season.class, id, fileName, fileInputStream, fileMetaData);
+ }
+
+ @GET
+ @Path("{id}/rm_cover/{coverId}")
+ @RolesAllowed("ADMIN")
+ public Response removeCover(@PathParam("id") Long id, @PathParam("coverId") Long coverId) throws Exception {
+ AddOnManyToMany.removeLink(Season.class, id, "cover", coverId);
+ return Response.ok(SqlWrapper.get(Season.class, id)).build();
+ }
+
+ public static Season getOrCreate(String name, Long seriesId) {
+ try {
+ Season out = SqlWrapper.getWhere(Season.class, new QuerryAnd(new QuerryCondition("name", "=", name), new QuerryCondition("parentId", "=", seriesId)));
if (out == null) {
out = new Season();
out.name = name;
@@ -103,7 +111,7 @@ public class SeasonResource {
// TODO Auto-generated catch block
e.printStackTrace();
}
- return null;
- }
-
+ return null;
+ }
+
}
diff --git a/back/src/org/kar/karideo/api/SeriesResource.java b/back/src/org/kar/karideo/api/SeriesResource.java
index 7b61446..6cd4ab0 100644
--- a/back/src/org/kar/karideo/api/SeriesResource.java
+++ b/back/src/org/kar/karideo/api/SeriesResource.java
@@ -1,98 +1,105 @@
package org.kar.karideo.api;
-import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
-import org.glassfish.jersey.media.multipart.FormDataParam;
-import org.kar.karideo.model.Season;
-import org.kar.karideo.model.Series;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.kar.archidata.SqlWrapper;
-import org.kar.archidata.annotation.security.RolesAllowed;
-import org.kar.archidata.util.DataTools;
-
-import jakarta.ws.rs.*;
-import jakarta.ws.rs.core.MediaType;
-import jakarta.ws.rs.core.Response;
import java.io.InputStream;
import java.util.List;
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
+import org.glassfish.jersey.media.multipart.FormDataParam;
+import org.kar.archidata.annotation.security.RolesAllowed;
+import org.kar.archidata.sqlWrapper.QuerryAnd;
+import org.kar.archidata.sqlWrapper.QuerryCondition;
+import org.kar.archidata.sqlWrapper.SqlWrapper;
+import org.kar.archidata.sqlWrapper.addOn.AddOnManyToMany;
+import org.kar.archidata.util.DataTools;
+import org.kar.karideo.model.Series;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+
@Path("/series")
-@Produces({MediaType.APPLICATION_JSON})
+@Produces({ MediaType.APPLICATION_JSON })
public class SeriesResource {
static final Logger LOGGER = LoggerFactory.getLogger(SeriesResource.class);
-
- @GET
- @Path("{id}")
- @RolesAllowed("USER")
- public static Series getWithId(@PathParam("id") Long id) throws Exception {
- return SqlWrapper.get(Series.class, id);
- }
-
- @GET
- @RolesAllowed("USER")
- public List get() throws Exception {
- return SqlWrapper.gets(Series.class, false);
- }
-
- @GET
- @Path("{id}")
- @RolesAllowed("USER")
- @Consumes(MediaType.APPLICATION_JSON)
- public Series get(@PathParam("id") Long id) throws Exception {
- return SqlWrapper.get(Series.class, id);
- }
-
- /* =============================================================================
- * ADMIN SECTION:
- * ============================================================================= */
-
- @POST
- @RolesAllowed("ADMIN")
- @Consumes(MediaType.APPLICATION_JSON)
- public Series put(String jsonRequest) throws Exception {
- return SqlWrapper.insertWithJson(Series.class, jsonRequest);
- }
-
- @PUT
- @Path("{id}")
- @RolesAllowed("ADMIN")
- @Consumes(MediaType.APPLICATION_JSON)
- public Series put(@PathParam("id") Long id, String jsonRequest) throws Exception {
- SqlWrapper.update(Series.class, id, jsonRequest);
- return SqlWrapper.get(Series.class, id);
- }
-
- @DELETE
- @Path("{id}")
- @RolesAllowed("ADMIN")
- public Response delete(@PathParam("id") Long id) throws Exception {
- SqlWrapper.setDelete(Series.class, id);
+
+ @GET
+ @Path("{id}")
+ @RolesAllowed("USER")
+ public static Series getWithId(@PathParam("id") Long id) throws Exception {
+ return SqlWrapper.get(Series.class, id);
+ }
+
+ @GET
+ @RolesAllowed("USER")
+ public List get() throws Exception {
+ return SqlWrapper.gets(Series.class);
+ }
+
+ @GET
+ @Path("{id}")
+ @RolesAllowed("USER")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Series get(@PathParam("id") Long id) throws Exception {
+ return SqlWrapper.get(Series.class, id);
+ }
+
+ /* =============================================================================
+ * ADMIN SECTION:
+ * ============================================================================= */
+
+ @POST
+ @RolesAllowed("ADMIN")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Series put(String jsonRequest) throws Exception {
+ return SqlWrapper.insertWithJson(Series.class, jsonRequest);
+ }
+
+ @PUT
+ @Path("{id}")
+ @RolesAllowed("ADMIN")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Series put(@PathParam("id") Long id, String jsonRequest) throws Exception {
+ SqlWrapper.update(Series.class, id, jsonRequest);
+ return SqlWrapper.get(Series.class, id);
+ }
+
+ @DELETE
+ @Path("{id}")
+ @RolesAllowed("ADMIN")
+ public Response delete(@PathParam("id") Long id) throws Exception {
+ SqlWrapper.delete(Series.class, id);
return Response.ok().build();
- }
-
- @POST
- @Path("{id}/add_cover")
- @RolesAllowed("ADMIN")
- @Consumes({MediaType.MULTIPART_FORM_DATA})
- public Response uploadCover(@PathParam("id") Long id,
- @FormDataParam("fileName") String fileName,
- @FormDataParam("file") InputStream fileInputStream,
- @FormDataParam("file") FormDataContentDisposition fileMetaData
- ) {
- return DataTools.uploadCover(Series.class, id, fileName, fileInputStream, fileMetaData);
- }
-
- @GET
- @Path("{id}/rm_cover/{coverId}")
- @RolesAllowed("ADMIN")
- public Response removeCover(@PathParam("id") Long id, @PathParam("coverId") Long coverId) throws Exception {
- SqlWrapper.removeLink(Series.class, id, "cover", coverId);
- return Response.ok(SqlWrapper.get(Series.class, id)).build();
- }
-
- public static Series getOrCreate(String name, Long typeId) {
- try {
- Series out = SqlWrapper.getWhere(Series.class, "name", "=", name, "parentId", "=", typeId);
+ }
+
+ @POST
+ @Path("{id}/add_cover")
+ @RolesAllowed("ADMIN")
+ @Consumes({ MediaType.MULTIPART_FORM_DATA })
+ public Response uploadCover(@PathParam("id") Long id, @FormDataParam("fileName") String fileName, @FormDataParam("file") InputStream fileInputStream,
+ @FormDataParam("file") FormDataContentDisposition fileMetaData) {
+ return DataTools.uploadCover(Series.class, id, fileName, fileInputStream, fileMetaData);
+ }
+
+ @GET
+ @Path("{id}/rm_cover/{coverId}")
+ @RolesAllowed("ADMIN")
+ public Response removeCover(@PathParam("id") Long id, @PathParam("coverId") Long coverId) throws Exception {
+ AddOnManyToMany.removeLink(Series.class, id, "cover", coverId);
+ return Response.ok(SqlWrapper.get(Series.class, id)).build();
+ }
+
+ public static Series getOrCreate(String name, Long typeId) {
+ try {
+ Series out = SqlWrapper.getWhere(Series.class, new QuerryAnd(new QuerryCondition("name", "=", name), new QuerryCondition("parentId", "=", typeId)));
if (out == null) {
out = new Series();
out.name = name;
@@ -104,8 +111,7 @@ public class SeriesResource {
// TODO Auto-generated catch block
e.printStackTrace();
}
- return null;
- }
-
+ return null;
+ }
+
}
-
diff --git a/back/src/org/kar/karideo/api/TypeResource.java b/back/src/org/kar/karideo/api/TypeResource.java
index 6a17a77..acb30a4 100644
--- a/back/src/org/kar/karideo/api/TypeResource.java
+++ b/back/src/org/kar/karideo/api/TypeResource.java
@@ -1,102 +1,108 @@
package org.kar.karideo.api;
-import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
-import org.glassfish.jersey.media.multipart.FormDataParam;
-import org.kar.karideo.model.Type;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.kar.archidata.SqlWrapper;
-import org.kar.archidata.annotation.security.RolesAllowed;
-import org.kar.archidata.util.DataTools;
-
-import jakarta.ws.rs.*;
-import jakarta.ws.rs.core.MediaType;
-import jakarta.ws.rs.core.Response;
import java.io.InputStream;
import java.util.List;
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
+import org.glassfish.jersey.media.multipart.FormDataParam;
+import org.kar.archidata.annotation.security.RolesAllowed;
+import org.kar.archidata.sqlWrapper.QuerryCondition;
+import org.kar.archidata.sqlWrapper.SqlWrapper;
+import org.kar.archidata.sqlWrapper.addOn.AddOnManyToMany;
+import org.kar.archidata.util.DataTools;
+import org.kar.karideo.model.Type;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+
@Path("/type")
-@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
+@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public class TypeResource {
static final Logger LOGGER = LoggerFactory.getLogger(TypeResource.class);
-
-
- @GET
- @Path("{id}")
- @RolesAllowed("USER")
- public static Type getWithId(@PathParam("id") Long id) throws Exception {
- return SqlWrapper.get(Type.class, id);
- }
-
- @GET
- @RolesAllowed("USER")
- public List get() throws Exception {
- return SqlWrapper.gets(Type.class, false);
- }
-
- @GET
- @Path("{id}")
- @RolesAllowed("USER")
- @Consumes(MediaType.APPLICATION_JSON)
- public Type get(@PathParam("id") Long id) throws Exception {
- return SqlWrapper.get(Type.class, id);
- }
-
- public static Type getId(Long id) throws Exception {
- return SqlWrapper.get(Type.class, id);
- }
-
- /* =============================================================================
- * ADMIN SECTION:
- * ============================================================================= */
-
- @POST
- @RolesAllowed("ADMIN")
- @Consumes(MediaType.APPLICATION_JSON)
- public Type put(String jsonRequest) throws Exception {
- return SqlWrapper.insertWithJson(Type.class, jsonRequest);
- }
-
- @PUT
- @Path("{id}")
- @RolesAllowed("ADMIN")
- @Consumes(MediaType.APPLICATION_JSON)
- public Type put(@PathParam("id") Long id, String jsonRequest) throws Exception {
- SqlWrapper.update(Type.class, id, jsonRequest);
- return SqlWrapper.get(Type.class, id);
- }
-
- @DELETE
- @Path("{id}")
- @RolesAllowed("ADMIN")
- public Response delete(@PathParam("id") Long id) throws Exception {
- SqlWrapper.setDelete(Type.class, id);
+
+ @GET
+ @Path("{id}")
+ @RolesAllowed("USER")
+ public static Type getWithId(@PathParam("id") Long id) throws Exception {
+ return SqlWrapper.get(Type.class, id);
+ }
+
+ @GET
+ @RolesAllowed("USER")
+ public List get() throws Exception {
+ return SqlWrapper.gets(Type.class);
+ }
+
+ @GET
+ @Path("{id}")
+ @RolesAllowed("USER")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Type get(@PathParam("id") Long id) throws Exception {
+ return SqlWrapper.get(Type.class, id);
+ }
+
+ public static Type getId(Long id) throws Exception {
+ return SqlWrapper.get(Type.class, id);
+ }
+
+ /* =============================================================================
+ * ADMIN SECTION:
+ * ============================================================================= */
+
+ @POST
+ @RolesAllowed("ADMIN")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Type put(String jsonRequest) throws Exception {
+ return SqlWrapper.insertWithJson(Type.class, jsonRequest);
+ }
+
+ @PUT
+ @Path("{id}")
+ @RolesAllowed("ADMIN")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Type put(@PathParam("id") Long id, String jsonRequest) throws Exception {
+ SqlWrapper.update(Type.class, id, jsonRequest);
+ return SqlWrapper.get(Type.class, id);
+ }
+
+ @DELETE
+ @Path("{id}")
+ @RolesAllowed("ADMIN")
+ public Response delete(@PathParam("id") Long id) throws Exception {
+ SqlWrapper.delete(Type.class, id);
return Response.ok().build();
- }
-
- @POST
- @Path("{id}/add_cover")
- @RolesAllowed("ADMIN")
- @Consumes({MediaType.MULTIPART_FORM_DATA})
- public Response uploadCover(@PathParam("id") Long id,
- @FormDataParam("fileName") String fileName,
- @FormDataParam("file") InputStream fileInputStream,
- @FormDataParam("file") FormDataContentDisposition fileMetaData
- ) {
- return DataTools.uploadCover(Type.class, id, fileName, fileInputStream, fileMetaData);
- }
-
- @GET
- @Path("{id}/rm_cover/{coverId}")
- @RolesAllowed("ADMIN")
- public Response removeCover(@PathParam("id") Long id, @PathParam("coverId") Long coverId) throws Exception {
- SqlWrapper.removeLink(Type.class, id, "cover", coverId);
- return Response.ok(SqlWrapper.get(Type.class, id)).build();
- }
-
- public static Type getOrCreate(String name) {
- try {
- Type out = SqlWrapper.getWhere(Type.class, "name", "=", name);
+ }
+
+ @POST
+ @Path("{id}/add_cover")
+ @RolesAllowed("ADMIN")
+ @Consumes({ MediaType.MULTIPART_FORM_DATA })
+ public Response uploadCover(@PathParam("id") Long id, @FormDataParam("fileName") String fileName, @FormDataParam("file") InputStream fileInputStream,
+ @FormDataParam("file") FormDataContentDisposition fileMetaData) {
+ return DataTools.uploadCover(Type.class, id, fileName, fileInputStream, fileMetaData);
+ }
+
+ @GET
+ @Path("{id}/rm_cover/{coverId}")
+ @RolesAllowed("ADMIN")
+ public Response removeCover(@PathParam("id") Long id, @PathParam("coverId") Long coverId) throws Exception {
+ AddOnManyToMany.removeLink(Type.class, id, "cover", coverId);
+ return Response.ok(SqlWrapper.get(Type.class, id)).build();
+ }
+
+ public static Type getOrCreate(String name) {
+ try {
+ Type out = SqlWrapper.getWhere(Type.class, new QuerryCondition("name", "=", name));
if (out == null) {
out = new Type();
out.name = name;
@@ -107,8 +113,7 @@ public class TypeResource {
// TODO Auto-generated catch block
e.printStackTrace();
}
- return null;
- }
-
-
+ return null;
+ }
+
}
diff --git a/back/src/org/kar/karideo/api/UserMediaAdvancementResource.java b/back/src/org/kar/karideo/api/UserMediaAdvancementResource.java
index a7a20a3..246514a 100644
--- a/back/src/org/kar/karideo/api/UserMediaAdvancementResource.java
+++ b/back/src/org/kar/karideo/api/UserMediaAdvancementResource.java
@@ -1,107 +1,110 @@
package org.kar.karideo.api;
+import java.util.List;
+
+import org.kar.archidata.annotation.security.RolesAllowed;
+import org.kar.archidata.filter.GenericContext;
+import org.kar.archidata.sqlWrapper.QuerryAnd;
+import org.kar.archidata.sqlWrapper.QuerryCondition;
+import org.kar.archidata.sqlWrapper.SqlWrapper;
import org.kar.karideo.model.UserMediaAdvancement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.kar.archidata.SqlWrapper;
-import org.kar.archidata.WhereCondition;
-import org.kar.archidata.annotation.security.RolesAllowed;
-import org.kar.archidata.filter.GenericContext;
-import jakarta.ws.rs.*;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.SecurityContext;
-import java.util.List;
-
@Path("/advancement")
-@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
+@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public class UserMediaAdvancementResource {
static final Logger LOGGER = LoggerFactory.getLogger(UserMediaAdvancementResource.class);
-
-
- @GET
- @Path("{id}")
- @RolesAllowed("USER")
- public UserMediaAdvancement getWithId(@Context SecurityContext sc, @PathParam("id") Long id) throws Exception {
- GenericContext gc = (GenericContext) sc.getUserPrincipal();
- return SqlWrapper.getWhere(UserMediaAdvancement.class,
- List.of(
- new WhereCondition("mediaId", "=", id),
- new WhereCondition("userId", "=", gc.userByToken.id),
- new WhereCondition("deleted", "=", 0)
- ), false);
- }
-
- @GET
- @RolesAllowed("USER")
- public List gets(@Context SecurityContext sc ) throws Exception {
- GenericContext gc = (GenericContext) sc.getUserPrincipal();
- return SqlWrapper.getsWhere(UserMediaAdvancement.class,
- List.of(
- new WhereCondition("userId", "=", gc.userByToken.id),
- new WhereCondition("deleted", "=", 0)
- ), false);
- }
-
-
- /* =============================================================================
- * Modification SECTION:
- * ============================================================================= */
-
- public record MediaInformations(int time, float percent, int count) {};
-
- //@POST
- //@Path("{id}")
- //@RolesAllowed("USER")
- //@Consumes(MediaType.APPLICATION_JSON)
- public UserMediaAdvancement post(@Context SecurityContext sc, @PathParam("id") Long id, MediaInformations data) throws Exception {
- GenericContext gc = (GenericContext) sc.getUserPrincipal();
- UserMediaAdvancement elem = new UserMediaAdvancement();
- elem.userId = gc.userByToken.id;
- elem.mediaId = id;
- elem.time = data.time;
- elem.percent = data.percent;
- elem.count = data.count;
- return SqlWrapper.insert(elem);
- }
- public record MediaInformationsDelta(int time, float percent, boolean addCount) {};
-
- @PUT
- @Path("{id}")
- @RolesAllowed("USER")
- @Consumes(MediaType.APPLICATION_JSON)
- public UserMediaAdvancement put(@Context SecurityContext sc, @PathParam("id") Long id, MediaInformationsDelta data) throws Exception {
- UserMediaAdvancement elem = this.getWithId(sc, id);
- if (elem == null) {
- // insert element
- if (data.addCount) {
- return this.post(sc, id, new MediaInformations(data.time(), data.percent(), 1));
- } else {
- return this.post(sc, id, new MediaInformations(data.time(), data.percent(), 0));
- }
- }
- elem.time = data.time;
- elem.percent = data.percent;
- if (data.addCount) {
- elem.count++;
- }
- LOGGER.info("{},{},{}", elem.time, elem.percent, elem.count);
- int nbAfected = SqlWrapper.update(elem, elem.id, List.of("time", "percent","count"));
- // TODO: manage the fact that no element has been updated ...
- UserMediaAdvancement ret = SqlWrapper.get(UserMediaAdvancement.class, elem.id);
- return ret;
- }
- @DELETE
- @Path("{id}")
- @RolesAllowed("USER")
- public Response delete(@Context SecurityContext sc, @PathParam("id") Long id) throws Exception {
- UserMediaAdvancement elem = this.getWithId(sc, id);
- SqlWrapper.setDelete(UserMediaAdvancement.class, elem.id);
+
+ @GET
+ @Path("{id}")
+ @RolesAllowed("USER")
+ public UserMediaAdvancement getWithId(@Context SecurityContext sc, @PathParam("id") Long id) throws Exception {
+ GenericContext gc = (GenericContext) sc.getUserPrincipal();
+ return SqlWrapper.getWhere(UserMediaAdvancement.class, new QuerryAnd(new QuerryCondition("mediaId", "=", id), new QuerryCondition("userId", "=", gc.userByToken.id)));
+ }
+
+ @GET
+ @RolesAllowed("USER")
+ public List gets(@Context SecurityContext sc) throws Exception {
+ GenericContext gc = (GenericContext) sc.getUserPrincipal();
+ return SqlWrapper.getsWhere(UserMediaAdvancement.class, new QuerryCondition("userId", "=", gc.userByToken.id));
+ }
+
+ /* =============================================================================
+ * Modification SECTION:
+ * ============================================================================= */
+
+ public record MediaInformations(
+ int time,
+ float percent,
+ int count) {};
+
+ //@POST
+ //@Path("{id}")
+ //@RolesAllowed("USER")
+ //@Consumes(MediaType.APPLICATION_JSON)
+ public UserMediaAdvancement post(@Context SecurityContext sc, @PathParam("id") Long id, MediaInformations data) throws Exception {
+ GenericContext gc = (GenericContext) sc.getUserPrincipal();
+ UserMediaAdvancement elem = new UserMediaAdvancement();
+ elem.userId = gc.userByToken.id;
+ elem.mediaId = id;
+ elem.time = data.time;
+ elem.percent = data.percent;
+ elem.count = data.count;
+ return SqlWrapper.insert(elem);
+ }
+
+ public record MediaInformationsDelta(
+ int time,
+ float percent,
+ boolean addCount) {};
+
+ @PUT
+ @Path("{id}")
+ @RolesAllowed("USER")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public UserMediaAdvancement put(@Context SecurityContext sc, @PathParam("id") Long id, MediaInformationsDelta data) throws Exception {
+ UserMediaAdvancement elem = this.getWithId(sc, id);
+ if (elem == null) {
+ // insert element
+ if (data.addCount) {
+ return this.post(sc, id, new MediaInformations(data.time(), data.percent(), 1));
+ } else {
+ return this.post(sc, id, new MediaInformations(data.time(), data.percent(), 0));
+ }
+ }
+ elem.time = data.time;
+ elem.percent = data.percent;
+ if (data.addCount) {
+ elem.count++;
+ }
+ LOGGER.info("{},{},{}", elem.time, elem.percent, elem.count);
+ int nbAfected = SqlWrapper.update(elem, elem.id, List.of("time", "percent", "count"));
+ // TODO: manage the fact that no element has been updated ...
+ UserMediaAdvancement ret = SqlWrapper.get(UserMediaAdvancement.class, elem.id);
+ return ret;
+ }
+
+ @DELETE
+ @Path("{id}")
+ @RolesAllowed("USER")
+ public Response delete(@Context SecurityContext sc, @PathParam("id") Long id) throws Exception {
+ UserMediaAdvancement elem = this.getWithId(sc, id);
+ SqlWrapper.delete(UserMediaAdvancement.class, elem.id);
return Response.ok().build();
- }
-
-
+ }
+
}
diff --git a/back/src/org/kar/karideo/api/UserResource.java b/back/src/org/kar/karideo/api/UserResource.java
index dfcf829..5f24d07 100755
--- a/back/src/org/kar/karideo/api/UserResource.java
+++ b/back/src/org/kar/karideo/api/UserResource.java
@@ -1,31 +1,34 @@
package org.kar.karideo.api;
-import org.kar.archidata.SqlWrapper;
-import org.kar.archidata.filter.GenericContext;
-import org.kar.archidata.model.User;
-import org.kar.karideo.model.UserKarideo;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
+import java.util.List;
import org.kar.archidata.annotation.security.RolesAllowed;
-import jakarta.ws.rs.*;
-import jakarta.ws.rs.core.Context;
-import jakarta.ws.rs.core.MediaType;
-import jakarta.ws.rs.core.SecurityContext;
-import java.util.List;
+import org.kar.archidata.filter.GenericContext;
+import org.kar.archidata.sqlWrapper.SqlWrapper;
+import org.kar.karideo.model.UserKarideo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.SecurityContext;
@Path("/users")
-@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
+@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public class UserResource {
static final Logger LOGGER = LoggerFactory.getLogger(UserResource.class);
-
+
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserOut {
public long id;
public String login;
+
public UserOut(long id, String login) {
super();
this.id = id;
@@ -33,82 +36,50 @@ public class UserResource {
}
}
- public UserResource() {
- }
-
- // curl http://localhost:9993/api/users
- @GET
- @RolesAllowed("ADMIN")
- public List getUsers() {
- System.out.println("getUsers");
- try {
- return SqlWrapper.gets(UserKarideo.class, false);
+
+ public UserResource() {}
+
+ // curl http://localhost:9993/api/users
+ @GET
+ @RolesAllowed("ADMIN")
+ public List getUsers() {
+ System.out.println("getUsers");
+ try {
+ return SqlWrapper.gets(UserKarideo.class);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
- }
-
- // curl http://localhost:9993/api/users/3
- @GET
- @Path("{id}")
- @RolesAllowed("ADMIN")
- public UserKarideo getUsers(@Context SecurityContext sc, @PathParam("id") long userId) {
- System.out.println("getUser " + userId);
- GenericContext gc = (GenericContext) sc.getUserPrincipal();
- System.out.println("===================================================");
- System.out.println("== USER ? " + gc.userByToken.name);
- System.out.println("===================================================");
- try {
+ }
+
+ // curl http://localhost:9993/api/users/3
+ @GET
+ @Path("{id}")
+ @RolesAllowed("ADMIN")
+ public UserKarideo getUsers(@Context SecurityContext sc, @PathParam("id") long userId) {
+ System.out.println("getUser " + userId);
+ GenericContext gc = (GenericContext) sc.getUserPrincipal();
+ System.out.println("===================================================");
+ System.out.println("== USER ? " + gc.userByToken.name);
+ System.out.println("===================================================");
+ try {
return SqlWrapper.get(UserKarideo.class, userId);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
- return null;
- }
-
- @GET
- @Path("me")
- @RolesAllowed("USER")
- public UserOut getMe(@Context SecurityContext sc) {
- LOGGER.debug("getMe()");
- GenericContext gc = (GenericContext) sc.getUserPrincipal();
- LOGGER.debug("== USER ? {}", gc.userByToken);
- return new UserOut(gc.userByToken.id, gc.userByToken.name);
- }
-
+ return null;
+ }
+
+ @GET
+ @Path("me")
+ @RolesAllowed("USER")
+ public UserOut getMe(@Context SecurityContext sc) {
+ LOGGER.debug("getMe()");
+ GenericContext gc = (GenericContext) sc.getUserPrincipal();
+ LOGGER.debug("== USER ? {}", gc.userByToken);
+ return new UserOut(gc.userByToken.id, gc.userByToken.name);
+ }
+
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/back/src/org/kar/karideo/api/VideoResource.java b/back/src/org/kar/karideo/api/VideoResource.java
index 6ce6d99..81cfa8c 100644
--- a/back/src/org/kar/karideo/api/VideoResource.java
+++ b/back/src/org/kar/karideo/api/VideoResource.java
@@ -1,8 +1,19 @@
package org.kar.karideo.api;
+import java.io.IOException;
+import java.io.InputStream;
+import java.sql.SQLException;
+import java.util.List;
+
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import org.glassfish.jersey.media.multipart.FormDataParam;
+import org.kar.archidata.annotation.security.RolesAllowed;
+import org.kar.archidata.api.DataResource;
+import org.kar.archidata.exception.FailException;
+import org.kar.archidata.exception.InputException;
import org.kar.archidata.model.Data;
+import org.kar.archidata.sqlWrapper.SqlWrapper;
+import org.kar.archidata.sqlWrapper.addOn.AddOnManyToMany;
import org.kar.archidata.util.DataTools;
import org.kar.karideo.model.Media;
import org.kar.karideo.model.Season;
@@ -10,215 +21,203 @@ import org.kar.karideo.model.Series;
import org.kar.karideo.model.Type;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.kar.archidata.SqlWrapper;
-import org.kar.archidata.annotation.security.RolesAllowed;
-import org.kar.archidata.api.DataResource;
-import org.kar.archidata.exception.FailException;
-import org.kar.archidata.exception.InputException;
-import jakarta.ws.rs.*;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.PUT;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
-import java.io.IOException;
-import java.io.InputStream;
-import java.sql.*;
-import java.util.List;
-
@Path("/video")
-@Produces({MediaType.APPLICATION_JSON})
+@Produces({ MediaType.APPLICATION_JSON })
public class VideoResource {
static final Logger LOGGER = LoggerFactory.getLogger(VideoResource.class);
-
- @GET
- @RolesAllowed("USER")
- public List get() throws Exception {
- return SqlWrapper.gets(Media.class, false);
- }
-
- @GET
- @Path("{id}")
- @RolesAllowed("USER")
- public Media get(@PathParam("id") Long id) throws Exception {
- return SqlWrapper.get(Media.class, id);
- }
-
- @PUT
- @Path("{id}")
- @RolesAllowed("ADMIN")
- @Consumes(MediaType.APPLICATION_JSON)
- public Media put(@PathParam("id") Long id, String jsonRequest) throws Exception {
- System.out.println("update video " + id + " ==> '" + jsonRequest + "'");
- SqlWrapper.update(Media.class, id, jsonRequest);
- return SqlWrapper.get(Media.class, id);
- }
-
- private String multipartCorrection(String data) {
- if (data == null) {
- return null;
- }
- if (data.isEmpty()) {
- return null;
- }
- if (data.contentEquals("null")) {
- return null;
- }
- return data;
- }
-
- @POST
- @Path("/upload/")
- @RolesAllowed("ADMIN")
- @Consumes({MediaType.MULTIPART_FORM_DATA})
- public Response uploadFile(@FormDataParam("fileName") String fileName,
- @FormDataParam("universe") String universe,
- @FormDataParam("series") String series,
- //@FormDataParam("seriesId") String seriesId, Not used ...
- @FormDataParam("season") String season,
- @FormDataParam("episode") String episode,
- @FormDataParam("title") String title,
- @FormDataParam("typeId") String typeId,
- @FormDataParam("file") InputStream fileInputStream,
- @FormDataParam("file") FormDataContentDisposition fileMetaData
- ) throws FailException {
- try {
- // correct input string stream :
- fileName = multipartCorrection(fileName);
- universe = multipartCorrection(universe);
- series = multipartCorrection(series);
- season = multipartCorrection(season);
- 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);
- System.out.println(" - universe: " + universe);
- System.out.println(" - series: " + series);
- System.out.println(" - season: " + season);
- System.out.println(" - episode: " + episode);
- System.out.println(" - title: " + title);
- System.out.println(" - type: " + typeId);
- System.out.println(" - fileInputStream: " + fileInputStream);
- System.out.println(" - fileMetaData: " + fileMetaData);
- System.out.flush();
- if (typeId == null) {
- throw new InputException("typeId", "TypiId is not specified");
- }
-
- long tmpUID = DataResource.getTmpDataId();
- String sha512 = DataResource.saveTemporaryFile(fileInputStream, tmpUID);
- Data data = DataResource.getWithSha512(sha512);
- if (data == null) {
- System.out.println("Need to add the data in the BDD ... ");
- System.out.flush();
- try {
- data = DataResource.createNewData(tmpUID, fileName, sha512);
- } catch (IOException ex) {
- DataResource.removeTemporaryFile(tmpUID);
- ex.printStackTrace();
- throw new FailException("can not create input media (the data model has an internal error");
- }
- } else if (data.deleted == true) {
- System.out.println("Data already exist but deleted");
- System.out.flush();
- DataResource.undelete(data.id);
- data.deleted = false;
- } else {
- System.out.println("Data already exist ... all good");
- System.out.flush();
- }
- // Fist step: retive all the Id of each parents:...
- System.out.println("Find typeNode");
- // check if id of type exist:
- Type typeNode = TypeResource.getId(Long.parseLong(typeId));
- if (typeNode == null) {
- DataResource.removeTemporaryFile(tmpUID);
- throw new InputException("typeId", "TypeId does not exist ...");
- }
- System.out.println(" ==> " + typeNode);
- System.out.println("Find seriesNode");
- // get uid of group:
- Series seriesNode = null;
- if (series != null) {
- seriesNode = SeriesResource.getOrCreate(series, typeNode.id);
- }
-
- System.out.println(" ==> " + seriesNode);
- System.out.println("Find seasonNode");
- // get uid of season:
- Season seasonNode = null;
- if (seriesNode == null && season != null) {
- DataResource.removeTemporaryFile(tmpUID);
- throw new InputException("season", "Season is set but no seraies is set !!");
- }
- if (season != null) {
- seasonNode = SeasonResource.getOrCreate(season, seriesNode.id);
- }
-
- System.out.println(" ==> " + seasonNode);
- System.out.println("add media");
-
-
- long uniqueSQLID = -1;
- try {
- Media media = new Media();
- media.name = title;
- media.dataId = data.id;
- media.typeId = typeNode.id;
- media.seriesId = null;
- if(seriesNode != null) {
- media.seriesId = seriesNode.id;
- }
- media.seasonId = null;
- if (seasonNode != null) {
- media.seasonId = seasonNode.id;
- }
- media.episode = null;
- if (episode != null && ! episode.contentEquals("")) {
- media.episode = Integer.parseInt(episode);
- }
- Media out = SqlWrapper.insert(media);
- DataResource.removeTemporaryFile(tmpUID);
- System.out.println("uploaded .... compleate: " + uniqueSQLID);
- Media creation = get(uniqueSQLID);
- return Response.ok(creation).build();
- } catch (SQLException ex) {
- ex.printStackTrace();
- System.out.println("Catch error:" + ex.getMessage());
- throw new FailException("Catch SQLerror ==> check server logs");
- }
- } catch (Exception ex) {
- System.out.println("Catch an unexpected error ... " + ex.getMessage());
- ex.printStackTrace();
- 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") Long id,
- @FormDataParam("fileName") String fileName,
- @FormDataParam("file") InputStream fileInputStream,
- @FormDataParam("file") FormDataContentDisposition fileMetaData
- ) {
- return DataTools.uploadCover(Media.class, id, fileName, fileInputStream, fileMetaData);
- }
- @GET
- @Path("{id}/rm_cover/{coverId}")
- @RolesAllowed("ADMIN")
- public Response removeCover(@PathParam("id") Long id, @PathParam("coverId") Long coverId) throws Exception {
- SqlWrapper.removeLink(Media.class, id, "cover", coverId);
- return Response.ok(SqlWrapper.get(Media.class, id)).build();
- }
-
- @DELETE
- @Path("{id}")
- @RolesAllowed("ADMIN")
- public Response delete(@PathParam("id") Long id) throws Exception {
- SqlWrapper.setDelete(Media.class, id);
+
+ @GET
+ @RolesAllowed("USER")
+ public List get() throws Exception {
+ return SqlWrapper.gets(Media.class);
+ }
+
+ @GET
+ @Path("{id}")
+ @RolesAllowed("USER")
+ public Media get(@PathParam("id") Long id) throws Exception {
+ return SqlWrapper.get(Media.class, id);
+ }
+
+ @PUT
+ @Path("{id}")
+ @RolesAllowed("ADMIN")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Media put(@PathParam("id") Long id, String jsonRequest) throws Exception {
+ System.out.println("update video " + id + " ==> '" + jsonRequest + "'");
+ SqlWrapper.update(Media.class, id, jsonRequest);
+ return SqlWrapper.get(Media.class, id);
+ }
+
+ private String multipartCorrection(String data) {
+ if (data == null) {
+ return null;
+ }
+ if (data.isEmpty()) {
+ return null;
+ }
+ if (data.contentEquals("null")) {
+ return null;
+ }
+ return data;
+ }
+
+ @POST
+ @Path("/upload/")
+ @RolesAllowed("ADMIN")
+ @Consumes({ MediaType.MULTIPART_FORM_DATA })
+ public Response uploadFile(@FormDataParam("fileName") String fileName, @FormDataParam("universe") String universe, @FormDataParam("series") String series,
+ //@FormDataParam("seriesId") String seriesId, Not used ...
+ @FormDataParam("season") String season, @FormDataParam("episode") String episode, @FormDataParam("title") String title, @FormDataParam("typeId") String typeId,
+ @FormDataParam("file") InputStream fileInputStream, @FormDataParam("file") FormDataContentDisposition fileMetaData) throws FailException {
+ try {
+ // correct input string stream :
+ fileName = multipartCorrection(fileName);
+ universe = multipartCorrection(universe);
+ series = multipartCorrection(series);
+ season = multipartCorrection(season);
+ 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);
+ System.out.println(" - universe: " + universe);
+ System.out.println(" - series: " + series);
+ System.out.println(" - season: " + season);
+ System.out.println(" - episode: " + episode);
+ System.out.println(" - title: " + title);
+ System.out.println(" - type: " + typeId);
+ System.out.println(" - fileInputStream: " + fileInputStream);
+ System.out.println(" - fileMetaData: " + fileMetaData);
+ System.out.flush();
+ if (typeId == null) {
+ throw new InputException("typeId", "TypiId is not specified");
+ }
+
+ long tmpUID = DataResource.getTmpDataId();
+ String sha512 = DataResource.saveTemporaryFile(fileInputStream, tmpUID);
+ Data data = DataResource.getWithSha512(sha512);
+ if (data == null) {
+ System.out.println("Need to add the data in the BDD ... ");
+ System.out.flush();
+ try {
+ data = DataResource.createNewData(tmpUID, fileName, sha512);
+ } catch (IOException ex) {
+ DataResource.removeTemporaryFile(tmpUID);
+ ex.printStackTrace();
+ throw new FailException("can not create input media (the data model has an internal error");
+ }
+ } else if (data.deleted == true) {
+ System.out.println("Data already exist but deleted");
+ System.out.flush();
+ DataResource.undelete(data.id);
+ data.deleted = false;
+ } else {
+ System.out.println("Data already exist ... all good");
+ System.out.flush();
+ }
+ // Fist step: retive all the Id of each parents:...
+ System.out.println("Find typeNode");
+ // check if id of type exist:
+ Type typeNode = TypeResource.getId(Long.parseLong(typeId));
+ if (typeNode == null) {
+ DataResource.removeTemporaryFile(tmpUID);
+ throw new InputException("typeId", "TypeId does not exist ...");
+ }
+ System.out.println(" ==> " + typeNode);
+ System.out.println("Find seriesNode");
+ // get uid of group:
+ Series seriesNode = null;
+ if (series != null) {
+ seriesNode = SeriesResource.getOrCreate(series, typeNode.id);
+ }
+
+ System.out.println(" ==> " + seriesNode);
+ System.out.println("Find seasonNode");
+ // get uid of season:
+ Season seasonNode = null;
+ if (seriesNode == null && season != null) {
+ DataResource.removeTemporaryFile(tmpUID);
+ throw new InputException("season", "Season is set but no seraies is set !!");
+ }
+ if (season != null) {
+ seasonNode = SeasonResource.getOrCreate(season, seriesNode.id);
+ }
+
+ System.out.println(" ==> " + seasonNode);
+ System.out.println("add media");
+
+ long uniqueSQLID = -1;
+ try {
+ Media media = new Media();
+ media.name = title;
+ media.dataId = data.id;
+ media.typeId = typeNode.id;
+ media.seriesId = null;
+ if (seriesNode != null) {
+ media.seriesId = seriesNode.id;
+ }
+ media.seasonId = null;
+ if (seasonNode != null) {
+ media.seasonId = seasonNode.id;
+ }
+ media.episode = null;
+ if (episode != null && !episode.contentEquals("")) {
+ media.episode = Integer.parseInt(episode);
+ }
+ Media out = SqlWrapper.insert(media);
+ DataResource.removeTemporaryFile(tmpUID);
+ System.out.println("uploaded .... compleate: " + uniqueSQLID);
+ Media creation = get(uniqueSQLID);
+ return Response.ok(creation).build();
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ System.out.println("Catch error:" + ex.getMessage());
+ throw new FailException("Catch SQLerror ==> check server logs");
+ }
+ } catch (Exception ex) {
+ System.out.println("Catch an unexpected error ... " + ex.getMessage());
+ ex.printStackTrace();
+ 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") Long id, @FormDataParam("fileName") String fileName, @FormDataParam("file") InputStream fileInputStream,
+ @FormDataParam("file") FormDataContentDisposition fileMetaData) {
+ return DataTools.uploadCover(Media.class, id, fileName, fileInputStream, fileMetaData);
+ }
+
+ @GET
+ @Path("{id}/rm_cover/{coverId}")
+ @RolesAllowed("ADMIN")
+ public Response removeCover(@PathParam("id") Long id, @PathParam("coverId") Long coverId) throws Exception {
+ AddOnManyToMany.removeLink(Media.class, id, "cover", coverId);
+ return Response.ok(SqlWrapper.get(Media.class, id)).build();
+ }
+
+ @DELETE
+ @Path("{id}")
+ @RolesAllowed("ADMIN")
+ public Response delete(@PathParam("id") Long id) throws Exception {
+ SqlWrapper.delete(Media.class, id);
return Response.ok().build();
- }
+ }
}
diff --git a/back/src/org/kar/karideo/migration/Migration20231015.java b/back/src/org/kar/karideo/migration/Migration20231015.java
new file mode 100644
index 0000000..8b7cd98
--- /dev/null
+++ b/back/src/org/kar/karideo/migration/Migration20231015.java
@@ -0,0 +1,27 @@
+package org.kar.karideo.migration;
+
+import java.util.List;
+
+import org.kar.archidata.migration.MigrationSqlStep;
+
+public class Migration20231015 extends MigrationSqlStep {
+
+ public static final int KARSO_INITIALISATION_ID = 1;
+
+ @Override
+ public String getName() {
+ return "refactor creation and update time";
+ }
+
+ public Migration20231015() throws Exception {
+ for (String elem : List.of("data", "media", "media_link_cover", "season", "season_link_cover", "series", "series_link_cover", "type", "type_link_cover", "user", "userMediaAdvancement")) {
+ addAction("""
+ ALTER TABLE `""" + elem + """
+ `
+ RENAME COLUMN `create_date` TO `createdAt`,
+ RENAME COLUMN `modify_date` TO `updatedAt`;
+ """);
+ }
+ display();
+ }
+}
diff --git a/back/src/org/kar/karideo/model/Media.java b/back/src/org/kar/karideo/model/Media.java
index 31b0102..fb15785 100644
--- a/back/src/org/kar/karideo/model/Media.java
+++ b/back/src/org/kar/karideo/model/Media.java
@@ -2,48 +2,51 @@ package org.kar.karideo.model;
import java.util.List;
-import org.kar.archidata.annotation.SQLComment;
-import org.kar.archidata.annotation.SQLForeignKey;
-import org.kar.archidata.annotation.SQLIfNotExists;
-import org.kar.archidata.annotation.SQLNotNull;
-import org.kar.archidata.annotation.SQLTableLinkGeneric;
-import org.kar.archidata.annotation.SQLTableName;
+import org.kar.archidata.model.Data;
import org.kar.archidata.model.GenericTable;
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;
-@SQLTableName ("media")
-@SQLIfNotExists
+@Entity
+@Table(name = "media")
@JsonInclude(JsonInclude.Include.NON_NULL)
+//@SQLDelete(sql = "UPDATE table_product SET deleted = true WHERE id=?")
+//@Where(clause = "deleted=false")
public class Media extends GenericTable {
- @SQLNotNull
- @SQLComment("Name of the media (this represent the title)")
- public String name;
- @SQLComment("Description of the media")
- public String description;
- @SQLNotNull
- @SQLComment("Foreign Key Id of the data")
- @SQLForeignKey("data")
- public Long dataId;
- @SQLComment("Type of the media")
- @SQLForeignKey("type")
- public Long typeId;
- @SQLComment("Series reference of the media")
- @SQLForeignKey("series")
- public Long seriesId;
- @SQLComment("Saison reference of the media")
- @SQLForeignKey("season")
- public Long seasonId;
- @SQLComment("Episide Id")
- public Integer episode;
- @SQLComment("")
- public Integer date;
- @SQLComment("Creation years of the media")
- public Integer time;
- @SQLComment("Limitation Age of the media")
- public Integer ageLimit;
- @SQLComment("List of Id of the sopecific covers")
- @SQLTableLinkGeneric
- public List covers = null;
+ // Name of the media (this represent the title)
+ @Column(nullable = false)
+ public String name;
+ // Description of the media
+ public String description;
+ // Foreign Key Id of the data
+ @ManyToOne(fetch = FetchType.LAZY, targetEntity = Data.class)
+ @Column(nullable = false)
+ public Long dataId;
+ // Type of the media")
+ @ManyToOne(fetch = FetchType.LAZY, targetEntity = Type.class)
+ public Long typeId;
+ // Series reference of the media
+ @ManyToOne(fetch = FetchType.LAZY, targetEntity = Series.class)
+ public Long seriesId;
+ // Saison reference of the media
+ @ManyToOne(fetch = FetchType.LAZY, targetEntity = Season.class)
+ public Long seasonId;
+ // Episide Id
+ public Integer episode;
+ // ")
+ public Integer date;
+ // Creation years of the media
+ public Integer time;
+ // 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;
}
diff --git a/back/src/org/kar/karideo/model/Season.java b/back/src/org/kar/karideo/model/Season.java
index 33dcf0a..249a64f 100644
--- a/back/src/org/kar/karideo/model/Season.java
+++ b/back/src/org/kar/karideo/model/Season.java
@@ -3,30 +3,32 @@ package org.kar.karideo.model;
import java.util.List;
import org.kar.archidata.annotation.SQLComment;
-import org.kar.archidata.annotation.SQLForeignKey;
import org.kar.archidata.annotation.SQLIfNotExists;
-import org.kar.archidata.annotation.SQLNotNull;
-import org.kar.archidata.annotation.SQLTableLinkGeneric;
-import org.kar.archidata.annotation.SQLTableName;
+import org.kar.archidata.model.Data;
import org.kar.archidata.model.GenericTable;
import com.fasterxml.jackson.annotation.JsonInclude;
+import jakarta.persistence.Column;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
-@SQLTableName ("season")
+@Table(name = "season")
@SQLIfNotExists
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Season extends GenericTable {
- @SQLNotNull
- @SQLComment("Name of the media (this represent the title)")
- public String name;
- @SQLComment("Description of the media")
- public String description;
- @SQLNotNull
- @SQLComment("series parent ID")
- @SQLForeignKey("series")
- public Long parentId;
- @SQLComment("List of Id of the sopecific covers")
- @SQLTableLinkGeneric
- public List covers = null;
+ @Column(nullable = false)
+ @SQLComment("Name of the media (this represent the title)")
+ public String name;
+ @SQLComment("Description of the media")
+ public String description;
+ @Column(nullable = false)
+ @SQLComment("series parent ID")
+ @ManyToOne(fetch = FetchType.LAZY, targetEntity = Series.class)
+ public Long parentId;
+ @SQLComment("List of Id of the sopecific covers")
+ @ManyToMany(fetch = FetchType.LAZY, targetEntity = Data.class)
+ 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 05956ec..47228bb 100644
--- a/back/src/org/kar/karideo/model/Series.java
+++ b/back/src/org/kar/karideo/model/Series.java
@@ -3,30 +3,32 @@ package org.kar.karideo.model;
import java.util.List;
import org.kar.archidata.annotation.SQLComment;
-import org.kar.archidata.annotation.SQLForeignKey;
import org.kar.archidata.annotation.SQLIfNotExists;
-import org.kar.archidata.annotation.SQLNotNull;
-import org.kar.archidata.annotation.SQLTableLinkGeneric;
-import org.kar.archidata.annotation.SQLTableName;
+import org.kar.archidata.model.Data;
import org.kar.archidata.model.GenericTable;
import com.fasterxml.jackson.annotation.JsonInclude;
+import jakarta.persistence.Column;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
-@SQLTableName ("series")
+@Table(name = "series")
@SQLIfNotExists
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Series extends GenericTable {
- @SQLNotNull
- @SQLComment("Name of the media (this represent the title)")
- public String name;
- @SQLComment("Description of the media")
- public String description;
- @SQLNotNull
- @SQLComment("series parent ID")
- @SQLForeignKey("type")
- public Long parentId;
- @SQLComment("List of Id of the sopecific covers")
- @SQLTableLinkGeneric
- public List covers = null;
+ @Column(nullable = false)
+ @SQLComment("Name of the media (this represent the title)")
+ public String name;
+ @SQLComment("Description of the media")
+ public String description;
+ @Column(nullable = false)
+ @SQLComment("series parent ID")
+ @ManyToOne(fetch = FetchType.LAZY, targetEntity = Type.class)
+ public Long parentId;
+ @SQLComment("List of Id of the sopecific covers")
+ @ManyToMany(fetch = FetchType.LAZY, targetEntity = Data.class)
+ 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 3d3c3e7..73ccb11 100644
--- a/back/src/org/kar/karideo/model/Type.java
+++ b/back/src/org/kar/karideo/model/Type.java
@@ -4,24 +4,26 @@ import java.util.List;
import org.kar.archidata.annotation.SQLComment;
import org.kar.archidata.annotation.SQLIfNotExists;
-import org.kar.archidata.annotation.SQLNotNull;
-import org.kar.archidata.annotation.SQLTableLinkGeneric;
-import org.kar.archidata.annotation.SQLTableName;
+import org.kar.archidata.model.Data;
import org.kar.archidata.model.GenericTable;
import com.fasterxml.jackson.annotation.JsonInclude;
+import jakarta.persistence.Column;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToMany;
+import jakarta.persistence.Table;
-@SQLTableName ("type")
+@Table(name = "type")
@SQLIfNotExists
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Type extends GenericTable {
- @SQLNotNull
- @SQLComment("Name of the media (this represent the title)")
- public String name;
- @SQLComment("Description of the media")
- public String description;
- @SQLComment("List of Id of the sopecific covers")
- @SQLTableLinkGeneric
- public List covers = null;
+ @Column(nullable = false)
+ @SQLComment("Name of the media (this represent the title)")
+ public String name;
+ @SQLComment("Description of the media")
+ public String description;
+ @SQLComment("List of Id of the sopecific covers")
+ @ManyToMany(fetch = FetchType.LAZY, targetEntity = Data.class)
+ public List covers = null;
}
diff --git a/back/src/org/kar/karideo/model/UserKarideo.java b/back/src/org/kar/karideo/model/UserKarideo.java
index 739e6a9..ee780dc 100644
--- a/back/src/org/kar/karideo/model/UserKarideo.java
+++ b/back/src/org/kar/karideo/model/UserKarideo.java
@@ -1,12 +1,13 @@
package org.kar.karideo.model;
import org.kar.archidata.annotation.SQLIfNotExists;
-import org.kar.archidata.annotation.SQLTableName;
import org.kar.archidata.model.User;
import com.fasterxml.jackson.annotation.JsonInclude;
-@SQLTableName ("user")
+import jakarta.persistence.Table;
+
+@Table(name = "user")
@SQLIfNotExists
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserKarideo extends User {
diff --git a/back/src/org/kar/karideo/model/UserMediaAdvancement.java b/back/src/org/kar/karideo/model/UserMediaAdvancement.java
index f75e015..6923098 100644
--- a/back/src/org/kar/karideo/model/UserMediaAdvancement.java
+++ b/back/src/org/kar/karideo/model/UserMediaAdvancement.java
@@ -1,34 +1,35 @@
package org.kar.karideo.model;
import org.kar.archidata.annotation.SQLComment;
-import org.kar.archidata.annotation.SQLForeignKey;
import org.kar.archidata.annotation.SQLIfNotExists;
-import org.kar.archidata.annotation.SQLNotNull;
-import org.kar.archidata.annotation.SQLTableName;
import org.kar.archidata.model.GenericTable;
import com.fasterxml.jackson.annotation.JsonInclude;
+import jakarta.persistence.Column;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.ManyToOne;
+import jakarta.persistence.Table;
-@SQLTableName ("userMediaAdvancement")
+@Table(name = "userMediaAdvancement")
@SQLIfNotExists
@JsonInclude(JsonInclude.Include.NON_NULL)
public class UserMediaAdvancement extends GenericTable {
- @SQLNotNull
- @SQLComment("Foreign Key Id of the user")
- @SQLForeignKey("user")
- public long userId;
- @SQLNotNull
- @SQLComment("Id of the media")
- @SQLForeignKey("media")
- public long mediaId;
- @SQLNotNull
- @SQLComment("Percent of admencement in the media")
- public float percent;
- @SQLNotNull
- @SQLComment("Number of second of admencement in the media")
- public int time;
- @SQLNotNull
- @SQLComment("Number of time this media has been read")
- public int count;
+ @Column(nullable = false)
+ @SQLComment("Foreign Key Id of the user")
+ @ManyToOne(fetch = FetchType.LAZY, targetEntity = UserKarideo.class)
+ public long userId;
+ @Column(nullable = false)
+ @SQLComment("Id of the media")
+ @ManyToOne(fetch = FetchType.LAZY, targetEntity = Media.class)
+ public long mediaId;
+ @Column(nullable = false)
+ @SQLComment("Percent of admencement in the media")
+ public float percent;
+ @Column(nullable = false)
+ @SQLComment("Number of second of admencement in the media")
+ public int time;
+ @Column(nullable = false)
+ @SQLComment("Number of time this media has been read")
+ public int count;
}
diff --git a/front/package.json b/front/package.json
index a4c5ce1..88496c9 100644
--- a/front/package.json
+++ b/front/package.json
@@ -5,7 +5,7 @@
"scripts": {
"all": "npm run build && npm run test",
"ng": "ng",
- "start": "ng serve --configuration=develop --watch --port 4202",
+ "dev": "ng serve --configuration=develop --watch --port 4202",
"build": "ng build --prod",
"test": "ng test",
"lint": "ng lint",
@@ -38,4 +38,4 @@
"@angular/compiler-cli": "^14.2.10",
"@angular/language-service": "^14.2.10"
}
-}
+}
\ No newline at end of file