File size: 2,300 Bytes
120bd9a
b37ebd1
 
120bd9a
b37ebd1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120bd9a
 
 
d896946
 
 
 
 
 
c3b9247
 
 
4e64e70
34c3133
b37ebd1
 
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
from datetime import date, datetime
from typing import Optional

from sqlalchemy import BigInteger, Boolean, Date, DateTime, Integer, String, func
from sqlalchemy.orm import Mapped, mapped_column

from app.db.base import Base


class User(Base):
    __tablename__ = "users"

    id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False)
    username: Mapped[Optional[str]] = mapped_column(String(64))
    full_name: Mapped[str] = mapped_column(String(256), default="")
    lang: Mapped[str] = mapped_column(String(2), default="am")
    stream: Mapped[Optional[str]] = mapped_column(String(16))
    year: Mapped[Optional[int]] = mapped_column(Integer)
    referred_by: Mapped[Optional[int]] = mapped_column(BigInteger)
    gate_passed: Mapped[bool] = mapped_column(Boolean, default=False)
    points: Mapped[int] = mapped_column(Integer, default=0)
    streak: Mapped[int] = mapped_column(Integer, default=0, server_default="0")
    best_streak: Mapped[int] = mapped_column(Integer, default=0, server_default="0")
    last_active_on: Mapped[Optional[date]] = mapped_column(Date)
    active_days: Mapped[int] = mapped_column(Integer, default=0, server_default="0")
    week_key: Mapped[Optional[str]] = mapped_column(String(8))
    week_xp: Mapped[int] = mapped_column(Integer, default=0, server_default="0")
    day_key: Mapped[Optional[str]] = mapped_column(String(10))
    day_xp: Mapped[int] = mapped_column(Integer, default=0, server_default="0")
    trust: Mapped[int] = mapped_column(Integer, default=100, server_default="100")
    source: Mapped[Optional[str]] = mapped_column(String(24))  # where they came from (poster, inline, referral...)
    pending_link: Mapped[Optional[str]] = mapped_column(String(16))  # deep link to open after joining/onboarding
    share_prompt_day: Mapped[Optional[str]] = mapped_column(String(10))  # last day we suggested sharing
    credit_name: Mapped[bool] = mapped_column(Boolean, default=False, server_default="false")  # name on files they give
    gate_missing: Mapped[Optional[str]] = mapped_column(String(80))  # which join-gate places they were last missing
    is_banned: Mapped[bool] = mapped_column(Boolean, default=False)
    created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())