diff --git a/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java b/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java index 934baad45cba152a460de9d159c2c8a3a043de03..8fa35612860061c588d06f2ad168f136a267bade 100644 --- a/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java +++ b/mozen/src/main/java/mozen/auth/JwtAuthenticationFilter.java @@ -17,7 +17,8 @@ import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.userdetails.User; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import mozen.model.LoginMessage; +import mozen.messages.LoginMessage; +import mozen.messages.ResponseMessage; import mozen.utils.JwtUtils; public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter{ @@ -46,9 +47,8 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte protected void successfulAuthentication(HttpServletRequest req, HttpServletResponse res, FilterChain chain, Authentication auth) throws IOException, ServletException { User user = (User) auth.getPrincipal(); - String token = JwtUtils.generateToken(user.getUsername()); - - res.addHeader("Authorization", "Bearer " + token); + res.getWriter().write(new ObjectMapper().writeValueAsString(new ResponseMessage(false, token))); + // res.addHeader("Authorization", "Bearer " + token); } } \ 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 index 839ca7f9f1046beaedeea0baed50637140d09cf3..96b56d5f134e71b2df74c0d5953acab43c63dfe0 100644 --- a/mozen/src/main/java/mozen/business/IModelDao.java +++ b/mozen/src/main/java/mozen/business/IModelDao.java @@ -4,6 +4,7 @@ import java.util.Collection; import mozen.model.CustomLayer; import mozen.model.Model; +import mozen.model.Tag; import mozen.model.TagCategory; public interface IModelDao { @@ -15,7 +16,10 @@ public interface IModelDao { 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); diff --git a/mozen/src/main/java/mozen/business/IModelManager.java b/mozen/src/main/java/mozen/business/IModelManager.java index 03ce64da871c57aa9a130d3b6c882d95a9fe679c..7607daad2fdae48c3b427d381ceb031e556c3f5c 100644 --- a/mozen/src/main/java/mozen/business/IModelManager.java +++ b/mozen/src/main/java/mozen/business/IModelManager.java @@ -4,14 +4,16 @@ import java.util.Collection; 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(Model m, User user) throws Exception; - void updateModel(Model m, long id, User user) throws Exception; + Long addModel(ModelMessage message, 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; @@ -21,6 +23,8 @@ public interface IModelManager { void addFile(MultipartFile file, long id, User user) throws Exception; void addLayerFile(MultipartFile file, long id, User user) throws Exception; + void addTag(TagMessage message); + Model getModel(long id); Collection<TagCategory> getTags(); Collection<Model> findModel(String name); diff --git a/mozen/src/main/java/mozen/business/IUserManager.java b/mozen/src/main/java/mozen/business/IUserManager.java index 072835b9477a7c53051308cfc9f11c75b356d84d..5129f21e326f0727e560b12fcd9af1b8de377605 100644 --- a/mozen/src/main/java/mozen/business/IUserManager.java +++ b/mozen/src/main/java/mozen/business/IUserManager.java @@ -1,6 +1,6 @@ package mozen.business; -import mozen.model.SignupMessage; +import mozen.messages.SignupMessage; import mozen.model.User; public interface IUserManager { diff --git a/mozen/src/main/java/mozen/business/ModelDao.java b/mozen/src/main/java/mozen/business/ModelDao.java index 82c0feeb2067e991fd5281d3ee425485add9f1f7..2e2d8e17057f1297daa811216250f06b58c42e98 100644 --- a/mozen/src/main/java/mozen/business/ModelDao.java +++ b/mozen/src/main/java/mozen/business/ModelDao.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Repository; import mozen.model.CustomLayer; import mozen.model.Model; +import mozen.model.Tag; import mozen.model.TagCategory; @Repository @@ -44,9 +45,9 @@ public class ModelDao implements IModelDao { @Override public Collection<Model> findModelsByName(String name) { - String query = "SELECT m FROM Model m WHERE m.name LIKE :name ORDER BY votes ASC"; + 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 + "%"); + q.setParameter("name", "%" + name.toLowerCase() + "%"); try { return q.getResultList(); } catch (Exception e) { @@ -84,5 +85,27 @@ public class ModelDao implements IModelDao { 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 780d2be3c1be186b01c4fea3ebf236a633f680c0..e992894fd4a998d0280f6edea45ae9ad238b8171 100644 --- a/mozen/src/main/java/mozen/business/ModelManager.java +++ b/mozen/src/main/java/mozen/business/ModelManager.java @@ -1,13 +1,19 @@ package mozen.business; import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; 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.Tag; import mozen.model.TagCategory; import mozen.model.User; @@ -18,16 +24,69 @@ public class ModelManager implements IModelManager { IModelDao dao; @Override - public Long addModel(Model model, User user) throws Exception { + public Long addModel(ModelMessage message, User user) throws Exception { + Model model = new Model(); + + System.err.println("[MODEL MANAGER] add model n:"+message.getName()+" sd:"+message.getShortDescription()+" ld:"+message.getLongDescription()+" t:"+message.getTags()+" l:"+message.getCustomLayers()); + + model.setName(message.getName()); + model.setShortDescription(message.getShortDescription()); + model.setLongDescription(message.getLongDescription()); + + System.err.println("[MODEL MANAGER] oui 2"); + + if (message.getTags() != null) { + System.err.println("[MODEL MANAGER] oui 2.1"); + Set<Tag> tags = new HashSet<Tag>(); + for (String tagName : message.getTags()) { + Tag tag = dao.getTagByName(tagName); + tags.add(tag); + } + System.err.println("[MODEL MANAGER] oui 2.2"); + model.setTags(tags); + } + + System.err.println("[MODEL MANAGER] oui 3"); + + if (message.getCustomLayers() != null) { + System.err.println("[MODEL MANAGER] oui 3.1"); + Set<CustomLayer> layers = new HashSet<CustomLayer>(); + for (String layerName : message.getCustomLayers()) { + System.err.println("[MODEL MANAGER] new layer 1"+layerName); + CustomLayer layer = new CustomLayer(); + layer.setName(layerName); + System.err.println("[MODEL MANAGER] new layer 2"+layerName); + layers.add(layer); + } + System.err.println("[MODEL MANAGER] oui 3.2"); + model.setCustomLayers(layers); + } + + System.err.println("[MODEL MANAGER] oui 4"); + + model.setVotes(0); + model.setAdded(new Date()); + model.setLastModified(new Date()); model.setAuthor(user); - dao.addModel(model); + + System.err.println("[MODEL MANAGER] oui 5"); + + try { + dao.addModel(model); + } catch (Exception e) { + System.err.println("[MODEL MANAGER] Add model error "+e.getMessage()); + } + + System.err.println("[MODEL MANAGER] oui 6"); + return model.getId(); } @Override public void addFile(MultipartFile file, long id, User user) throws Exception { Model model = dao.findModel(id); - if (model == null) throw new Exception("Unknown model"); + if (model == null) + throw new Exception("Unknown model"); model.setFile(file.getBytes()); model.setFileType(file.getContentType()); dao.updateModel(model); @@ -36,8 +95,10 @@ public class ModelManager implements IModelManager { @Override public void updateModel(Model model, long id, User user) throws Exception { Model modelToUpdate = dao.findModel(id); - if (modelToUpdate == null) throw new Exception("Unknown model"); - if(!isModelAuthor(modelToUpdate, user)) throw new Exception("Not the author"); + if (modelToUpdate == null) + throw new Exception("Unknown model"); + if (!isModelAuthor(modelToUpdate, user)) + throw new Exception("Not the author"); model.setId(id); dao.updateModel(model); @@ -46,8 +107,10 @@ public class ModelManager implements IModelManager { @Override public void removeModel(long id, User user) throws Exception { Model model = dao.findModel(id); - if (model == null) throw new Exception("Unknown model"); - if(!isModelAuthor(model, user)) throw new Exception("Not the author"); + if (model == null) + throw new Exception("Unknown model"); + if (!isModelAuthor(model, user)) + throw new Exception("Not the author"); dao.removeModel(id); } @@ -67,13 +130,15 @@ public class ModelManager implements IModelManager { @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"); + if (model == null) + throw new Exception("Unknown model"); + if (!isModelAuthor(model, user)) + throw new Exception("Not the author"); layer.setModel(model); dao.addLayer(layer); @@ -84,8 +149,10 @@ public class ModelManager implements IModelManager { @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"); + if (layerToUpdate == null) + throw new Exception("Unknown layer"); + if (!isLayerAuthor(layerToUpdate, user)) + throw new Exception("Not the author"); layer.setId(id); dao.updateLayer(layer); @@ -94,8 +161,10 @@ public class ModelManager implements IModelManager { @Override public void removeLayer(long id, User user) throws Exception { CustomLayer layer = dao.findLayer(id); - if (layer == null) throw new Exception("Unknown layer"); - if(!isLayerAuthor(layer, user)) throw new Exception("Not the author"); + if (layer == null) + throw new Exception("Unknown layer"); + if (!isLayerAuthor(layer, user)) + throw new Exception("Not the author"); dao.removeLayer(id); } @@ -103,10 +172,12 @@ public class ModelManager implements IModelManager { @Override public void addLayerFile(MultipartFile file, long id, User user) throws Exception { CustomLayer layer = dao.findLayer(id); - if (layer == null) throw new Exception("Unknown layer"); - if(!isLayerAuthor(layer, user)) throw new Exception("Not the author"); + if (layer == null) + throw new Exception("Unknown layer"); + if (!isLayerAuthor(layer, user)) + throw new Exception("Not the author"); layer.setFile(file.getBytes()); - + dao.updateLayer(layer); } @@ -118,4 +189,15 @@ public class ModelManager implements IModelManager { return model.getAuthor() == user; } + @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()); + Tag tag = new Tag(); + tag.setName(message.getName()); + tag.setCategory(category); + + dao.addTag(tag); + } + } \ 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 fe5a497d81472cd70aa7b8e46b2273412c63418f..87a980c630b476d39fe38524241883dadd6b583d 100644 --- a/mozen/src/main/java/mozen/business/UserManager.java +++ b/mozen/src/main/java/mozen/business/UserManager.java @@ -5,7 +5,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import mozen.model.Role; -import mozen.model.SignupMessage; +import mozen.messages.SignupMessage; import mozen.model.User; @Service diff --git a/mozen/src/main/java/mozen/model/LoginMessage.java b/mozen/src/main/java/mozen/messages/LoginMessage.java similarity index 96% rename from mozen/src/main/java/mozen/model/LoginMessage.java rename to mozen/src/main/java/mozen/messages/LoginMessage.java index 89d97549e933027a493a4db0c229d140231ec65e..e69ad94913bcf153961e80cca71764afea6f5d96 100644 --- a/mozen/src/main/java/mozen/model/LoginMessage.java +++ b/mozen/src/main/java/mozen/messages/LoginMessage.java @@ -1,4 +1,4 @@ -package mozen.model; +package mozen.messages; import java.io.Serializable; diff --git a/mozen/src/main/java/mozen/messages/ModelMessage.java b/mozen/src/main/java/mozen/messages/ModelMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..1a3f6d5eaee6ea94bafcc4cb0bf9b0d40ffc169d --- /dev/null +++ b/mozen/src/main/java/mozen/messages/ModelMessage.java @@ -0,0 +1,76 @@ +package mozen.messages; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +public class ModelMessage implements Serializable { + private static final long serialVersionUID = 1L; + + @NotNull + @Size(min = 3, max = 30) + private String name; + + @Size(min = 0, max = 200) + private String shortDescription; + + @Size(min = 0, max = 5000) + private String longDescription; + + private String [] tags; + + private String [] customLayers; + + public ModelMessage() { + } + + public ModelMessage(String name, String shortDescription, String longDescription, String[] tags, String[] customLayers) { + this.name = name; + this.shortDescription = shortDescription; + this.longDescription = longDescription; + this.tags = tags; + this.customLayers = customLayers; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getShortDescription() { + return this.shortDescription; + } + + public void setShortDescription(String shortDescription) { + this.shortDescription = shortDescription; + } + + public String getLongDescription() { + return this.longDescription; + } + + public void setLongDescription(String longDescription) { + this.longDescription = longDescription; + } + + public String[] getTags() { + return this.tags; + } + + public void setTags(String[] tags) { + this.tags = tags; + } + + public String[] getCustomLayers() { + return this.customLayers; + } + + public void setCustomLayers(String[] customLayers) { + this.customLayers = customLayers; + } + +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/model/ResponseMessage.java b/mozen/src/main/java/mozen/messages/ResponseMessage.java similarity index 96% rename from mozen/src/main/java/mozen/model/ResponseMessage.java rename to mozen/src/main/java/mozen/messages/ResponseMessage.java index 264393a6f305e68b07f47f951d0d0a3756abdfec..eb70891fa095857c20448b15ecb00a82a5e62225 100644 --- a/mozen/src/main/java/mozen/model/ResponseMessage.java +++ b/mozen/src/main/java/mozen/messages/ResponseMessage.java @@ -1,4 +1,4 @@ -package mozen.model; +package mozen.messages; import java.io.Serializable; diff --git a/mozen/src/main/java/mozen/model/SignupMessage.java b/mozen/src/main/java/mozen/messages/SignupMessage.java similarity index 98% rename from mozen/src/main/java/mozen/model/SignupMessage.java rename to mozen/src/main/java/mozen/messages/SignupMessage.java index 816fc862a622bba7cd86bc7cea84d9c082b79fed..965a97230eeb56c609523c19cf03c130c962e5e1 100644 --- a/mozen/src/main/java/mozen/model/SignupMessage.java +++ b/mozen/src/main/java/mozen/messages/SignupMessage.java @@ -1,4 +1,4 @@ -package mozen.model; +package mozen.messages; import java.io.Serializable; diff --git a/mozen/src/main/java/mozen/messages/TagMessage.java b/mozen/src/main/java/mozen/messages/TagMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..c5aa18357bc0a75752a227ed8b8d81220fc9bb66 --- /dev/null +++ b/mozen/src/main/java/mozen/messages/TagMessage.java @@ -0,0 +1,36 @@ +package mozen.messages; + +import java.io.Serializable; + +public class TagMessage implements Serializable { + private static final long serialVersionUID = 1L; + + private long categoryId; + + private String name; + + public TagMessage() { + } + + public TagMessage(long categoryId, String name) { + this.categoryId = categoryId; + this.name = name; + } + + public long getCategoryId() { + return this.categoryId; + } + + public void setCategoryId(long categoryId) { + this.categoryId = categoryId; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + +} \ No newline at end of file diff --git a/mozen/src/main/java/mozen/model/Model.java b/mozen/src/main/java/mozen/model/Model.java index 59f04f0095eb3839b6d425445d26cf8bfe2266aa..c157c9c012e47d88279e89f9448dee7406e781c8 100644 --- a/mozen/src/main/java/mozen/model/Model.java +++ b/mozen/src/main/java/mozen/model/Model.java @@ -1,6 +1,7 @@ package mozen.model; import java.io.Serializable; +import java.util.Date; import java.util.Set; import javax.persistence.Basic; @@ -17,13 +18,13 @@ import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import com.fasterxml.jackson.annotation.JsonIgnore; -import org.springframework.format.annotation.DateTimeFormat; - @Entity @Table public class Model implements Serializable{ @@ -50,14 +51,14 @@ public class Model implements Serializable{ private String longDescription; @Basic - @DateTimeFormat(pattern = "yyyy-mm-dd") + @Temporal(TemporalType.DATE) @Column - private String added; + private Date added; @Basic - @DateTimeFormat(pattern = "yyyy-mm-dd") + @Temporal(TemporalType.DATE) @Column - private String lastModified; + private Date lastModified; @Basic @Column @@ -88,7 +89,7 @@ public class Model implements Serializable{ public Model() { } - public Model(Long id, String name, String shortDescription, String longDescription, String added, String lastModified, int votes, byte[] file, String fileType, User author, Set<Tag> tags, Set<CustomLayer> customLayers) { + public Model(Long id, String name, String shortDescription, String longDescription, Date added, Date lastModified, int votes, byte[] file, String fileType, User author, Set<Tag> tags, Set<CustomLayer> customLayers) { this.id = id; this.name = name; this.shortDescription = shortDescription; @@ -135,19 +136,19 @@ public class Model implements Serializable{ this.longDescription = longDescription; } - public String getAdded() { + public Date getAdded() { return this.added; } - public void setAdded(String added) { + public void setAdded(Date added) { this.added = added; } - public String getLastModified() { + public Date getLastModified() { return this.lastModified; } - public void setLastModified(String lastModified) { + public void setLastModified(Date lastModified) { this.lastModified = lastModified; } diff --git a/mozen/src/main/java/mozen/model/Tag.java b/mozen/src/main/java/mozen/model/Tag.java index fb436b9efd80a64dfccf8f9ef7c512f54496491f..2ec9ef754e449a17046febb2e1cb117087b34282 100644 --- a/mozen/src/main/java/mozen/model/Tag.java +++ b/mozen/src/main/java/mozen/model/Tag.java @@ -31,7 +31,7 @@ public class Tag implements Serializable{ private TagCategory category; @Basic - @Column(nullable = false) + @Column(nullable = false, unique = true) private String name; @Basic diff --git a/mozen/src/main/java/mozen/model/TagCategory.java b/mozen/src/main/java/mozen/model/TagCategory.java index 817426b5454656d4e9f9d55bd3239026cc8021f6..b1e87f3b91cee0cff943fb8cc1c218c4229b7d14 100644 --- a/mozen/src/main/java/mozen/model/TagCategory.java +++ b/mozen/src/main/java/mozen/model/TagCategory.java @@ -24,7 +24,7 @@ public class TagCategory implements Serializable{ private Long id; @Basic - @Column(nullable = false) + @Column(nullable = false, unique = true) private String name; @Basic diff --git a/mozen/src/main/java/mozen/utils/DatabaseFiller.java b/mozen/src/main/java/mozen/utils/DatabaseFiller.java index 7078c814c204785a828a7765befe0e29e81c0cef..d62b0155c6ec119edcc8c9cb1fa6c79f8fc0688a 100644 --- a/mozen/src/main/java/mozen/utils/DatabaseFiller.java +++ b/mozen/src/main/java/mozen/utils/DatabaseFiller.java @@ -1,11 +1,13 @@ package mozen.utils; +import java.util.Date; import java.util.HashSet; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.context.event.EventListener; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -26,6 +28,9 @@ public class DatabaseFiller { @Autowired IUserDao daoUser; + @Autowired + private BCryptPasswordEncoder bCryptPasswordEncoder; + @EventListener(ContextRefreshedEvent.class) public void onApplicationEvent(ContextRefreshedEvent event) { event.getApplicationContext().getBean(DatabaseFiller.class).fillDB(); @@ -36,13 +41,13 @@ public class DatabaseFiller { System.err.println("FILLING DB"); User u1 = new User(); u1.setEmail("user1@email.com"); - u1.setPassword("1234"); + u1.setPassword(bCryptPasswordEncoder.encode("1234")); u1.setUsername("user 1"); u1.setRole(Role.Default); User u2 = new User(); u2.setEmail("user2@email.com"); - u2.setPassword("1234"); + u2.setPassword(bCryptPasswordEncoder.encode("1234")); u2.setUsername("user 2"); u2.setRole(Role.Admin); @@ -52,8 +57,8 @@ public class DatabaseFiller { m1.setShortDescription("short description 1"); m1.setLongDescription("# README \n model 1"); m1.setVotes(0); - m1.setAdded("1990-05-30"); - m1.setLastModified("2010-10-24"); + m1.setAdded(new Date()); + m1.setLastModified(new Date()); Set<Tag> m1tags = new HashSet<Tag>(); Tag t1 = new Tag(); diff --git a/mozen/src/main/java/mozen/web/ModelController.java b/mozen/src/main/java/mozen/web/ModelController.java index e9ec2614ba3ae8ed2c1a19be048bd52066a1cb42..fc8e8eb7cb28039a99a423000353794ee9a9078f 100644 --- a/mozen/src/main/java/mozen/web/ModelController.java +++ b/mozen/src/main/java/mozen/web/ModelController.java @@ -2,6 +2,8 @@ package mozen.web; import java.util.Collection; +import javax.validation.Valid; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ByteArrayResource; import org.springframework.http.HttpHeaders; @@ -20,16 +22,17 @@ import org.springframework.web.multipart.MultipartFile; import mozen.business.IModelManager; import mozen.business.IUserManager; import mozen.model.Model; -import mozen.model.ResponseMessage; +import mozen.messages.ModelMessage; +import mozen.messages.ResponseMessage; +import mozen.messages.TagMessage; import mozen.model.TagCategory; import mozen.model.User; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; - - @RestController @RequestMapping("/models") @CrossOrigin @@ -52,7 +55,7 @@ public class ModelController { } @PostMapping("") - public ResponseEntity<ResponseMessage> addModel(Model model) { + public ResponseEntity<ResponseMessage> addModel(@RequestBody @Valid ModelMessage message) { ResponseMessage response = new ResponseMessage(false, ""); User user = getUser(); if(user == null) { @@ -62,7 +65,8 @@ public class ModelController { } try { - modelManager.addModel(model, user); + long modelId = modelManager.addModel(message, user); + response.setMessage(Long.toString(modelId)); } catch (Exception e) { response.setError(true); response.setMessage(e.getMessage()); @@ -72,7 +76,7 @@ public class ModelController { } @PutMapping("") - public ResponseEntity<ResponseMessage> updateModel(@RequestParam(value = "id", required = true) Long id, Model model) { + public ResponseEntity<ResponseMessage> updateModel(@RequestParam(value = "id", required = true) Long id, @RequestBody @Valid Model model) { ResponseMessage response = new ResponseMessage(false, ""); User user = getUser(); if(user == null) { @@ -116,6 +120,12 @@ public class ModelController { return modelManager.getTags(); } + @PostMapping("/tags") + public ResponseEntity<ResponseMessage> addTag(@RequestBody @Valid TagMessage message) { + modelManager.addTag(message); + return ResponseEntity.ok().build(); + } + @PostMapping("/upload") public ResponseEntity<ResponseMessage> uploadModelFile(@RequestParam(value = "id", required = true) Long id, @RequestParam("file") MultipartFile file) { ResponseMessage response = new ResponseMessage(false, ""); diff --git a/mozen/src/main/java/mozen/web/UserController.java b/mozen/src/main/java/mozen/web/UserController.java index 8fb2965a27efdbcead00ba337b19673eb98e598b..227b8487c4975a0e59cb1687881e0c2bcee721da 100644 --- a/mozen/src/main/java/mozen/web/UserController.java +++ b/mozen/src/main/java/mozen/web/UserController.java @@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import mozen.business.IUserManager; -import mozen.model.ResponseMessage; -import mozen.model.SignupMessage; +import mozen.messages.ResponseMessage; +import mozen.messages.SignupMessage; import mozen.model.User; import mozen.utils.JwtUtils;