| |
| package docs |
|
|
| import "github.com/swaggo/swag" |
|
|
| const docTemplate = `{ |
| "schemes": {{ marshal .Schemes }}, |
| "swagger": "2.0", |
| "info": { |
| "description": "{{escape .Description}}", |
| "title": "{{.Title}}", |
| "contact": { |
| "name": "Maintiva" |
| }, |
| "version": "{{.Version}}" |
| }, |
| "host": "{{.Host}}", |
| "basePath": "{{.BasePath}}", |
| "paths": { |
| "/api/login": { |
| "post": { |
| "description": "Verifikasi email dan password, lalu mengembalikan profil user, access_token Bearer 1 jam, dan refresh_token 7 hari.", |
| "consumes": [ |
| "application/json" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "auth" |
| ], |
| "summary": "Login user and issue token pair", |
| "parameters": [ |
| { |
| "description": "Login credentials", |
| "name": "body", |
| "in": "body", |
| "required": true, |
| "schema": { |
| "$ref": "#/definitions/auth.loginRequest" |
| } |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/auth.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/auth.AuthResult" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/auth.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/auth.APIResponse" |
| } |
| }, |
| "403": { |
| "description": "Forbidden", |
| "schema": { |
| "$ref": "#/definitions/auth.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/auth.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/auth.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/refresh": { |
| "post": { |
| "description": "Menggunakan refresh_token aktif untuk menerbitkan access_token baru dan refresh_token pengganti. Refresh token lama tidak dapat dipakai ulang.", |
| "consumes": [ |
| "application/json" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "auth" |
| ], |
| "summary": "Rotate refresh token and issue token pair", |
| "parameters": [ |
| { |
| "description": "Refresh token", |
| "name": "body", |
| "in": "body", |
| "required": true, |
| "schema": { |
| "$ref": "#/definitions/auth.refreshRequest" |
| } |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/auth.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/auth.AuthResult" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/auth.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/auth.APIResponse" |
| } |
| }, |
| "403": { |
| "description": "Forbidden", |
| "schema": { |
| "$ref": "#/definitions/auth.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/auth.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/analyses": { |
| "get": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Mengembalikan daftar analysis milik authenticated user. Default status adalah active.", |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "analyses" |
| ], |
| "summary": "List analysis user", |
| "parameters": [ |
| { |
| "enum": [ |
| "active", |
| "inactive" |
| ], |
| "type": "string", |
| "description": "Filter status: active atau inactive", |
| "name": "status", |
| "in": "query" |
| }, |
| { |
| "type": "integer", |
| "default": 1, |
| "description": "Nomor halaman", |
| "name": "page", |
| "in": "query" |
| }, |
| { |
| "type": "integer", |
| "default": 20, |
| "description": "Jumlah item per halaman, maksimal 100", |
| "name": "limit", |
| "in": "query" |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| }, |
| "post": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Membuat analysis aktif dengan business_questions dan minimal satu data source yang sudah dimiliki authenticated user.", |
| "consumes": [ |
| "application/json" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "analyses" |
| ], |
| "summary": "Buat analysis baru", |
| "parameters": [ |
| { |
| "description": "Payload analysis baru", |
| "name": "request", |
| "in": "body", |
| "required": true, |
| "schema": { |
| "$ref": "#/definitions/api.CreateAnalysisRequest" |
| } |
| } |
| ], |
| "responses": { |
| "201": { |
| "description": "Created", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/models.Analysis" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "409": { |
| "description": "Limit active analysis tercapai", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/analyses/{id}": { |
| "get": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Mengambil satu analysis berdasarkan ID dan authenticated user. Analysis milik user lain tidak akan dikembalikan.", |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "analyses" |
| ], |
| "summary": "Ambil detail analysis", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "Analysis ID", |
| "name": "id", |
| "in": "path", |
| "required": true |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/models.Analysis" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| }, |
| "delete": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Menghapus analysis milik authenticated user.", |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "analyses" |
| ], |
| "summary": "Hapus analysis", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "Analysis ID", |
| "name": "id", |
| "in": "path", |
| "required": true |
| } |
| ], |
| "responses": { |
| "204": { |
| "description": "No Content" |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| }, |
| "patch": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Mengubah judul, objective, atau status analysis. Status hanya active atau inactive.", |
| "consumes": [ |
| "application/json" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "analyses" |
| ], |
| "summary": "Update metadata analysis", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "Analysis ID", |
| "name": "id", |
| "in": "path", |
| "required": true |
| }, |
| { |
| "description": "Field yang ingin diubah", |
| "name": "request", |
| "in": "body", |
| "required": true, |
| "schema": { |
| "$ref": "#/definitions/api.UpdateAnalysisRequest" |
| } |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/models.Analysis" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/analyses/{id}/data-bind": { |
| "put": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Mengganti daftar data source yang ter-bind ke analysis secara atomic menggunakan expected_version. Minimal satu data source harus tersisa dan semua source harus milik authenticated user.", |
| "consumes": [ |
| "application/json" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "analyses" |
| ], |
| "summary": "Update data source binding analysis", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "Analysis ID", |
| "name": "id", |
| "in": "path", |
| "required": true |
| }, |
| { |
| "description": "Versi dan daftar data source baru", |
| "name": "request", |
| "in": "body", |
| "required": true, |
| "schema": { |
| "$ref": "#/definitions/api.UpdateDataBindRequest" |
| } |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/models.Analysis" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "409": { |
| "description": "Stale version, inactive analysis, atau limit violation", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/analyses/{id}/data-catalog": { |
| "get": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Mengembalikan data catalog yang scoped ke analysis dan authenticated user. Catalog ini mengikuti data_bind analysis, bukan seluruh catalog user.", |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "data-catalog" |
| ], |
| "summary": "Ambil catalog data analysis", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "Analysis ID", |
| "name": "id", |
| "in": "path", |
| "required": true |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/analyses/{id}/data-catalog/rebuild": { |
| "post": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Membangun ulang data catalog scope analysis berdasarkan data_bind analysis milik authenticated user.", |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "data-catalog" |
| ], |
| "summary": "Rebuild catalog data analysis", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "Analysis ID", |
| "name": "id", |
| "in": "path", |
| "required": true |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/analyses/{id}/messages": { |
| "get": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Mengambil riwayat percakapan analysis milik authenticated user dari analyses_messages.", |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "analysis-messages" |
| ], |
| "summary": "List pesan analysis", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "Analysis ID", |
| "name": "id", |
| "in": "path", |
| "required": true |
| }, |
| { |
| "type": "integer", |
| "default": 100, |
| "description": "Jumlah pesan, maksimal 100", |
| "name": "limit", |
| "in": "query" |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| }, |
| "post": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Menyimpan tepat satu pesan role=user atau role=ai ke analyses_messages. Endpoint ini tidak memanggil agentic backend dan tidak membuat balasan AI otomatis.", |
| "consumes": [ |
| "application/json" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "analysis-messages" |
| ], |
| "summary": "Tambah pesan conversation analysis", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "Analysis ID", |
| "name": "id", |
| "in": "path", |
| "required": true |
| }, |
| { |
| "description": "Pesan conversation", |
| "name": "request", |
| "in": "body", |
| "required": true, |
| "schema": { |
| "$ref": "#/definitions/api.CreateMessageRequest" |
| } |
| } |
| ], |
| "responses": { |
| "201": { |
| "description": "Created", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "401": { |
| "description": "Unauthorized", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "409": { |
| "description": "Analysis inactive", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/data-catalog/rebuild": { |
| "post": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Reintrospect semua sumber data (DB clients + dokumen tabular) dan bangun ulang catalog", |
| "consumes": [ |
| "application/json" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "data-catalog" |
| ], |
| "summary": "Rebuild seluruh catalog user", |
| "parameters": [ |
| { |
| "description": "User ID", |
| "name": "body", |
| "in": "body", |
| "required": true, |
| "schema": { |
| "type": "object", |
| "properties": { |
| "user_id": { |
| "type": "string" |
| } |
| } |
| } |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "429": { |
| "description": "Rate limit exceeded", |
| "schema": { |
| "type": "object", |
| "additionalProperties": { |
| "type": "string" |
| } |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/data-catalog/{user_id}": { |
| "get": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Mengembalikan index catalog (sources saja, tanpa detail tabel)", |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "data-catalog" |
| ], |
| "summary": "Ambil catalog data user", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "User ID", |
| "name": "user_id", |
| "in": "path", |
| "required": true |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/database-clients": { |
| "post": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Enkripsi credentials dan simpan. Jika sudah ada koneksi dengan identity yang sama, kembalikan yang existing (HTTP 200).", |
| "consumes": [ |
| "application/json" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "database-clients" |
| ], |
| "summary": "Daftarkan koneksi database baru", |
| "parameters": [ |
| { |
| "description": "Database connection info", |
| "name": "body", |
| "in": "body", |
| "required": true, |
| "schema": { |
| "type": "object", |
| "properties": { |
| "credentials": { |
| "type": "object" |
| }, |
| "db_type": { |
| "type": "string" |
| }, |
| "name": { |
| "type": "string" |
| }, |
| "user_id": { |
| "type": "string" |
| } |
| } |
| } |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "Duplicate — returning existing", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/database_clients.DBClient" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "201": { |
| "description": "Created", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/database_clients.DBClient" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "429": { |
| "description": "Rate limit exceeded", |
| "schema": { |
| "type": "object", |
| "additionalProperties": { |
| "type": "string" |
| } |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/database-clients/dbtypes": { |
| "get": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Mengembalikan semua tipe database beserta schema field yang dibutuhkan untuk membuat koneksi. Gunakan untuk render form dinamis di frontend.", |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "database-clients" |
| ], |
| "summary": "List tipe database yang didukung beserta definisi field kredensial", |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/database_clients.DBTypeInfo" |
| } |
| } |
| } |
| } |
| ] |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/database-clients/{client_id}": { |
| "put": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "consumes": [ |
| "application/json" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "database-clients" |
| ], |
| "summary": "Update koneksi database", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "Client ID", |
| "name": "client_id", |
| "in": "path", |
| "required": true |
| }, |
| { |
| "type": "string", |
| "description": "User ID (ownership check)", |
| "name": "user_id", |
| "in": "query", |
| "required": true |
| }, |
| { |
| "description": "Fields to update", |
| "name": "body", |
| "in": "body", |
| "schema": { |
| "type": "object", |
| "properties": { |
| "credentials": { |
| "type": "object" |
| }, |
| "name": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| } |
| } |
| } |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/database_clients.DBClient" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "403": { |
| "description": "Forbidden", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| }, |
| "delete": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Menghapus koneksi dan memicu pembersihan catalog", |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "database-clients" |
| ], |
| "summary": "Hapus koneksi database", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "Client ID", |
| "name": "client_id", |
| "in": "path", |
| "required": true |
| }, |
| { |
| "type": "string", |
| "description": "User ID (ownership check)", |
| "name": "user_id", |
| "in": "query", |
| "required": true |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "403": { |
| "description": "Forbidden", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/database-clients/{client_id}/ingest": { |
| "post": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "database-clients" |
| ], |
| "summary": "Introspect schema database dan simpan ke catalog", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "Client ID", |
| "name": "client_id", |
| "in": "path", |
| "required": true |
| }, |
| { |
| "type": "string", |
| "description": "User ID (ownership check)", |
| "name": "user_id", |
| "in": "query", |
| "required": true |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "403": { |
| "description": "Forbidden", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "409": { |
| "description": "Client is inactive", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "429": { |
| "description": "Rate limit exceeded", |
| "schema": { |
| "type": "object", |
| "additionalProperties": { |
| "type": "string" |
| } |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/database-clients/{user_id}": { |
| "get": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "database-clients" |
| ], |
| "summary": "List koneksi database milik user", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "User ID", |
| "name": "user_id", |
| "in": "path", |
| "required": true |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/database_clients.DBClient" |
| } |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/database-clients/{user_id}/{client_id}": { |
| "get": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "database-clients" |
| ], |
| "summary": "Ambil detail satu koneksi database", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "User ID", |
| "name": "user_id", |
| "in": "path", |
| "required": true |
| }, |
| { |
| "type": "string", |
| "description": "Client ID", |
| "name": "client_id", |
| "in": "path", |
| "required": true |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/database_clients.DBClient" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "403": { |
| "description": "Forbidden", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/document/delete": { |
| "delete": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Menghapus file dari object storage, embeddings, Parquet, dan record database", |
| "consumes": [ |
| "application/json" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "documents" |
| ], |
| "summary": "Hapus dokumen", |
| "parameters": [ |
| { |
| "description": "Document ID dan User ID", |
| "name": "body", |
| "in": "body", |
| "required": true, |
| "schema": { |
| "type": "object", |
| "properties": { |
| "document_id": { |
| "type": "string" |
| }, |
| "user_id": { |
| "type": "string" |
| } |
| } |
| } |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "403": { |
| "description": "Forbidden", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/document/process": { |
| "post": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Processing berjalan di background. Response 202 dikembalikan segera setelah validasi. Pantau progress via GET /api/v1/documents/{user_id}.", |
| "consumes": [ |
| "application/json" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "documents" |
| ], |
| "summary": "Proses dokumen secara async (extract text / convert ke Parquet)", |
| "parameters": [ |
| { |
| "description": "Document ID dan User ID", |
| "name": "body", |
| "in": "body", |
| "required": true, |
| "schema": { |
| "type": "object", |
| "properties": { |
| "document_id": { |
| "type": "string" |
| }, |
| "user_id": { |
| "type": "string" |
| } |
| } |
| } |
| } |
| ], |
| "responses": { |
| "202": { |
| "description": "Accepted", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/documents.ProcessResult" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "403": { |
| "description": "Forbidden", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "404": { |
| "description": "Not Found", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/document/upload": { |
| "post": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Mendukung pdf, docx, txt, csv, xlsx. Maksimum 10 MB. Stream ke private object storage tanpa mengubah kontrak upload frontend.", |
| "consumes": [ |
| "multipart/form-data" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "documents" |
| ], |
| "summary": "Upload dokumen ke private object storage", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "User ID", |
| "name": "user_id", |
| "in": "formData", |
| "required": true |
| }, |
| { |
| "type": "file", |
| "description": "File dokumen", |
| "name": "file", |
| "in": "formData", |
| "required": true |
| } |
| ], |
| "responses": { |
| "201": { |
| "description": "Created", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "$ref": "#/definitions/documents.Document" |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/document/upload-local": { |
| "post": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "description": "Sama seperti /upload tetapi menyimpan file ke folder files/ lokal. Digunakan untuk membandingkan performa vs private object storage.", |
| "consumes": [ |
| "multipart/form-data" |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "documents" |
| ], |
| "summary": "Upload dokumen ke local filesystem (benchmarking)", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "User ID", |
| "name": "user_id", |
| "in": "formData", |
| "required": true |
| }, |
| { |
| "type": "file", |
| "description": "File dokumen", |
| "name": "file", |
| "in": "formData", |
| "required": true |
| } |
| ], |
| "responses": { |
| "201": { |
| "description": "Created", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "400": { |
| "description": "Bad Request", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/documents/doctypes": { |
| "get": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "documents" |
| ], |
| "summary": "List tipe dokumen yang didukung", |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/documents.DocTypeInfo" |
| } |
| } |
| } |
| } |
| ] |
| } |
| } |
| } |
| } |
| }, |
| "/api/v1/documents/{user_id}": { |
| "get": { |
| "security": [ |
| { |
| "BearerAuth": [] |
| } |
| ], |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "documents" |
| ], |
| "summary": "List dokumen milik user", |
| "parameters": [ |
| { |
| "type": "string", |
| "description": "User ID", |
| "name": "user_id", |
| "in": "path", |
| "required": true |
| } |
| ], |
| "responses": { |
| "200": { |
| "description": "OK", |
| "schema": { |
| "allOf": [ |
| { |
| "$ref": "#/definitions/api.APIResponse" |
| }, |
| { |
| "type": "object", |
| "properties": { |
| "data": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/documents.Document" |
| } |
| } |
| } |
| } |
| ] |
| } |
| }, |
| "500": { |
| "description": "Internal Server Error", |
| "schema": { |
| "$ref": "#/definitions/api.APIResponse" |
| } |
| } |
| } |
| } |
| }, |
| "/health": { |
| "get": { |
| "description": "Returns holistic readiness and dependency health for the service.", |
| "produces": [ |
| "application/json" |
| ], |
| "tags": [ |
| "system" |
| ], |
| "summary": "Health check", |
| "responses": { |
| "200": { |
| "description": "Health report", |
| "schema": { |
| "type": "object", |
| "additionalProperties": true |
| } |
| }, |
| "503": { |
| "description": "Critical dependency unavailable", |
| "schema": { |
| "type": "object", |
| "additionalProperties": true |
| } |
| } |
| } |
| } |
| } |
| }, |
| "definitions": { |
| "api.APIResponse": { |
| "type": "object", |
| "properties": { |
| "data": {}, |
| "message": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.CreateAnalysisRequest": { |
| "type": "object", |
| "required": [ |
| "analysis_title", |
| "business_questions", |
| "data_bind", |
| "objective" |
| ], |
| "properties": { |
| "analysis_title": { |
| "type": "string" |
| }, |
| "business_questions": { |
| "type": "array", |
| "items": { |
| "type": "string" |
| } |
| }, |
| "data_bind": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/models.DataBindItem" |
| } |
| }, |
| "objective": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.CreateMessageRequest": { |
| "type": "object", |
| "properties": { |
| "content": { |
| "type": "string" |
| }, |
| "role": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.CreateSessionRequest": { |
| "type": "object", |
| "properties": { |
| "framework_id": { |
| "type": "string" |
| }, |
| "language": { |
| "type": "string" |
| }, |
| "mode": { |
| "type": "string" |
| }, |
| "room_id": { |
| "type": "string" |
| }, |
| "user_id": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.CreateSessionResponse": { |
| "type": "object", |
| "properties": { |
| "first_question": { |
| "type": "string" |
| }, |
| "framework_id": { |
| "type": "string" |
| }, |
| "opening_message": { |
| "type": "string" |
| }, |
| "room_id": { |
| "type": "string" |
| }, |
| "session_id": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.ErrorResponse": { |
| "type": "object", |
| "properties": { |
| "error": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.FinishSessionResponse": { |
| "type": "object", |
| "properties": { |
| "result": { |
| "$ref": "#/definitions/api.InterviewResultDTO" |
| }, |
| "room_id": { |
| "type": "string" |
| }, |
| "session_id": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.InterviewResultDTO": { |
| "type": "object", |
| "properties": { |
| "ended_at": { |
| "type": "string" |
| }, |
| "framework_name": { |
| "type": "string" |
| }, |
| "goals": { |
| "type": "array", |
| "items": { |
| "type": "string" |
| } |
| }, |
| "key_insights": { |
| "type": "array", |
| "items": { |
| "type": "string" |
| } |
| }, |
| "language": { |
| "type": "string" |
| }, |
| "mode": { |
| "type": "string" |
| }, |
| "section_results": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/api.SectionResultDTO" |
| } |
| }, |
| "started_at": { |
| "type": "string" |
| }, |
| "summary": { |
| "type": "string" |
| }, |
| "unresolved_items": { |
| "type": "array", |
| "items": { |
| "type": "string" |
| } |
| } |
| } |
| }, |
| "api.QAPairDTO": { |
| "type": "object", |
| "properties": { |
| "answer_cleaned": { |
| "type": "string" |
| }, |
| "follow_ups": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/api.QAPairDTO" |
| } |
| }, |
| "question_text": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.RoomSessionResponse": { |
| "type": "object", |
| "properties": { |
| "framework_id": { |
| "type": "string" |
| }, |
| "framework_name": { |
| "type": "string" |
| }, |
| "language": { |
| "type": "string" |
| }, |
| "mode": { |
| "type": "string" |
| }, |
| "room_id": { |
| "type": "string" |
| }, |
| "session_id": { |
| "type": "string" |
| }, |
| "started_at": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| }, |
| "turns": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/api.TurnDTO" |
| } |
| } |
| } |
| }, |
| "api.SectionResultDTO": { |
| "type": "object", |
| "properties": { |
| "objective": { |
| "type": "array", |
| "items": { |
| "type": "string" |
| } |
| }, |
| "qa_pairs": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/api.QAPairDTO" |
| } |
| }, |
| "section_summary": { |
| "type": "string" |
| }, |
| "section_title": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.SendTextRequest": { |
| "type": "object", |
| "properties": { |
| "message": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.SendTextResponse": { |
| "type": "object", |
| "properties": { |
| "finished": { |
| "type": "boolean" |
| }, |
| "reply": { |
| "type": "string" |
| }, |
| "stage": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.TurnDTO": { |
| "type": "object", |
| "properties": { |
| "created_at": { |
| "type": "string" |
| }, |
| "speaker": { |
| "type": "string" |
| }, |
| "text": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.UpdateAnalysisRequest": { |
| "type": "object", |
| "properties": { |
| "analysis_title": { |
| "type": "string" |
| }, |
| "objective": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| } |
| } |
| }, |
| "api.UpdateDataBindRequest": { |
| "type": "object", |
| "properties": { |
| "data_bind": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/models.DataBindItem" |
| } |
| }, |
| "expected_version": { |
| "type": "integer" |
| } |
| } |
| }, |
| "auth.APIResponse": { |
| "type": "object", |
| "properties": { |
| "data": {}, |
| "message": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| } |
| } |
| }, |
| "auth.AuthResult": { |
| "type": "object", |
| "properties": { |
| "access_token": { |
| "type": "string" |
| }, |
| "expires_in": { |
| "type": "integer" |
| }, |
| "refresh_expires_in": { |
| "type": "integer" |
| }, |
| "refresh_token": { |
| "type": "string" |
| }, |
| "token_type": { |
| "type": "string" |
| }, |
| "user": { |
| "$ref": "#/definitions/auth.User" |
| } |
| } |
| }, |
| "auth.User": { |
| "type": "object", |
| "properties": { |
| "company": { |
| "type": "string" |
| }, |
| "company_size": { |
| "type": "string" |
| }, |
| "created_at": { |
| "type": "string" |
| }, |
| "email": { |
| "type": "string" |
| }, |
| "fullname": { |
| "type": "string" |
| }, |
| "function": { |
| "type": "string" |
| }, |
| "id": { |
| "type": "string" |
| }, |
| "role": { |
| "type": "string" |
| }, |
| "site": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| } |
| } |
| }, |
| "auth.loginRequest": { |
| "type": "object", |
| "properties": { |
| "email": { |
| "type": "string" |
| }, |
| "password": { |
| "type": "string" |
| } |
| } |
| }, |
| "auth.refreshRequest": { |
| "type": "object", |
| "properties": { |
| "refresh_token": { |
| "type": "string" |
| } |
| } |
| }, |
| "database_clients.DBClient": { |
| "type": "object", |
| "properties": { |
| "created_at": { |
| "type": "string" |
| }, |
| "credentials": { |
| "type": "object", |
| "additionalProperties": {} |
| }, |
| "db_type": { |
| "type": "string" |
| }, |
| "id": { |
| "type": "string" |
| }, |
| "name": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| }, |
| "updated_at": { |
| "type": "string" |
| }, |
| "user_id": { |
| "type": "string" |
| } |
| } |
| }, |
| "database_clients.DBFieldDef": { |
| "type": "object", |
| "properties": { |
| "default": {}, |
| "description": { |
| "type": "string" |
| }, |
| "name": { |
| "type": "string" |
| }, |
| "options": { |
| "type": "array", |
| "items": { |
| "type": "string" |
| } |
| }, |
| "required": { |
| "type": "boolean" |
| }, |
| "sensitive": { |
| "type": "boolean" |
| }, |
| "type": { |
| "type": "string" |
| } |
| } |
| }, |
| "database_clients.DBTypeInfo": { |
| "type": "object", |
| "properties": { |
| "db_type": { |
| "type": "string" |
| }, |
| "display_name": { |
| "type": "string" |
| }, |
| "fields": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/database_clients.DBFieldDef" |
| } |
| }, |
| "logo": { |
| "type": "string" |
| }, |
| "message": { |
| "type": "string" |
| }, |
| "status": { |
| "description": "active | inactive", |
| "type": "string" |
| } |
| } |
| }, |
| "documents.DocTypeInfo": { |
| "type": "object", |
| "properties": { |
| "max_size_mb": { |
| "type": "integer" |
| }, |
| "message": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string", |
| "enum": [ |
| "active", |
| "inactive" |
| ] |
| }, |
| "type": { |
| "type": "string" |
| } |
| } |
| }, |
| "documents.Document": { |
| "type": "object", |
| "properties": { |
| "blob_name": { |
| "type": "string" |
| }, |
| "chunks_count": { |
| "type": "integer" |
| }, |
| "created_at": { |
| "type": "string" |
| }, |
| "error_message": { |
| "type": "string" |
| }, |
| "file_size": { |
| "type": "integer" |
| }, |
| "file_type": { |
| "type": "string" |
| }, |
| "filename": { |
| "type": "string" |
| }, |
| "id": { |
| "type": "string" |
| }, |
| "processed_at": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| }, |
| "user_id": { |
| "type": "string" |
| } |
| } |
| }, |
| "documents.ProcessResult": { |
| "type": "object", |
| "properties": { |
| "document_id": { |
| "type": "string" |
| }, |
| "file_type": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| } |
| } |
| }, |
| "models.Analysis": { |
| "type": "object", |
| "properties": { |
| "analysis_title": { |
| "type": "string" |
| }, |
| "business_questions": { |
| "type": "array", |
| "items": { |
| "type": "string" |
| } |
| }, |
| "created_at": { |
| "type": "string" |
| }, |
| "data_bind": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/models.DataBindItem" |
| } |
| }, |
| "data_bind_version": { |
| "type": "integer" |
| }, |
| "id": { |
| "type": "string" |
| }, |
| "objective": { |
| "type": "string" |
| }, |
| "report_collection": { |
| "type": "array", |
| "items": { |
| "$ref": "#/definitions/models.ReportCollectionItem" |
| } |
| }, |
| "report_id": { |
| "type": "string" |
| }, |
| "status": { |
| "type": "string" |
| }, |
| "updated_at": { |
| "type": "string" |
| }, |
| "user_id": { |
| "type": "string" |
| } |
| } |
| }, |
| "models.DataBindItem": { |
| "type": "object", |
| "properties": { |
| "group_type": { |
| "type": "string" |
| }, |
| "id": { |
| "type": "string" |
| }, |
| "name": { |
| "type": "string" |
| }, |
| "type": { |
| "type": "string" |
| } |
| } |
| }, |
| "models.Report": { |
| "type": "object", |
| "properties": { |
| "analysis_id": { |
| "type": "string" |
| }, |
| "content": { |
| "type": "string" |
| }, |
| "generated_at": { |
| "type": "string" |
| }, |
| "id": { |
| "type": "string" |
| }, |
| "title": { |
| "type": "string" |
| }, |
| "user_id": { |
| "type": "string" |
| }, |
| "version": { |
| "type": "integer" |
| } |
| } |
| }, |
| "models.ReportCollectionItem": { |
| "type": "object", |
| "properties": { |
| "generated_at": { |
| "type": "string" |
| }, |
| "id": { |
| "type": "string" |
| }, |
| "title": { |
| "type": "string" |
| }, |
| "version": { |
| "type": "integer" |
| } |
| } |
| } |
| }, |
| "securityDefinitions": { |
| "BearerAuth": { |
| "description": "Type \"Bearer \" followed by a valid access token from /api/login or /api/refresh.", |
| "type": "apiKey", |
| "name": "Authorization", |
| "in": "header" |
| } |
| } |
| }` |
|
|
| |
| var SwaggerInfo = &swag.Spec{ |
| Version: "1.0", |
| Host: "localhost:8081", |
| BasePath: "/", |
| Schemes: []string{}, |
| Title: "Orchestrator Agent API", |
| Description: "Backend service untuk Analysis, documents, database clients, catalog, auth, and knowledge ingestion endpoints.", |
| InfoInstanceName: "swagger", |
| SwaggerTemplate: docTemplate, |
| LeftDelim: "{{", |
| RightDelim: "}}", |
| } |
|
|
| func init() { |
| swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) |
| } |
|
|