{"openapi":"3.0.0","paths":{"/":{"get":{"operationId":"AppController_getHello","parameters":[{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"responses":{"200":{"description":""}},"tags":["App"]}},"/api/health/live":{"get":{"operationId":"HealthController_checkLive","parameters":[{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"responses":{"200":{"description":"The Health Check is successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}},"503":{"description":"The Health Check is not successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"error"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"},"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}}},"tags":["Health"]}},"/api/health/ready":{"get":{"operationId":"HealthController_checkReady","parameters":[{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"responses":{"200":{"description":"The Health Check is successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}},"503":{"description":"The Health Check is not successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"error"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"},"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}}},"tags":["Health"]}},"/template/list":{"get":{"description":"Returns paginated templates visible to the current gateway user and branch. The optional type and name filters are trimmed before querying; name is a partial, case-insensitive match.","operationId":"TemplatesController_getTemplates","parameters":[{"name":"type","required":false,"in":"query","description":"Template type filter (exact match)","schema":{"example":"invoice","type":"string"}},{"name":"name","required":false,"in":"query","description":"Template name filter (partial, case-insensitive match)","schema":{"example":"invoice","type":"string"}},{"name":"page","required":false,"in":"query","description":"1-based page number","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of templates per page","schema":{"example":10,"type":"number"}},{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"responses":{"200":{"description":"Paginated template list","content":{"application/json":{"schema":{"type":"object","required":["message","page","limit","total","response"],"properties":{"message":{"type":"string","example":"ok"},"page":{"type":"number","example":1},"limit":{"type":"number","example":10},"total":{"type":"number","example":42},"response":{"type":"array","items":{"type":"object","required":["id","name","type","createdAt","updatedAt"],"properties":{"id":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"},"name":{"type":"string","example":"Invoice template"},"type":{"type":"string","nullable":true,"example":"invoice"},"createdAt":{"type":"string","format":"date-time","example":"2026-05-06T06:35:00.000Z"},"updatedAt":{"type":"string","format":"date-time","example":"2026-05-06T06:35:00.000Z"}}}}}}}}}},"summary":"List templates","tags":["Templates"]}},"/template/detail/{id}":{"get":{"description":"Returns the full template record including HTML content and initial variables.","operationId":"TemplatesController_getTemplateDetail","parameters":[{"name":"id","required":true,"in":"path","description":"Template identifier","schema":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"}},{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"responses":{"200":{"description":"Template detail","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","example":"ok"},"response":{"type":"object","required":["id","name","content","createdAt","updatedAt","userId","branchId"],"properties":{"id":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"},"type":{"type":"string","nullable":true,"example":"invoice"},"name":{"type":"string","example":"Invoice template"},"content":{"type":"string","example":"<html><body>Hello {{customerName}}</body></html>"},"header":{"type":"string","nullable":true,"example":"<div class=\"header\">Invoice {{invoiceNo}}</div>"},"footer":{"type":"string","nullable":true,"example":"<div class=\"footer\">Page <span class=\"pageNumber\"></span></div>"},"description":{"type":"string","nullable":true,"example":"Default invoice PDF template"},"initialVariables":{"type":"object","nullable":true,"properties":{"fields":{"type":"array","items":{"type":"string"},"example":["customerName","invoiceNo"]},"lists":{"type":"object","additionalProperties":true,"example":{"items":{"fields":["name","price"],"lists":{}}}}}},"projectData":{"type":"object","additionalProperties":true,"example":{"customerName":"John Doe","invoiceNo":"INV-001"}},"createdAt":{"type":"string","format":"date-time","example":"2026-05-06T06:35:00.000Z"},"updatedAt":{"type":"string","format":"date-time","example":"2026-05-06T06:35:00.000Z"},"userId":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"},"branchId":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"}},"nullable":true}}}}}}},"summary":"Get template detail","tags":["Templates"]}},"/template/create":{"post":{"description":"Creates a template and extracts initial Handlebars variables from the submitted content.","operationId":"TemplatesController_createTemplate","parameters":[{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/templateDto"}}}},"responses":{"200":{"description":"Created template","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","example":"ok"},"response":{"type":"object","required":["id","name","content","createdAt","updatedAt","userId","branchId"],"properties":{"id":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"},"type":{"type":"string","nullable":true,"example":"invoice"},"name":{"type":"string","example":"Invoice template"},"content":{"type":"string","example":"<html><body>Hello {{customerName}}</body></html>"},"header":{"type":"string","nullable":true,"example":"<div class=\"header\">Invoice {{invoiceNo}}</div>"},"footer":{"type":"string","nullable":true,"example":"<div class=\"footer\">Page <span class=\"pageNumber\"></span></div>"},"description":{"type":"string","nullable":true,"example":"Default invoice PDF template"},"initialVariables":{"type":"object","nullable":true,"properties":{"fields":{"type":"array","items":{"type":"string"},"example":["customerName","invoiceNo"]},"lists":{"type":"object","additionalProperties":true,"example":{"items":{"fields":["name","price"],"lists":{}}}}}},"projectData":{"type":"object","additionalProperties":true,"example":{"customerName":"John Doe","invoiceNo":"INV-001"}},"createdAt":{"type":"string","format":"date-time","example":"2026-05-06T06:35:00.000Z"},"updatedAt":{"type":"string","format":"date-time","example":"2026-05-06T06:35:00.000Z"},"userId":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"},"branchId":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"}}}}}}}},"400":{"description":"Invalid template payload","content":{"application/json":{"schema":{"type":"object","required":["statusCode","message"],"properties":{"statusCode":{"type":"number","example":400},"message":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"Validation failed"},"error":{"type":"string","example":"Bad Request"}}}}}}},"summary":"Create template","tags":["Templates"]}},"/template/update/{id}":{"post":{"description":"Updates mutable template fields. When content changes, initial variables are regenerated.","operationId":"TemplatesController_updateTemplate","parameters":[{"name":"id","required":true,"in":"path","description":"Template identifier","schema":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"}},{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/templateDto"}}}},"responses":{"200":{"description":"Updated template","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","example":"ok"},"response":{"type":"object","required":["id","name","content","createdAt","updatedAt","userId","branchId"],"properties":{"id":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"},"type":{"type":"string","nullable":true,"example":"invoice"},"name":{"type":"string","example":"Invoice template"},"content":{"type":"string","example":"<html><body>Hello {{customerName}}</body></html>"},"header":{"type":"string","nullable":true,"example":"<div class=\"header\">Invoice {{invoiceNo}}</div>"},"footer":{"type":"string","nullable":true,"example":"<div class=\"footer\">Page <span class=\"pageNumber\"></span></div>"},"description":{"type":"string","nullable":true,"example":"Default invoice PDF template"},"initialVariables":{"type":"object","nullable":true,"properties":{"fields":{"type":"array","items":{"type":"string"},"example":["customerName","invoiceNo"]},"lists":{"type":"object","additionalProperties":true,"example":{"items":{"fields":["name","price"],"lists":{}}}}}},"projectData":{"type":"object","additionalProperties":true,"example":{"customerName":"John Doe","invoiceNo":"INV-001"}},"createdAt":{"type":"string","format":"date-time","example":"2026-05-06T06:35:00.000Z"},"updatedAt":{"type":"string","format":"date-time","example":"2026-05-06T06:35:00.000Z"},"userId":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"},"branchId":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"}}}}}}}},"404":{"description":"Template was not found","content":{"application/json":{"schema":{"type":"object","required":["statusCode","message"],"properties":{"statusCode":{"type":"number","example":400},"message":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"Validation failed"},"error":{"type":"string","example":"Bad Request"}}}}}}},"summary":"Update template","tags":["Templates"]}},"/template/{id}":{"delete":{"description":"Deletes a template by id.","operationId":"TemplatesController_deleteTemplate","parameters":[{"name":"id","required":true,"in":"path","description":"Template identifier","schema":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"}},{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"responses":{"200":{"description":"Template deleted","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","example":"ok"}}}}}},"404":{"description":"Template was not found","content":{"application/json":{"schema":{"type":"object","required":["statusCode","message"],"properties":{"statusCode":{"type":"number","example":400},"message":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"Validation failed"},"error":{"type":"string","example":"Bad Request"}}}}}}},"summary":"Delete template","tags":["Templates"]}},"/template/generated/html/{id}":{"get":{"description":"Returns generated raw HTML for a completed PDF generation job.","operationId":"TemplatesController_getGeneratedHtmlById","parameters":[{"name":"id","required":true,"in":"path","description":"Generated template job identifier","schema":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"}},{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"responses":{"200":{"description":"Generated HTML payload or a not-found response for the requested job id","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","example":"ok"},"response":{"type":"object","required":["templateId"],"properties":{"templateId":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"},"template":{"type":"object","required":["generatedRawTemplate"],"properties":{"generatedRawTemplate":{"type":"string","example":"<html><body>Hello John Doe</body></html>"},"generatedRawHeaderTemplate":{"type":"string","nullable":true,"example":"<div class=\"header\">Invoice INV-001</div>"},"generatedRawFooterTemplate":{"type":"string","nullable":true,"example":"<div class=\"footer\">Page 1</div>"}}}}}}}}}}},"summary":"Get generated HTML","tags":["Templates"]}},"/template/jobs/{id}":{"get":{"description":"Returns the latest stored status and output path for a PDF generation job.","operationId":"TemplatesController_getJobs","parameters":[{"name":"id","required":true,"in":"path","description":"PDF generation job identifier","schema":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"}},{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"responses":{"200":{"description":"Job status payload","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","example":"ok"},"response":{"type":"object","required":["jobId","state","result","error"],"properties":{"jobId":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"},"state":{"type":"string","enum":["pending","processing","completed","failed","notFound"],"example":"completed"},"result":{"type":"object","nullable":true,"properties":{"path":{"type":"string","example":"https://storage.example.com/templates/contracts/job-123.pdf"}}},"error":{"type":"string","nullable":true,"example":null}}}}}}}}},"summary":"Get PDF job status","tags":["Templates"]}},"/template/validate-data":{"post":{"description":"Checks a data object against the variables extracted from the template Handlebars content.","operationId":"TemplatesController_validateDataVariable","parameters":[{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateDataValidate"}}}},"responses":{"200":{"description":"Template data is valid","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","example":"ok"}}}}}},"400":{"description":"Template data is invalid","content":{"application/json":{"schema":{"type":"object","required":["statusCode","message"],"properties":{"statusCode":{"type":"number","example":400},"message":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"Validation failed"},"error":{"type":"string","example":"Bad Request"}}}}}},"404":{"description":"Template was not found","content":{"application/json":{"schema":{"type":"object","required":["statusCode","message"],"properties":{"statusCode":{"type":"number","example":400},"message":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"Validation failed"},"error":{"type":"string","example":"Bad Request"}}}}}}},"summary":"Validate template data","tags":["Templates"]}},"/template/render/{id}":{"post":{"description":"Renders a template with the provided data and returns the resulting HTML.","operationId":"TemplatesController_renderTemplate","parameters":[{"name":"id","required":true,"in":"path","description":"Template identifier","schema":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"}},{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderTemplateDto"}}}},"responses":{"200":{"description":"Rendered HTML","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","example":"ok"},"response":{"type":"object","required":["html"],"properties":{"html":{"type":"string","example":"<html><body>Hello John Doe</body></html>"}}}}}}}},"404":{"description":"Template was not found","content":{"application/json":{"schema":{"type":"object","required":["statusCode","message"],"properties":{"statusCode":{"type":"number","example":400},"message":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"example":"Validation failed"},"error":{"type":"string","example":"Bad Request"}}}}}}},"summary":"Render template preview","tags":["Templates"]}},"/template/generate-to-file":{"post":{"description":"Creates a BullMQ PDF generation job using the template content, header, footer, and request data.","operationId":"TemplatesController_createJob","parameters":[{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobDto"}}}},"responses":{"200":{"description":"PDF generation job queued","content":{"application/json":{"schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","example":"ok"},"response":{"oneOf":[{"type":"object","required":["jobId","status"],"properties":{"jobId":{"type":"string","format":"uuid","example":"7f4d7f54-a8a4-45cb-94f7-6ed36f725802"},"status":{"type":"string","enum":["pending"],"example":"pending"}}},{"type":"object","required":["error"],"properties":{"error":{"type":"string","example":"Template not found"}}}]}}}}}}},"summary":"Queue PDF generation","tags":["Templates"]}},"/health":{"get":{"operationId":"HealthController_check","parameters":[{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"responses":{"200":{"description":"The Health Check is successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}},"503":{"description":"The Health Check is not successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"error"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"},"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}}},"summary":"Overall health check","tags":["Health"]}},"/health/db":{"get":{"operationId":"HealthController_checkDb","parameters":[{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"responses":{"200":{"description":"The Health Check is successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}},"503":{"description":"The Health Check is not successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"error"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"},"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}}},"summary":"Database health check","tags":["Health"]}},"/health/redis":{"get":{"operationId":"HealthController_checkRedis","parameters":[{"name":"accept-language","in":"header","required":false,"schema":{"default":"en"}}],"responses":{"200":{"description":"The Health Check is successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}},"503":{"description":"The Health Check is not successful","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"error"},"info":{"type":"object","example":{"database":{"status":"up"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"error":{"type":"object","example":{"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true},"nullable":true},"details":{"type":"object","example":{"database":{"status":"up"},"redis":{"status":"down","message":"Could not connect"}},"additionalProperties":{"type":"object","required":["status"],"properties":{"status":{"type":"string"}},"additionalProperties":true}}}}}}}},"summary":"Redis health check","tags":["Health"]}}},"info":{"title":"template-manager","description":"template-manager API","version":"1.0.0","contact":{}},"tags":[],"servers":[{"url":"http://localhost:8000"},{"url":"https://api-dev.alpha.looms.cloud"}],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"templateDto":{"type":"object","properties":{"name":{"type":"string","example":"template1"},"content":{"type":"string","example":"<html><h1>{{ name }}</html>"},"header":{"type":"string","example":"<html><body>My Document Header</body></html>"},"footer":{"type":"string","example":"<html><body>Page <span class=\"pageNumber\"></span> of <span class=\"totalPages\"></span></body></html>"},"type":{"type":"string","example":"email, invoice, contract"},"projectData":{"type":"object"}},"required":["name","content","header","footer","type","projectData"]},"TemplateDataValidate":{"type":"object","properties":{"templateId":{"type":"string","example":"iodf22012-iodud"},"data":{"type":"object","example":{"name":"Inject data","unit":10}}},"required":["templateId","data"]},"RenderTemplateDto":{"type":"object","properties":{"data":{"type":"object","example":{"name":"John Doe","email":"john@example.com"}}},"required":["data"]},"JobDto":{"type":"object","properties":{"templateId":{"type":"string","example":"iodf22012-iodud"},"data":{"type":"object","example":{"name":"John Doe","age":30}},"options":{"type":"object","example":{"format":"A4","landscape":false}},"callbackUrl":{"type":"string","example":"http://example.com/callback"},"generatedFileName":{"type":"string","example":"iodf22012-template-1"},"pathName":{"type":"string","example":"templates/contracts"}},"required":["templateId","data","generatedFileName","pathName"]}}}}