Побудувала систему лояльності та репутації — 67 функцій на основі реєстру з 31 таблиці, з лігами, бейджами та крамницею обміну, — і блокувала рядок балансу, щоб закрити вікно для подвійного витрачання.
Роботу виконано: 2025
67 функцій над реєстром лояльності з 31 таблиці
Ситуація. Професійні соцмережі мають проблему холодного старту: платформою варто користуватися тоді, коли нею вже користуються інші, а доти майже немає причин повертатися. Звичний важіль — система винагород: бали за внесок, статус, що відображає репутацію. Описати її легко, а от побудувати — справа підступна, бо щойно бали можна витратити, вони стають грішми, і будь‑якої помилки, якої припускаються з грішми, можна припуститися й тут.
Завдання. Внесок треба було вимірювати й винагороджувати, а баланс — зробити таким, щоб його не можна було витратити двічі.
Дія. Схема лояльності налічує 31 таблицю та 67 функцій, статус — ще 5 таблиць і 32 функції, а поруч — схеми discovery й персоналізації, які вирішують, що саме бачить конкретний учасник. Над реєстром надбудовано ліги, бейджі та крамницю обміну, де баланс перетворюється на щось реальне. Найбільше уваги забрав найстаріший баг, який тільки буває: перевірити баланс, потім списати його — і два запити, що прийшли одночасно, обидва проходять перевірку. Кожна зміна спершу блокує рядок гаманця й лише потім його читає, тож другий запит чекає, доки завершиться перший, а не женеться з ним наввипередки. А можливим це стає лише тому, що гаманець лежить у тій самій базі даних, що й усе інше: баланс і те, що на нього куплено, комітяться разом або не комітяться зовсім.
Результат. Внесок вимірюється й винагороджується, а баланс — це арифметика, а не наближення. Блокування рядків — повільніший варіант, і все ж обрали саме його: конкуренція за гаманець просто змушує запити виконуватися по черзі, а альтернатива — учасник, який витрачає ті самі бали двічі, і хтось, хто потім вручну все це звіряє.
Перегляньте повне портфоліо.
Одна частина довшого переліку — і він увесь на цьому сайті.
Кожен запис написано однаково: ситуація, завдання, що ми зробили і що змінилося.