@@ -36,19 +36,13 @@ class Status(models.TextChoices):
3636 project_start = models .DateTimeField (help_text = "프로젝트 시작" )
3737 project_end = models .DateTimeField (help_text = "프로젝트 종료" )
3838
39- is_active = models .BooleanField (
40- default = False ,
41- help_text = "현재 진행 중인 시즌" ,
42- )
43-
4439 created_at = models .DateTimeField (auto_now_add = True )
4540 updated_at = models .DateTimeField (auto_now = True )
4641
4742 class Meta :
4843 db_table = "seasons"
4944 ordering = ["-created_at" ]
5045 indexes = [
51- models .Index (fields = ["is_active" ]),
5246 models .Index (fields = ["status" ]),
5347 ]
5448
@@ -67,8 +61,10 @@ def is_project_period(self) -> bool:
6761
6862 @classmethod
6963 def get_active_season (cls ):
70- """현재 활성화된 시즌 반환"""
71- return cls .objects .filter (is_active = True ).first ()
64+ """현재 활성화된 시즌 반환 (진행 중인 시즌)"""
65+ return cls .objects .filter (
66+ status__in = [cls .Status .MATCHING , cls .Status .IN_PROJECT ]
67+ ).order_by ('-created_at' ).first ()
7268
7369
7470class Project (models .Model ):
@@ -121,11 +117,6 @@ class Status(models.TextChoices):
121117 help_text = "프로젝트 기간 (주)" ,
122118 )
123119
124- target_team_size = models .SmallIntegerField (
125- default = 5 ,
126- help_text = "목표 팀 인원 (PM1/FE2/BE2 = 5명)" ,
127- )
128-
129120 status = models .CharField (
130121 max_length = 20 ,
131122 choices = Status .choices ,
@@ -172,11 +163,6 @@ class Status(models.TextChoices):
172163 help_text = "관련 링크 (마크다운)" ,
173164 )
174165
175- is_favorite = models .BooleanField (
176- default = False ,
177- help_text = "즐겨찾기 여부" ,
178- )
179-
180166 created_at = models .DateTimeField (auto_now_add = True )
181167 updated_at = models .DateTimeField (auto_now = True )
182168
@@ -208,74 +194,6 @@ def toggle_like(self, user):
208194 return created # True: 좋아요 추가, False: 좋아요 제거
209195
210196
211- class ProjectApplication (models .Model ):
212- """
213- 프로젝트 지원
214- - 열정 레벨 (1~4) 저장
215- - 지원 역할 선택
216- """
217-
218- class Status (models .TextChoices ):
219- APPLIED = "APPLIED" , "지원됨"
220- CANCELLED = "CANCELLED" , "취소됨"
221- MATCHED = "MATCHED" , "매칭됨"
222- REJECTED = "REJECTED" , "거절됨"
223-
224- project = models .ForeignKey (
225- Project ,
226- on_delete = models .CASCADE ,
227- related_name = "applications" ,
228- )
229-
230- user = models .ForeignKey (
231- settings .AUTH_USER_MODEL ,
232- on_delete = models .CASCADE ,
233- related_name = "applications" ,
234- )
235-
236- role = models .ForeignKey (
237- "accounts.Role" ,
238- on_delete = models .PROTECT ,
239- related_name = "applications" ,
240- help_text = "지원 역할 (PM/FRONTEND/BACKEND)" ,
241- )
242-
243- passion_level = models .SmallIntegerField (
244- validators = [MinValueValidator (1 ), MaxValueValidator (4 )],
245- help_text = "열정 레벨 (1~4, 설문 결과)" ,
246- )
247-
248- status = models .CharField (
249- max_length = 20 ,
250- choices = Status .choices ,
251- default = Status .APPLIED ,
252- )
253-
254- applied_at = models .DateTimeField (auto_now_add = True )
255- updated_at = models .DateTimeField (auto_now = True )
256-
257- class Meta :
258- db_table = "project_applications"
259- constraints = [
260- models .UniqueConstraint (
261- fields = ["project" , "user" ],
262- name = "uq_project_application" ,
263- ),
264- models .CheckConstraint (
265- check = models .Q (passion_level__gte = 1 , passion_level__lte = 4 ),
266- name = "ck_passion_level_range" ,
267- ),
268- ]
269- indexes = [
270- models .Index (fields = ["project" , "role" , "status" ]),
271- models .Index (fields = ["user" , "status" ]),
272- models .Index (fields = ["passion_level" ]),
273- ]
274-
275- def __str__ (self ) -> str :
276- return f"{ self .user } → { self .project } ({ self .role .code } )"
277-
278-
279197class ProjectLike (models .Model ):
280198 """
281199 프로젝트 좋아요
0 commit comments