647 lines
20 KiB
JSON
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;",
|
|
"});"
|
|
]
|
|
}
|
|
}
|
|
]
|
|
} |