codenuk_backend_mine/services/unison/unison_api.json
2025-10-03 10:13:06 +05:30

647 lines
20 KiB
JSON

{
"info": {
"name": "Unison - Unified Tech Stack Recommendation Service",
"_postman_id": "unison-api-complete-2025",
"description": "Complete API collection for Unison service - unified tech stack and template recommendations",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"variable": [
{
"key": "baseUrl",
"value": "https://backend.codenuk.com",
"type": "string",
"description": "Base URL for Unison service"
},
{
"key": "templateId",
"value": "123e4567-e89b-12d3-a456-426614174000",
"type": "string",
"description": "Sample template ID for testing"
},
{
"key": "recommendationId",
"value": "",
"type": "string",
"description": "Store recommendation ID from unified request"
}
],
"item": [
{
"name": "Service Health & Info",
"item": [
{
"name": "Root Endpoint - Service Info",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/",
"host": ["{{baseUrl}}"]
}
},
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.test(\"Status code is 200\", function () {",
" pm.response.to.have.status(200);",
"});",
"",
"pm.test(\"Response has service info\", function () {",
" const jsonData = pm.response.json();",
" pm.expect(jsonData).to.have.property('message');",
" pm.expect(jsonData).to.have.property('version');",
" pm.expect(jsonData).to.have.property('status');",
"});"
]
}
}
]
},
{
"name": "Health Check",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/health",
"host": ["{{baseUrl}}"],
"path": ["health"]
}
},
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.test(\"Health check responds\", function () {",
" pm.response.to.have.status.oneOf([200, 503]);",
"});",
"",
"pm.test(\"Has health status\", function () {",
" const jsonData = pm.response.json();",
" pm.expect(jsonData).to.have.property('status');",
" pm.expect(jsonData).to.have.property('service', 'unison');",
"});"
]
}
}
]
},
{
"name": "Detailed Health Check",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/health/detailed",
"host": ["{{baseUrl}}"],
"path": ["health", "detailed"]
}
}
}
]
},
{
"name": "Unified Recommendations",
"item": [
{
"name": "Unified - Domain Only (Basic)",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"domain\": \"healthcare\",\n \"budget\": 10000\n}"
},
"url": {
"raw": "{{baseUrl}}/api/recommendations/unified",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "unified"]
}
},
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.test(\"Status code is 200\", function () {",
" pm.response.to.have.status(200);",
"});",
"",
"pm.test(\"Response has recommendation data\", function () {",
" const jsonData = pm.response.json();",
" pm.expect(jsonData).to.have.property('success', true);",
" pm.expect(jsonData).to.have.property('data');",
" pm.expect(jsonData.data).to.have.property('stack_name');",
"});",
"",
"pm.test(\"Save request ID\", function () {",
" const jsonData = pm.response.json();",
" if (jsonData.requestId) {",
" pm.collectionVariables.set('recommendationId', jsonData.requestId);",
" }",
"});"
]
}
}
]
},
{
"name": "Unified - With Template ID",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"domain\": \"ecommerce\",\n \"budget\": 15000,\n \"templateId\": \"{{templateId}}\",\n \"preferredTechnologies\": [\"React\", \"Node.js\"],\n \"includeSimilar\": true,\n \"includeKeywords\": true,\n \"forceRefresh\": false\n}"
},
"url": {
"raw": "{{baseUrl}}/api/recommendations/unified",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "unified"]
}
}
},
{
"name": "Unified - Full Parameters",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"domain\": \"fintech\",\n \"budget\": 25000,\n \"templateId\": \"{{templateId}}\",\n \"preferredTechnologies\": [\"React\", \"Python\", \"PostgreSQL\"],\n \"includeSimilar\": true,\n \"includeKeywords\": true,\n \"forceRefresh\": true\n}"
},
"url": {
"raw": "{{baseUrl}}/api/recommendations/unified",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "unified"]
}
}
},
{
"name": "Unified - Minimal Request",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{}"
},
"url": {
"raw": "{{baseUrl}}/api/recommendations/unified",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "unified"]
}
}
}
]
},
{
"name": "Individual Service Recommendations",
"item": [
{
"name": "Tech Stack Only - Basic",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/recommendations/tech-stack?domain=healthcare&budget=10000",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "tech-stack"],
"query": [
{
"key": "domain",
"value": "healthcare"
},
{
"key": "budget",
"value": "10000"
}
]
}
}
},
{
"name": "Tech Stack Only - With Preferences",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/recommendations/tech-stack?domain=ecommerce&budget=15000&preferredTechnologies=React,Node.js,PostgreSQL",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "tech-stack"],
"query": [
{
"key": "domain",
"value": "ecommerce"
},
{
"key": "budget",
"value": "15000"
},
{
"key": "preferredTechnologies",
"value": "React,Node.js,PostgreSQL"
}
]
}
}
},
{
"name": "Template Only - Basic",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/recommendations/template/{{templateId}}",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "template", "{{templateId}}"]
}
}
},
{
"name": "Template Only - Force Refresh",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/recommendations/template/{{templateId}}?force_refresh=true",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "template", "{{templateId}}"],
"query": [
{
"key": "force_refresh",
"value": "true"
}
]
}
}
}
]
},
{
"name": "Stored Recommendations",
"item": [
{
"name": "Get Recent Recommendations",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/recommendations/stored?limit=10",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "stored"],
"query": [
{
"key": "limit",
"value": "10"
}
]
}
}
},
{
"name": "Get Recommendations by Domain",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/recommendations/stored?domain=healthcare&limit=5",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "stored"],
"query": [
{
"key": "domain",
"value": "healthcare"
},
{
"key": "limit",
"value": "5"
}
]
}
}
},
{
"name": "Get Recommendations by Template ID",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/recommendations/stored?templateId={{templateId}}&limit=5",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "stored"],
"query": [
{
"key": "templateId",
"value": "{{templateId}}"
},
{
"key": "limit",
"value": "5"
}
]
}
}
},
{
"name": "Get Specific Recommendation by ID",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/recommendations/stored/{{recommendationId}}",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "stored", "{{recommendationId}}"]
}
}
},
{
"name": "Get Recommendation Statistics",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/recommendations/stats",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "stats"]
}
}
}
]
},
{
"name": "Schemas & Validation",
"item": [
{
"name": "Get Available Schemas",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/recommendations/schemas",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "schemas"]
}
}
}
]
},
{
"name": "Error Testing",
"item": [
{
"name": "Invalid Template ID",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/recommendations/template/invalid-uuid",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "template", "invalid-uuid"]
}
},
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.test(\"Should return error for invalid UUID\", function () {",
" pm.response.to.have.status.oneOf([400, 500]);",
"});",
"",
"pm.test(\"Error response has success false\", function () {",
" const jsonData = pm.response.json();",
" pm.expect(jsonData).to.have.property('success', false);",
"});"
]
}
}
]
},
{
"name": "Invalid Unified Request",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"budget\": \"invalid-budget\",\n \"preferredTechnologies\": \"not-an-array\"\n}"
},
"url": {
"raw": "{{baseUrl}}/api/recommendations/unified",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "unified"]
}
}
},
{
"name": "404 Test - Invalid Route",
"request": {
"method": "GET",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"url": {
"raw": "{{baseUrl}}/api/nonexistent-endpoint",
"host": ["{{baseUrl}}"],
"path": ["api", "nonexistent-endpoint"]
}
},
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.test(\"Status code is 404\", function () {",
" pm.response.to.have.status(404);",
"});",
"",
"pm.test(\"Has error message\", function () {",
" const jsonData = pm.response.json();",
" pm.expect(jsonData).to.have.property('error');",
"});"
]
}
}
]
}
]
},
{
"name": "Load Testing Scenarios",
"item": [
{
"name": "Multiple Domains Test",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"domain\": \"{{$randomArrayElement(['healthcare', 'ecommerce', 'fintech', 'education', 'gaming'])}}\",\n \"budget\": {{$randomInt}}\n}"
},
"url": {
"raw": "{{baseUrl}}/api/recommendations/unified",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "unified"]
}
}
},
{
"name": "Concurrent Request Simulation",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"domain\": \"stress-test\",\n \"budget\": 5000,\n \"preferredTechnologies\": [\"React\", \"Node.js\"]\n}"
},
"url": {
"raw": "{{baseUrl}}/api/recommendations/unified",
"host": ["{{baseUrl}}"],
"path": ["api", "recommendations", "unified"]
}
}
}
]
}
],
"event": [
{
"listen": "prerequest",
"script": {
"type": "text/javascript",
"exec": [
"// Log request details",
"console.log('Making request to:', pm.request.url.toString());"
]
}
},
{
"listen": "test",
"script": {
"type": "text/javascript",
"exec": [
"// Global test - log response time",
"const responseTime = pm.response.responseTime;",
"console.log('Response time:', responseTime + 'ms');",
"",
"// Global test - check for valid JSON",
"pm.test('Response is valid JSON', function () {",
" pm.response.to.be.json;",
"});"
]
}
}
]
}