Subversion Repositories SmartDukaan

Rev

Rev 35626 | View as "text/plain" | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.spice.profitmandi.dao.repository.cs;

import com.spice.profitmandi.dao.entity.auth.AuthUser;
import com.spice.profitmandi.dao.entity.cs.Ticket;
import com.spice.profitmandi.dao.entity.cs.TicketSearchType;
import com.spice.profitmandi.dao.entity.fofo.ActivityType;
import com.spice.profitmandi.dao.enumuration.cs.EscalationType;
import com.spice.profitmandi.dao.model.TicketViewModel;
import org.springframework.stereotype.Repository;

import javax.swing.*;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Optional;

@Repository
public interface TicketRepository {
    void persist(Ticket ticket);

    Ticket selectById(int ticketId);

    List<Ticket> selectAllByAssignee(int assigneeId, Optional<Boolean> resolved, int offset, int limit);

    List<Ticket> selectAllByCreator(int creatorId, Optional<Boolean> resolved, SortOrder sortOrder);

    List<Ticket> selectAll(int offset, int limit, Optional<Boolean> resolved);

    List<Ticket> selectAllEscalated(Optional<Boolean> resolved, int offset, int limit);

    List<Ticket> selectAllEscalatedByCreator(int fofoId, Optional<Boolean> resolved, int offset, int limit);

    List<Ticket> selectAllEscalatedByAssignee(int assigneId, Optional<Boolean> resolved, int offset, int limit);

    public long selectAllCountByCreator(int creatorId, Optional<Boolean> resolved);

    public List<Ticket> selectAllByEscalatedUserType(int authUser, EscalationType escalationType, int offset, int limit);

    public long selectAllCountByEscalatedUserType(int authUser, EscalationType escalationType);

    public Long selectAllCount();

    public List<Ticket> selectAllNotClosedTickets();

    public List<Ticket> selectAllOpenTicketByRetailer(int fofoId);

    public Map<Integer, Long> selectAllOpenTicketsGroupByRetailer();

    public List<Ticket> selectAllByAssignee(int assigneeId, Optional<Boolean> resolved, SortOrder sortOrder, TicketSearchType ticketSearchType, int searchTerm);

    public List<Ticket> selectAllByTicketIds(List<Integer> ticketIds);

    public long selectAllCountByAssignee(int assigneeId, Optional<Boolean> resolved, TicketSearchType ticketSearchType, int searchTerm);

    public List<Ticket> selectAllManagerTicket(int authUserId, SortOrder sortOrder, Optional<Boolean> resolved, TicketSearchType ticketSearchType, int searchTerm);

    public long selectAllCountByManagerTicket(int authUserId, Optional<Boolean> resolved, TicketSearchType ticketSearchType, int searchTerm);

    public List<Ticket> selectAllResolvedMarkedTicketByCreator(int assigneeId);

    public List<Ticket> selectAllNotClosedTicketsWithStatus(ActivityType activityType);

    public Map<AuthUser, Long> selectAllAuthUserTicketCount(Optional<Boolean> resolved);

    List<Ticket> selectAllOpenTickets(List<Integer> fofoIds);

    List<Ticket> selectAllOpenTickets();

    public List<TicketViewModel> selectRecentClosedTicket(int fofoId, LocalDateTime startDate);

    /**
     * Select all tickets for CRM users with status and search filtering.
     * CRM users need to see ALL tickets to respond to partner communications.
     */
    List<Ticket> selectAllTickets(Optional<Boolean> resolved, SortOrder sortOrder, TicketSearchType ticketSearchType, int searchTerm);

    long selectAllTicketsCount(Optional<Boolean> resolved, TicketSearchType ticketSearchType, int searchTerm);

    /**
     * Select all tickets with pagination, visibility filtering, and text search.
     * Visibility logic: Show ticket if subcategory.visibility=true OR subcategory.categoryId is in userCategoryIds.
     * Search covers: ticket ID, partner name, category name, subcategory name, creator name.
     */
    List<Ticket> selectAllTicketsPaginated(
            Optional<Boolean> resolved,
            SortOrder sortOrder,
            TicketSearchType searchType,
            int searchTerm,
            String searchText,
            List<Integer> userCategoryIds,
            int offset,
            int limit
    );

    long selectAllTicketsPaginatedCount(
            Optional<Boolean> resolved,
            TicketSearchType searchType,
            int searchTerm,
            String searchText,
            List<Integer> userCategoryIds
    );

    /**
     * Select tickets assigned to a user with pagination and text search.
     */
    List<Ticket> selectAllByAssigneePaginated(
            int assigneeId,
            Optional<Boolean> resolved,
            SortOrder sortOrder,
            TicketSearchType searchType,
            int searchTerm,
            String searchText,
            int offset,
            int limit
    );

    long selectAllByAssigneePaginatedCount(
            int assigneeId,
            Optional<Boolean> resolved,
            TicketSearchType searchType,
            int searchTerm,
            String searchText
    );

    /**
     * Select manager tickets with pagination and text search.
     */
    List<Ticket> selectAllManagerTicketPaginated(
            int authUserId,
            SortOrder sortOrder,
            Optional<Boolean> resolved,
            TicketSearchType searchType,
            int searchTerm,
            String searchText,
            int offset,
            int limit
    );

    long selectAllCountByManagerTicketPaginated(
            int authUserId,
            Optional<Boolean> resolved,
            TicketSearchType searchType,
            int searchTerm,
            String searchText
    );

    /**
     * Get open ticket counts grouped by fofoId for specific fofoIds.
     * More efficient than fetching all tickets for all retailers.
     */
    Map<Integer, Long> selectOpenTicketsCountByFofoIds(List<Integer> fofoIds);

    List<Ticket> selectOpenEscalatedTicketsByAuthIds(List<Integer> authIds);
}