Interface IServiceRepository

interface IServiceRepository {
    count(filter?: IFilterOptions): Promise<number>;
    create(
        entity: {
            category:
                | "HAIRCUT"
                | "BEARD"
                | "STYLING"
                | "COLORING"
                | "TREATMENT"
                | "PACKAGE";
            createdAt: Date;
            description: string;
            duration: number;
            id: string;
            isActive: boolean;
            name: string;
            packageDetails?: {
                savings: number;
                services: {
                    individualPrice: number;
                    quantity: number;
                    serviceId: string;
                    serviceName: string;
                }[];
                totalValue: number;
            };
            price: number;
            priceHistory?: { effectiveUntil: Date; price: number }[];
            requiresConsultation: boolean;
            updatedAt: Date;
        },
    ): Promise<
        {
            category: | "HAIRCUT"
            | "BEARD"
            | "STYLING"
            | "COLORING"
            | "TREATMENT"
            | "PACKAGE";
            createdAt: Date;
            description: string;
            duration: number;
            id: string;
            isActive: boolean;
            name: string;
            packageDetails?: {
                savings: number;
                services: {
                    individualPrice: number;
                    quantity: number;
                    serviceId: string;
                    serviceName: string;
                }[];
                totalValue: number;
            };
            price: number;
            priceHistory?: { effectiveUntil: Date; price: number }[];
            requiresConsultation: boolean;
            updatedAt: Date;
        },
    >;
    createServicePackage(
        name: string,
        description: string,
        services: { quantity: number; serviceId: string }[],
        price: number,
    ): Promise<ServiceEntity>;
    delete(id: string): Promise<void>;
    exists(filter: IFilterOptions): Promise<boolean>;
    findActiveServices(
        options?: IQueryOptions,
    ): Promise<IPagedResult<ServiceEntity>>;
    findAll(): Promise<
        {
            category: | "HAIRCUT"
            | "BEARD"
            | "STYLING"
            | "COLORING"
            | "TREATMENT"
            | "PACKAGE";
            createdAt: Date;
            description: string;
            duration: number;
            id: string;
            isActive: boolean;
            name: string;
            packageDetails?: {
                savings: number;
                services: {
                    individualPrice: number;
                    quantity: number;
                    serviceId: string;
                    serviceName: string;
                }[];
                totalValue: number;
            };
            price: number;
            priceHistory?: { effectiveUntil: Date; price: number }[];
            requiresConsultation: boolean;
            updatedAt: Date;
        }[],
    >;
    findByCategory(
        category:
            | "HAIRCUT"
            | "BEARD"
            | "STYLING"
            | "COLORING"
            | "TREATMENT"
            | "PACKAGE",
        options?: IQueryOptions,
    ): Promise<IPagedResult<ServiceEntity>>;
    findByDuration(
        minDuration: number,
        maxDuration: number,
        options?: IQueryOptions,
    ): Promise<IPagedResult<ServiceEntity>>;
    findById(id: string): Promise<null | ServiceEntity>;
    findByPriceRange(
        minPrice: number,
        maxPrice: number,
        options?: IQueryOptions,
    ): Promise<IPagedResult<ServiceEntity>>;
    findCompatibleServices(serviceId: string): Promise<ServiceEntity[]>;
    findOne(
        filter: IFilterOptions,
    ): Promise<
        | null
        | {
            category: | "HAIRCUT"
            | "BEARD"
            | "STYLING"
            | "COLORING"
            | "TREATMENT"
            | "PACKAGE";
            createdAt: Date;
            description: string;
            duration: number;
            id: string;
            isActive: boolean;
            name: string;
            packageDetails?: {
                savings: number;
                services: {
                    individualPrice: number;
                    quantity: number;
                    serviceId: string;
                    serviceName: string;
                }[];
                totalValue: number;
            };
            price: number;
            priceHistory?: { effectiveUntil: Date; price: number }[];
            requiresConsultation: boolean;
            updatedAt: Date;
        },
    >;
    findRequiringConsultation(
        options?: IQueryOptions,
    ): Promise<IPagedResult<ServiceEntity>>;
    findWithFilters(
        filters: IFilterOptions,
        options?: IQueryOptions,
    ): Promise<
        IPagedResult<
            {
                category: | "HAIRCUT"
                | "BEARD"
                | "STYLING"
                | "COLORING"
                | "TREATMENT"
                | "PACKAGE";
                createdAt: Date;
                description: string;
                duration: number;
                id: string;
                isActive: boolean;
                name: string;
                packageDetails?: {
                    savings: number;
                    services: {
                        individualPrice: number;
                        quantity: number;
                        serviceId: string;
                        serviceName: string;
                    }[];
                    totalValue: number;
                };
                price: number;
                priceHistory?: { effectiveUntil: Date; price: number }[];
                requiresConsultation: boolean;
                updatedAt: Date;
            },
        >,
    >;
    getPopularServices(
        startDate: Date,
        endDate: Date,
        limit?: number,
    ): Promise<
        { bookingCount: number; revenue: number; service: ServiceEntity }[],
    >;
    getServiceAvailability(
        serviceId: string,
        date: Date,
    ): Promise<{ availableSlots: Date[]; barberId: string }[]>;
    getServiceStatistics(
        serviceId: string,
    ): Promise<
        {
            averageRating?: number;
            popularTimeSlots: {
                bookingCount: number;
                dayOfWeek: number;
                hour: number;
            }[];
            totalBookings: number;
            totalRevenue: number;
        },
    >;
    searchServices(
        searchTerm: string,
        options?: IQueryOptions,
    ): Promise<IPagedResult<ServiceEntity>>;
    toggleServiceStatus(
        serviceId: string,
        isActive: boolean,
    ): Promise<ServiceEntity>;
    update(
        id: string,
        entity: {
            category:
                | "HAIRCUT"
                | "BEARD"
                | "STYLING"
                | "COLORING"
                | "TREATMENT"
                | "PACKAGE";
            createdAt: Date;
            description: string;
            duration: number;
            id: string;
            isActive: boolean;
            name: string;
            packageDetails?: {
                savings: number;
                services: {
                    individualPrice: number;
                    quantity: number;
                    serviceId: string;
                    serviceName: string;
                }[];
                totalValue: number;
            };
            price: number;
            priceHistory?: { effectiveUntil: Date; price: number }[];
            requiresConsultation: boolean;
            updatedAt: Date;
        },
    ): Promise<
        {
            category: | "HAIRCUT"
            | "BEARD"
            | "STYLING"
            | "COLORING"
            | "TREATMENT"
            | "PACKAGE";
            createdAt: Date;
            description: string;
            duration: number;
            id: string;
            isActive: boolean;
            name: string;
            packageDetails?: {
                savings: number;
                services: {
                    individualPrice: number;
                    quantity: number;
                    serviceId: string;
                    serviceName: string;
                }[];
                totalValue: number;
            };
            price: number;
            priceHistory?: { effectiveUntil: Date; price: number }[];
            requiresConsultation: boolean;
            updatedAt: Date;
        },
    >;
    updateDuration(
        serviceId: string,
        newDuration: number,
    ): Promise<ServiceEntity>;
    updatePricing(
        serviceId: string,
        newPrice: number,
        effectiveDate?: Date,
    ): Promise<ServiceEntity>;
}

Hierarchy

Implemented by

Methods

  • Parameters

    Returns Promise<number>

  • Parameters

    • entity: {
          category:
              | "HAIRCUT"
              | "BEARD"
              | "STYLING"
              | "COLORING"
              | "TREATMENT"
              | "PACKAGE";
          createdAt: Date;
          description: string;
          duration: number;
          id: string;
          isActive: boolean;
          name: string;
          packageDetails?: {
              savings: number;
              services: {
                  individualPrice: number;
                  quantity: number;
                  serviceId: string;
                  serviceName: string;
              }[];
              totalValue: number;
          };
          price: number;
          priceHistory?: { effectiveUntil: Date; price: number }[];
          requiresConsultation: boolean;
          updatedAt: Date;
      }

    Returns Promise<
        {
            category: | "HAIRCUT"
            | "BEARD"
            | "STYLING"
            | "COLORING"
            | "TREATMENT"
            | "PACKAGE";
            createdAt: Date;
            description: string;
            duration: number;
            id: string;
            isActive: boolean;
            name: string;
            packageDetails?: {
                savings: number;
                services: {
                    individualPrice: number;
                    quantity: number;
                    serviceId: string;
                    serviceName: string;
                }[];
                totalValue: number;
            };
            price: number;
            priceHistory?: { effectiveUntil: Date; price: number }[];
            requiresConsultation: boolean;
            updatedAt: Date;
        },
    >

  • Parameters

    • name: string
    • description: string
    • services: { quantity: number; serviceId: string }[]
    • price: number

    Returns Promise<ServiceEntity>

  • Parameters

    • id: string

    Returns Promise<void>

  • Parameters

    Returns Promise<boolean>

  • Returns Promise<
        {
            category: | "HAIRCUT"
            | "BEARD"
            | "STYLING"
            | "COLORING"
            | "TREATMENT"
            | "PACKAGE";
            createdAt: Date;
            description: string;
            duration: number;
            id: string;
            isActive: boolean;
            name: string;
            packageDetails?: {
                savings: number;
                services: {
                    individualPrice: number;
                    quantity: number;
                    serviceId: string;
                    serviceName: string;
                }[];
                totalValue: number;
            };
            price: number;
            priceHistory?: { effectiveUntil: Date; price: number }[];
            requiresConsultation: boolean;
            updatedAt: Date;
        }[],
    >

  • Parameters

    • category: "HAIRCUT" | "BEARD" | "STYLING" | "COLORING" | "TREATMENT" | "PACKAGE"
    • Optionaloptions: IQueryOptions

    Returns Promise<IPagedResult<ServiceEntity>>

  • Parameters

    • id: string

    Returns Promise<null | ServiceEntity>

  • Parameters

    • serviceId: string

    Returns Promise<ServiceEntity[]>

  • Parameters

    Returns Promise<
        | null
        | {
            category: | "HAIRCUT"
            | "BEARD"
            | "STYLING"
            | "COLORING"
            | "TREATMENT"
            | "PACKAGE";
            createdAt: Date;
            description: string;
            duration: number;
            id: string;
            isActive: boolean;
            name: string;
            packageDetails?: {
                savings: number;
                services: {
                    individualPrice: number;
                    quantity: number;
                    serviceId: string;
                    serviceName: string;
                }[];
                totalValue: number;
            };
            price: number;
            priceHistory?: { effectiveUntil: Date; price: number }[];
            requiresConsultation: boolean;
            updatedAt: Date;
        },
    >

  • Parameters

    Returns Promise<
        IPagedResult<
            {
                category: | "HAIRCUT"
                | "BEARD"
                | "STYLING"
                | "COLORING"
                | "TREATMENT"
                | "PACKAGE";
                createdAt: Date;
                description: string;
                duration: number;
                id: string;
                isActive: boolean;
                name: string;
                packageDetails?: {
                    savings: number;
                    services: {
                        individualPrice: number;
                        quantity: number;
                        serviceId: string;
                        serviceName: string;
                    }[];
                    totalValue: number;
                };
                price: number;
                priceHistory?: { effectiveUntil: Date; price: number }[];
                requiresConsultation: boolean;
                updatedAt: Date;
            },
        >,
    >

  • Parameters

    • startDate: Date
    • endDate: Date
    • Optionallimit: number

    Returns Promise<{ bookingCount: number; revenue: number; service: ServiceEntity }[]>

  • Parameters

    • serviceId: string
    • date: Date

    Returns Promise<{ availableSlots: Date[]; barberId: string }[]>

  • Parameters

    • serviceId: string

    Returns Promise<
        {
            averageRating?: number;
            popularTimeSlots: {
                bookingCount: number;
                dayOfWeek: number;
                hour: number;
            }[];
            totalBookings: number;
            totalRevenue: number;
        },
    >

  • Parameters

    • serviceId: string
    • isActive: boolean

    Returns Promise<ServiceEntity>

  • Parameters

    • id: string
    • entity: {
          category:
              | "HAIRCUT"
              | "BEARD"
              | "STYLING"
              | "COLORING"
              | "TREATMENT"
              | "PACKAGE";
          createdAt: Date;
          description: string;
          duration: number;
          id: string;
          isActive: boolean;
          name: string;
          packageDetails?: {
              savings: number;
              services: {
                  individualPrice: number;
                  quantity: number;
                  serviceId: string;
                  serviceName: string;
              }[];
              totalValue: number;
          };
          price: number;
          priceHistory?: { effectiveUntil: Date; price: number }[];
          requiresConsultation: boolean;
          updatedAt: Date;
      }

    Returns Promise<
        {
            category: | "HAIRCUT"
            | "BEARD"
            | "STYLING"
            | "COLORING"
            | "TREATMENT"
            | "PACKAGE";
            createdAt: Date;
            description: string;
            duration: number;
            id: string;
            isActive: boolean;
            name: string;
            packageDetails?: {
                savings: number;
                services: {
                    individualPrice: number;
                    quantity: number;
                    serviceId: string;
                    serviceName: string;
                }[];
                totalValue: number;
            };
            price: number;
            priceHistory?: { effectiveUntil: Date; price: number }[];
            requiresConsultation: boolean;
            updatedAt: Date;
        },
    >

  • Parameters

    • serviceId: string
    • newDuration: number

    Returns Promise<ServiceEntity>

  • Parameters

    • serviceId: string
    • newPrice: number
    • OptionaleffectiveDate: Date

    Returns Promise<ServiceEntity>