Разработка системы дедлайнов и расписания занятий для LMS

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Разработка системы дедлайнов и расписания занятий для LMS
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Разработка системы дедлайнов и расписания занятий для LMS

Дедлайны и расписание — это временной скелет курса. Без правильной системы студенты пропускают задания, не знают когда занятия, а преподаватели тратят время на ручные напоминания.

Два режима курсов

Self-paced — студент проходит в своём темпе. Дедлайны относительные: «Задание нужно сдать через 7 дней после начала урока». Расписания нет.

Cohort-based — поток с фиксированными датами. Абсолютные дедлайны и расписание занятий (вебинары, семинары). Студенты записываются на конкретный поток.

Модель данных

-- Потоки (cohorts)
CREATE TABLE course_cohorts (
  id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  course_id       UUID REFERENCES courses(id),
  name            VARCHAR(200),           -- 'Поток №5, март 2026'
  starts_at       DATE NOT NULL,
  ends_at         DATE,
  max_students    INT,
  enrollment_open BOOLEAN DEFAULT TRUE
);

-- Дедлайны заданий
CREATE TABLE assignment_deadlines (
  id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  assignment_id   UUID REFERENCES assignments(id),
  cohort_id       UUID REFERENCES course_cohorts(id),
  -- Абсолютный дедлайн для cohort-based курсов
  deadline_at     TIMESTAMPTZ,
  -- Относительный для self-paced: N дней от начала урока
  relative_days   INT,
  late_allowed    BOOLEAN DEFAULT FALSE,
  late_penalty_pct INT DEFAULT 0
);

-- Расписание занятий
CREATE TABLE schedule_events (
  id              UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  cohort_id       UUID REFERENCES course_cohorts(id),
  lesson_id       UUID REFERENCES lessons(id),
  title           VARCHAR(500),
  event_type      VARCHAR(50), -- 'webinar', 'seminar', 'qa_session'
  starts_at       TIMESTAMPTZ NOT NULL,
  ends_at         TIMESTAMPTZ NOT NULL,
  location_url    VARCHAR(2000),  -- Zoom/Meet ссылка
  recording_url   VARCHAR(2000),  -- После события
  is_mandatory    BOOLEAN DEFAULT FALSE,
  timezone        VARCHAR(100) DEFAULT 'Europe/Moscow'
);

Расчёт персональных дедлайнов для self-paced

При зачислении студента в курс все относительные дедлайны конвертируются в абсолютные и сохраняются для конкретного студента:

async function assignDeadlines(studentId, courseId) {
  const enrollment = await db.enrollments.findOne({ studentId, courseId });
  const assignments = await db.assignments.findAll({ courseId });

  const deadlineRecords = assignments
    .filter(a => a.relativeDays !== null)
    .map(a => ({
      studentId,
      assignmentId: a.id,
      deadlineAt: addDays(enrollment.enrolledAt, a.relativeDays),
    }));

  await db.studentDeadlines.bulkCreate(deadlineRecords, {
    onConflict: 'ignore', // Не перезаписываем при повторном вызове
  });
}

Отображение в интерфейсе

Для студента:

  • Календарь с дедлайнами и занятиями
  • Список «Что сдать на этой неделе» на дашборде
  • Countdown timer для ближайшего дедлайна
  • Разделение: просроченные / сегодня / эта неделя / позже

Для преподавателя:

  • Сводка по потоку: сколько студентов сдали к дедлайну, сколько нет
  • Массовое продление дедлайна для всего потока

Уведомления о дедлайнах

Уведомления рассылаются через очередь задач по расписанию:

За сколько Тип Условие
7 дней Email Задание не отправлено
24 часа Email + Push Задание не отправлено
3 часа Push Задание не отправлено
В день занятия Email Напоминание о вебинаре
15 минут Push Напоминание о занятии
// Cron job каждый час
async function sendDeadlineReminders() {
  const upcoming = await db.studentDeadlines.findAll({
    deadlineAt: {
      gte: new Date(),
      lte: addHours(new Date(), 25), // Следующие 25 часов
    },
    submittedAt: null, // Ещё не сдано
    reminderSent24h: false,
  });

  for (const deadline of upcoming) {
    const hoursLeft = (deadline.deadlineAt - new Date()) / (1000 * 60 * 60);
    if (hoursLeft <= 24) {
      await sendReminderEmail(deadline.studentId, deadline.assignmentId);
      await db.studentDeadlines.update(deadline.id, { reminderSent24h: true });
    }
  }
}

iCal экспорт

Студенты хотят видеть расписание курса в Google Calendar или Apple Calendar:

import ical from 'ical-generator';

app.get('/api/courses/:id/schedule.ics', authMiddleware, async (req, res) => {
  const events = await db.scheduleEvents.findAll({ courseId: req.params.id });
  const calendar = ical({ name: course.title });

  events.forEach(event => {
    calendar.createEvent({
      start: event.startsAt,
      end: event.endsAt,
      summary: event.title,
      description: `Тип: ${event.eventType}\nСсылка: ${event.locationUrl}`,
      url: event.locationUrl,
    });
  });

  res.setHeader('Content-Type', 'text/calendar');
  res.send(calendar.toString());
});

Сроки

Базовая система дедлайнов с уведомлениями — 4–5 дней. Cohort-based расписание с календарным отображением и iCal экспортом — ещё 4–5 дней.