import type Redis from "ioredis";
import type { RequestUser } from "../auth/auth.guard";
export declare class CalendarController {
    private readonly redis;
    constructor(redis: Redis);
    create(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        description: string | null;
        title: string;
        id: number;
        createdAt: string;
        workspaceId: number;
        createdBy: number;
        channelId: number | null;
        updatedAt: string;
        location: string | null;
        startsAt: string;
        endsAt: string;
        allDay: boolean;
        timezone: string;
        recurrenceRule: string | null;
        attendees: {
            status: "needs_action" | "going" | "maybe" | "declined";
            userId: number;
            respondedAt: string | null;
        }[];
        seriesId: number;
        occurrenceDate: string;
        isOccurrence: boolean;
        isOverride: boolean;
    }>;
    /** Windowed read — `from`/`to` are required, since recurring series are
     * expanded per request rather than materialised. */
    list(user: RequestUser, workspaceId: string, query: unknown): Promise<{
        events: {
            description: string | null;
            title: string;
            id: number;
            createdAt: string;
            workspaceId: number;
            createdBy: number;
            channelId: number | null;
            updatedAt: string;
            location: string | null;
            startsAt: string;
            endsAt: string;
            allDay: boolean;
            timezone: string;
            recurrenceRule: string | null;
            attendees: {
                status: "needs_action" | "going" | "maybe" | "declined";
                userId: number;
                respondedAt: string | null;
            }[];
            seriesId: number;
            occurrenceDate: string;
            isOccurrence: boolean;
            isOverride: boolean;
        }[];
    }>;
    get(user: RequestUser, workspaceId: string, eventId: string): Promise<{
        description: string | null;
        title: string;
        id: number;
        createdAt: string;
        workspaceId: number;
        createdBy: number;
        channelId: number | null;
        updatedAt: string;
        location: string | null;
        startsAt: string;
        endsAt: string;
        allDay: boolean;
        timezone: string;
        recurrenceRule: string | null;
        attendees: {
            status: "needs_action" | "going" | "maybe" | "declined";
            userId: number;
            respondedAt: string | null;
        }[];
        seriesId: number;
        occurrenceDate: string;
        isOccurrence: boolean;
        isOverride: boolean;
    }>;
    update(user: RequestUser, workspaceId: string, eventId: string, body: unknown): Promise<{
        description: string | null;
        title: string;
        id: number;
        createdAt: string;
        workspaceId: number;
        createdBy: number;
        channelId: number | null;
        updatedAt: string;
        location: string | null;
        startsAt: string;
        endsAt: string;
        allDay: boolean;
        timezone: string;
        recurrenceRule: string | null;
        attendees: {
            status: "needs_action" | "going" | "maybe" | "declined";
            userId: number;
            respondedAt: string | null;
        }[];
        seriesId: number;
        occurrenceDate: string;
        isOccurrence: boolean;
        isOverride: boolean;
    }>;
    invite(user: RequestUser, workspaceId: string, eventId: string, body: unknown): Promise<{
        description: string | null;
        title: string;
        id: number;
        createdAt: string;
        workspaceId: number;
        createdBy: number;
        channelId: number | null;
        updatedAt: string;
        location: string | null;
        startsAt: string;
        endsAt: string;
        allDay: boolean;
        timezone: string;
        recurrenceRule: string | null;
        attendees: {
            status: "needs_action" | "going" | "maybe" | "declined";
            userId: number;
            respondedAt: string | null;
        }[];
        seriesId: number;
        occurrenceDate: string;
        isOccurrence: boolean;
        isOverride: boolean;
    }>;
    /** No target user in the route: you can only answer for yourself (see
     * rsvpEvent in libs/messaging/src/calendar.ts). */
    rsvp(user: RequestUser, workspaceId: string, eventId: string, body: unknown): Promise<{
        description: string | null;
        title: string;
        id: number;
        createdAt: string;
        workspaceId: number;
        createdBy: number;
        channelId: number | null;
        updatedAt: string;
        location: string | null;
        startsAt: string;
        endsAt: string;
        allDay: boolean;
        timezone: string;
        recurrenceRule: string | null;
        attendees: {
            status: "needs_action" | "going" | "maybe" | "declined";
            userId: number;
            respondedAt: string | null;
        }[];
        seriesId: number;
        occurrenceDate: string;
        isOccurrence: boolean;
        isOverride: boolean;
    }>;
    remove(user: RequestUser, workspaceId: string, eventId: string, body: unknown): Promise<{
        deleted: boolean;
    }>;
}
//# sourceMappingURL=calendar.controller.d.ts.map