Войдите, чтобы смотреть видео
Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
Создай сущность связи между пользователем и событием, которая хранит факт участия пользователя в конкретном событии.
src/db/entities/event-participant.entity.ts
EventParticipantЭта таблица реализует связь many-to-many между пользователями и событиями через отдельную сущность.
id — уникальный идентификатор записи участияeventId — идентификатор событияuserId — идентификатор пользователяjoinedAt — дата и время, когда пользователь записался на событиеДобавь уникальный индекс, чтобы один и тот же пользователь не мог записаться на одно и то же событие дважды.
Опиши связь many-to-one с событием, потому что у одного события может быть много участников, а каждая запись участия относится только к одному событию.
Опиши связь many-to-one с пользователем, потому что один пользователь может участвовать во многих событиях, а каждая запись участия принадлежит одному пользователю.
onDelete: 'CASCADE'Если удалить событие или пользователя, связанные записи об участии тоже должны удалиться автоматически.
Создай сущность события, которая хранит основную информацию о мероприятии, владельце и участниках.
src/db/entities/event.entity.ts
EventЭта сущность описывает само мероприятие и его основные поля.
title — название событияdescription — описание событияcapacity — максимальное количество участниковaddress — адрес проведенияstartsAt — дата и время началаownerId — идентификатор автора событияДобавь database-level проверку, чтобы вместимость события всегда была больше нуля.
Опиши связь many-to-one с пользователем, потому что один пользователь может создать много событий, а у каждого события только один владелец.
Опиши обратную связь one-to-many, чтобы у события можно было получить список всех записей участия.
Добавь поля автоматического создания и обновления записи.
Создай сущность пользователя, которая хранит данные для аутентификации, имя и связи с событиями.
src/db/entities/user.entity.ts
UserЭта сущность описывает пользователя системы.
email — уникальный email для входаpasswordHash — хеш пароля, а не сам парольname — имя пользователяevents — список событий, которые пользователь создалeventParticipations — список участий пользователя в событияхСделай email уникальным, чтобы в системе не могло существовать двух пользователей с одинаковым адресом.
passwordHashПароль нельзя хранить в открытом виде, поэтому в базе сохраняется только его хеш.
Опиши две связи: одну для созданных событий, вторую для участий в чужих или своих событиях.
package.jsonДобавь команды для работы с CLI TypeORM: запуск CLI, генерация миграции, применение миграций и откат последней миграции.
typeormЭтот скрипт запускает TypeORM CLI через Node.js с поддержкой TypeScript и передает путь до файла data-source.ts.
migration:generateЭта команда генерирует новую миграцию на основе текущих entity и сохраняет ее в папку src/db/migrations с базовым именем InitSchema.
migration:runЭта команда применяет все миграции, которые еще не были выполнены в базе данных.
migration:revertЭта команда откатывает последнюю примененную миграцию.
Для генерации миграции после изменения entity выполни:
Для применения миграций к базе выполни:
Для отката последней миграции выполни: