blob: 4f9a9fbfd63ee20a3c985cdf07e9a2120ccf73b7 [file] [log] [blame]
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +01001package eu.mulk.mulkcms2.benki.lazychat;
2
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +02003import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
4import static javax.ws.rs.core.MediaType.MULTIPART_FORM_DATA;
5import static javax.ws.rs.core.MediaType.WILDCARD;
6
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 Benkard12c7cac2020-03-26 07:19:45 +010011import java.net.URI;
12import java.net.URISyntaxException;
13import java.time.OffsetDateTime;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020014import java.util.Objects;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010015import javax.transaction.Transactional;
Matthias Andreas Benkard1e7674c2020-04-18 20:28:51 +020016import javax.validation.constraints.NotNull;
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +020017import javax.ws.rs.Consumes;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020018import javax.ws.rs.ForbiddenException;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010019import javax.ws.rs.FormParam;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020020import javax.ws.rs.NotFoundException;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010021import javax.ws.rs.POST;
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010022import javax.ws.rs.Path;
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020023import javax.ws.rs.PathParam;
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +020024import javax.ws.rs.Produces;
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010025import javax.ws.rs.core.Response;
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010026
27@Path("/lazychat")
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020028public class LazychatResource extends PostResource {
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010029
Matthias Andreas Benkard4940b292020-03-29 18:41:07 +020030 public LazychatResource() {
31 super(PostFilter.LAZYCHAT_MESSAGES_ONLY, "Lazy Chat");
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010032 }
33
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010034 @POST
35 @Transactional
36 @Authenticated
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +020037 @Produces(WILDCARD)
38 @Consumes({APPLICATION_FORM_URLENCODED, MULTIPART_FORM_DATA})
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010039 public Response postMessage(
Matthias Andreas Benkard1e7674c2020-04-18 20:28:51 +020040 @FormParam("text") @NotNull String text,
41 @FormParam("visibility") @NotNull Post.Visibility visibility)
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010042 throws URISyntaxException {
43
Matthias Andreas Benkard1e7674c2020-04-18 20:28:51 +020044 var user = Objects.requireNonNull(getCurrentUser());
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010045
46 var message = new LazychatMessage();
47 message.content = text;
48 message.format = "markdown";
49 message.owner = user;
50 message.date = OffsetDateTime.now();
51
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020052 assignPostTargets(visibility, user, message);
Matthias Andreas Benkard12c7cac2020-03-26 07:19:45 +010053
54 message.persistAndFlush();
55
56 return Response.seeOther(new URI("/lazychat")).build();
57 }
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020058
59 @POST
60 @Transactional
61 @Authenticated
Matthias Andreas Benkard593765d2020-04-18 20:44:07 +020062 @Produces(WILDCARD)
63 @Consumes({APPLICATION_FORM_URLENCODED, MULTIPART_FORM_DATA})
Matthias Andreas Benkardb6081272020-04-18 15:48:04 +020064 @Path("{id}/edit")
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020065 public Response patchMessage(
66 @PathParam("id") int id,
67 @FormParam("text") String text,
68 @FormParam("visibility") Post.Visibility visibility)
69 throws URISyntaxException {
70
Matthias Andreas Benkard1e7674c2020-04-18 20:28:51 +020071 var user = Objects.requireNonNull(getCurrentUser());
Matthias Andreas Benkard06e6c812020-04-13 17:01:35 +020072
73 var message = getSession().byId(LazychatMessage.class).load(id);
74
75 if (message == null) {
76 throw new NotFoundException();
77 }
78
79 if (!Objects.equals(message.owner.id, user.id)) {
80 throw new ForbiddenException();
81 }
82
83 message.content = text;
84 message.format = "markdown";
85
86 assignPostTargets(visibility, user, message);
87
88 return Response.seeOther(new URI("/lazychat")).build();
89 }
Matthias Andreas Benkard94b5e7b2020-02-09 20:02:20 +010090}