{"version":3,"file":"index.mjs","sources":["../../server/src/bootstrap.ts","../../server/src/config/index.ts","../../server/src/content-types/index.ts","../../server/src/controllers/controller.ts","../../server/src/controllers/index.ts","../../server/src/destroy.ts","../../server/src/middlewares/index.ts","../../server/src/policies/index.ts","../../server/src/register.ts","../../server/src/routes/index.ts","../../server/src/services/service.ts","../../server/src/services/index.ts","../../server/src/index.ts"],"sourcesContent":["import type {Core} from '@strapi/strapi';\n\nconst bootstrap = ({strapi}: { strapi: Core.Strapi }) => {\n  // bootstrap phase\n};\n\nexport default bootstrap;\n","export default {\n  default: {},\n  validator() {\n  },\n};\n","export default {};\n","export const controller = {\n  async hello(ctx) {\n    ctx.body = \"Hello from backend!\";\n  },\n  async tables(ctx) {\n    const allContentTypes = Object.values(strapi.contentTypes);\n\n    const result = allContentTypes\n      .filter(type => type.kind === 'collectionType' && !type.plugin || type.uid === 'plugin::users-permissions.user' && !type.plugin)\n      .map(type => ({\n        uid: type.uid,\n        tableName: type.collectionName,\n        displayName: type.info?.displayName ?? type.uid,\n      }));\n\n    ctx.body = result;\n  },\n  async dumpCollection(ctx) {\n    const {name} = ctx.request.body;\n\n    if (!name) {\n      ctx.throw(400, 'Name is required');\n    }\n\n    // Поиск content type по displayName или collectionName\n    const allContentTypes = Object.values(strapi.contentTypes);\n    const found = allContentTypes.find(\n      type =>\n        type.info?.displayName?.toLowerCase() === name.toLowerCase() ||\n        type.collectionName?.toLowerCase() === name.toLowerCase()\n    );\n\n    if (!found) {\n      ctx.throw(404, 'Collection not found');\n    }\n\n    const uid = found.uid;\n\n    const pageSize = 1000;\n    let start = 0;\n    let hasMore = true;\n    let data = [];\n\n    while (hasMore) {\n      const results = await strapi.documents(uid).findMany({\n        limit: pageSize,\n        start,\n      });\n\n      data = [...data, ...results];\n\n      hasMore = results.length === pageSize;\n      start += pageSize;\n    }\n\n    ctx.body = {data};\n  },\n  async importCollection(ctx) {\n    const {name, data, format = \"json\"} = ctx.request.body;\n    if (!name || !data) {\n      ctx.throw(400, 'Name and data are required');\n    }\n\n    // Найти коллекцию\n    const allContentTypes = Object.values(strapi.contentTypes);\n    const found = allContentTypes.find(\n      type =>\n        type.info?.displayName?.toLowerCase() === name.toLowerCase() ||\n        type.collectionName?.toLowerCase() === name.toLowerCase()\n    );\n    if (!found) {\n      ctx.throw(404, 'Collection not found');\n    }\n    const uid = found.uid;\n\n    // Универсально: всегда принимаем массив объектов!\n    let records = [];\n    if (!Array.isArray(data)) ctx.throw(400, 'Data must be array of objects');\n    records = data;\n\n    let created = 0, failed = 0, failedDetails = [];\n    for (const [i, item] of records.entries()) {\n      try {\n        await strapi.db.query(uid).create({data: item});\n        created++;\n      } catch (e) {\n        failed++;\n        failedDetails.push(`Row ${i + 1}: ${(e?.message || \"Unknown error\")}`);\n      }\n    }\n    ctx.body = {success: true, created, failed, failedDetails};\n  },\n  async getSchema(ctx) {\n    const {uid} = ctx.request.query;\n    if (!uid) ctx.throw(400, \"uid is required\");\n    const contentType = strapi.contentTypes[uid];\n    if (!contentType) ctx.throw(404, \"Content type not found\");\n    ctx.body = contentType.attributes;\n  },\n};\n","import {controller} from './controller';\n\nexport default {\n  controller,\n};\n","import type {Core} from '@strapi/strapi';\n\nconst destroy = ({strapi}: { strapi: Core.Strapi }) => {\n  // destroy phase\n};\n\nexport default destroy;\n","export default {};\n","export default {};\n","import type {Core} from '@strapi/strapi';\n\nconst register = ({strapi}: { strapi: Core.Strapi }) => {\n  // register phase\n};\n\nexport default register;\n","export default [\n  {\n    method: 'GET',\n    path: '/hello',\n    handler: 'controller.hello',\n    config: {\n      auth: false, // true, если нужна авторизация\n    },\n  },\n  {\n    method: 'GET',\n    path: '/tables',\n    handler: 'controller.tables',\n    config: {auth: false},\n  },\n  {\n    method: 'POST',\n    path: '/dump-collection',\n    handler: 'controller.dumpCollection',\n    config: {auth: false},\n  },\n  {\n    method: 'POST',\n    path: '/import-collection',\n    handler: 'controller.importCollection',\n    config: {auth: false},\n  },\n  {\n    method: \"GET\",\n    path: \"/schema\",\n    handler: \"controller.getSchema\",\n    config: {auth: false}\n  },\n];\n","import type {Core} from '@strapi/strapi';\n\nconst service = ({strapi}: { strapi: Core.Strapi }) => ({\n  getWelcomeMessage() {\n    return 'Welcome to Strapi 🚀';\n  },\n});\n\nexport default service;\n","import service from './service';\n\nexport default {\n  service,\n};\n","/**\n * Application methods\n */\nimport bootstrap from './bootstrap';\n\n/**\n * Plugin server methods\n */\nimport config from './config';\nimport contentTypes from './content-types';\nimport controllers from './controllers';\nimport destroy from './destroy';\nimport middlewares from './middlewares';\nimport policies from './policies';\nimport register from './register';\nimport routes from './routes';\nimport services from './services';\n\nexport default {\n  register,\n  bootstrap,\n  destroy,\n  config,\n  controllers,\n  routes,\n  services,\n  contentTypes,\n  policies,\n  middlewares,\n};\n"],"names":["strapi"],"mappings":"AAEA,MAAM,YAAY,CAAC,EAAC,QAAAA,cAAqC;AAEzD;ACJA,MAAe,SAAA;AAAA,EACb,SAAS,CAAC;AAAA,EACV,YAAY;AAAA,EAAA;AAEd;ACJA,MAAA,eAAe,CAAC;ACAT,MAAM,aAAa;AAAA,EACxB,MAAM,MAAM,KAAK;AACf,QAAI,OAAO;AAAA,EACb;AAAA,EACA,MAAM,OAAO,KAAK;AAChB,UAAM,kBAAkB,OAAO,OAAO,OAAO,YAAY;AAEzD,UAAM,SAAS,gBACZ,OAAO,UAAQ,KAAK,SAAS,oBAAoB,CAAC,KAAK,UAAU,KAAK,QAAQ,oCAAoC,CAAC,KAAK,MAAM,EAC9H,IAAI,CAAS,UAAA;AAAA,MACZ,KAAK,KAAK;AAAA,MACV,WAAW,KAAK;AAAA,MAChB,aAAa,KAAK,MAAM,eAAe,KAAK;AAAA,IAAA,EAC5C;AAEJ,QAAI,OAAO;AAAA,EACb;AAAA,EACA,MAAM,eAAe,KAAK;AACxB,UAAM,EAAC,KAAA,IAAQ,IAAI,QAAQ;AAE3B,QAAI,CAAC,MAAM;AACL,UAAA,MAAM,KAAK,kBAAkB;AAAA,IAAA;AAInC,UAAM,kBAAkB,OAAO,OAAO,OAAO,YAAY;AACzD,UAAM,QAAQ,gBAAgB;AAAA,MAC5B,CACE,SAAA,KAAK,MAAM,aAAa,kBAAkB,KAAK,YAAY,KAC3D,KAAK,gBAAgB,YAAY,MAAM,KAAK,YAAY;AAAA,IAC5D;AAEA,QAAI,CAAC,OAAO;AACN,UAAA,MAAM,KAAK,sBAAsB;AAAA,IAAA;AAGvC,UAAM,MAAM,MAAM;AAElB,UAAM,WAAW;AACjB,QAAI,QAAQ;AACZ,QAAI,UAAU;AACd,QAAI,OAAO,CAAC;AAEZ,WAAO,SAAS;AACd,YAAM,UAAU,MAAM,OAAO,UAAU,GAAG,EAAE,SAAS;AAAA,QACnD,OAAO;AAAA,QACP;AAAA,MAAA,CACD;AAED,aAAO,CAAC,GAAG,MAAM,GAAG,OAAO;AAE3B,gBAAU,QAAQ,WAAW;AACpB,eAAA;AAAA,IAAA;AAGP,QAAA,OAAO,EAAC,KAAI;AAAA,EAClB;AAAA,EACA,MAAM,iBAAiB,KAAK;AAC1B,UAAM,EAAC,MAAM,MAAM,SAAS,WAAU,IAAI,QAAQ;AAC9C,QAAA,CAAC,QAAQ,CAAC,MAAM;AACd,UAAA,MAAM,KAAK,4BAA4B;AAAA,IAAA;AAI7C,UAAM,kBAAkB,OAAO,OAAO,OAAO,YAAY;AACzD,UAAM,QAAQ,gBAAgB;AAAA,MAC5B,CACE,SAAA,KAAK,MAAM,aAAa,kBAAkB,KAAK,YAAY,KAC3D,KAAK,gBAAgB,YAAY,MAAM,KAAK,YAAY;AAAA,IAC5D;AACA,QAAI,CAAC,OAAO;AACN,UAAA,MAAM,KAAK,sBAAsB;AAAA,IAAA;AAEvC,UAAM,MAAM,MAAM;AAGlB,QAAI,UAAU,CAAC;AACX,QAAA,CAAC,MAAM,QAAQ,IAAI,EAAO,KAAA,MAAM,KAAK,+BAA+B;AAC9D,cAAA;AAEV,QAAI,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAC9C,eAAW,CAAC,GAAG,IAAI,KAAK,QAAQ,WAAW;AACrC,UAAA;AACI,cAAA,OAAO,GAAG,MAAM,GAAG,EAAE,OAAO,EAAC,MAAM,MAAK;AAC9C;AAAA,eACO,GAAG;AACV;AACc,sBAAA,KAAK,OAAO,IAAI,CAAC,KAAM,GAAG,WAAW,eAAgB,EAAE;AAAA,MAAA;AAAA,IACvE;AAEF,QAAI,OAAO,EAAC,SAAS,MAAM,SAAS,QAAQ,cAAa;AAAA,EAC3D;AAAA,EACA,MAAM,UAAU,KAAK;AACnB,UAAM,EAAC,IAAA,IAAO,IAAI,QAAQ;AAC1B,QAAI,CAAC,IAAS,KAAA,MAAM,KAAK,iBAAiB;AACpC,UAAA,cAAc,OAAO,aAAa,GAAG;AAC3C,QAAI,CAAC,YAAiB,KAAA,MAAM,KAAK,wBAAwB;AACzD,QAAI,OAAO,YAAY;AAAA,EAAA;AAE3B;ACjGA,MAAe,cAAA;AAAA,EACb;AACF;ACFA,MAAM,UAAU,CAAC,EAAC,QAAAA,cAAqC;AAEvD;ACJA,MAAA,cAAe,CAAC;ACAhB,MAAA,WAAe,CAAC;ACEhB,MAAM,WAAW,CAAC,EAAC,QAAAA,cAAqC;AAExD;ACJA,MAAe,SAAA;AAAA,EACb;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,MACN,MAAM;AAAA;AAAA,IAAA;AAAA,EAEV;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ,EAAC,MAAM,MAAK;AAAA,EACtB;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ,EAAC,MAAM,MAAK;AAAA,EACtB;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ,EAAC,MAAM,MAAK;AAAA,EACtB;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ,EAAC,MAAM,MAAK;AAAA,EAAA;AAExB;AC/BA,MAAM,UAAU,CAAC,EAAC,QAAAA,eAAsC;AAAA,EACtD,oBAAoB;AACX,WAAA;AAAA,EAAA;AAEX;ACJA,MAAe,WAAA;AAAA,EACb;AACF;ACcA,MAAe,QAAA;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;"}