blob: 45c7f4d9d84cbbb343c40c319bdd51faec63304e [file] [log] [blame]
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +01001package eu.mulk.mulkcms2.benki.lazychat;
2
Matthias Andreas Benkarde3bc3ee2023-08-06 16:21:11 +02003import static jakarta.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
4import static jakarta.ws.rs.core.MediaType.MULTIPART_FORM_DATA;
5import static jakarta.ws.rs.core.MediaType.WILDCARD;
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +02006
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +02007import eu.mulk.mulkcms2.benki.posts.Post;
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +02008import eu.mulk.mulkcms2.benki.posts.PostFilter;
9import eu.mulk.mulkcms2.benki.posts.PostResource;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010010import io.quarkus.security.Authenticated;
Matthias Andreas Benkard37dce402023-09-06 13:51:43 +020011import io.smallrye.common.annotation.Blocking;
Matthias Andreas Benkarde3bc3ee2023-08-06 16:21:11 +020012import jakarta.transaction.Transactional;
13import jakarta.validation.constraints.NotNull;
14import jakarta.ws.rs.Consumes;
15import jakarta.ws.rs.ForbiddenException;
16import jakarta.ws.rs.FormParam;
17import jakarta.ws.rs.NotFoundException;
18import jakarta.ws.rs.POST;
19import jakarta.ws.rs.Path;
20import jakarta.ws.rs.PathParam;
21import jakarta.ws.rs.Produces;
22import jakarta.ws.rs.core.Response;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010023import java.net.URI;
24import java.net.URISyntaxException;
Matthias Andreas Benkardcf0fe882020-04-19 18:33:37 +020025import java.security.NoSuchAlgorithmException;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010026import java.time.OffsetDateTime;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020027import java.util.Objects;
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010028
29@Path("/lazychat")
Matthias Andreas Benkard37dce402023-09-06 13:51:43 +020030@Blocking
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020031public class LazychatResource extends PostResource {
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010032
Matthias Andreas Benkardcf0fe882020-04-19 18:33:37 +020033 public LazychatResource() throws NoSuchAlgorithmException {
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020034 super(PostFilter.LAZYCHAT_MESSAGES_ONLY, "Lazy Chat");
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010035 }
36
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010037 @POST
38 @Transactional
39 @Authenticated
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +020040 @Produces(WILDCARD)
41 @Consumes({APPLICATION_FORM_URLENCODED, MULTIPART_FORM_DATA})
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010042 public Response postMessage(
Matthias Andreas Benkard1e7674c2020-04-18 20:28:51 +020043 @FormParam("text") @NotNull String text,
44 @FormParam("visibility") @NotNull Post.Visibility visibility)
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010045 throws URISyntaxException {
46
Matthias Andreas Benkard1e7674c2020-04-18 20:28:51 +020047 var user = Objects.requireNonNull(getCurrentUser());
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010048
49 var message = new LazychatMessage();
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010050 message.owner = user;
51 message.date = OffsetDateTime.now();
52
Matthias Andreas Benkardb4a5bfd2023-08-06 21:57:45 +020053 message.persist();
54 message.setContent(text);
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010055
Matthias Andreas Benkardb4a5bfd2023-08-06 21:57:45 +020056 assignPostTargets(visibility, user, message);
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010057
58 return Response.seeOther(new URI("/lazychat")).build();
59 }
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020060
61 @POST
62 @Transactional
63 @Authenticated
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +020064 @Produces(WILDCARD)
65 @Consumes({APPLICATION_FORM_URLENCODED, MULTIPART_FORM_DATA})
Matthias Andreas Benkardb6081272020-04-18 15:48:04 +020066 @Path("{id}/edit")
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020067 public Response patchMessage(
68 @PathParam("id") int id,
69 @FormParam("text") String text,
70 @FormParam("visibility") Post.Visibility visibility)
71 throws URISyntaxException {
72
Matthias Andreas Benkard1e7674c2020-04-18 20:28:51 +020073 var user = Objects.requireNonNull(getCurrentUser());
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020074
75 var message = getSession().byId(LazychatMessage.class).load(id);
76
77 if (message == null) {
78 throw new NotFoundException();
79 }
80
Matthias Andreas Benkardcf0fe882020-04-19 18:33:37 +020081 if (message.owner == null || !Objects.equals(message.owner.id, user.id)) {
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020082 throw new ForbiddenException();
83 }
84
Matthias Andreas Benkardd5498fc2020-08-23 21:51:00 +020085 message.setContent(text);
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020086
87 assignPostTargets(visibility, user, message);
88
89 return Response.seeOther(new URI("/lazychat")).build();
90 }
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010091}