Интерфейс настоящего приложения: онлайн-запись с выбором услуги, врача и времени, кабинеты пациента, врача и администратора и одновременная запись двух пациентов на одно окно.
Выберите услугу, врача и удобное время. Занимает меньше минуты.
Ваши записи и история лечения
Терапевт-эндодонтист · сегодня
Расписание всех врачей
| Дата и время | Врач | Пациент | Действия |
|---|
Два пациента нажимают на одно и то же время в одну миллисекунду. Запись получает только один, второму сайт предлагает выбрать другое время.
// Атомарный захват: из двух одновременных запросов строку обновит только один, // у второго UPDATE не найдёт свободную строку и вернёт 0. var claimed = await _db.Appointments .Where(a => a.Id == appointmentId && a.ClientId == null) .ExecuteUpdateAsync(s => s.SetProperty(a => a.ClientId, (long?)client.Id)); if (claimed == 0) return new BookingResult(BookingStatus.AlreadyTaken);
Без блокировок и транзакций: проверка «время свободно» и запись идут одним SQL-запросом, поэтому между ними никто не вклинится. Сценарий закреплён тестом Client_can_book_a_free_slot_and_a_second_client_cannot_take_it.
Обсудим архитектуру, сроки и бюджет за 15 минут в Telegram.