@@ -52,39 +52,44 @@ def create_superuser(self, name=None, email=None, password=None, **extra_fields)
52
52
# 🧑 Custom User Form
53
53
# 🧑 نموذج المستخدم المخصص
54
54
class User (AbstractBaseUser , PermissionsMixin ):
55
+ # ___________________
56
+ # حقل يتم تعبئة تلقائي
57
+ # ___________________
55
58
# 🔑 Define the primary field to be UUID تعريف الحقل الأساسي ليكون
56
59
id = models .UUIDField (primary_key = True , default = uuid .uuid4 , editable = False )
57
- # 📛 User Data Properties خصائص بيانات المستخدم
58
- name = models .CharField (max_length = 255 , blank = True , null = True , default = "" )
59
- surname = models .CharField (max_length = 255 , blank = True , default = "" )
60
- email = models .EmailField (unique = True )
61
- date_of_birth = models .DateField (default = timezone .now )
62
- gender = models .CharField (max_length = 15 , blank = True , null = True )
63
- # 🖼️ Profile Picture صورة شخصية
64
- avatar = models .ImageField (upload_to = "avatars" , blank = True , null = True )
65
- # 🖼️ Cover Photo صورة الغلاف
66
- cover = models .ImageField (upload_to = "covers" , blank = True , null = True )
67
-
68
60
# ⚙️ User Status حالة المستخدم
69
61
is_active = models .BooleanField (default = True )
70
62
is_superuser = models .BooleanField (default = False )
71
63
is_staff = models .BooleanField (default = False )
72
-
73
64
# 📋 Custom Admin Link ربط المدير المخصص
74
65
objects = CustomUserManager ()
75
-
76
66
# 👥 Friends and Characteristics of Friendships الأصدقاء وخصائص الصداقات
77
67
friends = models .ManyToManyField ("self" )
78
68
friends_count = models .IntegerField (default = 0 )
79
69
people_you_may_know = models .ManyToManyField ("self" )
80
-
81
- # 📋 Tasks and Their Number المهام وعددها
82
- task_count = models .IntegerField (default = 0 )
83
-
84
70
# 📅 Join Date & Last Login تاريخ الانضمام وآخر تسجيل دخول و حالة الاتصال
85
71
# Automatic
86
72
date_joined = models .DateTimeField (default = timezone .now )
87
73
last_login = models .DateTimeField (auto_now = True , blank = True , null = True )
74
+
75
+ # ___________________
76
+ # حقل يتم تعبئة من المستخدام
77
+ # ___________________
78
+ # 📛 User Data Properties خصائص بيانات المستخدم
79
+ name = models .CharField (max_length = 255 , blank = True , null = True , default = "" )
80
+ surname = models .CharField (max_length = 255 , blank = True , default = "" )
81
+ email = models .EmailField (unique = True )
82
+ date_of_birth = models .DateField (default = timezone .now )
83
+ gender = models .CharField (max_length = 15 , blank = True , null = True )
84
+ # 🖼️ Profile Picture صورة شخصية
85
+ avatar = models .ImageField (upload_to = "avatars" , blank = True , null = True )
86
+ # 🖼️ Cover Photo صورة الغلاف
87
+ cover = models .ImageField (upload_to = "covers" , blank = True , null = True )
88
+ # مهارات
89
+ skills = models .JSONField (default = list , blank = True , null = True )
90
+ # 📋 Tasks and Their Number المهام وعددها
91
+ task_count = models .IntegerField (default = 0 )
92
+ # 📅 User Is Online حالة الاتصال
88
93
is_online = models .BooleanField (default = False )
89
94
90
95
# 🔒 إعدادات تسجيل الدخول: البريد الإلكتروني كمحدد رئيسي لتسجيل الدخول
@@ -112,36 +117,104 @@ def get_cover(self):
112
117
def date_joined_formatted (self ):
113
118
return timesince (self .date_joined )
114
119
120
+ def last_login_formatted (self ):
121
+ return timesince (self .last_login )
122
+
115
123
116
124
# 📬 Friend Request Form نموذج طلب الصداقة
117
125
class FriendshipRequest (models .Model ):
118
126
# 📝 Friend request cases حالات طلب الصداقة
119
- SENT = "sent"
120
- NOT_SENT = "not sent"
121
- ACCEPTED = "accepted"
122
- WAITING = "waiting"
123
- REJECTED = "rejected"
124
- CANCEL = "cancel"
125
-
127
+ NOTSEND = "notsend" # 🚫 لم يتم الإرسال
128
+ SEND = "send" # ✉️ تم الإرسال
129
+ WAITING = "waiting" # ⏳ في انتظار الرد
130
+ ACCEPTED = "accepted" # ✅ تم القبول
131
+ REJECTED = "rejected" # ❌ تم الرفض
132
+ CANCEL = "cancel" # 🔄 تم الإلغاء
133
+ BLOCKED = "blocked" # 🚫 الحظر
134
+ MUTED = "muted" # 🔕 الكتم
135
+ FROZEN = "frozen" # 🧊 تجميد
136
+ ARCHIVED = "archived" # 📦 مؤرشف
137
+ FOLLOWING = "following" # 👥 متابعة
138
+ UNFOLLOWED = "unfollowed" # 🚫 إلغاء المتابعة
139
+ REPORTED = "reported" # 🚨 تم الإبلاغ عنه
140
+ SPAM = "spam" # 🗑️ بريد مزعج
141
+ DELETED = "deleted" # 🗑️ محذوف
142
+ FAVORITE = "favorite" # 🌟 مفضل
143
+ TEMPORARILY_BLOCKED = "temporarily_blocked" # ⏳ حظر مؤقت
144
+ VERIFIED = "verified" # ✔️ تم التحقق
145
+ REQUEST_RESENT = "request_resent" # 🔄 تم إعادة الإرسال
146
+ SUGGESTED = "suggested" # 💡 مقترح
147
+ IGNORED = "ignored" # 🛑 تم التجاهل
148
+ INACTIVE = "inactive" # ⚠️ غير نشط
149
+ LIMITED = "limited" # 🚫 محدود
150
+
151
+ # 📜 قائمة الحالات الممكنة مع النصوص المقابلة
126
152
STATUS_CHOICES = (
127
- (SENT , "Sent" ),
128
- (NOT_SENT , "Not Sent" ),
129
- (ACCEPTED , "Accepted" ),
130
- (WAITING , "Waiting" ),
131
- (REJECTED , "Rejected" ),
132
- (CANCEL , "Cancel" ),
153
+ (NOTSEND , "NotSent" ), # 🚫 لم يتم الإرسال
154
+ (SEND , "Send" ), # ✉️ تم الإرسال
155
+ (WAITING , "Waiting" ), # ⏳ في انتظار الرد
156
+ (ACCEPTED , "Accepted" ), # ✅ تم القبول
157
+ (REJECTED , "Rejected" ), # ❌ تم الرفض
158
+ (CANCEL , "Cancel" ), # 🔄 تم الإلغاء
159
+ (BLOCKED , "Blocked" ), # 🚫 الحظر
160
+ (MUTED , "Muted" ), # 🔕 الكتم
161
+ (FROZEN , "Frozen" ), # 🧊 تجميد
162
+ (ARCHIVED , "Archived" ), # 📦 مؤرشف
163
+ (FOLLOWING , "Following" ), # 👥 متابعة
164
+ (UNFOLLOWED , "Unfollowed" ), # 🚫 إلغاء المتابعة
165
+ (REPORTED , "Reported" ), # 🚨 تم الإبلاغ عنه
166
+ (SPAM , "Spam" ), # 🗑️ بريد مزعج
167
+ (DELETED , "Deleted" ), # 🗑️ محذوف
168
+ (FAVORITE , "Favorite" ), # 🌟 مفضل
169
+ (TEMPORARILY_BLOCKED , "TemporarilyBlocked" ), # ⏳ حظر مؤقت
170
+ (VERIFIED , "Verified" ), # ✔️ تم التحقق
171
+ (REQUEST_RESENT , "RequestResent" ), # 🔄 تم إعادة الإرسال
172
+ (SUGGESTED , "Suggested" ), # 💡 مقترح
173
+ (IGNORED , "Ignored" ), # 🛑 تم التجاهل
174
+ (INACTIVE , "Inactive" ), # ⚠️ غير نشط
175
+ (LIMITED , "Limited" ), # 🚫 محدود
133
176
)
177
+
134
178
# 🔑 Friend Request UUID Essential Field حقل أساسي UUID لطلب الصداقة
135
179
id = models .UUIDField (primary_key = True , default = uuid .uuid4 , editable = False )
136
180
# 🧑 User receiving the request المستخدم المستلم للطلب
137
181
created_for = models .ForeignKey (
138
182
User , related_name = "received_friendshiprequests" , on_delete = models .CASCADE
139
183
)
140
- # 📅 Creation date تاريخ الإنشاء
141
- created_at = models .DateTimeField (auto_now_add = True )
142
184
# 🧑 The user who sent the request المستخدم المرسل للطلب
143
185
created_by = models .ForeignKey (
144
186
User , related_name = "created_friendshiprequests" , on_delete = models .CASCADE
145
187
)
188
+ # 📅 Creation date تاريخ الإنشاء
189
+ created_at = models .DateTimeField (auto_now_add = True )
146
190
# 📝 Order Status حالة الطلب
147
- status = models .CharField (max_length = 20 , choices = STATUS_CHOICES , default = NOT_SENT )
191
+ # 🚫 الحالة الافتراضية: "لم يتم الإرسال"
192
+ status = models .CharField (max_length = 20 , choices = STATUS_CHOICES , default = NOTSEND )
193
+
194
+ # - 🔄 يتم استخدام عبارة "ترتيب حسب" لتحديد ترتيب البيانات المُسترجعة
195
+ # - 📊 يمكن تحديد ترتيب البيانات بناءً على أحد الحقول في الجدول
196
+ # - 🎚️ يتيح ذلك تنظيم البيانات بطريقة محددة، مثل الترتيب تصاعديًا أو تنازليًا
197
+ class Meta :
198
+ ordering = ("-created_at" ,)
199
+
200
+ # - 🔍 اسم الاوبجكت اللى يظهر فى صفحة الادمان
201
+ def __str__ (self ):
202
+ return "%s" % self .status
203
+
204
+ # 🔍 Retrieve All Friend Requests by User and Status 🔍
205
+ # 🧑🤝🧑 جلب جميع طلبات الصداقة بناءً على المستخدم والحالة
206
+ @staticmethod
207
+ def get_friends_by_status (user , status ):
208
+ """جلب الأصدقاء بناءً على حالة محددة"""
209
+ if status == FriendshipRequest .ACCEPTED :
210
+ return User .objects .filter (
211
+ received_friendshiprequests__created_by = user ,
212
+ received_friendshiprequests__status = status ,
213
+ ) | User .objects .filter (
214
+ created_friendshiprequests__created_for = user ,
215
+ created_friendshiprequests__status = status ,
216
+ )
217
+ return User .objects .filter (
218
+ received_friendshiprequests__created_by = user ,
219
+ received_friendshiprequests__status = status ,
220
+ )
0 commit comments