package de.flower.rmt.service; import com.mysema.query.types.EntityPath; import de.flower.rmt.model.db.entity.Team; import de.flower.rmt.model.db.entity.User; import de.flower.rmt.model.db.entity.event.Event; import de.flower.rmt.model.db.type.EventType; import de.flower.rmt.model.dto.Notification; import org.joda.time.DateTime; import javax.persistence.metamodel.Attribute; import java.util.List; /** * @author flowerrrr */ public interface IEventManager { /** * Saves or updates an event. * * @param entity */ void save(Event entity); /** * Creates a new event an also creates invitations for all players of the * team of the event. * * @param entity * @param createInvitations */ void create(Event entity, boolean createInvitations); Event loadById(Long id, Attribute... attributes); long getNumEventsByUser(final User user); List<Event> findAll(EntityPath<?>... attributes); List<Event> findAll(int page, int size, final User user, EntityPath<?>... attributes); Event findNextEvent(User user); List<Event> findAllByDateRange(DateTime start, DateTime end, EntityPath<?>... attributes); List<Event> findAllByDateRangeAndUser(DateTime start, DateTime end, final User user, EntityPath<?>... attributes); /** * Returns all events scheduled inside the next <code>hours</code>. * Calculated against Event.date - Event.time (not kickOff). * Does not return canceled events. */ List<Event> findAllNextNHours(int hours); /** * Hard deletes an event and all invitations. * * @param id */ void delete(Long id); /** * Soft deletes all events of the team. * Soft in case deletion of team was human error to be able to recover. * * @param entity */ void deleteByTeam(Team entity); Event newInstance(EventType eventType); void sendInvitationMail(Long id, Notification notification); boolean isEventClosed(Event event); void cancelEvent(Long id); Event copyOf(Event event); }