package de.flower.rmt.repository;
import de.flower.rmt.model.db.entity.Invitation;
import de.flower.rmt.model.db.entity.event.Event;
import de.flower.rmt.model.db.type.RSVPStatus;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.Date;
import java.util.List;
/**
* Uses Spring Data JPA library to define a XXXRepistory
* interface that Spring will create a Bean object
* with CRUD methods for a XXX.
*
* @author flowerrrr
*/
public interface IInvitationRepo extends IRepository<Invitation, Long> {
// List<Invitation> findAllByEventAndStatusOrderByDateAsc(Event event, RSVPStatus rsvpStatus);
@Query("select count(r) from Invitation r where r.event = :event and r.status = :status")
Long numByEventAndStatus(@Param("event") Event event, @Param("status") RSVPStatus rsvpStatus);
// TODO (flowerrrr - 22.05.12) match addresslist also against secondary email
@Modifying
@Query("update Invitation i set i.invitationSent = true, i.invitationSentDate = :date where i.event = :event and i.user in (select u from User u where u.email in (:addressList))")
void markInvitationSent(@Param("event") Event event, @Param("addressList") List<String> addressList, @Param("date") Date date);
@Modifying
@Query("update Invitation i set i.noResponseReminderSent = true, i.invitationSentDate = :date where i in (:invitations)")
void markNoResponseReminderSent(@Param("invitations") List<Invitation> invitations, @Param("date") Date date);
@Modifying
@Query("update Invitation i set i.unsureReminderSent = true, i.invitationSentDate = :date where i in (:invitations)")
void markUnsureReminderSent(@Param("invitations") List<Invitation> invitations, @Param("date") Date date);
}