einfache Reservierung möglich

This commit is contained in:
mbremer
2021-07-04 20:02:08 +02:00
parent 825363e491
commit 166871165f
10 changed files with 269 additions and 17 deletions

View File

@@ -0,0 +1,15 @@
package de.mbremer.extension;
import io.quarkus.qute.TemplateExtension;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
@TemplateExtension
public class CommonExtensions {
public static String formatCommon(LocalDate date) {
return date == null ? "" : date.atStartOfDay(ZoneId.systemDefault()).format(DateTimeFormatter.ofPattern("EEEE, d.M.yyyy"));
}
}

View File

@@ -1,19 +1,31 @@
package de.mbremer.kalender;
import de.mbremer.secutity.User;
import io.quarkus.qute.Template;
import io.quarkus.qute.TemplateInstance;
import io.quarkus.security.identity.SecurityIdentity;
import org.jboss.logging.Logger;
import org.jboss.resteasy.annotations.providers.multipart.MultipartForm;
import javax.annotation.security.RolesAllowed;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.persistence.NoResultException;
import javax.transaction.Transactional;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.time.LocalDate;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Path("/kalender")
@RolesAllowed({"USER", "ADMIN"})
public class KalenderResource {
@Inject
Logger log;
@Inject
SecurityIdentity identity;
@Inject
Template kalender;
@@ -21,6 +33,54 @@ public class KalenderResource {
@GET
@Produces(MediaType.TEXT_HTML)
public TemplateInstance kalender() {
return kalender.instance();
User currentUser = User.find("username", identity.getPrincipal().getName()).singleResult();
LocalDate today = LocalDate.now();
LocalDate montag = today.minusDays(today.getDayOfWeek().getValue() - 1);
List<KalenderTag> week0 = getWeek(currentUser, montag);
List<KalenderTag> week1 = getWeek(currentUser, montag.plusDays(7));
List<KalenderTag> week2 = getWeek(currentUser, montag.plusDays(14));
return kalender
.data("today", today)
.data("week0", week0)
.data("week1", week1)
.data("week2", week2);
}
private List<KalenderTag> getWeek(User currentUser, LocalDate start) {
return Stream.iterate(0, i -> i < 5, i -> ++i)
.map(d -> {
LocalDate day = start.plusDays(d);
KalenderTag tag = (KalenderTag) KalenderTag.find("day", day).singleResultOptional().orElse(new KalenderTag(day));
tag.setCurrentUserInOffice(currentUser.equals(tag.getInOffice()));
return tag;
})
.collect(Collectors.toList());
}
@POST
@Transactional
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/inoffice/{day}")
public TemplateInstance update(@PathParam("day") String day, @MultipartForm KalenderTagForm kalenderForm) {
LocalDate dayParsed = LocalDate.parse(day);
User currentUser = User.find("username", identity.getPrincipal().getName()).singleResult();
try {
KalenderTag tag = KalenderTag.find("day", dayParsed).singleResult();
if (kalenderForm.isInOffice() && tag.getInOffice() == null) {
tag.setInOffice(currentUser);
} else if (!kalenderForm.isInOffice() && currentUser.equals(tag.getInOffice())) {
tag.setInOffice(null);
}
} catch (NoResultException e) {
KalenderTag tag = new KalenderTag(dayParsed);
tag.setInOffice(currentUser);
tag.persist();
}
return kalender();
}
}

View File

@@ -3,18 +3,27 @@ package de.mbremer.kalender;
import de.mbremer.secutity.User;
import io.quarkus.hibernate.orm.panache.PanacheEntity;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Entity;
import javax.persistence.OneToOne;
import javax.persistence.Transient;
import java.time.LocalDate;
@Getter
@Setter
@RequiredArgsConstructor
@Entity
public class KalenderTag extends PanacheEntity {
private LocalDate date;
@OneToMany
private LocalDate day;
@OneToOne
private User inOffice;
@Transient
private boolean currentUserInOffice;
public KalenderTag(LocalDate day) {
this.day = day;
}
}

View File

@@ -0,0 +1,16 @@
package de.mbremer.kalender;
import org.jboss.resteasy.annotations.providers.multipart.PartType;
import javax.ws.rs.FormParam;
import javax.ws.rs.core.MediaType;
public class KalenderTagForm {
@FormParam("inoffice")
@PartType(MediaType.TEXT_PLAIN)
String inOffice;
boolean isInOffice() {
return "on".equals(inOffice);
}
}