3544 lines
106 KiB
JSON
3544 lines
106 KiB
JSON
[
|
|
{
|
|
"path": ".dockerignore",
|
|
"sha256": "05e792a87ca350e1cc48174dda1ea1126ee13a5f8fe9d549d2b033382071e7a9",
|
|
"byteCount": 68,
|
|
"lineCount": 8,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": ".env.example",
|
|
"sha256": "997fd4cabe96dd692f1dde691a3ea157e86d97c577dfa7198690a91169278bad",
|
|
"byteCount": 454,
|
|
"lineCount": 10,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": ".gitignore",
|
|
"sha256": "eb13e93639d4c770f0a28ba670e9f4a922bc20ff1e734bdbe916740b0ae13d74",
|
|
"byteCount": 81,
|
|
"lineCount": 9,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "BACKEND_INTEGRATION.md",
|
|
"sha256": "158eb879fee9577edfe4b5c995515b3cdd355afbe8c2da032ef94806342acda7",
|
|
"byteCount": 15976,
|
|
"lineCount": 407,
|
|
"language": "Plain text",
|
|
"imports": [
|
|
"import axios from \"axios\";"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "DATABASE_SCHEMA.md",
|
|
"sha256": "3ed816173486b37243d1ed66b0d8aeaa4ecb1dd286fbc76d3afeace639eb5292",
|
|
"byteCount": 15731,
|
|
"lineCount": 319,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "Dockerfile",
|
|
"sha256": "b8a66b84a1ddbdfe82ee72e99cd157b8e017daf43b57f28c2942f2d2603896ff",
|
|
"byteCount": 334,
|
|
"lineCount": 15,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "README.md",
|
|
"sha256": "0da2647eea50431bef6d86fc1dd848d152b7be83efd118bd974f3b96e854479f",
|
|
"byteCount": 13231,
|
|
"lineCount": 134,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/.dockerignore",
|
|
"sha256": "af2b4e4ac92bbf09917306ecd5889749f9767550f60caa067a722a2f3832506c",
|
|
"byteCount": 59,
|
|
"lineCount": 7,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/.prettierrc",
|
|
"sha256": "30d23aaa5811720602dec802795cbc172c65bc56eb8c683fc5b12c10dcb05563",
|
|
"byteCount": 56,
|
|
"lineCount": 5,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/Dockerfile",
|
|
"sha256": "1dde4bb4a1064657518fb9d48bd7fbb4d97dd635e70198285b750b93648eaf01",
|
|
"byteCount": 903,
|
|
"lineCount": 41,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/README.md",
|
|
"sha256": "5e87b28bd419d1c83f2f44de2e150d0260da361547fc53d60016d0b64153101d",
|
|
"byteCount": 5126,
|
|
"lineCount": 99,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/eslint.config.mjs",
|
|
"sha256": "e94fea27c5d744a435cba627eb7097993c14a66a21f478c3729781bcdf4c8fba",
|
|
"byteCount": 934,
|
|
"lineCount": 36,
|
|
"language": "Plain text",
|
|
"imports": [
|
|
"import eslint from '@eslint/js';",
|
|
"import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended';",
|
|
"import globals from 'globals';",
|
|
"import tseslint from 'typescript-eslint';"
|
|
],
|
|
"exports": [
|
|
"export default tseslint.config("
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/nest-cli.json",
|
|
"sha256": "84dc81177a0db2270bd71242b910f07982c56eec68285694c9cbffc3911912ba",
|
|
"byteCount": 179,
|
|
"lineCount": 9,
|
|
"language": "JSON",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [
|
|
"$schema",
|
|
"collection",
|
|
"sourceRoot",
|
|
"compilerOptions",
|
|
"deleteOutDir"
|
|
],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/package.json",
|
|
"sha256": "8b14580b286dc09e3f0865efced27d9bcf7b5aa1eae6e7c57a27d0432c95270b",
|
|
"byteCount": 2619,
|
|
"lineCount": 91,
|
|
"language": "JSON",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [
|
|
"name",
|
|
"version",
|
|
"description",
|
|
"author",
|
|
"private",
|
|
"license",
|
|
"scripts",
|
|
"build",
|
|
"format",
|
|
"start",
|
|
"startdev:",
|
|
"startdebug:",
|
|
"startprod:",
|
|
"lint",
|
|
"test"
|
|
],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/prisma/migrations/20260526145407_init/migration.sql",
|
|
"sha256": "aa8b760653d23b2c2ad189f2fd472965ff5832338dac68ed935da2712e58ff6e",
|
|
"byteCount": 9223,
|
|
"lineCount": 261,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/prisma/migrations/20260526160916_add_ui_texts_and_scientific_terms/migration.sql",
|
|
"sha256": "8a6e5902dfa6a8c87180c567b522a6e6fe23ba7aaed1247051eda19dbc5b2561",
|
|
"byteCount": 421,
|
|
"lineCount": 18,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/prisma/migrations/migration_lock.toml",
|
|
"sha256": "74a9137885ce73d3ff088d79d658f8066e05e680fb51c0800a290c91c0c01d48",
|
|
"byteCount": 128,
|
|
"lineCount": 3,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/prisma/schema.prisma",
|
|
"sha256": "a92c30cab66c0ca46b4b922d25e2c931f02a88a9e161699952d8ae245b1b4ae1",
|
|
"byteCount": 9322,
|
|
"lineCount": 243,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [
|
|
"@default",
|
|
"@map",
|
|
"@relation",
|
|
"@index",
|
|
"@id",
|
|
"@unique"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/prisma/seed.ts",
|
|
"sha256": "160ea6723dab5f10d735fe399c1a2aa1640f61513523f7067091b47fe045de75",
|
|
"byteCount": 10150,
|
|
"lineCount": 232,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { PrismaClient } from '@prisma/client';",
|
|
"import * as fs from 'fs';",
|
|
"import * as path from 'path';",
|
|
"import * as ts from 'typescript';",
|
|
"import * as vm from 'vm';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/app.controller.spec.ts",
|
|
"sha256": "43750c632fc7f5997ddd690d4c3989443ab29ebd8866ee1fec6f3885834f8054",
|
|
"byteCount": 639,
|
|
"lineCount": 23,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { AppController } from './app.controller';",
|
|
"import { AppService } from './app.service';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"AppController",
|
|
"root",
|
|
"should return "
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/app.controller.ts",
|
|
"sha256": "3469c5aa62e1ba5b183d9bb9d40193e91aa761fc5734d332650b0bd49c346266",
|
|
"byteCount": 286,
|
|
"lineCount": 13,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Controller, Get } from '@nestjs/common';",
|
|
"import { AppService } from './app.service';"
|
|
],
|
|
"exports": [
|
|
"export class AppController {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"AppController"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Controller",
|
|
"@Get"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/app.module.ts",
|
|
"sha256": "51c23094ed88846ef86f7d8e101e8863c4225de61aee9ac01372f36a16e5b876",
|
|
"byteCount": 1399,
|
|
"lineCount": 48,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';",
|
|
"import { PrismaModule } from './prisma/prisma.module';",
|
|
"import { ProductsModule } from './products/products.module';",
|
|
"import { UsersModule } from './users/users.module';",
|
|
"import { RedisModule } from './redis/redis.module';",
|
|
"import { AuthModule } from './auth/auth.module';",
|
|
"import { PetsModule } from './pets/pets.module';",
|
|
"import { OrdersModule } from './orders/orders.module';",
|
|
"import { SettingsModule } from './settings/settings.module';",
|
|
"import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler';",
|
|
"import { APP_GUARD } from '@nestjs/core';",
|
|
"import { MetricsController } from './common/metrics.controller';"
|
|
],
|
|
"exports": [
|
|
"export class AppModule implements NestModule {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"AppModule"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Module"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/app.service.ts",
|
|
"sha256": "5d4242d50092a353e5ab1f06663a89dbc714c7d9d70072ea03c83c5b14750f05",
|
|
"byteCount": 150,
|
|
"lineCount": 9,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Injectable } from '@nestjs/common';"
|
|
],
|
|
"exports": [
|
|
"export class AppService {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"AppService"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Injectable"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/auth/auth.controller.spec.ts",
|
|
"sha256": "92c30cdac367bb8c17424dbeab672ded0c6f301d31fc81b8589379bbfbc1f71a",
|
|
"byteCount": 1564,
|
|
"lineCount": 48,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { AuthController } from './auth.controller';",
|
|
"import { AuthService } from './auth.service';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"AuthController",
|
|
"should be defined",
|
|
"should call sendOtp on service",
|
|
"should call verifyOtp on service"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/auth/auth.controller.ts",
|
|
"sha256": "dc26a41ecfcfdf7ee9fd6ed8dd03e30c2fe6024f92351295a56eb46e48e578fb",
|
|
"byteCount": 3050,
|
|
"lineCount": 95,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Controller, Post, Body, HttpCode, HttpStatus } from '@nestjs/common';",
|
|
"import { AuthService } from './auth.service';",
|
|
"import { SendOtpDto } from './dto/send-otp.dto';",
|
|
"import { VerifyOtpDto } from './dto/verify-otp.dto';",
|
|
"import { ApiTags, ApiOperation, ApiResponse, ApiOkResponse, ApiBadRequestResponse } from '@nestjs/swagger';"
|
|
],
|
|
"exports": [
|
|
"export class AuthController {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"AuthController"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiTags",
|
|
"@Controller",
|
|
"@ApiResponse",
|
|
"@Post",
|
|
"@HttpCode",
|
|
"@ApiOperation",
|
|
"@ApiOkResponse",
|
|
"@ApiBadRequestResponse",
|
|
"@Body"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/auth/auth.module.ts",
|
|
"sha256": "e1ccf4f9a5b1de18210d49bb65868c36dcfd6a216d4c2c9e4d9e2dd490d571a1",
|
|
"byteCount": 681,
|
|
"lineCount": 23,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Module } from '@nestjs/common';",
|
|
"import { JwtModule } from '@nestjs/jwt';",
|
|
"import { PassportModule } from '@nestjs/passport';",
|
|
"import { AuthService } from './auth.service';",
|
|
"import { AuthController } from './auth.controller';",
|
|
"import { JwtStrategy } from './jwt.strategy';",
|
|
"import { UsersModule } from '../users/users.module';"
|
|
],
|
|
"exports": [
|
|
"export class AuthModule {}"
|
|
],
|
|
"topLevelSymbols": [
|
|
"AuthModule"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Module"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/auth/auth.service.spec.ts",
|
|
"sha256": "177b09fdfe0f747ee1ae7df98c86fa4b644aaf8c66b33f89e0328e534fa67e01",
|
|
"byteCount": 3765,
|
|
"lineCount": 110,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { AuthService } from './auth.service';",
|
|
"import { PrismaService } from '../prisma/prisma.service';",
|
|
"import { JwtService } from '@nestjs/jwt';",
|
|
"import { RedisService } from '../redis/redis.service';",
|
|
"import { BadRequestException } from '@nestjs/common';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"AuthService",
|
|
"should be defined",
|
|
"sendOtp",
|
|
"should generate a 5 digit OTP and save it in Redis",
|
|
"verifyOtp",
|
|
"should throw BadRequestException if OTP is expired/not found",
|
|
"should throw BadRequestException if OTP is incorrect",
|
|
"should delete OTP, find or create user and sign JWT",
|
|
"should create new user if user does not exist"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/auth/auth.service.ts",
|
|
"sha256": "b72a2c20bbc1c0f8b4e2223c0b161747cdd8b1214fb8fe1e8a3a78223fe42bab",
|
|
"byteCount": 2024,
|
|
"lineCount": 67,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Injectable, BadRequestException } from '@nestjs/common';",
|
|
"import { JwtService } from '@nestjs/jwt';",
|
|
"import { PrismaService } from '../prisma/prisma.service';",
|
|
"import { RedisService } from '../redis/redis.service';",
|
|
"import { SendOtpDto } from './dto/send-otp.dto';",
|
|
"import { VerifyOtpDto } from './dto/verify-otp.dto';"
|
|
],
|
|
"exports": [
|
|
"export class AuthService {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"AuthService"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Injectable"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/auth/dto/send-otp.dto.ts",
|
|
"sha256": "df509a1e3c9fc8846ce920192a43cf38ef76db7953d07d187d477bdfe44ec157",
|
|
"byteCount": 384,
|
|
"lineCount": 11,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { ApiProperty } from '@nestjs/swagger';",
|
|
"import { IsNotEmpty, IsString, Matches } from 'class-validator';"
|
|
],
|
|
"exports": [
|
|
"export class SendOtpDto {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"SendOtpDto"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiProperty",
|
|
"@IsNotEmpty",
|
|
"@IsString",
|
|
"@Matches"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/auth/dto/verify-otp.dto.ts",
|
|
"sha256": "4115fc64ad8a38f2c5ae933af99a611aacd02b0a8b4e2859f5d2804126850acd",
|
|
"byteCount": 610,
|
|
"lineCount": 17,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { ApiProperty } from '@nestjs/swagger';",
|
|
"import { IsNotEmpty, IsString, Length, Matches } from 'class-validator';"
|
|
],
|
|
"exports": [
|
|
"export class VerifyOtpDto {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"VerifyOtpDto"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiProperty",
|
|
"@IsNotEmpty",
|
|
"@IsString",
|
|
"@Matches",
|
|
"@Length"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/auth/jwt-auth.guard.ts",
|
|
"sha256": "e654c3250653cb79863bc5d2ed6d89e3ab5e04f3b4945bab04fafedbaea04509",
|
|
"byteCount": 413,
|
|
"lineCount": 13,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Injectable, UnauthorizedException } from '@nestjs/common';",
|
|
"import { AuthGuard } from '@nestjs/passport';"
|
|
],
|
|
"exports": [
|
|
"export class JwtAuthGuard extends AuthGuard('jwt') {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"JwtAuthGuard"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Injectable"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/auth/jwt.strategy.ts",
|
|
"sha256": "2fd8214610a59f1bb4fdb517946e8c1d2402b6dc88a1bd62b22719734cf969ed",
|
|
"byteCount": 787,
|
|
"lineCount": 24,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { ExtractJwt, Strategy } from 'passport-jwt';",
|
|
"import { PassportStrategy } from '@nestjs/passport';",
|
|
"import { Injectable, UnauthorizedException } from '@nestjs/common';",
|
|
"import { UsersService } from '../users/users.service';"
|
|
],
|
|
"exports": [
|
|
"export class JwtStrategy extends PassportStrategy(Strategy) {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"JwtStrategy"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Injectable"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/common/filters/http-exception.filter.ts",
|
|
"sha256": "ef8428b791bc2f4b6c1e1110f910b1cfd5d1728db572423e7859cebc1dc5559d",
|
|
"byteCount": 833,
|
|
"lineCount": 20,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';",
|
|
"import { Response } from 'express';"
|
|
],
|
|
"exports": [
|
|
"export class HttpExceptionFilter implements ExceptionFilter {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"HttpExceptionFilter"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Catch"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/common/metrics.controller.ts",
|
|
"sha256": "3ed5cb3298ef3030c097703556b68fe5c4ce0a406f7f6a43b51e883a6ae3a51c",
|
|
"byteCount": 2170,
|
|
"lineCount": 68,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Controller, Get, Res } from '@nestjs/common';",
|
|
"import { ApiExcludeController } from '@nestjs/swagger';",
|
|
"import { PrismaService } from '../../src/prisma/prisma.service';",
|
|
"import { Response } from 'express';"
|
|
],
|
|
"exports": [
|
|
"export class MetricsController {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"MetricsController"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiExcludeController",
|
|
"@Controller",
|
|
"@Get",
|
|
"@Res"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/main.ts",
|
|
"sha256": "6f6f86698f76639b26ad9a38fd6f572fe884f270cd70adf69342e4f99906a43f",
|
|
"byteCount": 1222,
|
|
"lineCount": 42,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { NestFactory } from '@nestjs/core';",
|
|
"import { AppModule } from './app.module';",
|
|
"import { ValidationPipe } from '@nestjs/common';",
|
|
"import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';",
|
|
"import { HttpExceptionFilter } from './common/filters/http-exception.filter';",
|
|
"import helmet from 'helmet';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/orders/dto/create-order.dto.ts",
|
|
"sha256": "82a19cb52f0a2346fc906f46e5b05564e54b287f1b0e12da0f3e12221671c5d7",
|
|
"byteCount": 822,
|
|
"lineCount": 29,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';",
|
|
"import { IsNotEmpty, IsArray, ValidateNested, IsNumber, IsOptional, IsString } from 'class-validator';",
|
|
"import { Type } from 'class-transformer';"
|
|
],
|
|
"exports": [
|
|
"export class CreateOrderDto {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"CreateOrderDto"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiProperty",
|
|
"@IsNotEmpty",
|
|
"@IsString",
|
|
"@IsNumber",
|
|
"@ApiPropertyOptional",
|
|
"@IsOptional",
|
|
"@IsArray",
|
|
"@ValidateNested",
|
|
"@Type"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/orders/orders.controller.spec.ts",
|
|
"sha256": "a8990002863f2f6bfd99af91e9c6f4a67e9457fbef9caf2a07e7af2c9fce3b85",
|
|
"byteCount": 1961,
|
|
"lineCount": 57,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { OrdersController } from './orders.controller';",
|
|
"import { OrdersService } from './orders.service';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"OrdersController",
|
|
"should be defined",
|
|
"should create order",
|
|
"should list orders of user",
|
|
"should find one order"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/orders/orders.controller.ts",
|
|
"sha256": "dc251b61af61a8c6e80aba15dbbbe27d5940e78081c369536c721ddde569a09d",
|
|
"byteCount": 4001,
|
|
"lineCount": 122,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Controller, Get, Post, Body, Param, UseGuards, Req, HttpStatus } from '@nestjs/common';",
|
|
"import { OrdersService } from './orders.service';",
|
|
"import { CreateOrderDto } from './dto/create-order.dto';",
|
|
"import { JwtAuthGuard } from '../auth/jwt-auth.guard';",
|
|
"import { ApiTags, ApiBearerAuth, ApiOperation, ApiResponse, ApiOkResponse, ApiCreatedResponse, ApiBadRequestResponse, ApiNotFoundResponse } from '@nestjs/swagger';"
|
|
],
|
|
"exports": [
|
|
"export class OrdersController {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"OrdersController"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiTags",
|
|
"@ApiBearerAuth",
|
|
"@UseGuards",
|
|
"@Controller",
|
|
"@ApiResponse",
|
|
"@Post",
|
|
"@ApiOperation",
|
|
"@ApiCreatedResponse",
|
|
"@ApiBadRequestResponse",
|
|
"@Req",
|
|
"@Body",
|
|
"@Get",
|
|
"@ApiOkResponse",
|
|
"@ApiNotFoundResponse",
|
|
"@Param"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/orders/orders.module.ts",
|
|
"sha256": "e36df12f5dc4cc036872c3b98f01c4060d24f526c399d6c7ec193ee7220bcba3",
|
|
"byteCount": 264,
|
|
"lineCount": 10,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Module } from '@nestjs/common';",
|
|
"import { OrdersService } from './orders.service';",
|
|
"import { OrdersController } from './orders.controller';"
|
|
],
|
|
"exports": [
|
|
"export class OrdersModule {}"
|
|
],
|
|
"topLevelSymbols": [
|
|
"OrdersModule"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Module"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/orders/orders.service.spec.ts",
|
|
"sha256": "8fb10c94adc23816814ce5d8b92c08c898a6c8eadea36ee932f91b7bd79bc9a4",
|
|
"byteCount": 3470,
|
|
"lineCount": 104,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { OrdersService } from './orders.service';",
|
|
"import { PrismaService } from '../prisma/prisma.service';",
|
|
"import { NotFoundException, BadRequestException } from '@nestjs/common';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"OrdersService",
|
|
"should be defined",
|
|
"create",
|
|
"should throw NotFoundException if product does not exist",
|
|
"should throw BadRequestException if items are empty",
|
|
"should successfully create order and sum amounts",
|
|
"findAllByUser",
|
|
"should find all orders of a user",
|
|
"findOne",
|
|
"should throw NotFoundException if order does not exist",
|
|
"should return order if found"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/orders/orders.service.ts",
|
|
"sha256": "50a9f0ef8b15214a9e6422ba514b9c0e81ffcbdb170210870f75cc6013d83d66",
|
|
"byteCount": 1898,
|
|
"lineCount": 70,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Injectable, NotFoundException, BadRequestException } from '@nestjs/common';",
|
|
"import { PrismaService } from '../prisma/prisma.service';",
|
|
"import { CreateOrderDto } from './dto/create-order.dto';"
|
|
],
|
|
"exports": [
|
|
"export class OrdersService {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"OrdersService"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Injectable"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/pets/dto/create-pet.dto.ts",
|
|
"sha256": "842a23c6ce7d596dcac91a0a5849422b584a7eacdcc12d28faa70f600973c976",
|
|
"byteCount": 1277,
|
|
"lineCount": 45,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';",
|
|
"import { IsNotEmpty, IsString, IsOptional, IsNumber, IsBoolean, IsDateString } from 'class-validator';"
|
|
],
|
|
"exports": [
|
|
"export class CreatePetDto {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"CreatePetDto"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiProperty",
|
|
"@IsNotEmpty",
|
|
"@IsString",
|
|
"@ApiPropertyOptional",
|
|
"@IsOptional",
|
|
"@IsNumber",
|
|
"@IsDateString",
|
|
"@IsBoolean"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/pets/dto/update-pet.dto.ts",
|
|
"sha256": "9215ef8d3ba4d104629e18ece5e38d8b22d5b12fa8d7b032b885923a2d00c42f",
|
|
"byteCount": 160,
|
|
"lineCount": 5,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { PartialType } from '@nestjs/swagger';",
|
|
"import { CreatePetDto } from './create-pet.dto';"
|
|
],
|
|
"exports": [
|
|
"export class UpdatePetDto extends PartialType(CreatePetDto) {}"
|
|
],
|
|
"topLevelSymbols": [
|
|
"UpdatePetDto"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/pets/pets.controller.spec.ts",
|
|
"sha256": "3bc537a47fa3bb87b9cc1916a849013b9fd94905b89b4155fe95cad5ca09b7cb",
|
|
"byteCount": 2602,
|
|
"lineCount": 74,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { PetsController } from './pets.controller';",
|
|
"import { PetsService } from './pets.service';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"PetsController",
|
|
"should be defined",
|
|
"should create pet",
|
|
"should findAll pets",
|
|
"should findOne pet",
|
|
"should update pet",
|
|
"should remove pet"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/pets/pets.controller.ts",
|
|
"sha256": "f89faaeb9ead2a83b5f802577cabb39a107833429852bfeead3d06e1cc2777a8",
|
|
"byteCount": 5567,
|
|
"lineCount": 180,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards, Req, HttpStatus } from '@nestjs/common';",
|
|
"import { PetsService } from './pets.service';",
|
|
"import { CreatePetDto } from './dto/create-pet.dto';",
|
|
"import { UpdatePetDto } from './dto/update-pet.dto';",
|
|
"import { JwtAuthGuard } from '../auth/jwt-auth.guard';",
|
|
"import { ApiTags, ApiBearerAuth, ApiOperation, ApiResponse, ApiOkResponse, ApiCreatedResponse, ApiBadRequestResponse, ApiNotFoundResponse } from '@nestjs/swagger';"
|
|
],
|
|
"exports": [
|
|
"export class PetsController {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"PetsController"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiTags",
|
|
"@ApiBearerAuth",
|
|
"@UseGuards",
|
|
"@Controller",
|
|
"@ApiResponse",
|
|
"@Post",
|
|
"@ApiOperation",
|
|
"@ApiCreatedResponse",
|
|
"@ApiBadRequestResponse",
|
|
"@Req",
|
|
"@Body",
|
|
"@Get",
|
|
"@ApiOkResponse",
|
|
"@ApiNotFoundResponse",
|
|
"@Param"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/pets/pets.module.ts",
|
|
"sha256": "32c9118ec8ee3f83bbaebea3247ad10e6c0b257dd0ec4ae80de8fbe135cdb9e5",
|
|
"byteCount": 250,
|
|
"lineCount": 10,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Module } from '@nestjs/common';",
|
|
"import { PetsService } from './pets.service';",
|
|
"import { PetsController } from './pets.controller';"
|
|
],
|
|
"exports": [
|
|
"export class PetsModule {}"
|
|
],
|
|
"topLevelSymbols": [
|
|
"PetsModule"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Module"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/pets/pets.service.spec.ts",
|
|
"sha256": "9b927330f92c4791b59152601254d48f0aa0b9d92e4f1786775cf699fd278dfe",
|
|
"byteCount": 3042,
|
|
"lineCount": 94,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { PetsService } from './pets.service';",
|
|
"import { PrismaService } from '../prisma/prisma.service';",
|
|
"import { NotFoundException } from '@nestjs/common';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"PetsService",
|
|
"should be defined",
|
|
"should create pet",
|
|
"should find all pets by user",
|
|
"findOne",
|
|
"should throw NotFoundException if pet not found",
|
|
"should return pet if found",
|
|
"should update pet",
|
|
"should remove pet"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/pets/pets.service.ts",
|
|
"sha256": "00af95136a389248d667c4e981dbb5a12c43425054007e7b3a7ebc074d2ea07f",
|
|
"byteCount": 1745,
|
|
"lineCount": 62,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Injectable, NotFoundException } from '@nestjs/common';",
|
|
"import { PrismaService } from '../prisma/prisma.service';",
|
|
"import { CreatePetDto } from './dto/create-pet.dto';",
|
|
"import { UpdatePetDto } from './dto/update-pet.dto';"
|
|
],
|
|
"exports": [
|
|
"export class PetsService {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"PetsService"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Injectable"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/prisma/prisma.module.ts",
|
|
"sha256": "14d19dcd7848e4d134cd9eaa205818d5e0302123a5fc5ea2440d358a39f2fd25",
|
|
"byteCount": 219,
|
|
"lineCount": 10,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Global, Module } from '@nestjs/common';",
|
|
"import { PrismaService } from './prisma.service';"
|
|
],
|
|
"exports": [
|
|
"export class PrismaModule {}"
|
|
],
|
|
"topLevelSymbols": [
|
|
"PrismaModule"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Global",
|
|
"@Module"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/prisma/prisma.service.ts",
|
|
"sha256": "58334e95599a754096851809483901a14e85a9e4d190655f74be6171ce1388b7",
|
|
"byteCount": 363,
|
|
"lineCount": 14,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Injectable, OnModuleInit, OnModuleDestroy } from '@nestjs/common';",
|
|
"import { PrismaClient } from '@prisma/client';"
|
|
],
|
|
"exports": [
|
|
"export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"PrismaService"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Injectable"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/products/dto/get-products.dto.ts",
|
|
"sha256": "39c1ee94138e1d5c0f6aaeadfbc653a2f200a64825a0d868db937f40abb14d89",
|
|
"byteCount": 574,
|
|
"lineCount": 20,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { ApiPropertyOptional } from '@nestjs/swagger';",
|
|
"import { IsOptional, IsString, IsEnum } from 'class-validator';"
|
|
],
|
|
"exports": [
|
|
"export class GetProductsDto {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"GetProductsDto"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiPropertyOptional",
|
|
"@IsOptional",
|
|
"@IsString",
|
|
"@IsEnum"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/products/products.controller.spec.ts",
|
|
"sha256": "058f4dd9afddc070fe22d5de3ab70e85fef19fdcb9c92d2cc73a90ddc3fa493b",
|
|
"byteCount": 1905,
|
|
"lineCount": 57,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { ProductsController } from './products.controller';",
|
|
"import { ProductsService } from './products.service';",
|
|
"import { NotFoundException } from '@nestjs/common';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"ProductsController",
|
|
"should be defined",
|
|
"should list products",
|
|
"findOne",
|
|
"should throw NotFoundException if product not found",
|
|
"should return product details if found"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/products/products.controller.ts",
|
|
"sha256": "2f5f9f97e5cfc3a4679b237e373781832ba243a9a622f64c9d5ddc6ad16b744e",
|
|
"byteCount": 4161,
|
|
"lineCount": 106,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Controller, Get, Query, Param, NotFoundException, HttpStatus } from '@nestjs/common';",
|
|
"import { ProductsService } from './products.service';",
|
|
"import { GetProductsDto } from './dto/get-products.dto';",
|
|
"import { ApiTags, ApiOperation, ApiResponse, ApiOkResponse, ApiNotFoundResponse } from '@nestjs/swagger';"
|
|
],
|
|
"exports": [
|
|
"export class ProductsController {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"ProductsController"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiTags",
|
|
"@Controller",
|
|
"@ApiResponse",
|
|
"@Get",
|
|
"@ApiOperation",
|
|
"@ApiOkResponse",
|
|
"@Query",
|
|
"@ApiNotFoundResponse",
|
|
"@Param"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/products/products.module.ts",
|
|
"sha256": "01e51354c6922d10d7fab9dd79973901219d8a8ce06aaa5ff14cae5241796f41",
|
|
"byteCount": 278,
|
|
"lineCount": 10,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Module } from '@nestjs/common';",
|
|
"import { ProductsService } from './products.service';",
|
|
"import { ProductsController } from './products.controller';"
|
|
],
|
|
"exports": [
|
|
"export class ProductsModule {}"
|
|
],
|
|
"topLevelSymbols": [
|
|
"ProductsModule"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Module"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/products/products.service.spec.ts",
|
|
"sha256": "316e5eadae7ab595acf34b1621353a17fdc0ed0de0a5afb546e689604f949189",
|
|
"byteCount": 2190,
|
|
"lineCount": 76,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { ProductsService } from './products.service';",
|
|
"import { PrismaService } from '../prisma/prisma.service';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"ProductsService",
|
|
"should be defined",
|
|
"findAll",
|
|
"should query products with correct filters",
|
|
"findOne",
|
|
"should find product by id"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/products/products.service.ts",
|
|
"sha256": "3bb43f3f8b22a8bd18fcfccf18bef45591d9564ad8e01276638c892ceea1f023",
|
|
"byteCount": 1180,
|
|
"lineCount": 50,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Injectable } from '@nestjs/common';",
|
|
"import { PrismaService } from '../prisma/prisma.service';",
|
|
"import { GetProductsDto } from './dto/get-products.dto';"
|
|
],
|
|
"exports": [
|
|
"export class ProductsService {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"ProductsService"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Injectable"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/redis/redis.module.ts",
|
|
"sha256": "d2ad5482ca33266c13666b8d6249d90dcd62527e472cb12d98c4e3ebae8fcac8",
|
|
"byteCount": 214,
|
|
"lineCount": 10,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Module, Global } from '@nestjs/common';",
|
|
"import { RedisService } from './redis.service';"
|
|
],
|
|
"exports": [
|
|
"export class RedisModule {}"
|
|
],
|
|
"topLevelSymbols": [
|
|
"RedisModule"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Global",
|
|
"@Module"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/redis/redis.service.spec.ts",
|
|
"sha256": "c6782b6b177f0d73aba0501d86634f12ba1f6ddcbdb995aaf0e70a34f194e583",
|
|
"byteCount": 1581,
|
|
"lineCount": 57,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { RedisService } from './redis.service';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"RedisService",
|
|
"should be defined",
|
|
"should call set with or without ttl",
|
|
"should call get",
|
|
"should call del"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/redis/redis.service.ts",
|
|
"sha256": "a8f03151af8caa570f0c6ad62e726aea257012e811bad80405826c3aafac8bb7",
|
|
"byteCount": 865,
|
|
"lineCount": 35,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Injectable, OnModuleDestroy, OnModuleInit } from '@nestjs/common';",
|
|
"import Redis from 'ioredis';"
|
|
],
|
|
"exports": [
|
|
"export class RedisService implements OnModuleInit, OnModuleDestroy {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"RedisService"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Injectable"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/settings/settings.controller.spec.ts",
|
|
"sha256": "2e7ddf051244941e3c6be2486a6279f8a1bfddf59876c4dea4d0a0915eb40fc4",
|
|
"byteCount": 2375,
|
|
"lineCount": 68,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { SettingsController } from './settings.controller';",
|
|
"import { SettingsService } from './settings.service';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"SettingsController",
|
|
"should be defined",
|
|
"should getUiTexts",
|
|
"should updateUiText",
|
|
"should getScientificTerms",
|
|
"should upsertScientificTerm",
|
|
"should deleteScientificTerm"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/settings/settings.controller.ts",
|
|
"sha256": "9847018dda0c55aabc2299bef26b069a1962853d6dc4133d425c32dd05dd386d",
|
|
"byteCount": 4207,
|
|
"lineCount": 111,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Controller, Get, Patch, Put, Delete, Body, Param, UseGuards, HttpStatus } from '@nestjs/common';",
|
|
"import { SettingsService } from './settings.service';",
|
|
"import { JwtAuthGuard } from '../auth/jwt-auth.guard';",
|
|
"import { ApiTags, ApiOperation, ApiBearerAuth, ApiResponse, ApiOkResponse, ApiUnauthorizedResponse } from '@nestjs/swagger';"
|
|
],
|
|
"exports": [
|
|
"export class SettingsController {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"SettingsController"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiTags",
|
|
"@Controller",
|
|
"@Get",
|
|
"@ApiOperation",
|
|
"@ApiOkResponse",
|
|
"@UseGuards",
|
|
"@ApiBearerAuth",
|
|
"@Patch",
|
|
"@ApiUnauthorizedResponse",
|
|
"@Param",
|
|
"@Body",
|
|
"@Put",
|
|
"@Delete"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/settings/settings.module.ts",
|
|
"sha256": "07af4ac2bbc8ae7ffb62ae1850c91df2672afbe5e58da93388b9aba0d691eae9",
|
|
"byteCount": 394,
|
|
"lineCount": 13,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Module } from '@nestjs/common';",
|
|
"import { SettingsService } from './settings.service';",
|
|
"import { SettingsController } from './settings.controller';",
|
|
"import { PrismaModule } from '../prisma/prisma.module';"
|
|
],
|
|
"exports": [
|
|
"export class SettingsModule {}"
|
|
],
|
|
"topLevelSymbols": [
|
|
"SettingsModule"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Module"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/settings/settings.service.spec.ts",
|
|
"sha256": "b5b8cdc91d26a561b7493885265e1d75a8c86f79cb0778e0f602b9d83c54b55d",
|
|
"byteCount": 2814,
|
|
"lineCount": 87,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { SettingsService } from './settings.service';",
|
|
"import { PrismaService } from '../prisma/prisma.service';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"SettingsService",
|
|
"should be defined",
|
|
"should getUiTexts",
|
|
"should updateUiText",
|
|
"should getScientificTerms",
|
|
"should upsertScientificTerm",
|
|
"should deleteScientificTerm"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/settings/settings.service.ts",
|
|
"sha256": "278619cac4d4ae3b85a8b3075840a5265ac2732f40e4c3161e9dd16a818761b5",
|
|
"byteCount": 1115,
|
|
"lineCount": 47,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Injectable } from '@nestjs/common';",
|
|
"import { PrismaService } from '../prisma/prisma.service';"
|
|
],
|
|
"exports": [
|
|
"export class SettingsService {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"SettingsService"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Injectable"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/users/dto/address.dto.ts",
|
|
"sha256": "caaf6a055df72439795c85eba8e9a78fedf0e70b4f593d4b337aaae8440af6da",
|
|
"byteCount": 1142,
|
|
"lineCount": 45,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';",
|
|
"import { IsString, IsNotEmpty, IsOptional, IsBoolean } from 'class-validator';"
|
|
],
|
|
"exports": [
|
|
"export class AddressDto {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"AddressDto"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiProperty",
|
|
"@IsString",
|
|
"@IsNotEmpty",
|
|
"@ApiPropertyOptional",
|
|
"@IsOptional",
|
|
"@IsBoolean"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/users/dto/update-profile.dto.ts",
|
|
"sha256": "2a4d80862f02cfa37a3f9f8d9d9d1191c2fe611e1eea6f21cc954a77f7add959",
|
|
"byteCount": 714,
|
|
"lineCount": 25,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { ApiPropertyOptional } from '@nestjs/swagger';",
|
|
"import { IsOptional, IsString, IsEmail } from 'class-validator';"
|
|
],
|
|
"exports": [
|
|
"export class UpdateProfileDto {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"UpdateProfileDto"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiPropertyOptional",
|
|
"@IsOptional",
|
|
"@IsString",
|
|
"@IsEmail"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/users/users.controller.spec.ts",
|
|
"sha256": "6b9bb6e51fc866950d36e0b8d5cdd8e2ed546b7cb20351be008161534aa83748",
|
|
"byteCount": 3385,
|
|
"lineCount": 99,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { UsersController } from './users.controller';",
|
|
"import { UsersService } from './users.service';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"UsersController",
|
|
"should be defined",
|
|
"should getProfile",
|
|
"should updateProfile",
|
|
"should addAddress",
|
|
"should updateAddress",
|
|
"should deleteAddress",
|
|
"should setDefaultAddress"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/users/users.controller.ts",
|
|
"sha256": "d5a6cc93a94e871c4485ef084e277bc3476740c65502a764f90a575fac3a30f6",
|
|
"byteCount": 5842,
|
|
"lineCount": 173,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Controller, Get, Patch, Post, Delete, Body, Param, UseGuards, Req, HttpStatus } from '@nestjs/common';",
|
|
"import { UsersService } from './users.service';",
|
|
"import { JwtAuthGuard } from '../auth/jwt-auth.guard';",
|
|
"import { ApiTags, ApiBearerAuth, ApiOperation, ApiResponse, ApiOkResponse, ApiCreatedResponse, ApiBadRequestResponse } from '@nestjs/swagger';",
|
|
"import { UpdateProfileDto } from './dto/update-profile.dto';",
|
|
"import { AddressDto } from './dto/address.dto';"
|
|
],
|
|
"exports": [
|
|
"export class UsersController {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"UsersController"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@ApiTags",
|
|
"@ApiBearerAuth",
|
|
"@Controller",
|
|
"@ApiResponse",
|
|
"@UseGuards",
|
|
"@Get",
|
|
"@ApiOperation",
|
|
"@ApiOkResponse",
|
|
"@Req",
|
|
"@Patch",
|
|
"@ApiBadRequestResponse",
|
|
"@Body",
|
|
"@Post",
|
|
"@ApiCreatedResponse",
|
|
"@Param"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/users/users.module.ts",
|
|
"sha256": "e99dd0daf64179291ef9b1ffc969574be6920ae813c789845209632463c92f42",
|
|
"byteCount": 285,
|
|
"lineCount": 11,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Module } from '@nestjs/common';",
|
|
"import { UsersService } from './users.service';",
|
|
"import { UsersController } from './users.controller';"
|
|
],
|
|
"exports": [
|
|
"export class UsersModule {}"
|
|
],
|
|
"topLevelSymbols": [
|
|
"UsersModule"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Module"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/users/users.service.spec.ts",
|
|
"sha256": "9bde2dd4fdfbb0f3864baee7782d1cf5429f2fa371e07a336d0cf5b6a225cbd7",
|
|
"byteCount": 3496,
|
|
"lineCount": 102,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { UsersService } from './users.service';",
|
|
"import { PrismaService } from '../prisma/prisma.service';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"UsersService",
|
|
"should be defined",
|
|
"should call prisma findUnique in findById",
|
|
"should call prisma update in update",
|
|
"should addAddress",
|
|
"should updateAddress",
|
|
"should deleteAddress",
|
|
"should setDefaultAddress"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/src/users/users.service.ts",
|
|
"sha256": "1532d70fd00b84469c6805836806f4fa1bce05a3399813f101c92371387cf967",
|
|
"byteCount": 2816,
|
|
"lineCount": 112,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Injectable } from '@nestjs/common';",
|
|
"import { PrismaService } from '../prisma/prisma.service';"
|
|
],
|
|
"exports": [
|
|
"export class UsersService {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"UsersService"
|
|
],
|
|
"frameworkDecorators": [
|
|
"@Injectable"
|
|
],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/test/app.e2e-spec.ts",
|
|
"sha256": "191eb3068fadbce18c31e6ffa02ed6ed0cfd133573f23ef361d9ea413539f7e1",
|
|
"byteCount": 754,
|
|
"lineCount": 30,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { Test, TestingModule } from '@nestjs/testing';",
|
|
"import { INestApplication } from '@nestjs/common';",
|
|
"import request from 'supertest';",
|
|
"import { App } from 'supertest/types';",
|
|
"import { AppModule } from './../src/app.module';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"AppController (e2e)",
|
|
"/ (GET)"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/test/jest-e2e.json",
|
|
"sha256": "e5964a7412493afd594979b94374dd8e5fd87e96d23a514163bdb72198fda0ba",
|
|
"byteCount": 192,
|
|
"lineCount": 10,
|
|
"language": "JSON",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [
|
|
"moduleFileExtensions",
|
|
"rootDir",
|
|
"testEnvironment",
|
|
"testRegex",
|
|
"transform",
|
|
"^.+\\\\.(t|j)s$"
|
|
],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/tsconfig.build.json",
|
|
"sha256": "ef5be6c06c3ac6c3eca6c81885a12d03e33059086b4b275cf39f6e9359965378",
|
|
"byteCount": 101,
|
|
"lineCount": 5,
|
|
"language": "JSON",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [
|
|
"extends",
|
|
"exclude"
|
|
],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "backend/tsconfig.json",
|
|
"sha256": "9f14a66ca5ada4e5f20a0c5d4a1a1d1d631aeb03a5940c737b73893c897a8dad",
|
|
"byteCount": 699,
|
|
"lineCount": 26,
|
|
"language": "JSON",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [
|
|
"compilerOptions",
|
|
"module",
|
|
"moduleResolution",
|
|
"resolvePackageJsonExports",
|
|
"esModuleInterop",
|
|
"isolatedModules",
|
|
"declaration",
|
|
"removeComments",
|
|
"emitDecoratorMetadata",
|
|
"experimentalDecorators",
|
|
"allowSyntheticDefaultImports",
|
|
"target",
|
|
"sourceMap",
|
|
"outDir",
|
|
"baseUrl"
|
|
],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "docker-compose.yml",
|
|
"sha256": "a57d52b4063ef4eb731e163947db6d3c9fb4aa7133dcb40c1ee408e351ed715d",
|
|
"byteCount": 1569,
|
|
"lineCount": 76,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "index.html",
|
|
"sha256": "a8fb6003bf328dabab868cc7e6c1189869285287a5674d9892bddcdfd3491533",
|
|
"byteCount": 811,
|
|
"lineCount": 24,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "metadata.json",
|
|
"sha256": "6effb47a4ad0cd327ac85c3e3f1d667a1fca9cd36699ae907344fa6a030d8dd8",
|
|
"byteCount": 342,
|
|
"lineCount": 9,
|
|
"language": "JSON",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [
|
|
"name",
|
|
"description",
|
|
"requestFramePermissions",
|
|
"majorCapabilities"
|
|
],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "nginx.conf",
|
|
"sha256": "e73f55d23eb74db056c552a3c9f51ceb6ed208bd5de3e8eb07a46f1e904b9f44",
|
|
"byteCount": 992,
|
|
"lineCount": 30,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "package.json",
|
|
"sha256": "6573f481f79a240af1721a5878969c40a7f60d0c5498cab30dd427af97759445",
|
|
"byteCount": 1266,
|
|
"lineCount": 48,
|
|
"language": "JSON",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [
|
|
"name",
|
|
"private",
|
|
"version",
|
|
"type",
|
|
"scripts",
|
|
"dev",
|
|
"build",
|
|
"preview",
|
|
"clean",
|
|
"lint",
|
|
"test",
|
|
"testwatch:",
|
|
"dependencies",
|
|
"@google/genai",
|
|
"@tailwindcss/vite"
|
|
],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "prometheus.yml",
|
|
"sha256": "c31cef7110f4965128e7dc355a77cd7f537a6383c8f62936a2d8c6ea5582898d",
|
|
"byteCount": 172,
|
|
"lineCount": 9,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "public/locales/fa/common.json",
|
|
"sha256": "8378edcaef506b34c6e243b58456fccfa657d912860ac3efc7c91de2350585c1",
|
|
"byteCount": 1238,
|
|
"lineCount": 21,
|
|
"language": "JSON",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [
|
|
"api",
|
|
"errors",
|
|
"400",
|
|
"401",
|
|
"403",
|
|
"404",
|
|
"500",
|
|
"insufficient_balance",
|
|
"breed_mismatch",
|
|
"invalid_coupon",
|
|
"order_failed",
|
|
"messages",
|
|
"loading",
|
|
"saving",
|
|
"success_update"
|
|
],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "public/manifest.json",
|
|
"sha256": "87501de359a0c2f7a3a591fb4a0815a42b48357e9948a87406636685108fae7e",
|
|
"byteCount": 614,
|
|
"lineCount": 22,
|
|
"language": "JSON",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [
|
|
"name",
|
|
"short_name",
|
|
"description",
|
|
"start_url",
|
|
"display",
|
|
"background_color",
|
|
"theme_color",
|
|
"icons",
|
|
"src",
|
|
"sizes",
|
|
"type"
|
|
],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "public/sw.js",
|
|
"sha256": "7827cc0749b78767bbb7218fafbbc48ed42dae16dae671ebba10f45d30a12295",
|
|
"byteCount": 500,
|
|
"lineCount": 24,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/App.tsx",
|
|
"sha256": "5a6b490104821f21f6000c514001e5a455007ebcec4cf6ac545313f251fd0d9e",
|
|
"byteCount": 21677,
|
|
"lineCount": 431,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { useState, useEffect, lazy, Suspense } from \"react\";",
|
|
"import Header from \"./components/Header\";",
|
|
"import Hero from \"./components/Hero\";",
|
|
"import Footer from \"./components/Footer\";",
|
|
"import { Toaster } from \"sonner\";",
|
|
"import { Product } from \"./data/products\";",
|
|
"import { useCartStore } from \"./store/cartStore\";",
|
|
"import { usePetStore } from \"./store/usePetStore\";",
|
|
"import { useUserStore } from \"./store/userStore\";",
|
|
"import { useSettingsStore } from \"./store/settingsStore\";",
|
|
"import { NetworkBanner } from './components/NetworkBanner';",
|
|
"import { ErrorBoundary } from './components/ErrorBoundary';",
|
|
"import { NotFoundPage } from './components/ErrorPages';",
|
|
"import { toast } from \"sonner\";",
|
|
"import labImage from \"./assets/images/regenerated_image_1779109861747.png\";"
|
|
],
|
|
"exports": [
|
|
"export default function App() {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/AddressModal.tsx",
|
|
"sha256": "314720a29226a08bafb8f746cff2fb6fbad6a85b3156f67e13ce77d9ce0231c4",
|
|
"byteCount": 14652,
|
|
"lineCount": 290,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState, useEffect } from \"react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { X, MapPin, User, Phone, Hash, Save, Check } from \"lucide-react\";",
|
|
"import { toPersian, cn } from \"../lib/utils\";",
|
|
"import { Address } from \"../store/userStore\";",
|
|
"import { toast } from \"sonner\";"
|
|
],
|
|
"exports": [
|
|
"export default function AddressModal({ isOpen, onClose, onSave, editingAddress }: AddressModalProps) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/ArchivePage.tsx",
|
|
"sha256": "a2a6c4131513cd9918e8ff5ded7f2542e15f9a04e5504803e665e6c9b8364237",
|
|
"byteCount": 21575,
|
|
"lineCount": 424,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState, useMemo, useEffect } from \"react\";",
|
|
"import { Product, PetType } from \"../data/products\";",
|
|
"import { usePetStore } from \"../store/usePetStore\";",
|
|
"import { productService } from \"../services/productService\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { ProductCardSkeleton } from \"./Skeleton\";",
|
|
"import { toast } from \"sonner\";",
|
|
"import { useCartStore } from \"../store/cartStore\";",
|
|
"import SafeImage from \"./SafeImage\";"
|
|
],
|
|
"exports": [
|
|
"export default function ArchivePage({"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/AuthModal.tsx",
|
|
"sha256": "986be0c94060790ea5694cd9f756db4c196bc4896146d21e35e080ca837b5b21",
|
|
"byteCount": 17655,
|
|
"lineCount": 387,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState, useEffect, useRef } from \"react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { X, User, Building2, Heart, ShieldCheck, Phone, Key, LogIn, ArrowRight, RefreshCw } from \"lucide-react\";",
|
|
"import { useUserStore, UserRole } from \"../store/userStore\";",
|
|
"import { authService } from \"../services/authService\";",
|
|
"import { toast } from \"sonner\";",
|
|
"import { toPersian } from \"../lib/utils\";"
|
|
],
|
|
"exports": [
|
|
"export default function AuthModal({ isOpen, onClose }: AuthModalProps) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/B2BPortal.tsx",
|
|
"sha256": "5fde2d75add37f0a64dccc1bd916d78ecf3ec3bf8fdffda2176e9e677ce2ae0e",
|
|
"byteCount": 8985,
|
|
"lineCount": 192,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState, useEffect } from \"react\";",
|
|
"import { Product } from \"../data/products\";",
|
|
"import { useCartStore } from \"../store/cartStore\";",
|
|
"import { productService } from \"../services/productService\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import SafeImage from \"./SafeImage\";"
|
|
],
|
|
"exports": [
|
|
"export default function B2BPortal({ onClose }: { onClose: () => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/BlogPage.tsx",
|
|
"sha256": "7d0ae2089eca5af4c221d7d18be199a6037f628023c3964a6df957d7a541932e",
|
|
"byteCount": 20444,
|
|
"lineCount": 342,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React from \"react\";",
|
|
"import { motion } from \"motion/react\";",
|
|
"import { ChevronRight, Calendar, User, ArrowLeft, Sparkles, BookOpen } from \"lucide-react\";",
|
|
"import { Product } from \"../data/products\";",
|
|
"import { productService } from \"../services/productService\";"
|
|
],
|
|
"exports": [
|
|
"export default function BlogPage({ onBack, onProductClick }: { onBack: () => void, onProductClick: (p: Product) => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/CartDrawer.tsx",
|
|
"sha256": "faecc40e3f7c0bdfe1bacf4ba67451b9515a3837471b6e4f6554c62a155d4cdf",
|
|
"byteCount": 17956,
|
|
"lineCount": 310,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState, useEffect } from \"react\";",
|
|
"import { X, Trash2, Plus, Minus, ShoppingBag, ShieldCheck, ArrowLeft, Ticket, Sparkles, CheckCircle2 } from \"lucide-react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { toPersian, cn } from \"../lib/utils\";",
|
|
"import { useCartStore } from \"../store/cartStore\";",
|
|
"import { Product } from \"../data/products\";",
|
|
"import { productService } from \"../services/productService\";",
|
|
"import SafeImage from \"./SafeImage\";",
|
|
"import { toast } from \"sonner\";"
|
|
],
|
|
"exports": [
|
|
"export default function CartDrawer({ isOpen, onClose, onCheckout, onShopNavigate }: {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/CheckoutPage.tsx",
|
|
"sha256": "1d9470816ddd4d8dd539beba7a7d31641154ba763ff51ebdfc2804d31c4c2a5e",
|
|
"byteCount": 21057,
|
|
"lineCount": 381,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState, useEffect } from \"react\";",
|
|
"import { motion } from \"motion/react\";",
|
|
"import { toPersian, cn } from \"../lib/utils\";",
|
|
"import { useCartStore } from \"../store/cartStore\";",
|
|
"import { usePetStore } from \"../store/usePetStore\";",
|
|
"import { useUserStore } from \"../store/userStore\";",
|
|
"import { Product } from \"../data/products\";",
|
|
"import { productService } from \"../services/productService\";",
|
|
"import { toast } from \"sonner\";"
|
|
],
|
|
"exports": [
|
|
"export default function CheckoutPage({ onBack, onComplete }: { onBack: () => void; onComplete: (orderId: string) => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/DeleteConfirmModal.tsx",
|
|
"sha256": "7907927ed2d4bb1aeac9e675d77feda6b6b060a031fc7c7df01d7bca35121298",
|
|
"byteCount": 2393,
|
|
"lineCount": 62,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React from \"react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { Trash2, AlertTriangle, X } from \"lucide-react\";"
|
|
],
|
|
"exports": [
|
|
"export default function DeleteConfirmModal({ isOpen, onClose, onConfirm, title, message }: DeleteConfirmModalProps) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/ErrorBoundary.tsx",
|
|
"sha256": "a90fda767490f58218d82a0e3a48ecece06235248b84406220acd86b7112c740",
|
|
"byteCount": 2687,
|
|
"lineCount": 72,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import * as React from 'react';",
|
|
"import { Component, ErrorInfo, ReactNode } from 'react';",
|
|
"import { AlertTriangle, RefreshCcw } from 'lucide-react';"
|
|
],
|
|
"exports": [
|
|
"export class ErrorBoundary extends React.Component<Props, State> {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"ErrorBoundary"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/ErrorPages.tsx",
|
|
"sha256": "ec77817519a13c04467fe2d492dc6444d06ecf052afca9ff589fd5f3e9fe4c7f",
|
|
"byteCount": 2773,
|
|
"lineCount": 60,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React from 'react';",
|
|
"import { FileQuestion, AlertCircle, Home, RefreshCw } from 'lucide-react';"
|
|
],
|
|
"exports": [
|
|
"export const NotFoundPage = ({ onGoHome }: { onGoHome: () => void }) => {",
|
|
"export const ServerErrorPage = ({ onRetry }: { onRetry: () => void }) => {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"NotFoundPage",
|
|
"ServerErrorPage"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/FeaturedProducts.tsx",
|
|
"sha256": "df25d1ae82b4592cb1228f33ce9b152ab1f5c150c375eedc4816303c8f76eb13",
|
|
"byteCount": 7516,
|
|
"lineCount": 148,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { useState, useEffect, useMemo } from \"react\";",
|
|
"import { Product } from \"../data/products\";",
|
|
"import { usePetStore } from \"../store/usePetStore\";",
|
|
"import { productService } from \"../services/productService\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { Eye, ShoppingCart, ShieldCheck, Heart, AlertCircle, Sparkles } from \"lucide-react\";",
|
|
"import SafeImage from \"./SafeImage\";",
|
|
"import { ProductCardSkeleton } from \"./Skeleton\";"
|
|
],
|
|
"exports": [
|
|
"export default function FeaturedProducts({ onProductClick, onShopNavigate }: { onProductClick: (p: Product) => void, onShopNavigate: () => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/Footer.tsx",
|
|
"sha256": "120f21891ec195b502927386334d72237c1f80c04d48df725686fb9637af1c22",
|
|
"byteCount": 8311,
|
|
"lineCount": 128,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React from \"react\";",
|
|
"import { Phone, Mail, MapPin, Instagram, Youtube, Linkedin, ShieldCheck, Globe } from \"lucide-react\";"
|
|
],
|
|
"exports": [
|
|
"export default function Footer({ onNavigate, onShopNavigate, onB2BOpen }: {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/Header.tsx",
|
|
"sha256": "40ac019ff77dae5aee81e888af89081c4e8193a6ff3c4f1b1481012bdfad6b01",
|
|
"byteCount": 19286,
|
|
"lineCount": 364,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState, useRef, useEffect } from \"react\";",
|
|
"import { Search, ChevronDown, Menu, X, Pill, ShieldCheck, HeartPulse, Sparkles, ShoppingBag, User, PlusCircle, Check, Building2, LogIn, Wallet, LogOut, MapPin, FileHeart, Dog, Cat } from \"lucide-react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { useCartStore } from \"../store/cartStore\";",
|
|
"import { usePetStore } from \"../store/usePetStore\";",
|
|
"import { useUserStore } from \"../store/userStore\";",
|
|
"import { toast } from \"sonner\";",
|
|
"import HeaderButton from \"./HeaderButton\";",
|
|
"import AuthModal from \"./AuthModal\";",
|
|
"import { cn } from \"../lib/utils\";"
|
|
],
|
|
"exports": [
|
|
"export default function Header({"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/HeaderButton.tsx",
|
|
"sha256": "e7e508be65aeba6771625dd43de4e84fe889c17f97a1d30a918f852b460dd8b2",
|
|
"byteCount": 1839,
|
|
"lineCount": 53,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React from \"react\";",
|
|
"import { motion } from \"motion/react\";",
|
|
"import { toPersian } from \"../lib/utils\";"
|
|
],
|
|
"exports": [
|
|
"export default function HeaderButton({"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/Hero.tsx",
|
|
"sha256": "df02dbfa6f1b9c74440bac4c7695b80e8f608d2d00025d540332d2a7149c3b28",
|
|
"byteCount": 9932,
|
|
"lineCount": 196,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { motion, useMotionValue, useTransform, animate } from \"motion/react\";",
|
|
"import { ChevronLeft } from \"lucide-react\";",
|
|
"import { useEffect, useState } from \"react\";",
|
|
"import { toPersian } from \"../lib/utils\";",
|
|
"import { useSettingsStore } from \"../store/settingsStore\";"
|
|
],
|
|
"exports": [
|
|
"export default function Hero({ onProfileClick, onShopNavigate }: { onProfileClick?: () => void, onShopNavigate?: () => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"\\n"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/IngredientWiki.tsx",
|
|
"sha256": "9112b3ad9779255ea50df40787e5a62875cc711d838aa5fb5f4ff9cd383d12ea",
|
|
"byteCount": 10104,
|
|
"lineCount": 178,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { useMemo, useState, useEffect } from \"react\";",
|
|
"import { INGREDIENTS_WIKI, Product } from \"../data/products\";",
|
|
"import { motion } from \"motion/react\";",
|
|
"import { FlaskConical, CheckCircle2, ChevronRight, ChevronLeft, Beaker } from \"lucide-react\";",
|
|
"import { useSettingsStore } from \"../store/settingsStore\";",
|
|
"import { productService } from \"../services/productService\";"
|
|
],
|
|
"exports": [
|
|
"export default function IngredientWiki({ onProductClick, onBack }: { onProductClick: (p: Product) => void, onBack?: () => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/LoginModal.tsx",
|
|
"sha256": "a717089effda26a988fd522a14479f171cccaeedd07100c51cb8faf1f6300bfe",
|
|
"byteCount": 12362,
|
|
"lineCount": 288,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState, useEffect, useRef } from \"react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { X, ShieldCheck, Phone, Key, LogIn, ArrowRight, RefreshCw } from \"lucide-react\";",
|
|
"import { authService } from \"../services/authService\";",
|
|
"import { useUserStore } from \"../store/userStore\";",
|
|
"import { toast } from \"sonner\";",
|
|
"import { toPersian } from \"../lib/utils\";"
|
|
],
|
|
"exports": [
|
|
"export default function LoginModal({ isOpen, onClose, onLogin, petName, isAdvisorContext }: LoginModalProps) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/NetworkBanner.tsx",
|
|
"sha256": "13abbc38af102705fe15e533304223836ed6064a0c06e5dd217693cc36668874",
|
|
"byteCount": 2318,
|
|
"lineCount": 68,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState, useEffect } from 'react';",
|
|
"import { useNetworkStatus } from '../hooks/useNetworkStatus';",
|
|
"import { WifiOff, Wifi, X } from 'lucide-react';",
|
|
"import { motion, AnimatePresence } from 'motion/react';"
|
|
],
|
|
"exports": [
|
|
"export const NetworkBanner = () => {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"NetworkBanner"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/OrderDetailsModal.tsx",
|
|
"sha256": "f317fb006ed49f3f859d77f76991de618df7e277f98bd8d4a0622be3c26b4e80",
|
|
"byteCount": 13314,
|
|
"lineCount": 265,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React from \"react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { toPersian, cn } from \"../lib/utils\";",
|
|
"import SafeImage from \"./SafeImage\";"
|
|
],
|
|
"exports": [
|
|
"export default function OrderDetailsModal({ isOpen, onClose, order }: OrderDetailsModalProps) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/OrderSuccess.tsx",
|
|
"sha256": "0e1ee36d1658063758499b117c6bb6f13632ac80d8dc838c9dc84bf6e23cc1b6",
|
|
"byteCount": 5706,
|
|
"lineCount": 110,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useEffect, useState } from \"react\";",
|
|
"import { motion } from \"motion/react\";",
|
|
"import { useCartStore } from \"../store/cartStore\";",
|
|
"import { usePetStore } from \"../store/usePetStore\";"
|
|
],
|
|
"exports": [
|
|
"export default function OrderSuccess({ orderId, onNavigate }: { orderId: string; onNavigate: (v: any) => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/OrderTracking.tsx",
|
|
"sha256": "32f28b0f1fd4b46b8f871f2b9918db6e2b06f7468d83b990bd21ce5187bd4c43",
|
|
"byteCount": 9341,
|
|
"lineCount": 168,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState } from \"react\";",
|
|
"import { motion } from \"motion/react\";",
|
|
"import { useCartStore } from \"../store/cartStore\";"
|
|
],
|
|
"exports": [
|
|
"export default function OrderTracking({ onNavigate, onBack }: { onNavigate: (v: any) => void, onBack?: () => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/PetProfile.tsx",
|
|
"sha256": "d805ad77e12771ce2846392b74a1585c451a2581720af938bcaa39fbb2dc7af8",
|
|
"byteCount": 66705,
|
|
"lineCount": 1193,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState, useMemo, useEffect } from \"react\";",
|
|
"import { Product, PetType } from \"../data/products\";",
|
|
"import { productService } from \"../services/productService\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { PetProfileSkeleton } from \"./Skeleton\";",
|
|
"import { usePetStore, PetProfile as GlobalPetProfile, Reminder, HealthLog, PetConsumption } from \"../store/usePetStore\";",
|
|
"import { useCartStore } from \"../store/cartStore\";",
|
|
"import SafeImage from \"./SafeImage\";",
|
|
"import { toast } from \"sonner\";",
|
|
"import { toPersian, cn } from \"../lib/utils\";"
|
|
],
|
|
"exports": [
|
|
"export default function PetProfile({ onProductClick, onBack, initialView, advisorNeed }: {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"T",
|
|
"T"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/ProductPage.tsx",
|
|
"sha256": "e230769b1c71419eecae57d491256e3f2d2c360dbc2245d9a009139cc2649179",
|
|
"byteCount": 33351,
|
|
"lineCount": 599,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { useState, useMemo } from \"react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { toPersian, cn } from \"../lib/utils\";",
|
|
"import { Product } from \"../data/products\";",
|
|
"import { productService } from \"../services/productService\";",
|
|
"import { SCIENTIFIC_TERMS } from \"../data/scientificTerms\";",
|
|
"import { useSettingsStore } from \"../store/settingsStore\";",
|
|
"import { create } from \"zustand\";",
|
|
"import { useCartStore } from \"../store/cartStore\";",
|
|
"import { usePetStore } from \"../store/usePetStore\";",
|
|
"import { toast } from \"sonner\";",
|
|
"import Tooltip from \"./Tooltip\";",
|
|
"import SafeImage from \"./SafeImage\";"
|
|
],
|
|
"exports": [
|
|
"export default function ProductPage({ product, onBack, onProductClick, onWikiNavigate, onShopNavigate }: {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/SafeImage.tsx",
|
|
"sha256": "81f495bd2b062276d4838601183715aabcefe1616300e01094f089dcc1442dbf",
|
|
"byteCount": 2623,
|
|
"lineCount": 74,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React from \"react\";",
|
|
"import { ImageOff, Sparkles } from \"lucide-react\";",
|
|
"import { cn } from \"../lib/utils\";"
|
|
],
|
|
"exports": [
|
|
"export default function SafeImage({"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/SearchResultsPage.tsx",
|
|
"sha256": "9f33179f6ae1fbf9514a11c6177ce7c826d6f3adc5601e33d7ab9536ac0356c2",
|
|
"byteCount": 8048,
|
|
"lineCount": 138,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useMemo, useState, useEffect } from \"react\";",
|
|
"import { Search, ShoppingBag, ChevronLeft, ArrowRight, Activity, Sparkles, HeartPulse, Stethoscope, ShieldCheck, Heart, AlertCircle } from \"lucide-react\";",
|
|
"import { usePetStore } from \"../store/usePetStore\";",
|
|
"import { motion } from \"motion/react\";",
|
|
"import { Product } from \"../data/products\";",
|
|
"import { productService } from \"../services/productService\";"
|
|
],
|
|
"exports": [
|
|
"export default function SearchResultsPage({ query, onProductClick, onBack }: { query: string; onProductClick: (p: Product) => void; onBack: () => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/Skeleton.tsx",
|
|
"sha256": "fc19633c914e81c7eef71a70082bd495cf20acfe7700ea7099d6da0b012449f4",
|
|
"byteCount": 3155,
|
|
"lineCount": 86,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React from 'react';"
|
|
],
|
|
"exports": [
|
|
"export const Skeleton = ({ className }: SkeletonProps) => {",
|
|
"export const ProductCardSkeleton = () => {",
|
|
"export const PetProfileSkeleton = () => {",
|
|
"export const OrderRowSkeleton = () => {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"Skeleton",
|
|
"ProductCardSkeleton",
|
|
"PetProfileSkeleton",
|
|
"OrderRowSkeleton"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/SmartAdvisor.tsx",
|
|
"sha256": "13e9aac5ae214bf4e2849d1db032d978287e766fd01335d1795d31828e9caaa0",
|
|
"byteCount": 15860,
|
|
"lineCount": 297,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState } from \"react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { useSettingsStore } from \"../store/settingsStore\";",
|
|
"import { toPersian, cn } from \"../lib/utils\";"
|
|
],
|
|
"exports": [
|
|
"export default function SmartAdvisor({ onComplete }: SmartAdvisorProps) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/Tooltip.tsx",
|
|
"sha256": "562319624a2a6d8877e8bd68c31304b01049882a2a4e85c67216b5a74f9aef10",
|
|
"byteCount": 2561,
|
|
"lineCount": 62,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState } from 'react';",
|
|
"import { motion, AnimatePresence } from 'motion/react';",
|
|
"import { Info, ExternalLink } from 'lucide-react';",
|
|
"import { SCIENTIFIC_TERMS } from '../data/scientificTerms';",
|
|
"import { useSettingsStore } from '../store/settingsStore';"
|
|
],
|
|
"exports": [
|
|
"export default function Tooltip({ termKey, children, onWikiNavigate }: TooltipProps) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/TopUpModal.tsx",
|
|
"sha256": "09c967e8d366ae9969f0c2e2beffb893072aa8818c3b3586ad1f9ba646f8fef4",
|
|
"byteCount": 7049,
|
|
"lineCount": 154,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState } from \"react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { X, CreditCard, Sparkles, CheckCircle2, TrendingUp, DollarSign } from \"lucide-react\";",
|
|
"import { toPersian, cn } from \"../lib/utils\";",
|
|
"import { toast } from \"sonner\";"
|
|
],
|
|
"exports": [
|
|
"export default function TopUpModal({ isOpen, onClose, onConfirm }: TopUpModalProps) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/UserDashboard.tsx",
|
|
"sha256": "9478a4057c97f362b186d81bfcdda2e8815c3118cfa07f49c38b79474a41e04b",
|
|
"byteCount": 37598,
|
|
"lineCount": 646,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState } from \"react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { User, ShoppingBag, Wallet, MapPin, LogOut, ChevronRight, Package, Calendar, UserCircle, ShoppingCart, Trash2, Edit2, Phone, Hash, CheckCircle2, ArrowUpCircle, ArrowDownCircle, Info, Clock, CheckCircle, Heart, Sparkles } from \"lucide-react\";",
|
|
"import { OrderRowSkeleton } from \"./Skeleton\";",
|
|
"import { useUserStore, Address } from \"../store/userStore\";",
|
|
"import { useCartStore } from \"../store/cartStore\";",
|
|
"import { toPersian, cn } from \"../lib/utils\";",
|
|
"import { toast } from \"sonner\";",
|
|
"import OrderDetailsModal from \"./OrderDetailsModal\";",
|
|
"import AddressModal from \"./AddressModal\";",
|
|
"import DeleteConfirmModal from \"./DeleteConfirmModal\";",
|
|
"import TopUpModal from \"./TopUpModal\";"
|
|
],
|
|
"exports": [
|
|
"export default function UserDashboard({ onBack, onNavigate }: { onBack: () => void, onNavigate: (v: any) => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/VetGallery.tsx",
|
|
"sha256": "2dfbead4e5eb98a56bdff1c3a66c513254c00a3332a9271a34df481f4f47d744",
|
|
"byteCount": 7427,
|
|
"lineCount": 148,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState } from \"react\";",
|
|
"import { Play, PlayCircle, Star, ShieldCheck, X } from \"lucide-react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";"
|
|
],
|
|
"exports": [
|
|
"export default function VetGallery({ onNavigate }: { onNavigate?: (v: any) => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/VideosPage.tsx",
|
|
"sha256": "9912b04a03bb2891557a19c39b04a88b254af6375a072fbcab479524c056a49b",
|
|
"byteCount": 9112,
|
|
"lineCount": 186,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import React, { useState } from \"react\";",
|
|
"import { motion, AnimatePresence } from \"motion/react\";",
|
|
"import { ChevronRight, PlayCircle, Star, ShieldCheck, X, Search, Clock, User } from \"lucide-react\";"
|
|
],
|
|
"exports": [
|
|
"export default function VideosPage({ onBack }: { onBack: () => void }) {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/__tests__/CartDrawer.test.tsx",
|
|
"sha256": "fc4f95ab29d719bb152687cebf8feec8273e05caca29726ca8cdfcbf9ef91912",
|
|
"byteCount": 3131,
|
|
"lineCount": 102,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { describe, it, expect, vi, beforeEach } from 'vitest';",
|
|
"import { render, screen, fireEvent } from '@testing-library/react';",
|
|
"import React from 'react';",
|
|
"import CartDrawer from '../CartDrawer';",
|
|
"import { useCartStore } from '../../store/cartStore';",
|
|
"import { productService } from '../../services/productService';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"CartDrawer",
|
|
"renders empty cart state when no items in cart",
|
|
"renders cart items and total when items are present",
|
|
"triggers updateQuantity when plus/minus buttons are clicked"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/__tests__/FeaturedProducts.test.tsx",
|
|
"sha256": "e411316d9a5b8b0b6c7720ebd04c85075b01c38323d217badf165840f1bb100d",
|
|
"byteCount": 2945,
|
|
"lineCount": 82,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { describe, it, expect, vi, beforeEach } from 'vitest';",
|
|
"import { render, screen, fireEvent, waitFor } from '@testing-library/react';",
|
|
"import React from 'react';",
|
|
"import FeaturedProducts from '../FeaturedProducts';",
|
|
"import { productService } from '../../services/productService';",
|
|
"import { usePetStore } from '../../store/usePetStore';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"FeaturedProducts",
|
|
"renders loading skeletons initially",
|
|
"renders products once loaded",
|
|
"calls onProductClick when product card is clicked",
|
|
"calls onShopNavigate when navigation link is clicked"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/__tests__/Footer.test.tsx",
|
|
"sha256": "57dd04273765b65b4e906552e74e6d5c4d420e9d06498d8093c4abf0ed2b3c3f",
|
|
"byteCount": 1679,
|
|
"lineCount": 44,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { describe, it, expect, vi } from 'vitest';",
|
|
"import { render, screen, fireEvent } from '@testing-library/react';",
|
|
"import React from 'react';",
|
|
"import Footer from '../Footer';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"Footer",
|
|
"renders footer brand text and standard layout elements",
|
|
"triggers onNavigate and onShopNavigate when quick links are clicked"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/__tests__/Header.test.tsx",
|
|
"sha256": "5c6f361116a37b8556bb01829708e0c1490fe59e12c30b5bdda9d20cabefdde8",
|
|
"byteCount": 3156,
|
|
"lineCount": 111,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { describe, it, expect, vi, beforeEach } from 'vitest';",
|
|
"import { render, screen, fireEvent } from '@testing-library/react';",
|
|
"import React from 'react';",
|
|
"import Header from '../Header';",
|
|
"import { useCartStore } from '../../store/cartStore';",
|
|
"import { usePetStore } from '../../store/usePetStore';",
|
|
"import { useUserStore } from '../../store/userStore';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"Header",
|
|
"renders brand name and login button when guest",
|
|
"renders user first name and pet selection when logged in",
|
|
"calls onCartOpen when click on cart button"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/__tests__/Hero.test.tsx",
|
|
"sha256": "7609965c99249fb454871c286a10237c4eb9996264a68c6d25b8057477320cf5",
|
|
"byteCount": 1679,
|
|
"lineCount": 44,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { describe, it, expect, vi, beforeEach } from 'vitest';",
|
|
"import { render, screen, fireEvent } from '@testing-library/react';",
|
|
"import React from 'react';",
|
|
"import Hero from '../Hero';",
|
|
"import { useSettingsStore } from '../../store/settingsStore';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"Hero",
|
|
"renders title and description from settingsStore",
|
|
"calls onShopNavigate when "
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/components/__tests__/Tooltip.test.tsx",
|
|
"sha256": "6a25742e1d4737fdb8d7a75a1e927fb3308203bdac4dfbe540f6f988def7ee9b",
|
|
"byteCount": 1536,
|
|
"lineCount": 51,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { describe, it, expect, vi } from 'vitest';",
|
|
"import { render, screen, fireEvent } from '@testing-library/react';",
|
|
"import React from 'react';",
|
|
"import Tooltip from '../Tooltip';",
|
|
"import { useSettingsStore } from '../../store/settingsStore';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"Tooltip",
|
|
"should render children correctly",
|
|
"should display tooltip definition on hover"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/data/products.ts",
|
|
"sha256": "06775f65c485d1dbd56b0f0406fc910c94f1747c1c56422aac077caeb5c02b56",
|
|
"byteCount": 31112,
|
|
"lineCount": 514,
|
|
"language": "TypeScript",
|
|
"imports": [],
|
|
"exports": [
|
|
"export interface Specialist {",
|
|
"export type PetType = \"سگ\" | \"گربه\" | \"هر دو\";",
|
|
"export interface IngredientInfo {",
|
|
"export interface DosageResult {",
|
|
"export interface FAQ {",
|
|
"export interface Product {",
|
|
"export const INGREDIENTS_WIKI: IngredientInfo[] = [",
|
|
"export const PRODUCTS: Product[] = ["
|
|
],
|
|
"topLevelSymbols": [
|
|
"Specialist",
|
|
"PetType",
|
|
"IngredientInfo",
|
|
"DosageResult",
|
|
"FAQ",
|
|
"Product",
|
|
"INGREDIENTS_WIKI",
|
|
"PRODUCTS"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/data/scientificTerms.ts",
|
|
"sha256": "a826894be746caa0233e6362c33fdf04a386bb4779d924b37868256b5f04394f",
|
|
"byteCount": 2182,
|
|
"lineCount": 44,
|
|
"language": "TypeScript",
|
|
"imports": [],
|
|
"exports": [
|
|
"export interface ScientificTerm {",
|
|
"export const SCIENTIFIC_TERMS: Record<string, ScientificTerm> = {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"ScientificTerm",
|
|
"SCIENTIFIC_TERMS"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/hooks/useNetworkStatus.ts",
|
|
"sha256": "97a1eb7b50abc7f05c6d430db307fd1739fac0732faf250986ed76e52099de78",
|
|
"byteCount": 574,
|
|
"lineCount": 21,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { useState, useEffect } from 'react';"
|
|
],
|
|
"exports": [
|
|
"export function useNetworkStatus() {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"useNetworkStatus"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/index.css",
|
|
"sha256": "4379a2e1316cb65fcce8b6a32e2282232b9a5f3d503e5fe1901d0405340721d3",
|
|
"byteCount": 1887,
|
|
"lineCount": 75,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/lib/utils.ts",
|
|
"sha256": "21a3949a05abd11a117ab450826d09eddde87058b80cb2f43a28158c3da3e6fc",
|
|
"byteCount": 323,
|
|
"lineCount": 9,
|
|
"language": "TypeScript",
|
|
"imports": [],
|
|
"exports": [
|
|
"export const toPersian = (n: number | string | undefined | null) => {",
|
|
"export function cn(...classes: (string | boolean | undefined)[]) {"
|
|
],
|
|
"topLevelSymbols": [
|
|
"toPersian",
|
|
"cn"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/main.tsx",
|
|
"sha256": "8b129211a1e36a01a0c294633d8463c9a661a78fe04c3f26f45ca2fdabdedff0",
|
|
"byteCount": 241,
|
|
"lineCount": 11,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import {StrictMode} from 'react';",
|
|
"import {createRoot} from 'react-dom/client';",
|
|
"import App from './App.tsx';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/services/api.ts",
|
|
"sha256": "da0a9cc677949951c83dc2a846072dc14744bcd84c06d68d74c7e9b52d08264b",
|
|
"byteCount": 506,
|
|
"lineCount": 24,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import axios from 'axios';"
|
|
],
|
|
"exports": [
|
|
"export default api;"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/services/authService.ts",
|
|
"sha256": "da9897908b19513fb41a5b09fd641fae7675091f5887641737c15fa6109e8bd1",
|
|
"byteCount": 2877,
|
|
"lineCount": 103,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import api from './api';"
|
|
],
|
|
"exports": [
|
|
"export interface User {",
|
|
"export interface AuthResponse {",
|
|
"export class AuthService {",
|
|
"export const authService = AuthService.getInstance();"
|
|
],
|
|
"topLevelSymbols": [
|
|
"User",
|
|
"AuthResponse",
|
|
"AuthService",
|
|
"authService"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/services/orderService.ts",
|
|
"sha256": "bafd959741e791ed278a0d6c74ae3e110f90222ed65a93565527faf64739edd1",
|
|
"byteCount": 2148,
|
|
"lineCount": 80,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import api from './api';",
|
|
"import { CartItem } from '../store/cartStore';"
|
|
],
|
|
"exports": [
|
|
"export interface OrderItem {",
|
|
"export interface Order {",
|
|
"export class OrderService {",
|
|
"export const orderService = OrderService.getInstance();"
|
|
],
|
|
"topLevelSymbols": [
|
|
"OrderItem",
|
|
"Order",
|
|
"OrderService",
|
|
"orderService"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/services/productService.ts",
|
|
"sha256": "cf3077a9e8f8786fb37a9f5da74400552a68df2fed0cd75c171cea25e354ceb0",
|
|
"byteCount": 3890,
|
|
"lineCount": 107,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import api from './api';",
|
|
"import { PRODUCTS, Product, PetType } from \"../data/products\";"
|
|
],
|
|
"exports": [
|
|
"export class ProductService {",
|
|
"export const productService = ProductService.getInstance();"
|
|
],
|
|
"topLevelSymbols": [
|
|
"ProductService",
|
|
"productService"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/store/__tests__/cartStore.test.ts",
|
|
"sha256": "6e8809d62f3d49ffca5146a831391e68633858dfbbae926aad1d810271d54a9a",
|
|
"byteCount": 4170,
|
|
"lineCount": 143,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { describe, it, expect, beforeEach, vi } from 'vitest';",
|
|
"import { useCartStore } from '../cartStore';",
|
|
"import { orderService } from '../../services/orderService';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"cartStore",
|
|
"should add item to cart",
|
|
"should increment quantity if item already in cart",
|
|
"should remove item from cart",
|
|
"should update quantity",
|
|
"should remove item if update quantity is <= 0",
|
|
"should apply discount coupon",
|
|
"should calculate subtotal, discount and total",
|
|
"should create order successfully via orderService"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/store/__tests__/settingsStore.test.ts",
|
|
"sha256": "19d9585ceb5ab219d6c475614da324711d4e40ccf476b486ba5772d8311b00f7",
|
|
"byteCount": 2011,
|
|
"lineCount": 63,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { describe, it, expect, beforeEach, vi } from 'vitest';",
|
|
"import { useSettingsStore } from '../settingsStore';",
|
|
"import api from '../../services/api';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"settingsStore",
|
|
"should return fallback if key is not found",
|
|
"should return value if key is found",
|
|
"should fetch settings successfully and map array to object"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/store/__tests__/userStore.test.ts",
|
|
"sha256": "728192566ff3da8a284af6b17e370b15bb4103da7f7404140daf52ade2d7a566",
|
|
"byteCount": 3690,
|
|
"lineCount": 134,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { describe, it, expect, beforeEach, vi } from 'vitest';",
|
|
"import { useUserStore } from '../userStore';",
|
|
"import { authService } from '../../services/authService';",
|
|
"import api from '../../services/api';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [
|
|
"userStore",
|
|
"should logout correctly",
|
|
"should fetch profile successfully",
|
|
"should update profile correctly",
|
|
"should add address and call fetchProfile"
|
|
],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/store/cartStore.ts",
|
|
"sha256": "dd327a89159929614f81c1103d40a739c5e753b95f9b1bb2a823e0e2346b8e12",
|
|
"byteCount": 5694,
|
|
"lineCount": 167,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { create } from \"zustand\";",
|
|
"import { persist } from \"zustand/middleware\";",
|
|
"import { Product } from \"../data/products\";",
|
|
"import { orderService } from \"../services/orderService\";"
|
|
],
|
|
"exports": [
|
|
"export interface CartItem {",
|
|
"export const useCartStore = create<CartStore>()("
|
|
],
|
|
"topLevelSymbols": [
|
|
"CartItem",
|
|
"useCartStore"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/store/settingsStore.ts",
|
|
"sha256": "624187b749ef26e05633e0f6f5b26e1d6509d9d7b23d1ea9c807bcb4167917f3",
|
|
"byteCount": 1644,
|
|
"lineCount": 60,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { create } from \"zustand\";",
|
|
"import api from \"../services/api\";"
|
|
],
|
|
"exports": [
|
|
"export interface ScientificTerm {",
|
|
"export const useSettingsStore = create<SettingsStore>()((set, get) => ({"
|
|
],
|
|
"topLevelSymbols": [
|
|
"ScientificTerm",
|
|
"useSettingsStore"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/store/usePetStore.ts",
|
|
"sha256": "d44296271fb8f1bfd3f3d628c347df02b433d8abdeed835b8e1218b0f8ecb509",
|
|
"byteCount": 7771,
|
|
"lineCount": 215,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { create } from \"zustand\";",
|
|
"import { persist } from \"zustand/middleware\";"
|
|
],
|
|
"exports": [
|
|
"export interface Reminder {",
|
|
"export interface HealthLog {",
|
|
"export interface PetConsumption {",
|
|
"export interface PetProfile {",
|
|
"export const usePetStore = create<PetStore>()("
|
|
],
|
|
"topLevelSymbols": [
|
|
"Reminder",
|
|
"HealthLog",
|
|
"PetConsumption",
|
|
"PetProfile",
|
|
"usePetStore"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/store/userStore.ts",
|
|
"sha256": "d58219ae73e58ba5bc7498173c9a2787d1d2a55798e38833e652c5c361a60799",
|
|
"byteCount": 7447,
|
|
"lineCount": 220,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { create } from \"zustand\";",
|
|
"import { persist } from \"zustand/middleware\";",
|
|
"import { authService } from \"../services/authService\";",
|
|
"import api from \"../services/api\";",
|
|
"import { useCartStore } from \"./cartStore\";",
|
|
"import { usePetStore } from \"./usePetStore\";"
|
|
],
|
|
"exports": [
|
|
"export type UserRole = \"User_Guest\" | \"User_PetOwner\" | \"User_Partner\";",
|
|
"export interface Address {",
|
|
"export interface Transaction {",
|
|
"export const useUserStore = create<UserStore>()("
|
|
],
|
|
"topLevelSymbols": [
|
|
"UserRole",
|
|
"Address",
|
|
"Transaction",
|
|
"useUserStore"
|
|
],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/test/setup.ts",
|
|
"sha256": "9d7cdb55306fa51fd1b8badbec660b2f2e1d7d78531be1e5807f15491e93d9ef",
|
|
"byteCount": 1607,
|
|
"lineCount": 68,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import { vi } from 'vitest';"
|
|
],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "src/vite-env.d.ts",
|
|
"sha256": "424faf9241dd699dda995b367ed36665732da1e6ec1f33b2fd40394488ecac92",
|
|
"byteCount": 39,
|
|
"lineCount": 2,
|
|
"language": "TypeScript",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "swagger.yml",
|
|
"sha256": "800b2e02103b50a12f3ca294af2b526c32635cabe0b65f41fdb07c7c6ec1ff6b",
|
|
"byteCount": 3713,
|
|
"lineCount": 137,
|
|
"language": "Plain text",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "tsconfig.json",
|
|
"sha256": "a9d48a003eb8b17b0d5765de18a9ff32fa9d3c54ce92ac98e5784f39c2e59584",
|
|
"byteCount": 631,
|
|
"lineCount": 29,
|
|
"language": "JSON",
|
|
"imports": [],
|
|
"exports": [],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [
|
|
"compilerOptions",
|
|
"target",
|
|
"experimentalDecorators",
|
|
"useDefineForClassFields",
|
|
"module",
|
|
"lib",
|
|
"skipLibCheck",
|
|
"moduleResolution",
|
|
"isolatedModules",
|
|
"moduleDetection",
|
|
"allowJs",
|
|
"jsx",
|
|
"paths",
|
|
"@/*",
|
|
"allowImportingTsExtensions"
|
|
],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
},
|
|
{
|
|
"path": "vite.config.ts",
|
|
"sha256": "245a8a2c544f56a4c4a59be6e3afc77d74dd51311e0f8ca3fe0fcfb1959f979f",
|
|
"byteCount": 1288,
|
|
"lineCount": 44,
|
|
"language": "TypeScript",
|
|
"imports": [
|
|
"import tailwindcss from '@tailwindcss/vite';",
|
|
"import react from '@vitejs/plugin-react';",
|
|
"import path from 'path';",
|
|
"import {defineConfig, loadEnv} from 'vite';"
|
|
],
|
|
"exports": [
|
|
"export default defineConfig(({mode}) => {"
|
|
],
|
|
"topLevelSymbols": [],
|
|
"frameworkDecorators": [],
|
|
"testSuiteNames": [],
|
|
"configurationKeys": [],
|
|
"readSucceeded": true,
|
|
"readError": null
|
|
}
|
|
] |