API: поиск игроков по нику для автокомплита (GET /api/users/search)

До 10 подсказок по подстроке ника среди активных игроков (role=player).
Регистронезависимо и для кириллицы: SQLite LIKE/lower сворачивают регистр
только у ASCII, поэтому фильтрация/ранжирование в Python (casefold):
префиксные совпадения раньше подстрочных, внутри — по алфавиту.
Пустой q — пустой список. Тесты + регенерированный schema.d.ts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 02:22:27 +03:00
co-authored by Claude Fable 5
parent fc1b1fd912
commit e5b7420bae
5 changed files with 178 additions and 0 deletions
+64
View File
@@ -225,6 +225,26 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/users/search": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Search Users
* @description Автокомплит по нику. Пустой q — пустой список (не ошибка): удобнее при наборе.
*/
get: operations["search_users_api_users_search_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/groups": {
parameters: {
query?: never;
@@ -1975,6 +1995,18 @@ export interface components {
/** Avatar Url */
avatar_url?: string | null;
};
/**
* UserSuggestion
* @description Подсказка автокомплита по нику (приглашение в группу и т.п.).
*/
UserSuggestion: {
/** User Id */
user_id: number;
/** Nickname */
nickname: string;
/** Avatar Url */
avatar_url?: string | null;
};
/** ValidationError */
ValidationError: {
/** Location */
@@ -2388,6 +2420,38 @@ export interface operations {
};
};
};
search_users_api_users_search_get: {
parameters: {
query?: {
q?: string;
limit?: number;
};
header?: never;
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["UserSuggestion"][];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
my_groups_api_groups_get: {
parameters: {
query?: never;