{"openapi":"3.1.0","info":{"title":"OpenAPI definition","version":"v0"},"servers":[{"url":"/"}],"tags":[{"name":"articles","description":"Wiki article CRUD for editors"}],"paths":{"/api/wiki/articles":{"get":{"tags":["articles"],"summary":"List articles (authenticated)","description":"Paginated list of articles across all statuses. Content-free card shape. M2 returns\nevery article in the tenant; filters (status, locale, author, search) land in M4.\n","operationId":"getList","parameters":[{"name":"pageable","in":"query","required":true,"schema":{"$ref":"#/components/schemas/Pageable"}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Missing ARTICLES_READ permission","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedModelArticleListResponse"}}}}}},"post":{"tags":["articles"],"summary":"Create article (draft)","description":"Creates a new article in the given locale, status `draft`. The `slug` is optional —\nif omitted the backend slugifies the title and appends a numeric suffix on collision.\n`content` must be a Tiptap-shaped JSON tree with root `{\"type\":\"doc\"}`; every\n`href`/`src` inside must start with the tenant-scoped nx-media URL. The\n`translation_group_id` is set equal to the new article id (the article forms its own\ntranslation group; sibling locales are added via the translations endpoint in M5).\n","operationId":"create","parameters":[{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticleCreateRequest"}}},"required":true},"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Missing ARTICLES_CREATE permission","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Validation error (slug / content / locale)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Slug already taken in this locale","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"201":{"description":"Created","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ArticleResponse"}}}}}}},"/api/wiki/articles/{id}/status":{"post":{"tags":["articles"],"summary":"Change article status","description":"Transitions the article to a new status. Allowed moves: `DRAFT`→`PUBLISHED`,\n`DRAFT`→`ARCHIVED`, `PUBLISHED`→`DRAFT`, `PUBLISHED`→`ARCHIVED`, `ARCHIVED`→`DRAFT`.\nDenied: same-status and `ARCHIVED`→`PUBLISHED` (must re-enter `DRAFT` first).\nSide effects: `DRAFT`→`PUBLISHED` sets `publishedAt=now()` and fills\n`contentText` (plain-text extract); transitions into `ARCHIVED` set\n`archivedAt=now()`; `PUBLISHED`→`DRAFT` clears `publishedAt`;\n`ARCHIVED`→`DRAFT` clears `archivedAt`.\n","operationId":"changeStatus","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticleStatusChangeRequest"}}},"required":true},"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Missing ARTICLES_TRANSITION permission","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Validation error (missing / unknown status)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Article not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Invalid status transition (INVALID_STATUS_TRANSITION)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"Transitioned","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ArticleResponse"}}}}}}},"/api/wiki/articles/{id}":{"get":{"tags":["articles"],"summary":"Get article by id (authenticated)","description":"Returns the full article including `content` and all draft/archive metadata.\nUse the public endpoint for anonymous reads of published articles.\n","operationId":"getById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Missing ARTICLES_READ permission","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Article not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"Found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ArticleResponse"}}}}}},"patch":{"tags":["articles"],"summary":"Patch article","description":"Partial update — only non-null fields are applied. `locale` and `translation_group_id`\nare immutable. Changing the slug validates the new value and checks uniqueness against\n`(locale, slug)`. Changing content re-runs validation (size, root type, URL prefix).\n`updated_at` and `last_editor_id` are refreshed on every call.\n","operationId":"patch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticleUpdateRequest"}}},"required":true},"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Missing ARTICLES_UPDATE permission","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Validation error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Article not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Slug already taken in this locale","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"Updated","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ArticleResponse"}}}}}}},"/api/wiki/skills":{"get":{"tags":["Wiki Skills API"],"summary":"List skills with filters and search","operationId":"findAll","parameters":[{"name":"search","in":"query","description":"Full-text search (max 100 characters, tokens shorter than 2 characters are ignored)","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"type":"integer","default":20,"minimum":1}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"classId","in":"query","description":"Filter by character class ID","style":"form","schema":{"type":"integer"}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedModelWikiSkillListDto"}}}}}}},"/api/wiki/skills/{id}":{"get":{"tags":["Wiki Skills API"],"summary":"Get skill detail by ID","operationId":"findById","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/WikiSkillDetailDto"}}}}}}},"/api/wiki/sa/crystals":{"get":{"tags":["Wiki SA (Soul Absorption) API"],"summary":"Soul crystal upgrade chains","operationId":"findCrystals","parameters":[{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"type":"integer","default":20,"minimum":1}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","default":["level,ASC","id.itemId,ASC"],"items":{"type":"string"}}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedModelWikiSaCrystalDto"}}}}}}},"/api/wiki/sa/absorbs":{"get":{"tags":["Wiki SA (Soul Absorption) API"],"summary":"SA absorb table: list NPCs that level soul crystals","operationId":"findAbsorbs","parameters":[{"name":"level","in":"query","description":"SA level to filter (shows NPCs where min_level <= level <= max_level)","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["LAST_HIT","PARTY_ONE","PARTY_ALL","PARTY_RANDOM"]}},{"name":"search","in":"query","description":"Search by NPC name or nick (substring match, max 100 characters)","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"type":"integer","default":20,"minimum":1}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","default":["npcId,ASC","minLevel,ASC"],"items":{"type":"string"}}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedModelWikiSaAbsorbDto"}}}}}}},"/api/wiki/npcs":{"get":{"tags":["Wiki NPCs API"],"summary":"List NPCs with filters and search","operationId":"findAll_1","parameters":[{"name":"search","in":"query","description":"Full-text search (max 100 characters, tokens shorter than 2 characters are ignored)","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"type":"integer","default":20,"minimum":1}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedModelWikiNpcListDto"}}}}}}},"/api/wiki/npcs/{id}":{"get":{"tags":["Wiki NPCs API"],"summary":"Get NPC detail by ID","operationId":"findById_1","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/WikiNpcDetailDto"}}}}}}},"/api/wiki/items":{"get":{"tags":["Wiki Items API"],"summary":"List items with filters and search","operationId":"findAll_2","parameters":[{"name":"search","in":"query","description":"Full-text search (max 100 characters, tokens shorter than 2 characters are ignored)","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"type":"integer","default":20,"minimum":1}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"type","in":"query","description":"Filter by item types","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string","enum":["WEAPON","ARMOR","SHIELD","JEWELRY","CLOAK","SHIRT","BELT","BRACELET","TALISMAN"]}}},{"name":"grade","in":"query","description":"Filter by item grades","style":"form","explode":true,"schema":{"type":"array","items":{"type":"string","enum":["NG","D","C","B","A","S","S80","S84"]}}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedModelWikiItemListDto"}}}}}}},"/api/wiki/items/{id}":{"get":{"tags":["Wiki Items API"],"summary":"Get item detail by ID","operationId":"findById_2","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/WikiItemDetailDto"}}}}}}},"/api/wiki/classes":{"get":{"tags":["Wiki Character Classes API"],"summary":"List character classes with filters and search","operationId":"findAll_3","parameters":[{"name":"search","in":"query","description":"Full-text search (max 100 characters, tokens shorter than 2 characters are ignored)","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Zero-based page index (0..N)","required":false,"schema":{"type":"integer","default":0,"minimum":0}},{"name":"size","in":"query","description":"The size of the page to be returned","required":false,"schema":{"type":"integer","default":20,"minimum":1}},{"name":"sort","in":"query","description":"Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.","required":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/PagedModelWikiCharClassListDto"}}}}}}},"/api/wiki/classes/{id}":{"get":{"tags":["Wiki Character Classes API"],"summary":"Get character class detail by ID","operationId":"findById_3","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"Tenant-Id","in":"header","description":"Tenant UUID — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string","format":"uuid"},"example":"019cd67b-8a66-7e72-8cf2-e1ad073d9f33"},{"name":"Tenant-Slug","in":"header","description":"Tenant slug — injected by nginx, required for tenant-scoped endpoints","required":false,"schema":{"type":"string"},"example":"bohpts"},{"name":"App-Slug","in":"header","description":"App slug (e.g. wiki) — injected by nginx for permission-scope matching","required":false,"schema":{"type":"string"},"example":"wiki"}],"responses":{"500":{"description":"Internal Server Error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"Conflict","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/WikiCharClassDetailDto"}}}}}}}},"components":{"schemas":{"ProblemDetail":{"type":"object","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","format":"int32"},"detail":{"type":"string"},"instance":{"type":"string","format":"uri"},"properties":{"type":"object","additionalProperties":{}}}},"ArticleCreateRequest":{"type":"object","properties":{"locale":{"type":"string","maxLength":8,"minLength":0},"slug":{"type":"string","maxLength":200,"minLength":0},"title":{"type":"string","maxLength":500,"minLength":0},"description":{"type":"string","maxLength":2000,"minLength":0},"content":{"$ref":"#/components/schemas/JsonNode"},"seoTitle":{"type":"string","maxLength":500,"minLength":0},"seoDescription":{"type":"string","maxLength":2000,"minLength":0},"tags":{"type":"array","items":{"type":"string"}},"category":{"type":"string","maxLength":200,"minLength":0},"coverImageUrl":{"type":"string"},"pinned":{"type":"boolean"}},"required":["content","locale","title"]},"JsonNode":{"type":"object","properties":{"empty":{"type":"boolean"},"array":{"type":"boolean"},"null":{"type":"boolean"},"object":{"type":"boolean"},"float":{"type":"boolean"},"missingNode":{"type":"boolean"},"valueNode":{"type":"boolean"},"nodeType":{"type":"string","enum":["ARRAY","BINARY","BOOLEAN","MISSING","NULL","NUMBER","OBJECT","POJO","STRING"]},"pojo":{"type":"boolean"},"number":{"type":"boolean"},"integralNumber":{"type":"boolean"},"floatingPointNumber":{"type":"boolean"},"short":{"type":"boolean"},"int":{"type":"boolean"},"long":{"type":"boolean"},"double":{"type":"boolean"},"bigDecimal":{"type":"boolean"},"bigInteger":{"type":"boolean"},"textual":{"type":"boolean","deprecated":true},"boolean":{"type":"boolean"},"binary":{"type":"boolean"},"string":{"type":"boolean"},"container":{"type":"boolean"},"embeddedValue":{"type":"boolean"}}},"ArticleResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"translationGroupId":{"type":"string","format":"uuid"},"locale":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"content":{"$ref":"#/components/schemas/JsonNode"},"status":{"type":"string","enum":["DRAFT","PUBLISHED","ARCHIVED"]},"seoTitle":{"type":"string"},"seoDescription":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"category":{"type":"string"},"coverImageUrl":{"type":"string"},"pinned":{"type":"boolean"},"views":{"type":"integer","format":"int64"},"authorId":{"type":"string","format":"uuid"},"lastEditorId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"publishedAt":{"type":"string","format":"date-time"},"archivedAt":{"type":"string","format":"date-time"}}},"ArticleStatusChangeRequest":{"type":"object","properties":{"status":{"type":"string","enum":["DRAFT","PUBLISHED","ARCHIVED"]}},"required":["status"]},"ArticleUpdateRequest":{"type":"object","properties":{"slug":{"type":"string","maxLength":200,"minLength":0},"title":{"type":"string","maxLength":500,"minLength":0},"description":{"type":"string","maxLength":2000,"minLength":0},"content":{"$ref":"#/components/schemas/JsonNode"},"seoTitle":{"type":"string","maxLength":500,"minLength":0},"seoDescription":{"type":"string","maxLength":2000,"minLength":0},"tags":{"type":"array","items":{"type":"string"}},"category":{"type":"string","maxLength":200,"minLength":0},"coverImageUrl":{"type":"string"},"pinned":{"type":"boolean"}}},"PageMetadata":{"type":"object","properties":{"size":{"type":"integer","format":"int64"},"number":{"type":"integer","format":"int64"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer","format":"int64"}}},"PagedModelWikiSkillListDto":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/WikiSkillListDto"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"WikiSkillListDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Power Strike","ru":"Удар Силы"}},"icon":{"type":"string"},"iconPanel":{"type":"string"},"operateType":{"type":"string","enum":["P","A1","A2","A3","A4","A5","A6","AU","T","TG","CA1","CA2","CA5","DA1","DA2","DA3","DA4","DA5"]},"isMagic":{"type":"boolean"},"isDebuff":{"type":"boolean"},"isOffensive":{"type":"boolean"}}},"ParamDto":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}}},"WikiSkillClassDto":{"type":"object","properties":{"classId":{"type":"integer","format":"int64"},"name":{"type":"string"},"descriptions":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"A warrior class.","ru":"Класс воина."}},"race":{"type":"string"},"getLevel":{"type":"integer","format":"int32"},"levelUpSp":{"type":"integer","format":"int64"},"autoGet":{"type":"boolean"},"learnedByNpc":{"type":"boolean"}}},"WikiSkillDetailDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Power Strike","ru":"Удар Силы"}},"descriptions":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"A powerful strike.","ru":"Мощный удар."}},"enchantNames":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Enchant: Chance","ru":"Заточка: Шанс"}},"enchantDescriptions":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Increases critical rate.","ru":"Увеличивает шанс крита."}},"icon":{"type":"string"},"iconPanel":{"type":"string"},"operateType":{"type":"string","enum":["P","A1","A2","A3","A4","A5","A6","AU","T","TG","CA1","CA2","CA5","DA1","DA2","DA3","DA4","DA5"]},"skillType":{"type":"string"},"targetType":{"type":"string","enum":["ALLY","AREA","AREA_CORPSE_MOB","AREA_FRIENDLY","AREA_SUMMON","AURA","AURA_CORPSE_MOB","AURA_FRIENDLY","AURA_UNDEAD_ENEMY","BEHIND_AURA","CLAN","CLAN_MEMBER","COMMAND_CHANNEL","CORPSE","CORPSE_ALLY","CORPSE_MOB","CORPSE_PET","CORPSE_PLAYER","ENEMY_ONLY","ENEMY_SUMMON","FLAGPOLE","FRONT_AREA","FRONT_AURA","GROUND","HOLY","MONSTER_AREA","NONE","ONE","OWNER_PET","PARTY","PARTY_CLAN","PARTY_MEMBER","PARTY_NOTME","PARTY_OTHER","SELF","SERVITOR","SUMMON","UNLOCKABLE"]},"isMagic":{"type":"boolean"},"isDebuff":{"type":"boolean"},"isOffensive":{"type":"boolean"},"reuseDelay":{"type":"integer","format":"int32"},"params":{"type":"array","items":{"$ref":"#/components/schemas/ParamDto"}},"levels":{"type":"array","items":{"$ref":"#/components/schemas/WikiSkillLevelDto"}},"enchantRoutes":{"type":"array","items":{"$ref":"#/components/schemas/WikiSkillEnchantRouteDto"}},"classes":{"type":"array","items":{"$ref":"#/components/schemas/WikiSkillClassDto"}}}},"WikiSkillEnchantLevelDto":{"type":"object","properties":{"level":{"type":"integer","format":"int32"},"adena":{"type":"integer","format":"int32"},"sp":{"type":"integer","format":"int32"},"chances":{"type":"object","additionalProperties":{"type":"integer","format":"int32"}},"params":{"type":"array","items":{"$ref":"#/components/schemas/ParamDto"}}}},"WikiSkillEnchantRouteDto":{"type":"object","properties":{"route":{"type":"integer","format":"int32"},"groupId":{"type":"integer","format":"int32"},"levels":{"type":"array","items":{"$ref":"#/components/schemas/WikiSkillEnchantLevelDto"}}}},"WikiSkillLevelDto":{"type":"object","properties":{"skillLevel":{"type":"integer","format":"int32"},"mpConsume":{"type":"integer","format":"int32"},"hpConsume":{"type":"integer","format":"int32"},"castRange":{"type":"integer","format":"int32"},"hitTime":{"type":"number","format":"double"},"coolTime":{"type":"number","format":"double"},"reuseDelay":{"type":"number","format":"double"},"power":{"type":"number","format":"double"},"magicLvl":{"type":"integer","format":"int32"},"effectPoint":{"type":"integer","format":"int32"},"icon":{"type":"string"},"iconPanel":{"type":"string"},"enchantNames":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Enchant: Chance","ru":"Заточка: Шанс"}},"enchantDescriptions":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Increases critical rate.","ru":"Увеличивает шанс крита."}}}},"PagedModelWikiSaCrystalDto":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/WikiSaCrystalDto"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"WikiSaCrystalDto":{"type":"object","properties":{"level":{"type":"integer","format":"int32"},"itemId":{"type":"integer","format":"int64"},"itemNames":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Red Soul Crystal - Stage 1"}},"nextItemId":{"type":"integer","format":"int64"},"nextItemNames":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Red Soul Crystal - Stage 2"}},"cursedNextItemId":{"type":"integer","format":"int64"},"cursedNextItemNames":{"type":"object","additionalProperties":{"type":"string"}}}},"PagedModelWikiSaAbsorbDto":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/WikiSaAbsorbDto"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"WikiSaAbsorbDto":{"type":"object","properties":{"npcId":{"type":"integer","format":"int64"},"npcNames":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Turek Orc","ru":"Орк Турек"}},"npcLevel":{"type":"integer","format":"int32"},"type":{"type":"string","enum":["LAST_HIT","PARTY_ONE","PARTY_ALL","PARTY_RANDOM"]},"minLevel":{"type":"integer","format":"int32"},"maxLevel":{"type":"integer","format":"int32"},"chance":{"type":"integer","format":"int32"},"cursedChance":{"type":"integer","format":"int32"}}},"PagedModelWikiNpcListDto":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/WikiNpcListDto"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"WikiNpcListDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Orc Warrior","ru":"Орк-воин"}},"nicks":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Guard","ru":"Стражник"}},"nickColor":{"type":"string"},"level":{"type":"integer","format":"int32"},"type":{"type":"string"},"npcType":{"type":"string","description":"Client-side NPC category from Npcgrp.txt","example":"monster_normal"},"race":{"type":"string","enum":["UNDEAD","MAGIC_CREATURE","BEAST","ANIMAL","PLANT","HUMANOID","SPIRIT","ANGEL","DEMON","DRAGON","GIANT","BUG","FAIRY","HUMAN","ELF","DARK_ELF","ORC","DWARF","OTHER","NON_LIVING","SIEGE_WEAPON","DEFENDING_ARMY","MERCENARY","UNKNOWN_CREATURE","KAMAEL"]}}},"WikiNpcAbsorbDto":{"type":"object","properties":{"type":{"type":"string","enum":["LAST_HIT","PARTY_ONE","PARTY_ALL","PARTY_RANDOM"]},"minLevel":{"type":"integer","format":"int32"},"maxLevel":{"type":"integer","format":"int32"},"chance":{"type":"integer","format":"int32"},"cursedChance":{"type":"integer","format":"int32"}}},"WikiNpcDetailDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Orc Warrior","ru":"Орк-воин"}},"nicks":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Guard","ru":"Стражник"}},"nickColor":{"type":"string"},"level":{"type":"integer","format":"int32"},"type":{"type":"string"},"npcType":{"type":"string","description":"Client-side NPC category from Npcgrp.txt","example":"monster_normal"},"race":{"type":"string","enum":["UNDEAD","MAGIC_CREATURE","BEAST","ANIMAL","PLANT","HUMANOID","SPIRIT","ANGEL","DEMON","DRAGON","GIANT","BUG","FAIRY","HUMAN","ELF","DARK_ELF","ORC","DWARF","OTHER","NON_LIVING","SIEGE_WEAPON","DEFENDING_ARMY","MERCENARY","UNKNOWN_CREATURE","KAMAEL"]},"meshName":{"type":"string","example":"LineageMonsters.gremlin_m00"},"aggroRange":{"type":"integer","format":"int32"},"baseHpMax":{"type":"number","format":"double"},"baseMpMax":{"type":"number","format":"double"},"basePAtk":{"type":"number","format":"double"},"basePDef":{"type":"number","format":"double"},"baseMAtk":{"type":"number","format":"double"},"baseMDef":{"type":"number","format":"double"},"baseRunSpd":{"type":"integer","format":"int32"},"rewardExp":{"type":"integer","format":"int64"},"rewardSp":{"type":"integer","format":"int64"},"params":{"type":"array","items":{"$ref":"#/components/schemas/ParamDto"}},"elementalDefence":{"type":"object","additionalProperties":{"type":"integer","format":"int32"}},"skills":{"type":"array","items":{"$ref":"#/components/schemas/WikiNpcSkillDto"}},"drops":{"type":"array","items":{"$ref":"#/components/schemas/WikiNpcDropDto"}},"spoils":{"type":"array","items":{"$ref":"#/components/schemas/WikiNpcDropDto"}},"herbs":{"type":"array","items":{"$ref":"#/components/schemas/WikiNpcDropDto"}},"equipment":{"type":"array","items":{"$ref":"#/components/schemas/WikiNpcEquipDto"}},"minions":{"type":"array","items":{"$ref":"#/components/schemas/WikiNpcMinionDto"}},"spawns":{"type":"array","items":{"$ref":"#/components/schemas/WikiNpcSpawnDto"}},"absorbs":{"type":"array","items":{"$ref":"#/components/schemas/WikiNpcAbsorbDto"}}}},"WikiNpcDropDto":{"type":"object","properties":{"dropType":{"type":"string","enum":["DROP","RATED_GROUPED","UNGROUPED","SWEEP"]},"groupIndex":{"type":"integer","format":"int32"},"groupChance":{"type":"number","format":"double"},"itemId":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Sword of Miracles","ru":"Меч Чудес"}},"icon":{"type":"string"},"iconPanel":{"type":"string"},"minCount":{"type":"integer","format":"int32"},"maxCount":{"type":"integer","format":"int32"},"chance":{"type":"number","format":"double"}}},"WikiNpcEquipDto":{"type":"object","properties":{"slot":{"type":"string"},"itemId":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Elven Long Sword","ru":"Эльфийский Длинный Меч"}},"icon":{"type":"string"},"iconPanel":{"type":"string"}}},"WikiNpcMinionDto":{"type":"object","properties":{"npcId":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Orc Scout","ru":"Орк-разведчик"}},"count":{"type":"integer","format":"int32"},"level":{"type":"integer","format":"int32"}}},"WikiNpcSkillDto":{"type":"object","properties":{"skillId":{"type":"integer","format":"int64"},"skillLevel":{"type":"integer","format":"int32"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Power Strike","ru":"Удар Силы"}},"icon":{"type":"string"},"iconPanel":{"type":"string"}}},"WikiNpcSpawnDto":{"type":"object","properties":{"x":{"type":"integer","format":"int32"},"y":{"type":"integer","format":"int32"},"z":{"type":"integer","format":"int32"},"heading":{"type":"integer","format":"int32"},"count":{"type":"integer","format":"int32"},"respawn":{"type":"integer","format":"int32"},"respawnRandom":{"type":"integer","format":"int32"},"territory":{"type":"array","items":{"type":"object","additionalProperties":{"type":"integer","format":"int32"}}}}},"PagedModelWikiItemListDto":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/WikiItemListDto"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"WikiItemListDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Sword of Miracles","ru":"Меч Чудес"}},"additionalNames":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Additional name","ru":"Доп. название"}},"icon":{"type":"string"},"iconPanel":{"type":"string"},"type":{"type":"string","enum":["EtcItem","Weapon","Armor"]},"grade":{"type":"string","enum":["NG","D","C","B","A","S","S80","S84"]},"weaponType":{"type":"string","enum":["ancientsword","bigblunt","bigsword","blunt","bow","crossbow","dagger","dual","dualdagger","dualfist","etc","fishingrod","fist","flag","ownthing","pole","rapier","sword"]},"armorType":{"type":"string","enum":["heavy","light","magic","sigil"]},"equipSlot":{"type":"string"},"isMasterwork":{"type":"boolean"},"isFoundation":{"type":"boolean"}}},"WikiArmorSetItemDto":{"type":"object","properties":{"itemId":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Dark Crystal Breastplate","ru":"Кираса Тёмного Кристалла"}},"additionalNames":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Masterwork","ru":"Шедевр"}},"icon":{"type":"string"},"iconPanel":{"type":"string"},"slotType":{"type":"string"},"isMasterwork":{"type":"boolean"},"isFoundation":{"type":"boolean"}}},"WikiArmorSetSkillDto":{"type":"object","properties":{"skillId":{"type":"integer","format":"int64"},"skillLevel":{"type":"integer","format":"int32"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Armor Set Bonus","ru":"Бонус Сета"}},"icon":{"type":"string"},"iconPanel":{"type":"string"}}},"WikiItemArmorSetDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"items":{"type":"array","items":{"$ref":"#/components/schemas/WikiArmorSetItemDto"}},"skills":{"type":"array","items":{"$ref":"#/components/schemas/WikiArmorSetSkillDto"}},"strBonus":{"type":"integer","format":"int32"},"conBonus":{"type":"integer","format":"int32"},"dexBonus":{"type":"integer","format":"int32"},"intBonus":{"type":"integer","format":"int32"},"witBonus":{"type":"integer","format":"int32"},"menBonus":{"type":"integer","format":"int32"}}},"WikiItemDetailDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Sword of Miracles","ru":"Меч Чудес"}},"additionalNames":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Additional name","ru":"Доп. название"}},"descriptions":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"A powerful sword.","ru":"Мощный меч."}},"icon":{"type":"string"},"iconPanel":{"type":"string"},"type":{"type":"string","enum":["EtcItem","Weapon","Armor"]},"grade":{"type":"string","enum":["NG","D","C","B","A","S","S80","S84"]},"weaponType":{"type":"string","enum":["ancientsword","bigblunt","bigsword","blunt","bow","crossbow","dagger","dual","dualdagger","dualfist","etc","fishingrod","fist","flag","ownthing","pole","rapier","sword"]},"armorType":{"type":"string","enum":["heavy","light","magic","sigil"]},"etcItemType":{"type":"string"},"equipSlot":{"type":"string"},"material":{"type":"string"},"weight":{"type":"integer","format":"int32"},"price":{"type":"integer","format":"int64"},"crystalCount":{"type":"integer","format":"int32"},"crystallizable":{"type":"boolean"},"isMasterwork":{"type":"boolean"},"isFoundation":{"type":"boolean"},"defaultAction":{"type":"string"},"handler":{"type":"string"},"consumeType":{"type":"string","enum":["asset","normal","stackable"]},"stats":{"type":"array","items":{"$ref":"#/components/schemas/ParamDto"}},"restrictions":{"$ref":"#/components/schemas/WikiItemRestrictionsDto"},"original":{"$ref":"#/components/schemas/WikiItemListDto"},"specialAbilities":{"type":"array","items":{"$ref":"#/components/schemas/WikiItemListDto"}},"recipes":{"type":"array","items":{"$ref":"#/components/schemas/WikiItemRecipeDto"}},"armorSet":{"$ref":"#/components/schemas/WikiItemArmorSetDto"},"variants":{"type":"array","items":{"$ref":"#/components/schemas/WikiItemRelationDto"}},"dropSources":{"type":"array","items":{"$ref":"#/components/schemas/WikiItemDropSourceDto"}},"spoilSources":{"type":"array","items":{"$ref":"#/components/schemas/WikiItemDropSourceDto"}}}},"WikiItemDropSourceDto":{"type":"object","properties":{"npcId":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"}},"level":{"type":"integer","format":"int32"},"dropType":{"type":"string","enum":["DROP","RATED_GROUPED","UNGROUPED","SWEEP"]},"minCount":{"type":"integer","format":"int32"},"maxCount":{"type":"integer","format":"int32"},"chance":{"type":"number","format":"double"}}},"WikiItemRecipeDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"craftLevel":{"type":"integer","format":"int32"},"type":{"type":"string"},"successRate":{"type":"integer","format":"int32"},"mpCost":{"type":"integer","format":"int32"},"products":{"type":"array","items":{"$ref":"#/components/schemas/WikiRecipeIngredientDto"}},"ingredients":{"type":"array","items":{"$ref":"#/components/schemas/WikiRecipeIngredientDto"}}}},"WikiItemRelationDto":{"type":"object","properties":{"itemId":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Sealed Dark Crystal Breastplate","ru":"Запечатанная Кираса Тёмного Кристалла"}},"icon":{"type":"string"},"iconPanel":{"type":"string"},"relationType":{"type":"string"},"direction":{"type":"string"}}},"WikiItemRestrictionsDto":{"type":"object","properties":{"isStackable":{"type":"boolean"},"isTradable":{"type":"boolean"},"isDropable":{"type":"boolean"},"isSellable":{"type":"boolean"},"isDestroyable":{"type":"boolean"}}},"WikiRecipeIngredientDto":{"type":"object","properties":{"itemId":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Crystal: C-Grade","ru":"Кристалл: C"}},"icon":{"type":"string"},"iconPanel":{"type":"string"},"count":{"type":"integer","format":"int32"}}},"PagedModelWikiCharClassListDto":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/WikiCharClassListDto"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}},"WikiCharClassListDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"descriptions":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"A warrior class.","ru":"Класс воина."}},"race":{"type":"string"},"classTransferDegree":{"type":"integer","format":"int32"},"parentClassId":{"type":"integer","format":"int64"}}},"WikiCharClassBaseStatsDto":{"type":"object","properties":{"str":{"type":"integer","format":"int32"},"dex":{"type":"integer","format":"int32"},"con":{"type":"integer","format":"int32"},"int_":{"type":"integer","format":"int32"},"wit":{"type":"integer","format":"int32"},"men":{"type":"integer","format":"int32"}}},"WikiCharClassDetailDto":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"descriptions":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"A warrior class.","ru":"Класс воина."}},"race":{"type":"string"},"classTransferDegree":{"type":"integer","format":"int32"},"parentClassId":{"type":"integer","format":"int64"},"baseStats":{"$ref":"#/components/schemas/WikiCharClassBaseStatsDto"},"categories":{"type":"array","items":{"type":"string"}},"skillTree":{"type":"array","items":{"$ref":"#/components/schemas/WikiCharClassSkillTreeDto"}}}},"WikiCharClassSkillTreeDto":{"type":"object","properties":{"skillId":{"type":"integer","format":"int64"},"names":{"type":"object","additionalProperties":{"type":"string"},"example":{"en":"Power Strike","ru":"Удар Силы"}},"icon":{"type":"string"},"iconPanel":{"type":"string"},"skillLvl":{"type":"integer","format":"int32"},"getLevel":{"type":"integer","format":"int32"},"levelUpSp":{"type":"integer","format":"int64"},"autoGet":{"type":"boolean"},"learnedByNpc":{"type":"boolean"}}},"Pageable":{"type":"object","properties":{"page":{"type":"integer","format":"int32","minimum":0},"size":{"type":"integer","format":"int32","minimum":1},"sort":{"type":"array","items":{"type":"string"}}}},"ArticleListResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"translationGroupId":{"type":"string","format":"uuid"},"locale":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"status":{"type":"string","enum":["DRAFT","PUBLISHED","ARCHIVED"]},"seoTitle":{"type":"string"},"seoDescription":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"category":{"type":"string"},"coverImageUrl":{"type":"string"},"pinned":{"type":"boolean"},"views":{"type":"integer","format":"int64"},"authorId":{"type":"string","format":"uuid"},"lastEditorId":{"type":"string","format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"publishedAt":{"type":"string","format":"date-time"},"archivedAt":{"type":"string","format":"date-time"}}},"PagedModelArticleListResponse":{"type":"object","properties":{"content":{"type":"array","items":{"$ref":"#/components/schemas/ArticleListResponse"}},"page":{"$ref":"#/components/schemas/PageMetadata"}}}}}}