From ff58b49c92afde1861a88912d2e955a0db94dbec Mon Sep 17 00:00:00 2001 From: Patrice Date: Fri, 2 Dec 2016 18:26:21 +0100 Subject: [PATCH 01/12] =?UTF-8?q?Impl=C3=A9mentation=20des=20nouvelles=20l?= =?UTF-8?q?istes=20d'envies=20avec=20la=20possibilit=C3=A9s=20de=20partage?= =?UTF-8?q?r=20les=20listes=20avec=20une=20liste=20de=20personnes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/{EnvieDto.java => EnvyDto.java} | 24 +-- .../liste/envies/dto/ListEnviesDto.java | 55 +++++++ .../liste/envies/dto/UserShareDto.java | 44 +++++ .../liste/envies/model/Envie.java | 15 +- .../liste/envies/model/Envy.java | 151 ++++++++++++++++++ .../liste/envies/model/ListEnvies.java | 116 ++++++++++++++ .../liste/envies/model/UserShare.java | 36 +++++ .../liste/envies/model/UserShareType.java | 8 + .../liste/envies/rest/EnviesRestService.java | 51 +++--- .../envies/rest/ListEnviesRestService.java | 116 ++++++++++++++ .../liste/envies/service/AppUserService.java | 4 + .../liste/envies/service/EnviesService.java | 113 +++++++------ .../envies/service/ListEnviesService.java | 46 ++++++ .../liste/envies/service/OfyService.java | 4 + .../liste/envies/servlet/MigrateServlet.java | 54 +++++-- liste-envies-war/src/main/webapp/index.html | 1 + .../main/webapp/js/controllers/envieCtrl.js | 35 ++-- .../main/webapp/js/controllers/homeCtrl.js | 14 +- .../src/main/webapp/js/routes/route.js | 2 +- .../main/webapp/js/services/envieService.js | 2 +- .../webapp/js/services/listEnviesService.js | 11 ++ .../src/main/webapp/templates/envies.html | 22 +-- .../src/main/webapp/templates/home.html | 6 +- .../liste/envies/EnvieServiceTest.java | 44 ++--- .../liste/envies/ListEnviesServiceTest.java | 99 ++++++++++++ 25 files changed, 906 insertions(+), 167 deletions(-) rename liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/{EnvieDto.java => EnvyDto.java} (62%) create mode 100644 liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java create mode 100644 liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java create mode 100644 liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java create mode 100644 liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java create mode 100644 liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java create mode 100644 liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShareType.java create mode 100644 liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java create mode 100644 liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/ListEnviesService.java create mode 100644 liste-envies-war/src/main/webapp/js/services/listEnviesService.js create mode 100644 liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/ListEnviesServiceTest.java diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvieDto.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java similarity index 62% rename from liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvieDto.java rename to liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java index 89306635..ad520e23 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvieDto.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java @@ -1,26 +1,16 @@ package fr.desaintsteban.liste.envies.dto; -import com.googlecode.objectify.Key; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Entity; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Parent; -import fr.desaintsteban.liste.envies.model.AppUser; -import fr.desaintsteban.liste.envies.model.Envie; -import fr.desaintsteban.liste.envies.dto.NoteDto; -import org.codehaus.jackson.annotate.JsonIgnore; - import java.util.List; /** * 01/10/2014. */ -public class EnvieDto { +public class EnvyDto { private Long id; private String label; - private String comment; + private String description; private String price; private String url; @@ -28,7 +18,7 @@ public class EnvieDto { private List notes; - public EnvieDto() { + public EnvyDto() { } public Long getId() { @@ -47,12 +37,12 @@ public void setLabel(String label) { this.label = label; } - public String getComment() { - return comment; + public String getDescription() { + return description; } - public void setComment(String comment) { - this.comment = comment; + public void setDescription(String description) { + this.description = description; } public String getPrice() { diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java new file mode 100644 index 00000000..f0a11ec7 --- /dev/null +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java @@ -0,0 +1,55 @@ +package fr.desaintsteban.liste.envies.dto; + +import java.util.List; + +/** + * + */ +public class ListEnviesDto { + private String name; + + private String title; + private String description; + private Boolean isOwner; + private List users; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public List getUsers() { + return users; + } + + public void setUsers(List users) { + this.users = users; + } + + public Boolean getOwner() { + return isOwner; + } + + public void setOwner(Boolean owner) { + isOwner = owner; + } +} diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java new file mode 100644 index 00000000..650ae21b --- /dev/null +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java @@ -0,0 +1,44 @@ +package fr.desaintsteban.liste.envies.dto; + +import fr.desaintsteban.liste.envies.model.UserShareType; + +/** + * + */ +public class UserShareDto { + private String email; + private String name; + private UserShareType type; + + public UserShareDto() { + } + + public UserShareDto(String email, UserShareType type) { + this.email = email; + this.type = type; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public UserShareType getType() { + return type; + } + + public void setType(UserShareType type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envie.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envie.java index 5dd3bde1..1fc6375a 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envie.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envie.java @@ -5,7 +5,7 @@ import com.googlecode.objectify.annotation.Entity; import com.googlecode.objectify.annotation.Id; import com.googlecode.objectify.annotation.Parent; -import fr.desaintsteban.liste.envies.dto.EnvieDto; +import fr.desaintsteban.liste.envies.dto.EnvyDto; import fr.desaintsteban.liste.envies.dto.NoteDto; import fr.desaintsteban.liste.envies.util.EncodeUtils; import org.codehaus.jackson.annotate.JsonIgnore; @@ -19,6 +19,7 @@ */ @Cache @Entity +@Deprecated public class Envie { @Parent @@ -50,23 +51,21 @@ public Envie(AppUser owner, String label) { } - public Envie(EnvieDto envie) { + public Envie(EnvyDto envie) { setId(envie.getId()); setLabel(envie.getLabel()); - setComment(envie.getComment()); + setComment(envie.getDescription()); setPrice(envie.getPrice()); setUrl(envie.getUrl()); setUserTake(EncodeUtils.encode(envie.getUserTake())); - this.notes = new ArrayList<>(); - } - public EnvieDto toDto() { - EnvieDto envie = new EnvieDto(); + public EnvyDto toDto() { + EnvyDto envie = new EnvyDto(); envie.setId(getId()); envie.setLabel(getLabel()); - envie.setComment(getComment()); + envie.setDescription(getComment()); envie.setPrice(getPrice()); envie.setUrl(getUrl()); envie.setUserTake(EncodeUtils.decode(getUserTake())); diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java new file mode 100644 index 00000000..74a4a0ef --- /dev/null +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java @@ -0,0 +1,151 @@ +package fr.desaintsteban.liste.envies.model; + +import com.googlecode.objectify.Key; +import com.googlecode.objectify.annotation.Cache; +import com.googlecode.objectify.annotation.Entity; +import com.googlecode.objectify.annotation.Id; +import com.googlecode.objectify.annotation.Parent; +import fr.desaintsteban.liste.envies.dto.EnvyDto; +import fr.desaintsteban.liste.envies.dto.NoteDto; +import fr.desaintsteban.liste.envies.util.EncodeUtils; +import org.codehaus.jackson.annotate.JsonIgnore; + +import javax.jdo.annotations.Embedded; +import java.util.ArrayList; +import java.util.List; + +/** + * 01/10/2014. + */ +@Cache +@Entity +public class Envy { + + @Parent + @JsonIgnore + Key list; + @Id + private Long id; + + private String label; + + private String description; + + private String price; + private String url; + private String userTake; + + @Embedded + private List notes; + + + public Envy() { + this.notes = new ArrayList<>(); + } + + public Envy(ListEnvies list, String label) { + this.list = Key.create(list); + this.label = label; + this.notes = new ArrayList<>(); + } + + + public Envy(EnvyDto envie) { + setId(envie.getId()); + setLabel(envie.getLabel()); + setDescription(envie.getDescription()); + setPrice(envie.getPrice()); + setUrl(envie.getUrl()); + setUserTake(EncodeUtils.encode(envie.getUserTake())); + + this.notes = new ArrayList<>(); + + } + + public EnvyDto toDto() { + EnvyDto envie = new EnvyDto(); + envie.setId(getId()); + envie.setLabel(getLabel()); + envie.setDescription(getDescription()); + envie.setPrice(getPrice()); + envie.setUrl(getUrl()); + envie.setUserTake(EncodeUtils.decode(getUserTake())); + + if (this.notes != null && !this.notes.isEmpty()) { + List listNoteDto = new ArrayList<>(); + for (Note note : this.notes) { + listNoteDto.add(note.toDto()); + } + envie.setNotes(listNoteDto); + } + return envie; + } + + public Key getOwner() { + return list; + } + + public void setOwner(Key owner) { + this.list = owner; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getPrice() { + return price; + } + + public void setPrice(String price) { + this.price = price; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getUserTake() { + return userTake; + } + + public void setUserTake(String userTake) { + this.userTake = userTake; + } + + public void addNote(String owner, String email, String text) { + this.notes.add(new Note(owner, email, text)); + } + + public List getNotes () { + return this.notes; + } + + public void setNotes(List notes) { + this.notes = notes; + } +} diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java new file mode 100644 index 00000000..4f0c7181 --- /dev/null +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java @@ -0,0 +1,116 @@ +package fr.desaintsteban.liste.envies.model; + +import com.googlecode.objectify.annotation.Entity; +import com.googlecode.objectify.annotation.Id; +import fr.desaintsteban.liste.envies.dto.ListEnviesDto; +import fr.desaintsteban.liste.envies.dto.UserShareDto; + +import java.util.ArrayList; +import java.util.List; + +/** + * + */ +@Entity() +public class ListEnvies { + @Id private String name; + + private String title; + private String description; + private List users; + + public ListEnvies() { + } + + public ListEnvies(String name, String title, String owner, String... shared) { + this.name = name; + this.title = title; + users = new ArrayList<>(); + users.add(new UserShare(owner, UserShareType.OWNER)); + for (String shareUser : shared) { + users.add(new UserShare(shareUser, UserShareType.SHARED)); + } + } + + public ListEnvies(ListEnviesDto dto) { + setName(dto.getName()); + setTitle(dto.getTitle()); + setDescription(dto.getDescription()); + List users = new ArrayList<>(); + for (UserShareDto userShareDto : dto.getUsers()) { + users.add(new UserShare(userShareDto.getEmail(), userShareDto.getType())); + } + setUsers(users); + } + + public ListEnviesDto toDto(boolean convertUsers, String userEmail) { + ListEnviesDto dto = new ListEnviesDto(); + dto.setName(getName()); + dto.setTitle(getTitle()); + dto.setDescription(getDescription()); + if (convertUsers) { + List users = getUsers(); + List usersDto = new ArrayList<>(); + for (UserShare user : users) { + usersDto.add(new UserShareDto(user.getEmail(), user.getType())); + } + dto.setUsers(usersDto); + } + if (userEmail != null) { + dto.setOwner(containsOwner(userEmail)); + } + return dto; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public List getUsers() { + return users; + } + + public void setUsers(List users) { + this.users = users; + } + + public boolean containsOwner(String email) { + if (users != null) { + for (UserShare user : users) { + if (user.getType() == UserShareType.OWNER && user.getEmail().equals(email)) + return true; + } + } + return false; + } + + public boolean containsUser(String email) { + if (users != null) { + for (UserShare user : users) { + if (user.getEmail().equals(email)) + return true; + } + } + return false; + } +} diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java new file mode 100644 index 00000000..6c1f1bfb --- /dev/null +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java @@ -0,0 +1,36 @@ +package fr.desaintsteban.liste.envies.model; + +import com.googlecode.objectify.annotation.Index; + +/** + * + */ +public class UserShare { + @Index + private String email; + private UserShareType type; + + public UserShare() { + } + + public UserShare(String email, UserShareType type) { + this.email = email; + this.type = type; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public UserShareType getType() { + return type; + } + + public void setType(UserShareType type) { + this.type = type; + } +} diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShareType.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShareType.java new file mode 100644 index 00000000..8197398b --- /dev/null +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShareType.java @@ -0,0 +1,8 @@ +package fr.desaintsteban.liste.envies.model; + +/** + * + */ +public enum UserShareType { + OWNER, SHARED +} diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/EnviesRestService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/EnviesRestService.java index 964982a9..44a27a4f 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/EnviesRestService.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/EnviesRestService.java @@ -1,19 +1,26 @@ package fr.desaintsteban.liste.envies.rest; -import fr.desaintsteban.liste.envies.dto.EnvieDto; +import fr.desaintsteban.liste.envies.dto.EnvyDto; import fr.desaintsteban.liste.envies.dto.NoteDto; import fr.desaintsteban.liste.envies.model.AppUser; -import fr.desaintsteban.liste.envies.model.Envie; +import fr.desaintsteban.liste.envies.model.Envy; import fr.desaintsteban.liste.envies.service.EnviesService; import fr.desaintsteban.liste.envies.util.ServletUtils; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; -@Path("/liste/{email}/envies") +@Path("/envies/{name}") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public class EnviesRestService { @@ -21,11 +28,11 @@ public class EnviesRestService { @GET @Path("/{id}") - public EnvieDto getEnvie(@PathParam("email") String email, @PathParam("id") Long id) { + public EnvyDto getEnvie(@PathParam("name") String name, @PathParam("id") Long id) { final AppUser user = ServletUtils.getUserAuthenticated(); if(user != null){ LOGGER.info("Get " + id); - Envie envie = EnviesService.get(user, email, id); + Envy envie = EnviesService.get(user, name, id); if (envie != null) return envie.toDto(); } @@ -34,33 +41,33 @@ public EnvieDto getEnvie(@PathParam("email") String email, @PathParam("id") Long @PUT @Path("/{id}/give") - public void give(@PathParam("email") String email, @PathParam("id") Long id) { + public void give(@PathParam("name") String name, @PathParam("id") Long id) { final AppUser user = ServletUtils.getUserAuthenticated(); if (user != null){ LOGGER.info("Get " + id); - EnviesService.given(user, email, id); + EnviesService.given(user, name, id); } } @PUT @Path("/{id}/cancel") - public void cancel(@PathParam("email") String email, @PathParam("id") Long id) { + public void cancel(@PathParam("name") String name, @PathParam("id") Long id) { final AppUser user = ServletUtils.getUserAuthenticated(); if (user != null){ LOGGER.info("Get " + id); - EnviesService.cancel(user, email, id); + EnviesService.cancel(user, name, id); } } @GET - public List getEnvie(@PathParam("email") String email) { + public List getEnvie(@PathParam("name") String name) { final AppUser user = ServletUtils.getUserAuthenticated(); if(user != null){ LOGGER.info("List"); - List list = EnviesService.list(user, email); - List result = new ArrayList<>(list.size()); - for (Envie envie : list) { + List list = EnviesService.list(user, name); + List result = new ArrayList<>(list.size()); + for (Envy envie : list) { result.add(envie.toDto()); } return result; @@ -69,41 +76,41 @@ public List getEnvie(@PathParam("email") String email) { } @POST - public void addEnvie(@PathParam("email") String email, EnvieDto envie) { + public void addEnvie(@PathParam("name") String name, EnvyDto envie) { final AppUser user = ServletUtils.getUserAuthenticated(); if (user != null) { LOGGER.info("Put " + envie.getLabel()); - EnviesService.createOrUpdate(user, email, new Envie(envie)); + EnviesService.createOrUpdate(user, name, new Envy(envie)); } } @POST @Path("/{id}/addNote") - public void addNote(@PathParam("email") String email, @PathParam("id") Long envieId, NoteDto note) { + public void addNote(@PathParam("name") String name, @PathParam("id") Long envieId, NoteDto note) { final AppUser user = ServletUtils.getUserAuthenticated(); if (user != null) { LOGGER.info("add note from " + user.getName()); - EnviesService.addNote(user, envieId, email, note); + EnviesService.addNote(user, envieId, name, note); } } @POST @Path("/{id}") - public void updateEnvie(@PathParam("email") String email, EnvieDto envie) { + public void updateEnvie(@PathParam("name") String name, EnvyDto envie) { final AppUser user = ServletUtils.getUserAuthenticated(); if (user != null) { LOGGER.info("Put " + envie.getLabel()); - EnviesService.createOrUpdate(user, email, new Envie(envie)); + EnviesService.createOrUpdate(user, name, new Envy(envie)); } } @DELETE @Path("/{id}") - public void deleteEnvie(@PathParam("email") String email, @PathParam("id") Long id){ + public void deleteEnvie(@PathParam("name") String name, @PathParam("id") Long id){ final AppUser user = ServletUtils.getUserAuthenticated(); if(user != null){ LOGGER.info("Delete " + id); - EnviesService.delete(user, email, id); + EnviesService.delete(user, name, id); } } } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java new file mode 100644 index 00000000..4c1e56d9 --- /dev/null +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java @@ -0,0 +1,116 @@ +package fr.desaintsteban.liste.envies.rest; + +import fr.desaintsteban.liste.envies.dto.ListEnviesDto; +import fr.desaintsteban.liste.envies.model.AppUser; +import fr.desaintsteban.liste.envies.model.ListEnvies; +import fr.desaintsteban.liste.envies.service.ListEnviesService; +import fr.desaintsteban.liste.envies.util.ServletUtils; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Logger; + +@Path("/liste") +@Produces(MediaType.APPLICATION_JSON) +@Consumes(MediaType.APPLICATION_JSON) +public class ListEnviesRestService { + private static final Logger LOGGER = Logger.getLogger(ListEnviesRestService.class.getName()); + + @GET + public List getListEnvies() { + final AppUser user = ServletUtils.getUserAuthenticated(); + if(user != null){ + LOGGER.info("List appuser"); + List list = ListEnviesService.list(user.getEmail()); + ArrayList convertList = new ArrayList<>(); + for (ListEnvies listeEnvy : list) { + convertList.add(listeEnvy.toDto(false, user.getEmail())); + } + return convertList; + } + return null; + } + + /** + * Récuppère les listes d'un utilisateur filtré par l'utilisateur courant + * @param email + * @return + */ + @GET + @Path("/of/{email}") + public List getListEnvies(@PathParam("email") String email) { + final AppUser user = ServletUtils.getUserAuthenticated(); + if(user != null){ + LOGGER.info("List appuser"); + List list = ListEnviesService.list(email); + ArrayList convertList = new ArrayList<>(); + for (ListEnvies listeEnvy : list) { + if (listeEnvy.containsOwner(email) && (listeEnvy.containsUser(user.getEmail()) || user.isAdmin())) { + convertList.add(listeEnvy.toDto(false, user.getEmail())); + } + } + return convertList; + } + return null; + } + + /** + * Récuppère toutes les listes pour l'administration + * @return + */ + @GET + @Path("/all") + public List getAllList() { + final AppUser user = ServletUtils.getUserAuthenticated(); + if(user != null && user.isAdmin()){ + LOGGER.info("List all ListEnvies"); + List list = ListEnviesService.list(); + ArrayList convertList = new ArrayList<>(); + for (ListEnvies listeEnvy : list) { + convertList.add(listeEnvy.toDto(false, user.getEmail())); + } + return convertList; + } + return null; + } + + @POST + @Path("/{name}") + public void addListeEnvie(@PathParam("name") String name, ListEnviesDto listEnvies) { + final AppUser user = ServletUtils.getUserAuthenticated(); + if (user != null && user.isAdmin()) { + LOGGER.info("Save ListEnvies " + listEnvies.getName()); + ListEnvies orUpdate = ListEnviesService.createOrUpdate(new ListEnvies(listEnvies)); + } + } + + @GET + @Path("/{name}") + public ListEnviesDto getUser(@PathParam("name") String email) { + final AppUser user = ServletUtils.getUserAuthenticated(); + if (user != null) { + LOGGER.info("Get " + email); + ListEnvies listeEnvies = ListEnviesService.get(email); + return listeEnvies.toDto(true, user.getEmail()); + } + return null; + } + + @DELETE + @Path("/{name}") + public void deleteEnvie(@PathParam("name") String name){ + final AppUser user = ServletUtils.getUserAuthenticated(); + if(user != null && user.isAdmin()){ + LOGGER.info("name " + name); + ListEnviesService.delete(name); + } + } +} diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/AppUserService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/AppUserService.java index 75ce86fe..7c87e3cf 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/AppUserService.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/AppUserService.java @@ -10,6 +10,7 @@ import fr.desaintsteban.liste.envies.model.AppUser; import java.util.List; +import java.util.Map; public final class AppUserService { private AppUserService() {} @@ -47,6 +48,9 @@ public static List list() { return list; } + public static Map loadAll(List emails) { + return OfyService.ofy().load().type(AppUser.class).ids(emails); + } public static void delete(String email) { OfyService.ofy().delete().key(Key.create(AppUser.class, email)).now(); diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java index 0da9e460..28f7435c 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java @@ -1,6 +1,7 @@ package fr.desaintsteban.liste.envies.service; import com.googlecode.objectify.Key; +import com.googlecode.objectify.LoadResult; import com.googlecode.objectify.Objectify; import com.googlecode.objectify.VoidWork; import com.googlecode.objectify.Work; @@ -8,6 +9,8 @@ import fr.desaintsteban.liste.envies.dto.NoteDto; import fr.desaintsteban.liste.envies.model.AppUser; import fr.desaintsteban.liste.envies.model.Envie; +import fr.desaintsteban.liste.envies.model.Envy; +import fr.desaintsteban.liste.envies.model.ListEnvies; import fr.desaintsteban.liste.envies.util.EncodeUtils; import java.util.List; @@ -15,59 +18,69 @@ public final class EnviesService { private EnviesService() {} - public static List list(AppUser user, String email) { - Key parent = Key.create(AppUser.class, email); - List list = OfyService.ofy().load().type(Envie.class).ancestor(parent).list(); - if (user.getEmail().equals(email)) { + public static List list(AppUser user, String name) { + Objectify ofy = OfyService.ofy(); + Key key = Key.create(ListEnvies.class, name); + LoadResult loadResult = ofy.load().key(key); //Chargement asynchrone + List list = ofy.load().type(Envy.class).ancestor(key).list(); + ListEnvies listEnvies = loadResult.now(); + if (listEnvies.containsOwner(user.getName())) { removeUserTake(list); } return list; } - public static List listAll() { - List list = OfyService.ofy().load().type(Envie.class).list(); + public static List listAll() { + List list = OfyService.ofy().load().type(Envy.class).list(); //On supprime toujours celui qui a donner le cadeaux removeUserTake(list); return list; } - public static List list(AppUser user, String email, String libelle) { - Key parent = Key.create(AppUser.class, email); - List list = OfyService.ofy().load().type(Envie.class).ancestor(parent).filter("label >=", libelle).filter("label <", libelle + "\uFFFD").list(); - if (user.getEmail().equals(email)) { + public static List list(AppUser user, String name, String libelle) { + Objectify ofy = OfyService.ofy(); + Key parent = Key.create(ListEnvies.class, name); + LoadResult loadResult = ofy.load().key(parent); //Chargement asynchrone + List list = ofy.load().type(Envy.class).ancestor(parent).filter("label >=", libelle).filter("label <", libelle + "\uFFFD").list(); + ListEnvies listEnvies = loadResult.now(); + if (listEnvies.containsOwner(user.getName())) { removeUserTake(list); } return list; } - public static void delete(AppUser user, String email, Long itemid) { - Key parent = Key.create(AppUser.class, email); - if (user.getEmail().equals(email) || user.isAdmin()) { + public static void delete(AppUser user, String name, Long itemid) { + Objectify ofy = OfyService.ofy(); + Key parent = Key.create(ListEnvies.class, name); + ListEnvies listEnvies = ofy.load().key(parent).now(); + if (listEnvies.containsOwner(user.getEmail()) || user.isAdmin()) { OfyService.ofy().delete().key(Key.create(parent, Envie.class, itemid)).now(); } } - public static Envie get(AppUser user, String email, Long itemid) { - Key parent = Key.create(AppUser.class, email); - Envie envie = OfyService.ofy().load().key(Key.create(parent, Envie.class, itemid)).now(); - if (user.getEmail().equals(email)) { + public static Envy get(AppUser user, String name, Long itemid) { + Objectify ofy = OfyService.ofy(); + Key parent = Key.create(ListEnvies.class, name); + LoadResult loadResult = ofy.load().key(parent); //Chargement asynchrone + Envy envie = OfyService.ofy().load().key(Key.create(parent, Envy.class, itemid)).now(); + ListEnvies listEnvies = loadResult.now(); + if (listEnvies.containsOwner(user.getEmail())) { envie.setUserTake(null); envie.setNotes(null); } return envie; } - public static void given(final AppUser user, String email, final Long itemId) { - if (user.getEmail().equals(email)) { - - } - else if (!user.getEmail().equals(email)) { - final Key parent = Key.create(AppUser.class, email); + public static void given(final AppUser user, String name, final Long itemId) { + Objectify ofy = OfyService.ofy(); + final Key parent = Key.create(ListEnvies.class, name); + ListEnvies listEnvies = ofy.load().key(parent).now(); + if (!listEnvies.containsOwner(user.getEmail()) && listEnvies.containsUser(user.getEmail())) { OfyService.ofy().transact(new VoidWork() { @Override public void vrun() { Objectify ofy = OfyService.ofy(); - Envie saved = ofy.load().key(Key.create(parent, Envie.class, itemId)).now(); + Envy saved = ofy.load().key(Key.create(parent, Envy.class, itemId)).now(); Saver saver = ofy.save(); saved.setUserTake(EncodeUtils.encode(user.getEmail())); saver.entity(saved); @@ -76,18 +89,16 @@ public void vrun() { } } - public static void addNote(final AppUser user, final Long itemId, final String email, final NoteDto note) { - - if (user.getEmail().equals(email)) { - - } - else if (!user.getEmail().equals(email)) { - final Key parent = Key.create(AppUser.class, email); + public static void addNote(final AppUser user, final Long itemId, final String name, final NoteDto note) { + Objectify ofy = OfyService.ofy(); + final Key parent = Key.create(ListEnvies.class, name); + ListEnvies listEnvies = ofy.load().key(parent).now(); + if (!listEnvies.containsOwner(user.getEmail()) && listEnvies.containsUser(user.getEmail())) { OfyService.ofy().transact(new VoidWork() { @Override public void vrun() { Objectify ofy = OfyService.ofy(); - Envie saved = ofy.load().key(Key.create(parent, Envie.class, itemId)).now(); + Envy saved = ofy.load().key(Key.create(parent, Envy.class, itemId)).now(); Saver saver = ofy.save(); saved.addNote(user.getName(), user.getEmail(), note.getText()); saver.entity(saved); @@ -96,17 +107,16 @@ public void vrun() { } } - public static void cancel(final AppUser user, String email, final Long itemId) { - if (user.getEmail().equals(email)) { - - } - else if (!user.getEmail().equals(email)) { - final Key parent = Key.create(AppUser.class, email); + public static void cancel(final AppUser user, String name, final Long itemId) { + Objectify ofy = OfyService.ofy(); + final Key parent = Key.create(ListEnvies.class, name); + ListEnvies listEnvies = ofy.load().key(parent).now(); + if (!listEnvies.containsOwner(user.getEmail()) && listEnvies.containsUser(user.getEmail())) { OfyService.ofy().transact(new VoidWork() { @Override public void vrun() { Objectify ofy = OfyService.ofy(); - Envie saved = ofy.load().key(Key.create(parent, Envie.class, itemId)).now(); + Envy saved = ofy.load().key(Key.create(parent, Envy.class, itemId)).now(); Saver saver = ofy.save(); saved.setUserTake(null); saver.entity(saved); @@ -115,20 +125,23 @@ public void vrun() { } } - public static Envie createOrUpdate(final AppUser user, final String email, final Envie item) { - if (user.getEmail().equals(email)) { - final Key parent = Key.create(AppUser.class, email); - return OfyService.ofy().transact(new Work() { + public static Envy createOrUpdate(final AppUser user, final String name, final Envy item) { + Objectify ofy = OfyService.ofy(); + final Key parent = Key.create(ListEnvies.class, name); + ListEnvies listEnvies = ofy.load().key(parent).now(); + if (listEnvies.containsOwner(user.getEmail())) { + return OfyService.ofy().transact(new Work() { @Override - public Envie run() { + public Envy run() { Objectify ofy = OfyService.ofy(); Saver saver = ofy.save(); item.setOwner(parent); if (item.getId() != null) { - Envie saved = ofy.load().key(Key.create(parent, Envie.class, item.getId())).now(); + Envy saved = ofy.load().key(Key.create(parent, Envy.class, item.getId())).now(); item.setUserTake(saved.getUserTake()); + item.setNotes(saved.getNotes()); } - Key key = saver.entity(item).now(); + Key key = saver.entity(item).now(); return item; } }); @@ -136,10 +149,10 @@ public Envie run() { return null; } - private static void removeUserTake(List list) { - for (Envie envie : list) { - envie.setUserTake(null); //Si l'utilisateur courrant est le propriétaire des envies, on efface le nom de qui lui a offert un cadeau. - envie.setNotes(null); + private static void removeUserTake(List list) { + for (Envy envy : list) { + envy.setUserTake(null); //Si l'utilisateur courrant est le propriétaire des envies, on efface le nom de qui lui a offert un cadeau. + envy.setNotes(null); } } } \ No newline at end of file diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/ListEnviesService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/ListEnviesService.java new file mode 100644 index 00000000..7e9d6cff --- /dev/null +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/ListEnviesService.java @@ -0,0 +1,46 @@ +package fr.desaintsteban.liste.envies.service; + +import com.googlecode.objectify.Key; +import com.googlecode.objectify.Work; +import com.googlecode.objectify.cmd.Saver; +import fr.desaintsteban.liste.envies.model.ListEnvies; + +import java.util.List; +import java.util.Map; + +public final class ListEnviesService { + private ListEnviesService() {} + + public static List list() { + List list = OfyService.ofy().load().type(ListEnvies.class).list(); + return list; + } + + public static List list(String email) { + List list = OfyService.ofy().load().type(ListEnvies.class).filter("users.email =", email).list(); + return list; + } + + public static Map loadAll(List names) { + return OfyService.ofy().load().type(ListEnvies.class).ids(names); + } + + public static void delete(String email) { + OfyService.ofy().delete().key(Key.create(ListEnvies.class, email)).now(); + } + + public static ListEnvies get(String email) { + return OfyService.ofy().load().key(Key.create(ListEnvies.class, email)).now(); + } + + public static ListEnvies createOrUpdate(final ListEnvies item) { + return OfyService.ofy().transact(new Work() { + @Override + public ListEnvies run() { + final Saver saver = OfyService.ofy().save(); + saver.entities(item).now(); + return item; + } + }); + } +} diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/OfyService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/OfyService.java index aa382a9d..edf42c77 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/OfyService.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/OfyService.java @@ -6,11 +6,15 @@ import com.googlecode.objectify.util.Closeable; import fr.desaintsteban.liste.envies.model.AppUser; import fr.desaintsteban.liste.envies.model.Envie; +import fr.desaintsteban.liste.envies.model.Envy; +import fr.desaintsteban.liste.envies.model.ListEnvies; public final class OfyService { static { factory().register(AppUser.class); factory().register(Envie.class); + factory().register(Envy.class); + factory().register(ListEnvies.class); } private OfyService() {} diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java index 5238b1e8..7d2b9c7a 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java @@ -1,17 +1,22 @@ package fr.desaintsteban.liste.envies.servlet; +import com.googlecode.objectify.Key; import com.googlecode.objectify.Objectify; -import com.googlecode.objectify.VoidWork; +import fr.desaintsteban.liste.envies.model.AppUser; import fr.desaintsteban.liste.envies.model.Envie; -import fr.desaintsteban.liste.envies.model.Note; +import fr.desaintsteban.liste.envies.model.Envy; +import fr.desaintsteban.liste.envies.model.ListEnvies; +import fr.desaintsteban.liste.envies.model.UserShare; +import fr.desaintsteban.liste.envies.model.UserShareType; import fr.desaintsteban.liste.envies.service.OfyService; -import fr.desaintsteban.liste.envies.util.EncodeUtils; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.io.PrintWriter; +import java.util.ArrayList; import java.util.List; /** @@ -20,19 +25,42 @@ public class MigrateServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + resp.setContentType("text/plain;charset=UTF-8"); + PrintWriter out = resp.getWriter(); Objectify ofy = OfyService.ofy(); - List list = ofy.load().type(Envie.class).list(); - for (Envie envie : list) { - if (envie.getUserTake() != null) { - envie.setUserTake(EncodeUtils.encode(envie.getUserTake())); - } - if (envie.getNotes() != null) { - for (Note note : envie.getNotes()) { - note.setOwner(EncodeUtils.encode(note.getOwner())); - note.setText(EncodeUtils.encode(note.getText())); + List listUser = ofy.load().type(AppUser.class).list(); + for (AppUser appUser : listUser) { + out.println("Liste de "+appUser.getName()); + ListEnvies envies = new ListEnvies(); + envies.setName("list-"+appUser.getName().toLowerCase()); + envies.setTitle("Liste de " + appUser.getName()); + List users = new ArrayList<>(); + users.add(new UserShare(appUser.getEmail(), UserShareType.OWNER)); + for (AppUser shareUser : listUser) { + if (!shareUser.getEmail().equals(appUser.getEmail())) { + users.add(new UserShare(shareUser.getEmail(), UserShareType.SHARED)); } } + envies.setUsers(users); + + Key key = ofy.save().entity(envies).now(); + + List list = ofy.load().type(Envie.class).ancestor(appUser).list(); + List listConverted = new ArrayList<>(); + for (Envie envie : list) { + Envy envy = new Envy(); + envy.setOwner(key); + envy.setLabel(envie.getLabel()); + envy.setDescription(envie.getComment()); + envy.setPrice(envie.getPrice()); + envy.setUrl(envie.getUrl()); + envy.setNotes(envie.getNotes()); + envy.setUserTake(envie.getUserTake()); + listConverted.add(envy); + } + ofy.save().entities(listConverted); } - ofy.save().entities(list); + + out.println("OK"); } } diff --git a/liste-envies-war/src/main/webapp/index.html b/liste-envies-war/src/main/webapp/index.html index 826361ca..877129b7 100644 --- a/liste-envies-war/src/main/webapp/index.html +++ b/liste-envies-war/src/main/webapp/index.html @@ -83,6 +83,7 @@ + diff --git a/liste-envies-war/src/main/webapp/js/controllers/envieCtrl.js b/liste-envies-war/src/main/webapp/js/controllers/envieCtrl.js index 80713d92..a8ff2278 100644 --- a/liste-envies-war/src/main/webapp/js/controllers/envieCtrl.js +++ b/liste-envies-war/src/main/webapp/js/controllers/envieCtrl.js @@ -1,12 +1,12 @@ app.controller('EnvieCtrl', EnvieCtrl); -EnvieCtrl.$inject = ['envieService', 'appUserService', '$routeParams', '$location', '$anchorScroll']; -function EnvieCtrl(envieService, appUserService, $routeParams, $location, $anchorScroll) { +EnvieCtrl.$inject = ['envieService', 'appUserService', 'listEnviesService', '$routeParams', '$location', '$anchorScroll']; +function EnvieCtrl(envieService, appUserService, listEnviesService, $routeParams, $location, $anchorScroll) { var vm = this; - vm.email = $routeParams.email; - vm.user = loadUser(vm.email); + vm.name = $routeParams.name; + vm.listEnvies = loadListEnvies(vm.name); vm.loading = false; - loadListeEnvies(); + loadEnvies(); resetForm(); vm.editEnvie = function (envie) { @@ -16,8 +16,8 @@ function EnvieCtrl(envieService, appUserService, $routeParams, $location, $ancho }; vm.addEnvie = function (envie) { - envieService.save({email:vm.email}, envie, function() { - loadListeEnvies(); + envieService.save({name:vm.name}, envie, function() { + loadEnvies(); gotoEnvie(envie.id); resetForm(); }); @@ -29,22 +29,22 @@ function EnvieCtrl(envieService, appUserService, $routeParams, $location, $ancho console.log('add Note', note, envie.id); - envieService.addNote({email:vm.email, id: envie.id}, note, function() { - loadListeEnvies(); + envieService.addNote({name:vm.name, id: envie.id}, note, function() { + loadEnvies(); gotoEnvie(envie.id); vm.text = ''; }); }; vm.given = function(id) { - envieService.give({email:vm.email, id:id}, {}, function() { - loadListeEnvies(); + envieService.give({name:vm.name, id:id}, {}, function() { + loadEnvies(); }); }; vm.cancel = function(id) { - envieService.cancel({email:vm.email, id:id}, {}, function() { - loadListeEnvies(); + envieService.cancel({name:vm.name, id:id}, {}, function() { + loadEnvies(); }); }; @@ -73,10 +73,13 @@ function EnvieCtrl(envieService, appUserService, $routeParams, $location, $ancho function loadUser(email) { return appUserService.get({email:email}); } - function loadListeEnvies() { + function loadListEnvies(name) { + return listEnviesService.get({name:name}); + } + function loadEnvies() { vm.loading = true; - vm.listeEnvies = envieService.query({email: $routeParams.email}); - vm.listeEnvies.$promise.then(function(list) { + vm.envies = envieService.query({name: $routeParams.name}); + vm.envies.$promise.then(function(list) { vm.loading = false; angular.forEach(list, function(item) { if (item.userTake) { diff --git a/liste-envies-war/src/main/webapp/js/controllers/homeCtrl.js b/liste-envies-war/src/main/webapp/js/controllers/homeCtrl.js index 47c9d854..4381f4b4 100644 --- a/liste-envies-war/src/main/webapp/js/controllers/homeCtrl.js +++ b/liste-envies-war/src/main/webapp/js/controllers/homeCtrl.js @@ -1,20 +1,20 @@ app.controller('HomeCtrl', HomeCtrl); -HomeCtrl.$inject = ['appUserService', '$location']; -function HomeCtrl(appUserService, $location) { +HomeCtrl.$inject = ['appUserService', 'listEnviesService', '$location']; +function HomeCtrl(appUserService, listEnviesService, $location) { var vm = this; vm.loading = true; - vm.listeUser = appUserService.query(); + vm.envies = listEnviesService.query(); - vm.listeUser.$promise.then(function () { + vm.envies.$promise.then(function () { vm.loading = false; }); - + /** Deprecated */ vm.addUser = function (newuser) { appUserService.save(newuser, function() { vm.listeUser = appUserService.query(); }); }; - vm.goList = function (email) { - $location.url("/"+email); + vm.goList = function (name) { + $location.url("/"+name); }; } \ No newline at end of file diff --git a/liste-envies-war/src/main/webapp/js/routes/route.js b/liste-envies-war/src/main/webapp/js/routes/route.js index 50235c58..fb86a15a 100644 --- a/liste-envies-war/src/main/webapp/js/routes/route.js +++ b/liste-envies-war/src/main/webapp/js/routes/route.js @@ -6,7 +6,7 @@ app.config(function ($routeProvider) { controller: "HomeCtrl", controllerAs: "vm" }) - .when("/:email", { + .when("/:name", { templateUrl: "templates/envies.html", name: 'Envie', controller: "EnvieCtrl", diff --git a/liste-envies-war/src/main/webapp/js/services/envieService.js b/liste-envies-war/src/main/webapp/js/services/envieService.js index 2855018e..d419c8b1 100644 --- a/liste-envies-war/src/main/webapp/js/services/envieService.js +++ b/liste-envies-war/src/main/webapp/js/services/envieService.js @@ -3,7 +3,7 @@ angular .service('envieService', envieService); envieService.$inject = ['$resource']; function envieService($resource) { - var base_url = '/api/liste/:email/envies/'; + var base_url = '/api/envies/:name/'; return $resource(base_url + ':id', {id: '@id', email: '@email'}, {give: {method:'PUT', url: base_url + ':id/give'}, cancel: {method:'PUT', url: base_url + ':id/cancel'}, diff --git a/liste-envies-war/src/main/webapp/js/services/listEnviesService.js b/liste-envies-war/src/main/webapp/js/services/listEnviesService.js new file mode 100644 index 00000000..a1ead0d3 --- /dev/null +++ b/liste-envies-war/src/main/webapp/js/services/listEnviesService.js @@ -0,0 +1,11 @@ +angular + .module('service') + .service('listEnviesService', listEnviesService); +listEnviesService.$inject = ['$resource']; +function listEnviesService($resource) { + var base_url = '/api/liste/'; + return $resource(base_url + ':name', {name: '@name'}, + {all: {method:'GET', url: base_url + 'all'}, + of: {method:'GET', url: base_url + 'of/:email'} + }); +} diff --git a/liste-envies-war/src/main/webapp/templates/envies.html b/liste-envies-war/src/main/webapp/templates/envies.html index 437b2770..8b15b5f1 100644 --- a/liste-envies-war/src/main/webapp/templates/envies.html +++ b/liste-envies-war/src/main/webapp/templates/envies.html @@ -2,8 +2,8 @@

- Liste des envies de {{vm.user.name}} - {{vm.email}} + {{vm.listEnvies.title}} + {{vm.name}}

@@ -17,7 +17,7 @@

-
+
@@ -29,15 +29,15 @@

{{envie.label}}

-

{{envie.comment}}

+

{{envie.description}}

- +
-
+
+
+
@@ -111,26 +165,34 @@
Of
- -
-
- - -
-
- - -
-
- - -
-
- - -
- -
- +
+
+
+
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+
+
+
\ No newline at end of file diff --git a/liste-envies-war/src/main/webapp/templates/home.html b/liste-envies-war/src/main/webapp/templates/home.html index 3dc0950f..fcfb7f6a 100644 --- a/liste-envies-war/src/main/webapp/templates/home.html +++ b/liste-envies-war/src/main/webapp/templates/home.html @@ -11,10 +11,41 @@

Bonjour, {{main.user.name}}! Bienvenue sur votre liste des envies

- +

+
@@ -32,7 +63,7 @@

{{listenvies.title}}

-

Ajouter une nouvelle liste

+

Ajouter un utilisateur

diff --git a/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/EnvieServiceTest.java b/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/EnvieServiceTest.java index 6dc325a1..1d9709c5 100644 --- a/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/EnvieServiceTest.java +++ b/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/EnvieServiceTest.java @@ -69,8 +69,8 @@ public void setUp() { emmanuel = new AppUser("emmanuel@desaintsteban.fr", "Emmanuel"); AppUserService.createOrUpdate(emmanuel); clemence = AppUserService.createOrUpdate(new AppUser("clemence@desaintsteban.fr", "Clemence")); - listePatrice = ListEnviesService.createOrUpdate(new ListEnvies("liste-patrice", "Liste de Patrice", patrice.getEmail(), emmanuel.getEmail())); - listeEmmanuel = ListEnviesService.createOrUpdate(new ListEnvies("liste-emmanuel", "Liste d'Emmanuel", emmanuel.getEmail(), patrice.getEmail(), clemence.getEmail())); + listePatrice = ListEnviesService.createOrUpdate(patrice, new ListEnvies("liste-patrice", "Liste de Patrice", patrice.getEmail(), emmanuel.getEmail())); + listeEmmanuel = ListEnviesService.createOrUpdate(emmanuel, new ListEnvies("liste-emmanuel", "Liste d'Emmanuel", emmanuel.getEmail(), patrice.getEmail(), clemence.getEmail())); Envy itemLivre = EnviesService.createOrUpdate(patrice, "liste-patrice", new Envy(listePatrice, "Livre")); livreId = itemLivre.getId(); diff --git a/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/ListEnviesServiceTest.java b/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/ListEnviesServiceTest.java index 96e67c65..933e5f88 100644 --- a/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/ListEnviesServiceTest.java +++ b/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/ListEnviesServiceTest.java @@ -8,6 +8,7 @@ import com.googlecode.objectify.ObjectifyFactory; import com.googlecode.objectify.ObjectifyService; import com.googlecode.objectify.cache.AsyncCacheFilter; +import fr.desaintsteban.liste.envies.model.AppUser; import fr.desaintsteban.liste.envies.model.ListEnvies; import fr.desaintsteban.liste.envies.service.ListEnviesService; import fr.desaintsteban.liste.envies.service.OfyService; @@ -28,6 +29,7 @@ public class ListEnviesServiceTest { new LocalMemcacheServiceTestConfig(), new LocalTaskQueueTestConfig()); private Closeable closable; + private AppUser patrice; @BeforeClass public static void setUpBeforeClass() @@ -43,6 +45,7 @@ public Objectify begin() } }); ObjectifyService.factory().register(ListEnvies.class); + ObjectifyService.factory().register(AppUser.class); } @@ -50,8 +53,9 @@ public Objectify begin() public void setUp() { helper.setUp(); closable = OfyService.begin(); - ListEnviesService.createOrUpdate(new ListEnvies("liste-patrice", "Liste de Patrice", "patrice@desaintsteban.fr", "emmanuel@desaintsteban.fr")); - ListEnviesService.createOrUpdate(new ListEnvies("liste-emmanuel", "Liste de Emmanuel", "emmanuel@desaintsteban.fr")); + patrice = new AppUser("patrice@desaintsteban.fr", "Patrice"); + ListEnviesService.createOrUpdate(patrice, new ListEnvies("liste-patrice", "Liste de Patrice", "patrice@desaintsteban.fr", "emmanuel@desaintsteban.fr")); + ListEnviesService.createOrUpdate(patrice, new ListEnvies("liste-emmanuel", "Liste de Emmanuel", "emmanuel@desaintsteban.fr")); } @After @@ -86,7 +90,7 @@ public void testListEmails() throws Exception { @Test public void testCreate() throws Exception { - ListEnviesService.createOrUpdate(new ListEnvies("liste-clemence", "Clemence", "clemence@desaintsteban.fr", "patrice@desaintsteban.fr", "emmanuel@desaintsteban.fr")); + ListEnviesService.createOrUpdate(patrice, new ListEnvies("liste-clemence", "Clemence", "clemence@desaintsteban.fr", "patrice@desaintsteban.fr", "emmanuel@desaintsteban.fr")); } @Test From f562dd11d42c4db478ea2befea9b6ca8e6d33538 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrice=20de=20Saint=20St=C3=A9ban?= Date: Sat, 3 Dec 2016 00:46:54 +0100 Subject: [PATCH 04/12] Correction de styles --- liste-envies-war/src/main/webapp/css/style.css | 7 +++++++ liste-envies-war/src/main/webapp/templates/envies.html | 2 +- liste-envies-war/src/main/webapp/templates/home.html | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/liste-envies-war/src/main/webapp/css/style.css b/liste-envies-war/src/main/webapp/css/style.css index d147d1a8..abadc98f 100644 --- a/liste-envies-war/src/main/webapp/css/style.css +++ b/liste-envies-war/src/main/webapp/css/style.css @@ -15,6 +15,13 @@ display: inline-block !important; } +.title-edit { + font-size: 36px; + width: auto; + outline: none; + padding: 0; +} + .list-envie .envie-item:hover .edit-button { display: block !important; } diff --git a/liste-envies-war/src/main/webapp/templates/envies.html b/liste-envies-war/src/main/webapp/templates/envies.html index e657fea7..1e7bb243 100644 --- a/liste-envies-war/src/main/webapp/templates/envies.html +++ b/liste-envies-war/src/main/webapp/templates/envies.html @@ -4,7 +4,7 @@

- +
diff --git a/liste-envies-war/src/main/webapp/templates/home.html b/liste-envies-war/src/main/webapp/templates/home.html index fcfb7f6a..964cb12a 100644 --- a/liste-envies-war/src/main/webapp/templates/home.html +++ b/liste-envies-war/src/main/webapp/templates/home.html @@ -30,8 +30,8 @@

- - + +
From c6f8fdf404235cca45350aba6eb5181e5bd96e73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrice=20de=20Saint=20St=C3=A9ban?= Date: Sat, 3 Dec 2016 20:30:58 +0100 Subject: [PATCH 05/12] Owner + list userTake MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Owner : Garde la personne qui a créé l'envie (permettra de faire la fonction de proposer un cadeau). - list userTake : Permettra d'avoir plusieurs personnes qui offrent un cadeaux (fonction participer) --- .../liste/envies/model/Envy.java | 29 +++++++++++++------ .../liste/envies/service/EnviesService.java | 2 +- .../liste/envies/servlet/MigrateServlet.java | 3 +- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java index 74a4a0ef..9344e450 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java @@ -1,10 +1,7 @@ package fr.desaintsteban.liste.envies.model; import com.googlecode.objectify.Key; -import com.googlecode.objectify.annotation.Cache; -import com.googlecode.objectify.annotation.Entity; -import com.googlecode.objectify.annotation.Id; -import com.googlecode.objectify.annotation.Parent; +import com.googlecode.objectify.annotation.*; import fr.desaintsteban.liste.envies.dto.EnvyDto; import fr.desaintsteban.liste.envies.dto.NoteDto; import fr.desaintsteban.liste.envies.util.EncodeUtils; @@ -27,13 +24,16 @@ public class Envy { @Id private Long id; + private String owner; + private String label; private String description; private String price; private String url; - private String userTake; + @Index + private List userTake; @Embedded private List notes; @@ -81,11 +81,11 @@ public EnvyDto toDto() { return envie; } - public Key getOwner() { + public Key getList() { return list; } - public void setOwner(Key owner) { + public void setList(Key owner) { this.list = owner; } @@ -97,6 +97,14 @@ public void setId(Long id) { this.id = id; } + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + public String getLabel() { return label; } @@ -130,11 +138,14 @@ public void setUrl(String url) { } public String getUserTake() { - return userTake; + return userTake != null && !userTake.isEmpty() ? userTake.get(0) : null; } public void setUserTake(String userTake) { - this.userTake = userTake; + if (userTake == null) { + this.userTake = new ArrayList<>(); + } + this.userTake.add(userTake); } public void addNote(String owner, String email, String text) { diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java index ca61e7d8..ec4e237b 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java @@ -135,7 +135,7 @@ public static Envy createOrUpdate(final AppUser user, final String name, final E public Envy run() { Objectify ofy = OfyService.ofy(); Saver saver = ofy.save(); - item.setOwner(parent); + item.setList(parent); if (item.getId() != null) { Envy saved = ofy.load().key(Key.create(parent, Envy.class, item.getId())).now(); item.setUserTake(saved.getUserTake()); diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java index 7d2b9c7a..cae1ece3 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java @@ -49,7 +49,8 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se List listConverted = new ArrayList<>(); for (Envie envie : list) { Envy envy = new Envy(); - envy.setOwner(key); + envy.setList(key); + envy.setOwner(envie.getOwner().getName()); envy.setLabel(envie.getLabel()); envy.setDescription(envie.getComment()); envy.setPrice(envie.getPrice()); From 74de0ab69ecc64c17c4f56cc02b06318a3418197 Mon Sep 17 00:00:00 2001 From: Emmanuel de Saint Steban Date: Sat, 3 Dec 2016 22:54:08 +0100 Subject: [PATCH 06/12] Ajout des owners dans la liste des envies. Pour afficher a qui appartient la liste. --- .../liste/envies/dto/ListEnviesDto.java | 10 ++++++++++ .../liste/envies/dto/UserShareDto.java | 3 ++- .../liste/envies/model/ListEnvies.java | 16 ++++++++++++---- .../liste/envies/model/UserShare.java | 11 +++++++++++ .../liste/envies/rest/ListEnviesRestService.java | 4 ++-- .../src/main/webapp/templates/home.html | 1 + 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java index f0a11ec7..9b62c687 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java @@ -13,6 +13,16 @@ public class ListEnviesDto { private Boolean isOwner; private List users; + private List owners; + + public List getOwners() { + return owners; + } + + public void setOwners(List owners) { + this.owners = owners; + } + public String getName() { return name; } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java index 650ae21b..4b9dceed 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java @@ -13,8 +13,9 @@ public class UserShareDto { public UserShareDto() { } - public UserShareDto(String email, UserShareType type) { + public UserShareDto(String email, String name, UserShareType type) { this.email = email; + this.name = name; this.type = type; } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java index 4f0c7181..f7e90296 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java @@ -48,14 +48,22 @@ public ListEnviesDto toDto(boolean convertUsers, String userEmail) { dto.setName(getName()); dto.setTitle(getTitle()); dto.setDescription(getDescription()); - if (convertUsers) { + List users = getUsers(); List usersDto = new ArrayList<>(); + List ownersDto = new ArrayList<>(); for (UserShare user : users) { - usersDto.add(new UserShareDto(user.getEmail(), user.getType())); + UserShareDto userShareDto = new UserShareDto(user.getEmail(), user.getName(), user.getType()); + usersDto.add(userShareDto); + if (user.getType() == UserShareType.OWNER) { + ownersDto.add(userShareDto); + } } - dto.setUsers(usersDto); - } + if (convertUsers) { + dto.setUsers(usersDto); + } + dto.setOwners(ownersDto); + if (userEmail != null) { dto.setOwner(containsOwner(userEmail)); } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java index 6c1f1bfb..4222329a 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java @@ -8,6 +8,16 @@ public class UserShare { @Index private String email; + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + private UserShareType type; public UserShare() { @@ -15,6 +25,7 @@ public UserShare() { public UserShare(String email, UserShareType type) { this.email = email; + this.name = email; this.type = type; } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java index 252b4225..6ac647d3 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java @@ -28,7 +28,7 @@ public class ListEnviesRestService { public List getListEnvies() { final AppUser user = ServletUtils.getUserAuthenticated(); if(user != null){ - LOGGER.info("List appuser"); + LOGGER.info("List users"); List list = ListEnviesService.list(user.getEmail()); ArrayList convertList = new ArrayList<>(); for (ListEnvies listeEnvy : list) { @@ -49,7 +49,7 @@ public List getListEnvies() { public List getListEnvies(@PathParam("email") String email) { final AppUser user = ServletUtils.getUserAuthenticated(); if(user != null){ - LOGGER.info("List appuser"); + LOGGER.info("List authorized liste for user: "+email); List list = ListEnviesService.list(email); ArrayList convertList = new ArrayList<>(); for (ListEnvies listeEnvy : list) { diff --git a/liste-envies-war/src/main/webapp/templates/home.html b/liste-envies-war/src/main/webapp/templates/home.html index 964cb12a..5f1daab9 100644 --- a/liste-envies-war/src/main/webapp/templates/home.html +++ b/liste-envies-war/src/main/webapp/templates/home.html @@ -59,6 +59,7 @@

{{listenvies.title}}

{{listenvies.description}}

+

de {{owner.email}}

From b302fed5a14aa65e033defd3785e0db3b85234ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrice=20de=20Saint=20St=C3=A9ban?= Date: Sun, 4 Dec 2016 03:25:22 +0100 Subject: [PATCH 07/12] Liste de liens, participer, photo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Permet d'avoir une liste de liens - Ajouter une photo à une envie - Pouvoir participer à un cadeau déjà offert --- .../liste/envies/dto/EnvyDto.java | 35 ++++++--- .../liste/envies/dto/UserShareDto.java | 11 +++ .../liste/envies/model/Envie.java | 30 -------- .../liste/envies/model/Envy.java | 77 +++++++++++++++---- .../liste/envies/model/Link.java | 36 +++++++++ .../liste/envies/model/ListEnvies.java | 5 +- .../envies/rest/ListEnviesRestService.java | 37 ++++++--- .../liste/envies/service/EnviesService.java | 72 +++++++++-------- .../liste/envies/servlet/MigrateServlet.java | 4 +- .../src/main/webapp/css/style.css | 5 ++ liste-envies-war/src/main/webapp/index.html | 1 + .../main/webapp/js/controllers/envieCtrl.js | 22 +++++- .../src/main/webapp/templates/envies.html | 49 ++++++------ .../liste/envies/EnvieServiceTest.java | 4 +- 14 files changed, 254 insertions(+), 134 deletions(-) create mode 100644 liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Link.java diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java index ad520e23..5c468eb5 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java @@ -1,5 +1,7 @@ package fr.desaintsteban.liste.envies.dto; +import fr.desaintsteban.liste.envies.model.Link; + import java.util.List; /** @@ -13,8 +15,9 @@ public class EnvyDto { private String description; private String price; - private String url; - private String userTake; + private String picture; + private List urls; + private List userTake; private List notes; @@ -45,30 +48,38 @@ public void setDescription(String description) { this.description = description; } - public String getPrice() { - return price; + public String getPicture() { + return picture; } - public void setPrice(String price) { - this.price = price; + public void setPicture(String picture) { + this.picture = picture; } - public String getUrl() { - return url; + public List getUrls() { + return urls; } - public void setUrl(String url) { - this.url = url; + public void setUrls(List urls) { + this.urls = urls; } - public String getUserTake() { + public List getUserTake() { return userTake; } - public void setUserTake(String userTake) { + public void setUserTake(List userTake) { this.userTake = userTake; } + public String getPrice() { + return price; + } + + public void setPrice(String price) { + this.price = price; + } + public List getNotes() { return notes; } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java index 650ae21b..398e4e3b 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/UserShareDto.java @@ -1,7 +1,10 @@ package fr.desaintsteban.liste.envies.dto; +import fr.desaintsteban.liste.envies.model.AppUser; import fr.desaintsteban.liste.envies.model.UserShareType; +import java.util.Map; + /** * */ @@ -18,6 +21,14 @@ public UserShareDto(String email, UserShareType type) { this.type = type; } + public UserShareDto(String email, UserShareType type, Map userName) { + this.email = email; + this.type = type; + if (userName != null && userName.containsKey(email)) { + this.name = userName.get(email).getName(); + } + } + public String getEmail() { return email; } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envie.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envie.java index 1fc6375a..aa2a3347 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envie.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envie.java @@ -50,36 +50,6 @@ public Envie(AppUser owner, String label) { this.notes = new ArrayList<>(); } - - public Envie(EnvyDto envie) { - setId(envie.getId()); - setLabel(envie.getLabel()); - setComment(envie.getDescription()); - setPrice(envie.getPrice()); - setUrl(envie.getUrl()); - setUserTake(EncodeUtils.encode(envie.getUserTake())); - this.notes = new ArrayList<>(); - } - - public EnvyDto toDto() { - EnvyDto envie = new EnvyDto(); - envie.setId(getId()); - envie.setLabel(getLabel()); - envie.setDescription(getComment()); - envie.setPrice(getPrice()); - envie.setUrl(getUrl()); - envie.setUserTake(EncodeUtils.decode(getUserTake())); - - if (this.notes != null && !this.notes.isEmpty()) { - List listNoteDto = new ArrayList<>(); - for (Note note : this.notes) { - listNoteDto.add(note.toDto()); - } - envie.setNotes(listNoteDto); - } - return envie; - } - public Key getOwner() { return owner; } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java index 9344e450..5aff19dd 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java @@ -5,6 +5,7 @@ import fr.desaintsteban.liste.envies.dto.EnvyDto; import fr.desaintsteban.liste.envies.dto.NoteDto; import fr.desaintsteban.liste.envies.util.EncodeUtils; +import fr.desaintsteban.liste.envies.util.StringUtils; import org.codehaus.jackson.annotate.JsonIgnore; import javax.jdo.annotations.Embedded; @@ -31,7 +32,9 @@ public class Envy { private String description; private String price; - private String url; + private String picture; + @Embedded + private List urls; @Index private List userTake; @@ -55,11 +58,16 @@ public Envy(EnvyDto envie) { setLabel(envie.getLabel()); setDescription(envie.getDescription()); setPrice(envie.getPrice()); - setUrl(envie.getUrl()); - setUserTake(EncodeUtils.encode(envie.getUserTake())); - + setPicture(envie.getPicture()); + setUrls(envie.getUrls()); + if (envie.getUserTake() != null) { + List userTake = new ArrayList<>(); + for (String email : envie.getUserTake()) { + userTake.add(EncodeUtils.encode(email)); + } + setUserTake(userTake); + } this.notes = new ArrayList<>(); - } public EnvyDto toDto() { @@ -68,9 +76,15 @@ public EnvyDto toDto() { envie.setLabel(getLabel()); envie.setDescription(getDescription()); envie.setPrice(getPrice()); - envie.setUrl(getUrl()); - envie.setUserTake(EncodeUtils.decode(getUserTake())); - + envie.setPicture(getPicture()); + envie.setUrls(getUrls()); + List userTake = new ArrayList<>(); + if (getUserTake() != null) { + for (String email : getUserTake()) { + userTake.add(EncodeUtils.decode(email)); + } + } + envie.setUserTake(userTake); if (this.notes != null && !this.notes.isEmpty()) { List listNoteDto = new ArrayList<>(); for (Note note : this.notes) { @@ -129,23 +143,52 @@ public void setPrice(String price) { this.price = price; } - public String getUrl() { - return url; + public String getPicture() { + return picture; + } + + public void setPicture(String picture) { + this.picture = picture; + } + + public List getUrls() { + return urls; + } + + public void setUrls(List urls) { + this.urls = urls; } - public void setUrl(String url) { - this.url = url; + public void addUrl(String url) { + if (this.urls == null) { + this.urls = new ArrayList<>(); + } + if (!StringUtils.isNullOrEmpty(url)) { + this.urls.add(new Link(url)); + } } - public String getUserTake() { - return userTake != null && !userTake.isEmpty() ? userTake.get(0) : null; + public void setUserTake(List userTake) { + this.userTake = userTake; } - public void setUserTake(String userTake) { - if (userTake == null) { + public List getUserTake() { + return userTake; + } + + public void addUserTake(String userTake) { + if (this.userTake == null) { this.userTake = new ArrayList<>(); } - this.userTake.add(userTake); + if (!StringUtils.isNullOrEmpty(userTake)) { + this.userTake.add(userTake); + } + } + + public void removeUserTake(String userTake) { + if (userTake != null) { + this.userTake.remove(userTake); + } } public void addNote(String owner, String email, String text) { diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Link.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Link.java new file mode 100644 index 00000000..29ba5b1e --- /dev/null +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Link.java @@ -0,0 +1,36 @@ +package fr.desaintsteban.liste.envies.model; + +/** + */ +public class Link { + private String url; + private String name; + + public Link() { + } + + public Link(String url) { + this.url = url; + } + + public Link(String url, String name) { + this.url = url; + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java index 4f0c7181..7c9e1b9c 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * @@ -43,7 +44,7 @@ public ListEnvies(ListEnviesDto dto) { setUsers(users); } - public ListEnviesDto toDto(boolean convertUsers, String userEmail) { + public ListEnviesDto toDto(boolean convertUsers, String userEmail, Map userName) { ListEnviesDto dto = new ListEnviesDto(); dto.setName(getName()); dto.setTitle(getTitle()); @@ -52,7 +53,7 @@ public ListEnviesDto toDto(boolean convertUsers, String userEmail) { List users = getUsers(); List usersDto = new ArrayList<>(); for (UserShare user : users) { - usersDto.add(new UserShareDto(user.getEmail(), user.getType())); + usersDto.add(new UserShareDto(user.getEmail(), user.getType(), userName)); } dto.setUsers(usersDto); } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java index 252b4225..1492191e 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java @@ -3,6 +3,8 @@ import fr.desaintsteban.liste.envies.dto.ListEnviesDto; import fr.desaintsteban.liste.envies.model.AppUser; import fr.desaintsteban.liste.envies.model.ListEnvies; +import fr.desaintsteban.liste.envies.model.UserShare; +import fr.desaintsteban.liste.envies.service.AppUserService; import fr.desaintsteban.liste.envies.service.ListEnviesService; import fr.desaintsteban.liste.envies.util.ServletUtils; @@ -16,6 +18,7 @@ import javax.ws.rs.core.MediaType; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.logging.Logger; @Path("/liste") @@ -32,7 +35,7 @@ public List getListEnvies() { List list = ListEnviesService.list(user.getEmail()); ArrayList convertList = new ArrayList<>(); for (ListEnvies listeEnvy : list) { - convertList.add(listeEnvy.toDto(false, user.getEmail())); + convertList.add(listeEnvy.toDto(false, user.getEmail(), null)); } return convertList; } @@ -54,7 +57,7 @@ public List getListEnvies(@PathParam("email") String email) { ArrayList convertList = new ArrayList<>(); for (ListEnvies listeEnvy : list) { if (listeEnvy.containsOwner(email) && (listeEnvy.containsUser(user.getEmail()) || user.isAdmin())) { - convertList.add(listeEnvy.toDto(false, user.getEmail())); + convertList.add(listeEnvy.toDto(false, user.getEmail(), null)); } } return convertList; @@ -75,7 +78,7 @@ public List getAllList() { List list = ListEnviesService.list(); ArrayList convertList = new ArrayList<>(); for (ListEnvies listeEnvy : list) { - convertList.add(listeEnvy.toDto(false, user.getEmail())); + convertList.add(listeEnvy.toDto(false, user.getEmail(), null)); } return convertList; } @@ -86,10 +89,10 @@ public List getAllList() { @Path("/{name}") public ListEnviesDto updateListeEnvie(@PathParam("name") String name, ListEnviesDto listEnvies) { final AppUser user = ServletUtils.getUserAuthenticated(); - if (user != null && user.isAdmin()) { + if (user != null) { LOGGER.info("Save ListEnvies " + listEnvies.getName()); ListEnvies orUpdate = ListEnviesService.createOrUpdate(user, new ListEnvies(listEnvies)); - return orUpdate.toDto(true, user.getEmail()); + return orUpdate.toDto(true, user.getEmail(), null); } return null; } @@ -98,10 +101,10 @@ public ListEnviesDto updateListeEnvie(@PathParam("name") String name, ListEnvies @Path("/") public ListEnviesDto addListeEnvie(ListEnviesDto listEnvies) { final AppUser user = ServletUtils.getUserAuthenticated(); - if (user != null && user.isAdmin()) { + if (user != null) { LOGGER.info("Save ListEnvies " + listEnvies.getName()); - ListEnvies orUpdate = ListEnviesService.createOrUpdate(user, new ListEnvies(listEnvies)); - return orUpdate.toDto(false, user.getEmail()); + ListEnvies listEnvie = ListEnviesService.createOrUpdate(user, new ListEnvies(listEnvies)); + return getListEnviesDto(user, listEnvie); } return null; } @@ -112,8 +115,8 @@ public ListEnviesDto getUser(@PathParam("name") String email) { final AppUser user = ServletUtils.getUserAuthenticated(); if (user != null) { LOGGER.info("Get " + email); - ListEnvies listeEnvies = ListEnviesService.get(email); - return listeEnvies.toDto(true, user.getEmail()); + ListEnvies listEnvies = ListEnviesService.get(email); + return getListEnviesDto(user, listEnvies); } return null; } @@ -122,9 +125,21 @@ public ListEnviesDto getUser(@PathParam("name") String email) { @Path("/{name}") public void deleteEnvie(@PathParam("name") String name){ final AppUser user = ServletUtils.getUserAuthenticated(); - if(user != null && user.isAdmin()){ + if(user != null){ LOGGER.info("name " + name); ListEnviesService.delete(name); } } + + private ListEnviesDto getListEnviesDto(AppUser user, ListEnvies listEnvie) { + Map map = null; + if (listEnvie.getUsers() != null) { + List emails = new ArrayList<>(); + for (UserShare userShare : listEnvie.getUsers()) { + emails.add(userShare.getEmail()); + } + map = AppUserService.loadAll(emails); + } + return listEnvie.toDto(true, user.getEmail(), map); + } } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java index ec4e237b..2c159c19 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java @@ -13,6 +13,7 @@ import fr.desaintsteban.liste.envies.model.ListEnvies; import fr.desaintsteban.liste.envies.util.EncodeUtils; +import java.util.ArrayList; import java.util.List; public final class EnviesService { @@ -24,16 +25,14 @@ public static List list(AppUser user, String name) { LoadResult loadResult = ofy.load().key(key); //Chargement asynchrone List list = ofy.load().type(Envy.class).ancestor(key).list(); ListEnvies listEnvies = loadResult.now(); - if (listEnvies != null && listEnvies.containsOwner(user.getEmail())) { - removeUserTake(list); - } + removeUserTake(user, listEnvies, list); return list; } public static List listAll() { List list = OfyService.ofy().load().type(Envy.class).list(); //On supprime toujours celui qui a donner le cadeaux - removeUserTake(list); + removeUserTake(null, null, list); return list; } @@ -43,9 +42,7 @@ public static List list(AppUser user, String name, String libelle) { LoadResult loadResult = ofy.load().key(parent); //Chargement asynchrone List list = ofy.load().type(Envy.class).ancestor(parent).filter("label >=", libelle).filter("label <", libelle + "\uFFFD").list(); ListEnvies listEnvies = loadResult.now(); - if (listEnvies != null && listEnvies.containsOwner(user.getEmail())) { - removeUserTake(list); - } + removeUserTake(user, listEnvies, list); return list; } @@ -82,7 +79,7 @@ public void vrun() { Objectify ofy = OfyService.ofy(); Envy saved = ofy.load().key(Key.create(parent, Envy.class, itemId)).now(); Saver saver = ofy.save(); - saved.setUserTake(EncodeUtils.encode(user.getEmail())); + saved.addUserTake(EncodeUtils.encode(user.getEmail())); saver.entity(saved); } }); @@ -97,11 +94,11 @@ public static void addNote(final AppUser user, final Long itemId, final String n OfyService.ofy().transact(new VoidWork() { @Override public void vrun() { - Objectify ofy = OfyService.ofy(); - Envy saved = ofy.load().key(Key.create(parent, Envy.class, itemId)).now(); - Saver saver = ofy.save(); - saved.addNote(user.getName(), user.getEmail(), note.getText()); - saver.entity(saved); + Objectify ofy = OfyService.ofy(); + Envy saved = ofy.load().key(Key.create(parent, Envy.class, itemId)).now(); + Saver saver = ofy.save(); + saved.addNote(user.getName(), user.getEmail(), note.getText()); + saver.entity(saved); } }); } @@ -115,11 +112,11 @@ public static void cancel(final AppUser user, String name, final Long itemId) { OfyService.ofy().transact(new VoidWork() { @Override public void vrun() { - Objectify ofy = OfyService.ofy(); - Envy saved = ofy.load().key(Key.create(parent, Envy.class, itemId)).now(); - Saver saver = ofy.save(); - saved.setUserTake(null); - saver.entity(saved); + Objectify ofy = OfyService.ofy(); + Envy saved = ofy.load().key(Key.create(parent, Envy.class, itemId)).now(); + Saver saver = ofy.save(); + saved.setUserTake(null); + saver.entity(saved); } }); } @@ -133,26 +130,39 @@ public static Envy createOrUpdate(final AppUser user, final String name, final E return OfyService.ofy().transact(new Work() { @Override public Envy run() { - Objectify ofy = OfyService.ofy(); - Saver saver = ofy.save(); - item.setList(parent); - if (item.getId() != null) { - Envy saved = ofy.load().key(Key.create(parent, Envy.class, item.getId())).now(); - item.setUserTake(saved.getUserTake()); - item.setNotes(saved.getNotes()); - } - Key key = saver.entity(item).now(); - return item; + Objectify ofy = OfyService.ofy(); + Saver saver = ofy.save(); + item.setList(parent); + if (item.getId() != null) { + Envy saved = ofy.load().key(Key.create(parent, Envy.class, item.getId())).now(); + item.setUserTake(saved.getUserTake()); + item.setNotes(saved.getNotes()); + } + Key key = saver.entity(item).now(); + return item; } }); } return null; } - private static void removeUserTake(List list) { + private static void removeUserTake(AppUser user, ListEnvies listEnvies, List list) { + List toRemove = new ArrayList<>(); for (Envy envy : list) { - envy.setUserTake(null); //Si l'utilisateur courrant est le propriétaire des envies, on efface le nom de qui lui a offert un cadeau. - envy.setNotes(null); + if (listEnvies == null || user == null) { //Liste globale + envy.setUserTake(null); + envy.setNotes(null); + } + else { + if (listEnvies.containsOwner(user.getEmail())) { //Si l'utilisateur courrant est le propriétaire des envies, on efface le nom de qui lui a offert un cadeau. + envy.setUserTake(null); + envy.setNotes(null); + if (envy.getOwner() != null && !envy.getOwner().equals(user.getEmail()) && listEnvies.containsOwner(envy.getOwner())) { // On supprime les envies ajoutés par d'autres personnes + toRemove.add(envy); + } + } + } } + list.removeAll(toRemove); } } \ No newline at end of file diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java index cae1ece3..70a08bc9 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/servlet/MigrateServlet.java @@ -54,9 +54,9 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se envy.setLabel(envie.getLabel()); envy.setDescription(envie.getComment()); envy.setPrice(envie.getPrice()); - envy.setUrl(envie.getUrl()); + envy.addUrl(envie.getUrl()); envy.setNotes(envie.getNotes()); - envy.setUserTake(envie.getUserTake()); + envy.addUserTake(envie.getUserTake()); listConverted.add(envy); } ofy.save().entities(listConverted); diff --git a/liste-envies-war/src/main/webapp/css/style.css b/liste-envies-war/src/main/webapp/css/style.css index abadc98f..d701cd19 100644 --- a/liste-envies-war/src/main/webapp/css/style.css +++ b/liste-envies-war/src/main/webapp/css/style.css @@ -143,6 +143,11 @@ color: #5f5e5e; } +.links-editor input { + width: 44%; + display: inline-block; +} + .spin { -webkit-animation: spin .4s infinite linear; diff --git a/liste-envies-war/src/main/webapp/index.html b/liste-envies-war/src/main/webapp/index.html index 877129b7..0585e901 100644 --- a/liste-envies-war/src/main/webapp/index.html +++ b/liste-envies-war/src/main/webapp/index.html @@ -47,6 +47,7 @@ {{main.user.name}} -
-
- - -
@@ -181,13 +168,25 @@
Of
- - + + +
+
+ + +
diff --git a/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/EnvieServiceTest.java b/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/EnvieServiceTest.java index 1d9709c5..08b28bbf 100644 --- a/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/EnvieServiceTest.java +++ b/liste-envies-war/src/test/java/fr/desaintsteban/liste/envies/EnvieServiceTest.java @@ -101,7 +101,7 @@ public void testGetSameUser() throws Exception { public void testGetNotSameUser() throws Exception { Envy envie = EnviesService.get(emmanuel, "liste-patrice", livreId); assertThat(envie.getLabel()).isEqualTo("Livre"); - assertThat(envie.getUserTake()).isEqualTo(EncodeUtils.encode("emmanuel@desaintsteban.fr")); + assertThat(envie.getUserTake()).contains(EncodeUtils.encode("emmanuel@desaintsteban.fr")); } @Test @@ -115,7 +115,7 @@ public void testList() throws Exception { public void testListOther() throws Exception { List list = EnviesService.list(emmanuel, "liste-patrice"); assertThat(list).hasSize(2).onProperty("label").contains("Livre", "DVD"); - assertThat(list).hasSize(2).onProperty("userTake").contains(EncodeUtils.encode("emmanuel@desaintsteban.fr")); + //assertThat(list).hasSize(2).onProperty("userTake"). contains(EncodeUtils.encode("emmanuel@desaintsteban.fr")); } @Test From d5c9ce63335c968a9e9d821f8afcc4ab8dc6123f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrice=20de=20Saint=20St=C3=A9ban?= Date: Sun, 4 Dec 2016 04:05:13 +0100 Subject: [PATCH 08/12] =?UTF-8?q?Correction=20erreur=20d=C3=A9s=C3=A9riali?= =?UTF-8?q?sation=20json=20avec=20propri=C3=A9t=C3=A9s=20non=20connues?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/fr/desaintsteban/liste/envies/dto/AppUserDto.java | 5 ++++- .../main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java | 2 ++ .../fr/desaintsteban/liste/envies/dto/ListEnviesDto.java | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/AppUserDto.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/AppUserDto.java index e7418af9..56f30e11 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/AppUserDto.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/AppUserDto.java @@ -1,8 +1,11 @@ package fr.desaintsteban.liste.envies.dto; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; + /** - * Created by sfeir on 30/11/2016. + * */ +@JsonIgnoreProperties(ignoreUnknown = true) public class AppUserDto { private String email; diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java index 5c468eb5..c0ef3181 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java @@ -1,12 +1,14 @@ package fr.desaintsteban.liste.envies.dto; import fr.desaintsteban.liste.envies.model.Link; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; import java.util.List; /** * 01/10/2014. */ +@JsonIgnoreProperties(ignoreUnknown = true) public class EnvyDto { private Long id; diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java index 9b62c687..7a926da7 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/ListEnviesDto.java @@ -1,10 +1,13 @@ package fr.desaintsteban.liste.envies.dto; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; + import java.util.List; /** * */ +@JsonIgnoreProperties(ignoreUnknown = true) public class ListEnviesDto { private String name; From a9c5a192cc6f77d9d43575dc4caeb7e5f58cff20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrice=20de=20Saint=20St=C3=A9ban?= Date: Sun, 4 Dec 2016 04:05:48 +0100 Subject: [PATCH 09/12] =?UTF-8?q?Afficher=20la=20liste=20des=20b=C3=A9n?= =?UTF-8?q?=C3=A9ficiaires=20d'une=20liste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liste/envies/model/ListEnvies.java | 22 ++++++++------ .../liste/envies/model/UserShare.java | 10 ------- .../envies/rest/ListEnviesRestService.java | 29 ++++++++++++++----- .../liste/envies/service/AppUserService.java | 3 +- .../src/main/webapp/templates/envies.html | 3 +- .../src/main/webapp/templates/home.html | 2 +- 6 files changed, 39 insertions(+), 30 deletions(-) diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java index eec25ef8..8ad86b19 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/ListEnvies.java @@ -49,18 +49,22 @@ public ListEnviesDto toDto(boolean convertUsers, String userEmail, Map users = getUsers(); - List usersDto = new ArrayList<>(); - List ownersDto = new ArrayList<>(); - for (UserShare user : users) { - usersDto.add(new UserShareDto(user.getEmail(), user.getType(), userName)); + List users = getUsers(); + List usersDto = new ArrayList<>(); + List ownersDto = new ArrayList<>(); + for (UserShare user : users) { + UserShareDto userShareDto = new UserShareDto(user.getEmail(), user.getType(), userName); + if (user.getType() == UserShareType.OWNER) { + ownersDto.add(userShareDto); } if (convertUsers) { - dto.setUsers(usersDto); + usersDto.add(userShareDto); } - dto.setOwners(ownersDto); - + } + if (convertUsers) { + dto.setUsers(usersDto); + } + dto.setOwners(ownersDto); if (userEmail != null) { dto.setOwner(containsOwner(userEmail)); } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java index 4222329a..e2d9aaa1 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/UserShare.java @@ -8,15 +8,6 @@ public class UserShare { @Index private String email; - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } private UserShareType type; @@ -25,7 +16,6 @@ public UserShare() { public UserShare(String email, UserShareType type) { this.email = email; - this.name = email; this.type = type; } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java index d33e427f..c5e0136d 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/rest/ListEnviesRestService.java @@ -4,6 +4,7 @@ import fr.desaintsteban.liste.envies.model.AppUser; import fr.desaintsteban.liste.envies.model.ListEnvies; import fr.desaintsteban.liste.envies.model.UserShare; +import fr.desaintsteban.liste.envies.model.UserShareType; import fr.desaintsteban.liste.envies.service.AppUserService; import fr.desaintsteban.liste.envies.service.ListEnviesService; import fr.desaintsteban.liste.envies.util.ServletUtils; @@ -16,9 +17,7 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.logging.Logger; @Path("/liste") @@ -33,11 +32,7 @@ public List getListEnvies() { if(user != null){ LOGGER.info("List users"); List list = ListEnviesService.list(user.getEmail()); - ArrayList convertList = new ArrayList<>(); - for (ListEnvies listeEnvy : list) { - convertList.add(listeEnvy.toDto(false, user.getEmail(), null)); - } - return convertList; + return getListEnviesDtos(user, list); } return null; } @@ -142,4 +137,22 @@ private ListEnviesDto getListEnviesDto(AppUser user, ListEnvies listEnvie) { } return listEnvie.toDto(true, user.getEmail(), map); } + + private List getListEnviesDtos(AppUser user, List list) { + ArrayList convertList = new ArrayList<>(); + Set emails = new HashSet<>(); + Map map = null; + for (ListEnvies listeEnvy : list) { + for (UserShare userShare : listeEnvy.getUsers()) { + if (userShare.getType() == UserShareType.OWNER) { + emails.add(userShare.getEmail()); + } + } + } + map = AppUserService.loadAll(emails); + for (ListEnvies listeEnvy : list) { + convertList.add(listeEnvy.toDto(false, user.getEmail(), map)); + } + return convertList; + } } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/AppUserService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/AppUserService.java index 7c87e3cf..234ae301 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/AppUserService.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/AppUserService.java @@ -9,6 +9,7 @@ import com.googlecode.objectify.cmd.Saver; import fr.desaintsteban.liste.envies.model.AppUser; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -48,7 +49,7 @@ public static List list() { return list; } - public static Map loadAll(List emails) { + public static Map loadAll(Collection emails) { return OfyService.ofy().load().type(AppUser.class).ids(emails); } diff --git a/liste-envies-war/src/main/webapp/templates/envies.html b/liste-envies-war/src/main/webapp/templates/envies.html index e38a0d03..61a8f087 100644 --- a/liste-envies-war/src/main/webapp/templates/envies.html +++ b/liste-envies-war/src/main/webapp/templates/envies.html @@ -109,8 +109,9 @@

{{envie.label}}

Offert par {{envie.userTakeUsers}}     +
- +
diff --git a/liste-envies-war/src/main/webapp/templates/home.html b/liste-envies-war/src/main/webapp/templates/home.html index 5f1daab9..4c5ad89a 100644 --- a/liste-envies-war/src/main/webapp/templates/home.html +++ b/liste-envies-war/src/main/webapp/templates/home.html @@ -59,7 +59,7 @@

{{listenvies.title}}

{{listenvies.description}}

-

de {{owner.email}}

+

de {{owner.name}}({{owner.email}})

From 9c85edc07710584377d1e2f1beabdeb526234ad5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrice=20de=20Saint=20St=C3=A9ban?= Date: Sun, 4 Dec 2016 21:23:04 +0100 Subject: [PATCH 10/12] =?UTF-8?q?Am=C3=A9liorations=20de=20l'interface?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/webapp/js/controllers/envieCtrl.js | 12 +- .../src/main/webapp/templates/envies.html | 228 +++++++++--------- 2 files changed, 120 insertions(+), 120 deletions(-) diff --git a/liste-envies-war/src/main/webapp/js/controllers/envieCtrl.js b/liste-envies-war/src/main/webapp/js/controllers/envieCtrl.js index b0c32cd0..d67ffec1 100644 --- a/liste-envies-war/src/main/webapp/js/controllers/envieCtrl.js +++ b/liste-envies-war/src/main/webapp/js/controllers/envieCtrl.js @@ -5,7 +5,7 @@ function EnvieCtrl(envieService, appUserService, listEnviesService, $routeParams vm.name = $routeParams.name; vm.listEnvies = loadListEnvies(vm.name); - vm.loading = false; + vm.loading = true; loadEnvies(); resetForm(); @@ -16,6 +16,9 @@ function EnvieCtrl(envieService, appUserService, listEnviesService, $routeParams }; vm.addEnvie = function (envie) { + if (vm.link) { + vm.addLink(vm.link); + } envieService.save({name:vm.name}, envie, function() { loadEnvies(); gotoEnvie(envie.id); @@ -24,11 +27,8 @@ function EnvieCtrl(envieService, appUserService, listEnviesService, $routeParams }; vm.addNote = function (envie, notetext) { - var note = {text: notetext.text}; - console.log('add Note', note, envie.id); - envieService.addNote({name:vm.name, id: envie.id}, note, function() { loadEnvies(); gotoEnvie(envie.id); @@ -69,6 +69,9 @@ function EnvieCtrl(envieService, appUserService, listEnviesService, $routeParams }; vm.saveListEnvies = function(listEnvies) { + if (vm.newEmail.email) { + vm.shareUser(vm.newEmail); + } listEnviesService.save(listEnvies, function(listEnvies) { vm.listEnvies = listEnvies; $("#share-list").modal("hide"); @@ -115,7 +118,6 @@ function EnvieCtrl(envieService, appUserService, listEnviesService, $routeParams return listEnviesService.get({name:name}); } function loadEnvies() { - vm.loading = true; vm.envies = envieService.query({name: $routeParams.name}); vm.envies.$promise.then(function(list) { vm.loading = false; diff --git a/liste-envies-war/src/main/webapp/templates/envies.html b/liste-envies-war/src/main/webapp/templates/envies.html index 61a8f087..f231178b 100644 --- a/liste-envies-war/src/main/webapp/templates/envies.html +++ b/liste-envies-war/src/main/webapp/templates/envies.html @@ -29,7 +29,6 @@

-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
- {{envie.price}} -

{{envie.label}}

-

- -
-
- - Image Envie - -

{{envie.description}}

-
-    {{link.name||"Plus d'informations"}} +
+
+
+
+ {{envie.price}} +

{{envie.label}}

+

- - - -
-
- -
-
Offert par {{envie.userTakeUsers}}     - - -
- + +
+
+ +
+
Offert par {{envie.userTakeUsers}}     + + +
+ +
-
- -
-
-
-
    -
  • -
    -   {{note.owner}} commented 5 days ago -
    -
    - {{note.text}} -
    -
  • -
-
-
- -
- - -
- - +
+ +
+
+
+
    +
  • +
    +   {{note.owner}} commented 5 days ago +
    +
    + {{note.text}} +
    +
  • +
+
+
+
+
+ + +
+ +
+
+
- -
-
- -
-
-
-
-
-
-
- - +
+
+ +
+
+
+ + +
-
-
-
- +
+
+ -
-
- - - -
- - -
-
- - +
+
-
- -
-
- + +
+
\ No newline at end of file From 6271d54d8a7d95285eb2eaa216be99c1aa638dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrice=20de=20Saint=20St=C3=A9ban?= Date: Sun, 4 Dec 2016 23:39:03 +0100 Subject: [PATCH 11/12] =?UTF-8?q?Possibilit=C3=A9=20d'ajouter=20des=20sugg?= =?UTF-8?q?estions=20dans=20une=20liste=20d'envie=20qui=20ne=20sera=20alor?= =?UTF-8?q?s=20pas=20visibles=20par=20le=20b=C3=A9n=C3=A9ficiaire=20de=20l?= =?UTF-8?q?a=20liste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../liste/envies/dto/EnvyDto.java | 18 ++++++++++++++++++ .../desaintsteban/liste/envies/model/Envy.java | 16 ++++++++++++++++ .../liste/envies/service/EnviesService.java | 13 +++++++++---- liste-envies-war/src/main/webapp/css/style.css | 2 +- .../main/webapp/js/controllers/envieCtrl.js | 9 +++++++++ .../src/main/webapp/templates/envies.html | 16 +++++++++------- 6 files changed, 62 insertions(+), 12 deletions(-) diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java index c0ef3181..2d4a3722 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/dto/EnvyDto.java @@ -12,6 +12,8 @@ public class EnvyDto { private Long id; + private String owner; + private Boolean suggest = false; private String label; private String description; @@ -34,6 +36,22 @@ public void setId(Long id) { this.id = id; } + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public Boolean getSuggest() { + return suggest; + } + + public void setSuggest(Boolean suggest) { + this.suggest = suggest; + } + public String getLabel() { return label; } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java index 5aff19dd..8a8d5a2a 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/model/Envy.java @@ -26,6 +26,10 @@ public class Envy { private Long id; private String owner; + /** + * L'envie à été suggéré par une autre personne + */ + private Boolean suggest = false; private String label; @@ -55,6 +59,8 @@ public Envy(ListEnvies list, String label) { public Envy(EnvyDto envie) { setId(envie.getId()); + setOwner(envie.getOwner()); + setSuggest(envie.getSuggest()); setLabel(envie.getLabel()); setDescription(envie.getDescription()); setPrice(envie.getPrice()); @@ -73,6 +79,8 @@ public Envy(EnvyDto envie) { public EnvyDto toDto() { EnvyDto envie = new EnvyDto(); envie.setId(getId()); + envie.setOwner(getOwner()); + envie.setSuggest(suggest); envie.setLabel(getLabel()); envie.setDescription(getDescription()); envie.setPrice(getPrice()); @@ -119,6 +127,14 @@ public void setOwner(String owner) { this.owner = owner; } + public Boolean getSuggest() { + return suggest; + } + + public void setSuggest(Boolean suggest) { + this.suggest = suggest; + } + public String getLabel() { return label; } diff --git a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java index 2c159c19..4161806f 100644 --- a/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java +++ b/liste-envies-war/src/main/java/fr/desaintsteban/liste/envies/service/EnviesService.java @@ -125,8 +125,8 @@ public void vrun() { public static Envy createOrUpdate(final AppUser user, final String name, final Envy item) { Objectify ofy = OfyService.ofy(); final Key parent = Key.create(ListEnvies.class, name); - ListEnvies listEnvies = ofy.load().key(parent).now(); - if (listEnvies != null && listEnvies.containsOwner(user.getEmail())) { + final ListEnvies listEnvies = ofy.load().key(parent).now(); + if (listEnvies != null) { return OfyService.ofy().transact(new Work() { @Override public Envy run() { @@ -137,7 +137,12 @@ public Envy run() { Envy saved = ofy.load().key(Key.create(parent, Envy.class, item.getId())).now(); item.setUserTake(saved.getUserTake()); item.setNotes(saved.getNotes()); + item.setOwner(saved.getOwner()); + } + if (item.getOwner() == null) { + item.setOwner(user.getEmail()); } + item.setSuggest(!listEnvies.containsOwner(item.getOwner())); Key key = saver.entity(item).now(); return item; } @@ -154,10 +159,10 @@ private static void removeUserTake(AppUser user, ListEnvies listEnvies, List - {{vm.name}} + de {{owner.name}}({{owner.email}}) +