{
  "ConnectionStrings": {
    "Redis": "49.232.6.45:6379,password=MsuMshk112233,abortConnect=false"
  },
  "Database": {
    "DataSources": {
      "AppDatabase": {
        "Write": "Host=120.53.222.17;Port=5432;Database=takeout_app_db;Username=app_user;Password=AppUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50",
        "Reads": [
          "Host=120.53.222.17;Port=5432;Database=takeout_app_db;Username=app_user;Password=AppUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50"
        ],
        "CommandTimeoutSeconds": 30,
        "MaxRetryCount": 3,
        "MaxRetryDelaySeconds": 5
      },
      "IdentityDatabase": {
        "Write": "Host=120.53.222.17;Port=5432;Database=takeout_identity_db;Username=identity_user;Password=IdentityUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50",
        "Reads": [
          "Host=120.53.222.17;Port=5432;Database=takeout_identity_db;Username=identity_user;Password=IdentityUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50"
        ],
        "CommandTimeoutSeconds": 30,
        "MaxRetryCount": 3,
        "MaxRetryDelaySeconds": 5
      },
      "DictionaryDatabase": {
        "Write": "Host=120.53.222.17;Port=5432;Database=takeout_dictionary_db;Username=dictionary_user;Password=DictionaryUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50",
        "Reads": [
          "Host=120.53.222.17;Port=5432;Database=takeout_dictionary_db;Username=dictionary_user;Password=DictionaryUser112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50"
        ],
        "CommandTimeoutSeconds": 30,
        "MaxRetryCount": 3,
        "MaxRetryDelaySeconds": 5
      },
      "LogsDatabase": {
        "Write": "Host=120.53.222.17;Port=5432;Database=takeout_logs_db;Username=logs_user;Password=Logs112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50",
        "Reads": [
          "Host=120.53.222.17;Port=5432;Database=takeout_logs_db;Username=logs_user;Password=Logs112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50"
        ],
        "CommandTimeoutSeconds": 30,
        "MaxRetryCount": 3,
        "MaxRetryDelaySeconds": 5
      }
    }
  },
  "Identity": {
    "Jwt": {
      "Issuer": "takeout-saas",
      "Audience": "takeout-saas-clients",
      "Secret": "psZEx_O##]Mq(W.1$?8Aia*LM03sXGGx",
      "AccessTokenExpirationMinutes": 120,
      "RefreshTokenExpirationMinutes": 10080
    },
    "LoginRateLimit": {
      "WindowSeconds": 60,
      "MaxAttempts": 5
    },
    "RefreshTokenStore": {
      "Prefix": "identity:refresh:"
    },
    "AdminSeed": {
      "Users": []
    }
  },
  "Dictionary": {
    "Cache": {
      "SlidingExpiration": "00:30:00"
    }
  },
  "CacheWarmup": {
    "DictionaryCodes": [
      "order_status",
      "payment_method",
      "shipping_method",
      "product_category",
      "user_role"
    ]
  },
  "Storage": {
    "Provider": "TencentCos",
    "CdnBaseUrl": "https://saas2025-1388556178.cos.ap-beijing.myqcloud.com",
    "TencentCos": {
      "SecretId": "AKID52mHageV8ZnnY5NRL3Xq270fAcw2vb5R",
      "SecretKey": "B8sPitsiEXcS4ScaMvGMErFOL3ZqsgFa",
      "Region": "ap-beijing",
      "Bucket": "saas2025-1388556178",
      "Endpoint": "https://saas2025-1388556178.cos.ap-beijing.myqcloud.com",
      "CdnBaseUrl": "https://saas2025-1388556178.cos.ap-beijing.myqcloud.com",
      "UseHttps": true,
      "ForcePathStyle": false
    },
    "QiniuKodo": {
      "AccessKey": "QINIU_ACCESS_KEY",
      "SecretKey": "QINIU_SECRET_KEY",
      "Bucket": "takeout-files",
      "DownloadDomain": "",
      "Endpoint": "",
      "UseHttps": true,
      "SignedUrlExpirationMinutes": 30
    },
    "AliyunOss": {
      "AccessKeyId": "OSS_ACCESS_KEY_ID",
      "AccessKeySecret": "OSS_ACCESS_KEY_SECRET",
      "Endpoint": "https://oss-cn-hangzhou.aliyuncs.com",
      "Bucket": "takeout-files",
      "CdnBaseUrl": "",
      "UseHttps": true
    },
    "Security": {
      "MaxFileSizeBytes": 10485760,
      "AllowedImageExtensions": [
        ".jpg",
        ".jpeg",
        ".png",
        ".webp",
        ".gif"
      ],
      "AllowedFileExtensions": [
        ".jpg",
        ".jpeg",
        ".png",
        ".webp",
        ".gif",
        ".pdf"
      ],
      "DefaultUrlExpirationMinutes": 30,
      "EnableRefererValidation": true,
      "AllowedReferers": [
        "https://admin.example.com",
        "https://miniapp.example.com"
      ],
      "AntiLeechTokenSecret": "ReplaceWithARandomToken"
    }
  },
  "Sms": {
    "Provider": "Tencent",
    "DefaultSignName": "外卖SaaS",
    "UseMock": true,
    "Tencent": {
      "SecretId": "TENCENT_SMS_SECRET_ID",
      "SecretKey": "TENCENT_SMS_SECRET_KEY",
      "SdkAppId": "1400000000",
      "SignName": "外卖SaaS",
      "Region": "ap-beijing",
      "Endpoint": "https://sms.tencentcloudapi.com"
    },
    "Aliyun": {
      "AccessKeyId": "ALIYUN_SMS_AK",
      "AccessKeySecret": "ALIYUN_SMS_SK",
      "Endpoint": "dysmsapi.aliyuncs.com",
      "SignName": "外卖SaaS",
      "Region": "cn-hangzhou"
    },
    "SceneTemplates": {
      "login": "LOGIN_TEMPLATE_ID",
      "register": "REGISTER_TEMPLATE_ID",
      "reset": "RESET_TEMPLATE_ID"
    },
    "VerificationCode": {
      "CodeLength": 6,
      "ExpireMinutes": 5,
      "CooldownSeconds": 60,
      "CachePrefix": "sms:code"
    }
  },
  "RabbitMQ": {
    "Host": "49.232.6.45",
    "Port": 5672,
    "Username": "admin",
    "Password": "msumshk112233",
    "VirtualHost": "/",
    "Exchange": "takeout.events",
    "ExchangeType": "topic",
    "PrefetchCount": 20
  },
  "Scheduler": {
    "ConnectionString": "Host=120.53.222.17;Port=5432;Database=takeout_hangfire_db;Username=hangfire_user;Password=HangFire112233;Pooling=true;Minimum Pool Size=5;Maximum Pool Size=50",
    "WorkerCount": 5,
    "DashboardEnabled": false,
    "DashboardPath": "/hangfire"
  },
  "Otel": {
    "Endpoint": "",
    "Sampling": "ParentBasedAlwaysOn",
    "UseConsoleExporter": true
  }
}
