Back-Feature #396
closedРеализация привязки пользователей друг к другу (Семьи)
Description
Нужно реализовать привязку пользователей друг к другу, т.е. семьи.
Для этого нужно поменять сущности:
В форме по добавлению члена семьи оставляем только роль. (дату рождения выносится в user'а)
Удаляем invite_token из family_member, и вместо этого создаём новую сущность family_invite с полями:
invite_id: string (PK: uuid, будет служить в роли токена приглашения, по нему будет генерироваться ссылка)
family_id: string (FK: family.family_id семья, в которую приглашение добавляет пользователя)
family_role: string (с какой ролью мы добавим нового члена семьи)
expires_at: time without timestamp (когда истекает срок действия приглашения)
Для сущностей добавить соответствующие контроллеры и методы:
Family:
createFamily (создаём семью по user_id)
getFamily (head_id)
deleteFamily (удаляем семью по user_id (удалится семья, у которой head_id === user_id) )
FamilyInvite:
createFamilyInvite (в запрос подаём user_id (для сравнения с head_id семьи), указываются family_id и family_role -> создаём приглашение)
getInviteLink (по invite_id получаем ссылку на приглашение)
нужно продумать механизм, который условно раз в день будет проходиться по списку инвайтов и удалять те, которые уже должны быть недействительны
FamilyMember:
createFamilyMember (создаём familyMember'а для пользователя, используя invite_id и user_id)
updateFamilyMember (подаём user_id (главы семьи), family_member_id: глава семьи может к примеру поменять роль члена семьи)
getFamilyMembersByFamily (получить список всех familyMember'ов в семье)
deleteFamilyMember (глава семьи может по family_member_id удалять членов семьи)
FamilyNickname:
createFamilyNickname (на вход подаётся user_id выполняющего запрос, а также from_id, to_id, и остальные поля FamilyNickname)
updateFamilyNickname (на вход подаётся user_id выполняющего запрос, а также from_id, to_id, и остальные поля FamilyNickname)
getFamilyNicknamesFromFamilyMember (подаём user_id, family_member_id, и получаем список всех FamilyNickname, у которых from_id равен family_member_id запроса)
getFamilyNickname (на вход подаём user_id, from_id, to_id, этот запрос будет удобно использовать, чтобы заполнить форму для редактирования FamilyNickname)
Updated by Андрей Савран 2 months ago
family_invite (fixed):
invite_code: string (PK: 12-символьный код приглашения, состоящий из случайной комбинации символов: латиница (строчные и прописные буквы), цифры 0-9. Позволяет создать до (26*2 + 10)^12 ~= 3,27 секстиллионов уникальных кодов, учитывая что они будут удаляться раз в некоторое время, то никаких проблем с тем, что не получится создать новый код, не будет. Этот код идёт в ссылку-приглашение)
family_id: string (FK: family.family_id семья, в которую приглашение добавляет пользователя)
family_role: string (enum: FamilyRole, с какой ролью мы добавим нового члена семьи)
expires_at: time without timestamp (когда истекает срок действия приглашения)
Updated by Андрей Савран 2 months ago
Итоговые методы
Family:
getFamily() по юзер айди выдает семью, главой которой является пользователь
createFamily() создаёт семью пользователю, и ставит его во главу
deleteFamily() удаляет семью, главой которой является пользователь.
FamilyInvite:
createFamilyInvite() создаёт приглашение в семью
getFamilyInviteByCode() получить приглашение по коду
FamilyMember
getFamilyMemberByUserId() получить FamilyMember по юзер айди пользователя
getAllFamilyMembersByFamilyId() получить всех FamilyMember в семье.
createFamilyMember() создать FamilyMember по юзер айди и коду приглашения (приглашение удалится после использования)
deleteFamilyMember() по айди пользователя и айди FamilyMember удалить члена семьи (либо глава удаляет другого члена семьи, либо член семьи сам себя удаляет, при этом глава не может себя удалить)
FamilyNickname:
getFamilyNickname() получить никнейм, который пользователь userId установил члену семьи toFamilyMemberId
createFamilyNickname() установить у пользователя userId никнейм для toFamilyMemberId
updateFamilyNickname() обновить у пользователя userId никнейм для toFamilyMemberId
deleteFamilyNickname() удалить у пользователя userId никнейм для toFamilyMemberId
Updated by Андрей Савран 2 months ago
- Due date set to 04/01/2026
- Status changed from New to Closed