File size: 1,324 Bytes
d7cc4ba
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d7da01b
d7cc4ba
 
 
d7da01b
d7cc4ba
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from src.profile.models import UserDevices
from src.notifications.schemas import RegisterDeviceRequest
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from datetime import datetime


async def register_device(
    user_id: str, body: RegisterDeviceRequest, session: AsyncSession
):

    # Check if the user already has this token saved
    stmt = select(UserDevices).where(
        UserDevices.user_id == user_id,
        UserDevices.device_token == body.device_token,
    )
    result = await session.execute(stmt)
    device = result.scalar_one_or_none()

    if device:
        device.last_seen = datetime.utcnow()
        device.updated_at = datetime.utcnow()

        await session.commit()
        await session.refresh(device)
        return device

    # Create new device entry
    new_device = UserDevices(
        user_id=user_id,
        device_token=body.device_token,
    )

    session.add(new_device)
    await session.commit()
    await session.refresh(new_device)
    return new_device


from sqlalchemy import select
from src.profile.models import UserDevices


async def get_user_device_tokens(session, user_id):
    stmt = select(UserDevices.device_token).where(UserDevices.user_id == user_id)
    rows = (await session.execute(stmt)).all()
    return [r[0] for r in rows]