File size: 2,534 Bytes
9797175
d7cc4ba
 
20d48af
 
5dc2d03
d7cc4ba
 
 
 
 
 
 
5dc2d03
 
d7cc4ba
 
 
 
9797175
d7cc4ba
 
 
 
5dc2d03
 
d7cc4ba
 
 
5dc2d03
 
d7cc4ba
 
 
5dc2d03
5c780f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5dc2d03
d7cc4ba
 
5dc2d03
 
 
d7cc4ba
 
 
 
5c780f1
 
b1da44c
d7cc4ba
5dc2d03
 
 
 
 
20d48af
 
 
 
 
 
 
5078e89
20d48af
 
 
 
 
5078e89
20d48af
 
 
 
 
5078e89
20d48af
7d3bfe5
20d48af
618461c
20d48af
 
 
5078e89
20d48af
 
 
 
66536b4
 
 
 
 
 
 
 
 
5078e89
 
 
 
 
 
 
 
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
from sqlalchemy.event.api import CANCEL
from pydantic import BaseModel, EmailStr, Field
from typing import Optional, List
import uuid
from enum import Enum
from datetime import date
from enum import Enum


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


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


class CreateLeaveRequest(BaseModel):
    leave_type: LeaveType
    from_date: date
    to_date: date
    days: int
    reason: str


class ApproveRejectRequest(BaseModel):
    status: LeaveStatus  # APPROVED / REJECTED
    comment: Optional[str] = None  # optional for approve, required for reject


class LeaveDetail(BaseModel):
    id: str
    user_id: str
    user_name: str  # 👈 NEW FIELD
    mentor_id: Optional[str]
    lead_id: Optional[str]
    leave_type: str
    from_date: str
    to_date: str
    days: int
    reason: str
    status: str
    reject_reason: Optional[str]
    updated_at: Optional[str]


class LeaveDetailResponse(BaseModel):
    code: int
    data: LeaveDetail


class LeaveResponse(BaseModel):
    id: str
    leave_type: LeaveType
    from_date: date
    to_date: date
    days: int
    reason: str
    status: LeaveStatus
    mentor_id: str
    lead_id: str
    user_name: Optional[str] = None
    updated_at: Optional[str] = None
    requested_at: Optional[str] = None


class DeviceTokenIn(BaseModel):
    device_token: str
    device_type: Optional[str] = None


class AssetStatus(str, Enum):
    ACTIVE = "Active"
    UNAVAILABLE = "Unavailable"
    ON_REQUEST = "On Request"
    IN_SERVICE = "In Service"


class AssetCreateRequest(BaseModel):
    name: str
    type: str
    status: Optional[AssetStatus] = AssetStatus.UNAVAILABLE


class AssetUpdateRequest(BaseModel):
    name: Optional[str] = None
    type: Optional[str] = None
    status: Optional[AssetStatus] = None


class AssetResponse(BaseModel):
    id: str
    user_id: uuid.UUID
    asset_id: str
    type: str
    status: AssetStatus


class BaseResponse(BaseModel):
    code: int
    data: dict


class UpdateProfileRequest(BaseModel):
    name: Optional[str] = None
    email: Optional[EmailStr] = None
    dob: Optional[str] = None
    address: Optional[str] = None

    current_password: Optional[str] = None
    new_password: Optional[str] = None


class SendMailRequest(BaseModel):
    user_id: str
    to: EmailStr
    subject: str
    body: str
    from_name: Optional[str] = None