Interface ICustomerRepository

interface ICustomerRepository {
    count(filter?: IFilterOptions): Promise<number>;
    create(
        entity: {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    ): Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >;
    delete(id: string): Promise<void>;
    exists(filter: IFilterOptions): Promise<boolean>;
    findAll(): Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        }[],
    >;
    findByEmail(
        email: string,
    ): Promise<
        | null
        | {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >;
    findById(
        id: string,
    ): Promise<
        | null
        | {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >;
    findByPhone(
        phone: string,
    ): Promise<
        | null
        | {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >;
    findByPreferredBarber(
        barberId: string,
        options?: IQueryOptions,
    ): Promise<
        IPagedResult<
            {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            },
        >,
    >;
    findDuplicates(
        criteria: {
            email?: string;
            firstName?: string;
            lastName?: string;
            phone?: string;
        },
    ): Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        }[],
    >;
    findOne(
        filter: IFilterOptions,
    ): Promise<
        | null
        | {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >;
    findWithFilters(
        filters: IFilterOptions,
        options?: IQueryOptions,
    ): Promise<
        IPagedResult<
            {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            },
        >,
    >;
    getAppointmentHistory(
        customerId: string,
        options?: IQueryOptions,
    ): Promise<
        IPagedResult<
            {
                actualDuration?: number;
                additionalServices?: {
                    notes?: string;
                    price: number;
                    serviceId: string;
                }[];
                barberId: string;
                cancellationReason?: string;
                cancelledAt?: Date;
                cancelledBy?: string;
                completedAt?: Date;
                completedBy?: string;
                createdAt: Date;
                customerId: string;
                endTime: Date;
                feedback?: {
                    cleanliness?: number;
                    comment?: string;
                    rating?: number;
                    serviceQuality?: number;
                    timeliness?: number;
                };
                id: string;
                notes?: string;
                paymentMethod?: "CASH"
                | "CARD"
                | "DIGITAL_WALLET";
                paymentStatus?: "PAID" | "PENDING" | "FAILED";
                reschedulingHistory?: {
                    previousBarberId: string;
                    previousEndTime: Date;
                    previousStartTime: Date;
                    reason?: string;
                    rescheduledAt: Date;
                    rescheduledBy: string;
                }[];
                serviceId: string;
                startTime: Date;
                status: "pending"
                | "confirmed"
                | "cancelled"
                | "completed";
                totalAmount?: number;
                updatedAt: Date;
            },
        >,
    >;
    getCustomersByLastAppointment(
        startDate: Date,
        endDate: Date,
        options?: IQueryOptions,
    ): Promise<
        IPagedResult<
            {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            },
        >,
    >;
    getCustomerStats(
        customerId: string,
    ): Promise<
        {
            averageServiceDuration: number;
            cancelledAppointments: number;
            completedAppointments: number;
            lastVisit?: Date;
            preferredServices: string[];
            totalAppointments: number;
        },
    >;
    getInactiveCustomers(
        inactiveDays: number,
        options?: IQueryOptions,
    ): Promise<
        IPagedResult<
            {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            },
        >,
    >;
    mergeCustomers(
        sourceCustomerId: string,
        targetCustomerId: string,
    ): Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >;
    searchCustomers(
        searchTerm: string,
        options?: IQueryOptions,
    ): Promise<
        IPagedResult<
            {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            },
        >,
    >;
    update(
        id: string,
        entity: {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    ): Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >;
    updateContactInfo(
        customerId: string,
        updates: { email?: string; phone?: string },
    ): Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >;
    updatePreferences(
        customerId: string,
        preferences: { notes?: string; preferredBarber?: string },
    ): Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >;
    validateContactInfo(
        email: string,
        phone: string,
    ): Promise<
        {
            existingCustomer?: {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            };
            isEmailValid: boolean;
            isPhoneValid: boolean;
        },
    >;
}

Hierarchy (View Summary)

Implemented by

Methods

  • Parameters

    • entity: {
          createdAt: Date;
          email: string;
          firstName: string;
          id: string;
          lastName: string;
          phone: string;
          preferences?: { notes?: string; preferredBarber?: string };
          updatedAt: Date;
      }

    Returns Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >

  • Parameters

    • id: string

    Returns Promise<void>

  • Returns Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        }[],
    >

  • Parameters

    • email: string

    Returns Promise<
        | null
        | {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >

  • Parameters

    • id: string

    Returns Promise<
        | null
        | {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >

  • Parameters

    • phone: string

    Returns Promise<
        | null
        | {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >

  • Parameters

    Returns Promise<
        IPagedResult<
            {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            },
        >,
    >

  • Parameters

    • criteria: { email?: string; firstName?: string; lastName?: string; phone?: string }

    Returns Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        }[],
    >

  • Parameters

    Returns Promise<
        | null
        | {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >

  • Parameters

    Returns Promise<
        IPagedResult<
            {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            },
        >,
    >

  • Parameters

    Returns Promise<
        IPagedResult<
            {
                actualDuration?: number;
                additionalServices?: { notes?: string; price: number; serviceId: string }[];
                barberId: string;
                cancellationReason?: string;
                cancelledAt?: Date;
                cancelledBy?: string;
                completedAt?: Date;
                completedBy?: string;
                createdAt: Date;
                customerId: string;
                endTime: Date;
                feedback?: {
                    cleanliness?: number;
                    comment?: string;
                    rating?: number;
                    serviceQuality?: number;
                    timeliness?: number;
                };
                id: string;
                notes?: string;
                paymentMethod?: "CASH"
                | "CARD"
                | "DIGITAL_WALLET";
                paymentStatus?: "PAID" | "PENDING" | "FAILED";
                reschedulingHistory?: {
                    previousBarberId: string;
                    previousEndTime: Date;
                    previousStartTime: Date;
                    reason?: string;
                    rescheduledAt: Date;
                    rescheduledBy: string;
                }[];
                serviceId: string;
                startTime: Date;
                status: "pending"
                | "confirmed"
                | "cancelled"
                | "completed";
                totalAmount?: number;
                updatedAt: Date;
            },
        >,
    >

  • Parameters

    Returns Promise<
        IPagedResult<
            {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            },
        >,
    >

  • Parameters

    • customerId: string

    Returns Promise<
        {
            averageServiceDuration: number;
            cancelledAppointments: number;
            completedAppointments: number;
            lastVisit?: Date;
            preferredServices: string[];
            totalAppointments: number;
        },
    >

  • Parameters

    Returns Promise<
        IPagedResult<
            {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            },
        >,
    >

  • Parameters

    • sourceCustomerId: string
    • targetCustomerId: string

    Returns Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >

  • Parameters

    Returns Promise<
        IPagedResult<
            {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            },
        >,
    >

  • Parameters

    • id: string
    • entity: {
          createdAt: Date;
          email: string;
          firstName: string;
          id: string;
          lastName: string;
          phone: string;
          preferences?: { notes?: string; preferredBarber?: string };
          updatedAt: Date;
      }

    Returns Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >

  • Parameters

    • customerId: string
    • updates: { email?: string; phone?: string }

    Returns Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >

  • Parameters

    • customerId: string
    • preferences: { notes?: string; preferredBarber?: string }

    Returns Promise<
        {
            createdAt: Date;
            email: string;
            firstName: string;
            id: string;
            lastName: string;
            phone: string;
            preferences?: { notes?: string; preferredBarber?: string };
            updatedAt: Date;
        },
    >

  • Parameters

    • email: string
    • phone: string

    Returns Promise<
        {
            existingCustomer?: {
                createdAt: Date;
                email: string;
                firstName: string;
                id: string;
                lastName: string;
                phone: string;
                preferences?: { notes?: string; preferredBarber?: string };
                updatedAt: Date;
            };
            isEmailValid: boolean;
            isPhoneValid: boolean;
        },
    >