File size: 2,189 Bytes
e8f820d
 
ce1e080
5dc2d03
 
e8f820d
5dc2d03
87c52f8
 
5dc2d03
e8f820d
 
 
 
5dc2d03
e8f820d
 
 
679dfd8
e8f820d
5dc2d03
e8f820d
 
5dc2d03
87c52f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e8f820d
5dc2d03
 
e8f820d
 
5dc2d03
e8f820d
679dfd8
e8f820d
 
5dc2d03
 
e8f820d
 
 
87c52f8
 
 
 
 
 
e8f820d
 
9797175
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy import Column, String
import uuid
from datetime import date, datetime
from enum import Enum
from typing import List, Optional

from sqlalchemy.dialects.postgresql import UUID
from sqlmodel import Field, Relationship, SQLModel, ForeignKey

class LeaveType(str, Enum):
    SICK = "Sick"
    CASUAL = "Casual"
    EMERGENCY = "Emergency"

class LeaveStatus(str, Enum):
    APPROVED = "Approved"
    REJECTED = "Rejected"
    CANCELLED = "Cancelled"
    PENDING = "Pending"

class Leave(SQLModel, table=True):
    __tablename__ = "leave"
    id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
    user_id: uuid.UUID = Field(
        sa_column=Column(UUID(as_uuid=True),
            ForeignKey("users.id", ondelete="CASCADE"),
            nullable=False
        )
    )
    mentor_id: uuid.UUID = Field(
        sa_column=Column(UUID(as_uuid=True),
            ForeignKey("users.id", ondelete="SET NULL"),
            nullable=True
        )
    )
    lead_id: uuid.UUID = Field(
        sa_column=Column(UUID(as_uuid=True),
            ForeignKey("users.id", ondelete="SET NULL"),
            nullable=True
        )
    )
    leave_type: LeaveType = Field(default=LeaveType.SICK)
    from_date: date = Field(nullable=False)
    to_date: date = Field(nullable=False)
    days: Optional[int] = 1
    reason: str = Field(nullable=True)
    status: LeaveStatus = Field(default=LeaveStatus.PENDING)
    is_delivered: bool = Field(default= False)
    is_read: bool = Field(default=False)
    requested_at: date = Field(default_factory=date.today)
    updated_at: date = Field(default_factory=date.today)
    reject_reason: Optional[str] = None

class UserDevices(SQLModel, table=True):
    __tablename__ = "user_devices"
    id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
    user_id: uuid.UUID = Field(
        sa_column=Column(UUID(as_uuid=True),
            ForeignKey("users.id", ondelete="CASCADE"),
            nullable=False
        )
    )
    device_token: str
    last_seen: datetime = Field(default_factory=datetime.now)
    updated_at: datetime = Field(default_factory=datetime.now)