| 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: datetime = Field(default_factory=datetime.utcnow) |
| updated_at: datetime = Field(default_factory=datetime.utcnow) |
| 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) |
|
|