From 7fa242006fd28c5cb58266f1fac88763c3783401 Mon Sep 17 00:00:00 2001
From: Thomas <gltron3000@gmail.com>
Date: Tue, 19 May 2020 16:08:51 +0200
Subject: [PATCH] Refactor JPA to proper Spring data

---
 .../mozen/business/CustomLayerRepository.java |   9 ++
 .../main/java/mozen/business/IModelDao.java   |  28 -----
 .../java/mozen/business/IModelManager.java    |   8 +-
 .../main/java/mozen/business/IUserDao.java    |  12 --
 .../java/mozen/business/IUserManager.java     |   1 -
 .../main/java/mozen/business/ModelDao.java    | 111 ------------------
 .../java/mozen/business/ModelManager.java     | 101 +++++++---------
 .../java/mozen/business/ModelRepository.java  |  11 ++
 .../mozen/business/SpringBusinessConfig.java  |  46 +++-----
 .../mozen/business/TagCategoryRepository.java |   9 ++
 .../java/mozen/business/TagRepository.java    |  11 ++
 .../src/main/java/mozen/business/UserDao.java |  54 ---------
 .../main/java/mozen/business/UserManager.java |  13 +-
 .../java/mozen/business/UserRepository.java   |  11 ++
 .../main/java/mozen/utils/DatabaseFiller.java |  14 +--
 .../main/java/mozen/web/ModelController.java  |   2 +-
 16 files changed, 124 insertions(+), 317 deletions(-)
 create mode 100644 mozen/src/main/java/mozen/business/CustomLayerRepository.java
 delete mode 100644 mozen/src/main/java/mozen/business/IModelDao.java
 delete mode 100644 mozen/src/main/java/mozen/business/IUserDao.java
 delete mode 100644 mozen/src/main/java/mozen/business/ModelDao.java
 create mode 100644 mozen/src/main/java/mozen/business/ModelRepository.java
 create mode 100644 mozen/src/main/java/mozen/business/TagCategoryRepository.java
 create mode 100644 mozen/src/main/java/mozen/business/TagRepository.java
 delete mode 100644 mozen/src/main/java/mozen/business/UserDao.java
 create mode 100644 mozen/src/main/java/mozen/business/UserRepository.java

diff --git a/mozen/src/main/java/mozen/business/CustomLayerRepository.java b/mozen/src/main/java/mozen/business/CustomLayerRepository.java
new file mode 100644
index 0000000..039a660
--- /dev/null
+++ b/mozen/src/main/java/mozen/business/CustomLayerRepository.java
@@ -0,0 +1,9 @@
+package mozen.business;
+
+import org.springframework.data.repository.CrudRepository;
+
+import mozen.model.CustomLayer;
+
+public interface CustomLayerRepository extends CrudRepository<CustomLayer, Long>{
+  
+}
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/IModelDao.java b/mozen/src/main/java/mozen/business/IModelDao.java
deleted file mode 100644
index 96b56d5..0000000
--- a/mozen/src/main/java/mozen/business/IModelDao.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package mozen.business;
-
-import java.util.Collection;
-
-import mozen.model.CustomLayer;
-import mozen.model.Model;
-import mozen.model.Tag;
-import mozen.model.TagCategory;
-
-public interface IModelDao {
-  void addModel(Model m);
-  void updateModel(Model m);
-  void removeModel(long id);
-
-  void addLayer(CustomLayer l);
-  void updateLayer(CustomLayer l);
-  void removeLayer(long id);
-
-  void addTag(Tag tag);
-  Collection<TagCategory> getTags();
-  Tag getTagByName(String name);
-  TagCategory getTagCategory(long id);
-
-  Model findModel(long id);
-  Collection<Model> findModelsByName(String name);
-
-  CustomLayer findLayer(long id);
-}
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/IModelManager.java b/mozen/src/main/java/mozen/business/IModelManager.java
index 7d6d2ff..738c7c3 100644
--- a/mozen/src/main/java/mozen/business/IModelManager.java
+++ b/mozen/src/main/java/mozen/business/IModelManager.java
@@ -6,22 +6,18 @@ import org.springframework.web.multipart.MultipartFile;
 
 import mozen.messages.ModelMessage;
 import mozen.messages.TagMessage;
-import mozen.model.CustomLayer;
 import mozen.model.Model;
 import mozen.model.TagCategory;
 import mozen.model.User;
 
 public interface IModelManager {
   Long addModel(ModelMessage message, User user) throws Exception;
+  void addModelFile(MultipartFile file, long id, User user) throws Exception;
   void updateModel(Model model, long id, User user) throws Exception;
   void removeModel(long id, User user) throws Exception;
 
-  Long addLayer(long modelId, CustomLayer layer, User user) throws Exception;
-  void updateLayer(long id, CustomLayer layer, User user) throws Exception;
-  void removeLayer(long id, User user) throws Exception;
-
-  void addFile(MultipartFile file, long id, User user) throws Exception;
   void addLayerFile(MultipartFile file, long modelId, String name, User user) throws Exception;
+  void removeLayer(long id, User user) throws Exception;
 
   void addTag(TagMessage message);
 
diff --git a/mozen/src/main/java/mozen/business/IUserDao.java b/mozen/src/main/java/mozen/business/IUserDao.java
deleted file mode 100644
index cef4958..0000000
--- a/mozen/src/main/java/mozen/business/IUserDao.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package mozen.business;
-
-import mozen.model.User;
-
-public interface IUserDao {
-  void addUser(User u);
-  void updateUser(User u);
-  void removeUser(long id);
-  
-  User findUser(long id);
-  User findUserByUsername(String username);
-}
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/IUserManager.java b/mozen/src/main/java/mozen/business/IUserManager.java
index 5129f21..66e92bf 100644
--- a/mozen/src/main/java/mozen/business/IUserManager.java
+++ b/mozen/src/main/java/mozen/business/IUserManager.java
@@ -10,7 +10,6 @@ public interface IUserManager {
 
   User getUser(Long id);
   User getUserByUsername(String username);
-
   
   boolean resetPassword(String email);
   boolean changePassword(String token, String password);
diff --git a/mozen/src/main/java/mozen/business/ModelDao.java b/mozen/src/main/java/mozen/business/ModelDao.java
deleted file mode 100644
index 2e2d8e1..0000000
--- a/mozen/src/main/java/mozen/business/ModelDao.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package mozen.business;
-
-import java.util.Collection;
-
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-import javax.transaction.Transactional;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-import mozen.model.CustomLayer;
-import mozen.model.Model;
-import mozen.model.Tag;
-import mozen.model.TagCategory;
-
-@Repository
-@Transactional
-public class ModelDao implements IModelDao {
-
-  @Autowired
-  @PersistenceContext(unitName = "defaultData")
-  EntityManager em;
-
-  @Override
-  public void addModel(Model m) {
-    em.persist(m);
-  }
-
-  @Override
-  public void updateModel(Model m) {
-    em.merge(m);
-  }
-
-  @Override
-  public void removeModel(long id) {
-    em.remove(findModel(id));
-  }
-
-  @Override
-  public Model findModel(long id) {
-    return em.find(Model.class, id);
-  }
-
-  @Override
-  public Collection<Model> findModelsByName(String name) {
-    String query = "SELECT m FROM Model m WHERE lower(m.name) LIKE :name ORDER BY votes ASC";
-    TypedQuery<Model> q = em.createQuery(query, Model.class);
-    q.setParameter("name", "%" + name.toLowerCase() + "%");
-    try {
-      return q.getResultList();
-    } catch (Exception e) {
-      return null;
-    }
-  }
-
-  @Override
-  public Collection<TagCategory> getTags() {
-    String query = "SELECT t FROM TagCategory t";
-    TypedQuery<TagCategory> q = em.createQuery(query, TagCategory.class);
-    try {
-      return q.getResultList();
-    } catch (Exception e) {
-      return null;
-    }
-  }
-
-  @Override
-  public void addLayer(CustomLayer l) {
-    em.persist(l);
-  }
-
-  @Override
-  public void updateLayer(CustomLayer l) {
-    em.merge(l);
-  }
-
-  @Override
-  public void removeLayer(long id) {
-    em.remove(findLayer(id));
-  }
-
-  @Override
-  public CustomLayer findLayer(long id) {
-    return em.find(CustomLayer.class, id);
-  }
-
-  @Override
-  public Tag getTagByName(String name) {
-    String query = "SELECT t FROM Tag t WHERE lower(t.name) LIKE :name";
-    TypedQuery<Tag> q = em.createQuery(query, Tag.class);
-    q.setParameter("name", "%" + name.toLowerCase() + "%");
-    try {
-      return q.getSingleResult();
-    } catch (Exception e) {
-      return null;
-    }
-  }
-
-  @Override
-  public void addTag(Tag tag) {
-    em.persist(tag);
-  }
-
-  @Override
-  public TagCategory getTagCategory(long id) {
-    return em.find(TagCategory.class, id);
-  }
-  
-}
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/ModelManager.java b/mozen/src/main/java/mozen/business/ModelManager.java
index 938034e..6d68263 100644
--- a/mozen/src/main/java/mozen/business/ModelManager.java
+++ b/mozen/src/main/java/mozen/business/ModelManager.java
@@ -1,5 +1,6 @@
 package mozen.business;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.HashSet;
@@ -19,9 +20,18 @@ import mozen.model.User;
 
 @Service
 public class ModelManager implements IModelManager {
+  
+  @Autowired
+  private ModelRepository modelRepo;
+
+  @Autowired
+  private TagRepository tagRepo;
+
+  @Autowired
+  private TagCategoryRepository tagCategoryRepo;
 
   @Autowired
-  IModelDao dao;
+  private CustomLayerRepository layerRepo;
 
   @Override
   public Long addModel(ModelMessage message, User user) throws Exception {
@@ -33,134 +43,103 @@ public class ModelManager implements IModelManager {
     model.setShortDescription(message.getShortDescription());
     model.setLongDescription(message.getLongDescription());
 
-    System.err.println("[MODEL MANAGER] add model 2");
-
     if (message.getTags() != null) {
-      System.err.println("[MODEL MANAGER] add model new tag 2.1");
       Set<Tag> tags = new HashSet<Tag>();
       for (String tagName : message.getTags()) {
-        Tag tag = dao.getTagByName(tagName);
+        Tag tag = tagRepo.findByName(tagName).get(0);
         tags.add(tag);
       }
-      System.err.println("[MODEL MANAGER] add model new tag 2.2");
       model.setTags(tags);
     } 
 
-    System.err.println("[MODEL MANAGER] add model 3");
-
     model.setVotes(0);
     model.setAdded(new Date());
     model.setLastModified(new Date());
     model.setAuthor(user);
 
-    System.err.println("[MODEL MANAGER] add model 4");
-
     try {
-      dao.addModel(model);
+      modelRepo.save(model);
     } catch (Exception e) {
       System.err.println("[MODEL MANAGER] Add model error "+e.getMessage());
     }
-
-    System.err.println("[MODEL MANAGER] add model 5");
     
     return model.getId();
   }
 
   @Override
-  public void addFile(MultipartFile file, long id, User user) throws Exception {
-    System.err.println("[MODEL MANAGER] add model file 1");
-    Model model = dao.findModel(id);
+  public void addModelFile(MultipartFile file, long id, User user) throws Exception {
+    Model model = modelRepo.findById(id).get();
+
     if (model == null)
       throw new Exception("Unknown model");
-    System.err.println("[MODEL MANAGER] add model file 2");
+
     model.setFile(file.getBytes());
-    System.err.println("[MODEL MANAGER] add model file 3");
     model.setFileType(file.getContentType());
-    System.err.println("[MODEL MANAGER] add model file 4");
-    dao.updateModel(model);
-    System.err.println("[MODEL MANAGER] add model file 5");
+
+    modelRepo.save(model);
   }
 
   @Override
   public void updateModel(Model model, long id, User user) throws Exception {
-    Model modelToUpdate = dao.findModel(id);
+    Model modelToUpdate = modelRepo.findById(id).get();
+
     if (modelToUpdate == null)
       throw new Exception("Unknown model");
     if (!isModelAuthor(modelToUpdate, user))
       throw new Exception("Not the author");
 
     model.setId(id);
-    dao.updateModel(model);
+
+    modelRepo.save(model);
   }
 
   @Override
   public void removeModel(long id, User user) throws Exception {
-    Model model = dao.findModel(id);
+    Model model = modelRepo.findById(id).get();
+
     if (model == null)
       throw new Exception("Unknown model");
     if (!isModelAuthor(model, user))
       throw new Exception("Not the author");
 
-    dao.removeModel(id);
+    modelRepo.deleteById(id);
   }
 
   @Override
   public Model getModel(long id) {
-    return dao.findModel(id);
+    return modelRepo.findById(id).get();
   }
 
   @Override
   public Collection<Model> findModel(String name) {
-    Collection<Model> result = dao.findModelsByName(name);
+    Collection<Model> result = modelRepo.findByName(name);
 
     return result;
   }
 
   @Override
   public Collection<TagCategory> getTags() {
-    return dao.getTags();
-  }
-
-  @Override
-  public Long addLayer(long modelId, CustomLayer layer, User user) throws Exception {
-    Model model = dao.findModel(modelId);
-    if (model == null)
-      throw new Exception("Unknown model");
-    if (!isModelAuthor(model, user))
-      throw new Exception("Not the author");
-
-    layer.setModel(model);
-    dao.addLayer(layer);
-
-    return layer.getId();
-  }
-
-  @Override
-  public void updateLayer(long id, CustomLayer layer, User user) throws Exception {
-    CustomLayer layerToUpdate = dao.findLayer(id);
-    if (layerToUpdate == null)
-      throw new Exception("Unknown layer");
-    if (!isLayerAuthor(layerToUpdate, user))
-      throw new Exception("Not the author");
-
-    layer.setId(id);
-    dao.updateLayer(layer);
+    Collection<TagCategory> categories = new ArrayList<TagCategory>();
+    tagCategoryRepo.findAll().forEach(categories::add);
+    return categories;
   }
 
   @Override
   public void removeLayer(long id, User user) throws Exception {
-    CustomLayer layer = dao.findLayer(id);
+    CustomLayer layer = layerRepo.findById(id).get();
+
     if (layer == null)
       throw new Exception("Unknown layer");
     if (!isLayerAuthor(layer, user))
       throw new Exception("Not the author");
 
-    dao.removeLayer(id);
+    layerRepo.deleteById(id);
   }
 
   @Override
   public void addLayerFile(MultipartFile file, long modelId, String name, User user) throws Exception {
-    Model model = dao.findModel(modelId);
+    Model model = modelRepo.findById(modelId).get();
+
     if (model == null)
       throw new Exception("Unknown model");
     if (!isModelAuthor(model, user))
@@ -173,7 +152,7 @@ public class ModelManager implements IModelManager {
 
     model.getCustomLayers().add(layer);
 
-    dao.updateModel(model);
+    modelRepo.save(model);
   }
 
   private boolean isLayerAuthor(CustomLayer layer, User user) {
@@ -187,12 +166,14 @@ public class ModelManager implements IModelManager {
   @Override
   public void addTag(TagMessage message) {
     System.err.println("[MODEL MANAGER] add tag n:"+message.getName()+" c:"+message.getCategoryId());
-    TagCategory category = dao.getTagCategory(message.getCategoryId());
+    Long categoryId = message.getCategoryId();
+    TagCategory category = tagCategoryRepo.findById(categoryId).get();
+
     Tag tag = new Tag();
     tag.setName(message.getName());
     tag.setCategory(category);
 
-    dao.addTag(tag);
+    tagRepo.save(tag);
   }
 
 }
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/ModelRepository.java b/mozen/src/main/java/mozen/business/ModelRepository.java
new file mode 100644
index 0000000..ec6ef52
--- /dev/null
+++ b/mozen/src/main/java/mozen/business/ModelRepository.java
@@ -0,0 +1,11 @@
+package mozen.business;
+
+import java.util.List;
+
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import mozen.model.Model;
+
+public interface ModelRepository extends PagingAndSortingRepository<Model, Long> {
+  List<Model> findByName(String name);
+}
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/SpringBusinessConfig.java b/mozen/src/main/java/mozen/business/SpringBusinessConfig.java
index bfc00b3..c2f1382 100644
--- a/mozen/src/main/java/mozen/business/SpringBusinessConfig.java
+++ b/mozen/src/main/java/mozen/business/SpringBusinessConfig.java
@@ -1,17 +1,14 @@
 package mozen.business;
 
-import java.util.Properties;
-
 import javax.persistence.EntityManagerFactory;
 import javax.sql.DataSource;
 
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.PropertySource;
-import org.springframework.jdbc.datasource.DriverManagerDataSource;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
 import org.springframework.orm.jpa.JpaTransactionManager;
 import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
 import org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor;
@@ -25,34 +22,21 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @PropertySource("classpath:application.properties")
 public class SpringBusinessConfig {
   @Bean
-  public DataSource dataSource(
-        @Value("${datasource.driverName}") String driverName,
-        @Value("${datasource.url}") String url,
-        @Value("${datasource.username}") String user,
-        @Value("${datasource.password}") String password) {
-    DriverManagerDataSource dataSource = new DriverManagerDataSource();
-    dataSource.setDriverClassName(driverName);
-    dataSource.setUrl(url);
-    dataSource.setUsername(user);
-    dataSource.setPassword(password);
-    return dataSource;
+  public DataSource dataSource() {
+    EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
+    return builder.setType(EmbeddedDatabaseType.HSQL).build();
   }
 
-  @Bean(name = "defaultData")
-  public LocalContainerEntityManagerFactoryBean entityManagerFactory(@Autowired DataSource ds) {
-    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
-    em.setDataSource(ds);
-    em.setPackagesToScan(new String[] { "mozen.model" });
-    em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
-    em.setBeanName("defaultData");
-
-    Properties properties = new Properties();
-    properties.setProperty("hibernate.hbm2ddl.auto", "create-drop");
-    properties.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
-    properties.setProperty("hibernate.show_sql", "true");
-    properties.setProperty("hibernate.format_sql", "true");
-    em.setJpaProperties(properties);
-    return em;
+  @Bean
+  public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
+    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
+    vendorAdapter.setGenerateDdl(true);
+
+    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
+    factory.setJpaVendorAdapter(vendorAdapter);
+    factory.setPackagesToScan("mozen.model");
+    factory.setDataSource(dataSource());
+    return factory;
   }
 
   @Bean
diff --git a/mozen/src/main/java/mozen/business/TagCategoryRepository.java b/mozen/src/main/java/mozen/business/TagCategoryRepository.java
new file mode 100644
index 0000000..9d36c4e
--- /dev/null
+++ b/mozen/src/main/java/mozen/business/TagCategoryRepository.java
@@ -0,0 +1,9 @@
+package mozen.business;
+
+import org.springframework.data.repository.CrudRepository;
+
+import mozen.model.TagCategory;
+
+public interface TagCategoryRepository extends CrudRepository<TagCategory, Long>{
+  
+}
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/TagRepository.java b/mozen/src/main/java/mozen/business/TagRepository.java
new file mode 100644
index 0000000..5fa98e3
--- /dev/null
+++ b/mozen/src/main/java/mozen/business/TagRepository.java
@@ -0,0 +1,11 @@
+package mozen.business;
+
+import java.util.List;
+
+import org.springframework.data.repository.CrudRepository;
+
+import mozen.model.Tag;
+
+public interface TagRepository extends CrudRepository<Tag, Long>{
+  List<Tag> findByName(String name);  
+}
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/UserDao.java b/mozen/src/main/java/mozen/business/UserDao.java
deleted file mode 100644
index dac133b..0000000
--- a/mozen/src/main/java/mozen/business/UserDao.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package mozen.business;
-
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.TypedQuery;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Transactional;
-
-import mozen.model.User;
-
-@Repository
-@Transactional
-public class UserDao implements IUserDao {
-
-  @Autowired
-  @PersistenceContext(unitName = "defaultData")
-  EntityManager em;
-
-  @Override
-  public void addUser(User u) {
-    em.persist(u);
-  }
-
-  @Override
-  public void updateUser(User u) {
-    em.merge(u);
-  }
-
-  @Override
-  public void removeUser(long id) {
-    User u = findUser(id);
-    em.remove(u);
-  }
-
-  @Override
-  public User findUser(long id) {
-    return em.find(User.class, id);
-  }
-
-  @Override
-  public User findUserByUsername(String username) {
-    String query = "SELECT u FROM User u WHERE u.username = : username";
-		TypedQuery<User> q = em.createQuery(query, User.class);
-		q.setParameter("username", username);
-		try {
-			return q.getSingleResult();
-		} catch (Exception e) {
-			return null;
-		}
-  }
-  
-}
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/UserManager.java b/mozen/src/main/java/mozen/business/UserManager.java
index 87a980c..d42d17d 100644
--- a/mozen/src/main/java/mozen/business/UserManager.java
+++ b/mozen/src/main/java/mozen/business/UserManager.java
@@ -12,36 +12,37 @@ import mozen.model.User;
 public class UserManager implements IUserManager {
 
   @Autowired
-  IUserDao dao;
+  UserRepository repo;
 
   @Autowired
   BCryptPasswordEncoder bCryptPasswordEncoder;
 
   @Override
   public Long addUser(SignupMessage message) {
+    System.err.println("[USER MANAGER] add new user u:"+message.getUsername()+" e:"+message.getEmail()+" p:"+message.getPassword());
     User u = new User();
     u.setEmail(message.getEmail());
     u.setUsername(message.getUsername());
     u.setPassword(bCryptPasswordEncoder.encode(message.getPassword()));
     u.setRole(Role.Default);
 
-    dao.addUser(u);
+    repo.save(u);
     return u.getId();
   }
 
   @Override
   public void updateUser(User u) {
-    dao.updateUser(u);
+    repo.save(u);
   }
 
   @Override
   public void removeUser(Long id) {
-    dao.removeUser(id);
+    repo.deleteById(id);
   }
 
   @Override
   public User getUser(Long id) {
-    return dao.findUser(id);
+    return repo.findById(id).get();
   }
 
   @Override
@@ -58,7 +59,7 @@ public class UserManager implements IUserManager {
 
   @Override
   public User getUserByUsername(String username) {
-    return dao.findUserByUsername(username);
+    return repo.findByUsername(username).get(0);
   }
   
 }
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/business/UserRepository.java b/mozen/src/main/java/mozen/business/UserRepository.java
new file mode 100644
index 0000000..adb8194
--- /dev/null
+++ b/mozen/src/main/java/mozen/business/UserRepository.java
@@ -0,0 +1,11 @@
+package mozen.business;
+
+import java.util.List;
+
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+import mozen.model.User;
+
+public interface UserRepository extends PagingAndSortingRepository<User, Long> {
+  List<User> findByUsername(String username);
+}
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/utils/DatabaseFiller.java b/mozen/src/main/java/mozen/utils/DatabaseFiller.java
index 5d8f692..378c8e6 100644
--- a/mozen/src/main/java/mozen/utils/DatabaseFiller.java
+++ b/mozen/src/main/java/mozen/utils/DatabaseFiller.java
@@ -15,8 +15,8 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import mozen.business.IModelDao;
-import mozen.business.IUserDao;
+import mozen.business.ModelRepository;
+import mozen.business.UserRepository;
 import mozen.model.CustomLayer;
 import mozen.model.Model;
 import mozen.model.Role;
@@ -27,10 +27,10 @@ import mozen.model.User;
 @Service
 public class DatabaseFiller {
   @Autowired
-  IModelDao daoModel;
+  ModelRepository modelRepo;
 
   @Autowired
-  IUserDao daoUser;
+  UserRepository userRepo;
 
   @Autowired
   private BCryptPasswordEncoder bCryptPasswordEncoder;
@@ -97,10 +97,10 @@ public class DatabaseFiller {
     m1layers.add(l2);
     m1.setCustomLayers(m1layers);
 
-    daoUser.addUser(u1);
-    daoUser.addUser(u2);
+    userRepo.save(u1);
+    userRepo.save(u2);
 
-    daoModel.addModel(m1);
+    modelRepo.save(m1);
   }
 
   Set<Tag> tagLoader(String filePath) {
diff --git a/mozen/src/main/java/mozen/web/ModelController.java b/mozen/src/main/java/mozen/web/ModelController.java
index 5506252..9746876 100644
--- a/mozen/src/main/java/mozen/web/ModelController.java
+++ b/mozen/src/main/java/mozen/web/ModelController.java
@@ -138,7 +138,7 @@ public class ModelController {
   
     try {
       System.err.println("[MODEL CONTROLLER] model file upload n:"+file.getName());
-      modelManager.addFile(file, id, user);
+      modelManager.addModelFile(file, id, user);
     } catch (Exception e) {
       response.setError(true);
       response.setMessage(e.getMessage());
-- 
GitLab