37 lines
1.0 KiB
JavaScript
37 lines
1.0 KiB
JavaScript
// userService.js
|
|
|
|
export async function getOrCreateUserAndGroups(prisma, fromInfo) {
|
|
const platform = 'telegram'
|
|
const originalPlatformId = fromInfo.id.toString()
|
|
const username = fromInfo.username || ''
|
|
|
|
// 1. Пытаемся найти пользователя по уникальному ключу (originalPlatformId + platform)
|
|
let user = await prisma.user.findUnique({
|
|
where: {
|
|
platform_originalPlatformId: { platform, originalPlatformId }
|
|
},
|
|
include: { groups: true } // <-- many-to-many!
|
|
})
|
|
|
|
// 2. Если не найден — создаём
|
|
if (!user) {
|
|
user = await prisma.user.create({
|
|
data: {
|
|
username,
|
|
platform,
|
|
originalPlatformId
|
|
},
|
|
include: { groups: true }
|
|
})
|
|
}
|
|
|
|
// 3. Получаем id пользователя
|
|
const userId = user.id
|
|
|
|
// 4. Массив групп пользователя
|
|
const groups = user.groups ?? []
|
|
|
|
// 5. Возвращаем user, userId, groups
|
|
return { user, userId, groups }
|
|
}
|