Skip to content

Commit e57fc0b

Browse files
authored
Chore: 어드민 페이지 수정 (#91)
- 어드민 페이지에 새로 추가된 api들이 보일 수 있도록 수정하였습니다
1 parent eab96b6 commit e57fc0b

2 files changed

Lines changed: 227 additions & 0 deletions

File tree

wacruit/src/admin/formatters.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,15 @@ def formatter(model: type[DeclarativeBase], attribute: str):
2626
)
2727

2828
return formatter
29+
30+
31+
def member_formatter(model: type[DeclarativeBase], attribute: str) -> str | None:
32+
member = getattr(model, "member")
33+
return member and f"{member.last_name} {member.first_name}"
34+
35+
36+
def timeline_category_formatter(
37+
model: type[DeclarativeBase], attribute: str
38+
) -> str | None:
39+
category = getattr(model, "category")
40+
return category and category.title

wacruit/src/admin/views.py

Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,30 @@
33
from sqladmin import ModelView
44
from sqlalchemy import Column
55

6+
from wacruit.src.admin.formatters import member_formatter
67
from wacruit.src.admin.formatters import recruiting_formatter
78
from wacruit.src.admin.formatters import shorten_column
9+
from wacruit.src.admin.formatters import timeline_category_formatter
810
from wacruit.src.admin.formatters import user_formatter
911
from wacruit.src.apps.announcement.models import Announcement
12+
from wacruit.src.apps.faq.models import FAQ
13+
from wacruit.src.apps.history.models import History
14+
from wacruit.src.apps.member.models import Member
15+
from wacruit.src.apps.pre_registration.models import PreRegistration
1016
from wacruit.src.apps.problem.models import CodeSubmission
1117
from wacruit.src.apps.problem.models import Problem
1218
from wacruit.src.apps.problem.models import Testcase
19+
from wacruit.src.apps.project.models import Project
1320
from wacruit.src.apps.recruiting.models import Recruiting
1421
from wacruit.src.apps.recruiting.models import RecruitingApplication
22+
from wacruit.src.apps.recruiting_info.models import RecruitingInfo
1523
from wacruit.src.apps.resume.models import ResumeQuestion
1624
from wacruit.src.apps.resume.models import ResumeSubmission
25+
from wacruit.src.apps.review.models import Review
26+
from wacruit.src.apps.seminar.models import Seminar
27+
from wacruit.src.apps.sponsor.models import Sponsor
28+
from wacruit.src.apps.timeline.models import Timeline
29+
from wacruit.src.apps.timeline.models import TimelineCategory
1730
from wacruit.src.apps.user.models import User
1831

1932

@@ -84,6 +97,7 @@ class RecruitingAdmin(ModelView, model=Recruiting):
8497
Recruiting.to_date,
8598
Recruiting.description,
8699
Recruiting.short_description,
100+
Recruiting.recruiting_info,
87101
]
88102

89103
column_formatters = {
@@ -284,6 +298,196 @@ class RecruitingApplicationAdmin(ModelView, model=RecruitingApplication):
284298
column_sortable_list = RecruitingApplication.__table__.columns.keys()
285299

286300

301+
class ProjectAdmin(ModelView, model=Project):
302+
column_list = [
303+
Project.id,
304+
Project.name,
305+
Project.summary,
306+
Project.introduction,
307+
Project.thumbnail_url,
308+
Project.project_type,
309+
Project.is_active,
310+
]
311+
312+
form_excluded_columns = [
313+
Project.images,
314+
Project.urls,
315+
]
316+
317+
column_searchable_list = [
318+
Project.name,
319+
Project.summary,
320+
Project.introduction,
321+
]
322+
323+
column_sortable_list = Project.__table__.columns.keys()
324+
325+
326+
class MemberAdmin(ModelView, model=Member):
327+
column_list = [
328+
Member.id,
329+
Member.first_name,
330+
Member.last_name,
331+
Member.introduction,
332+
Member.department,
333+
Member.college,
334+
Member.phone_number,
335+
Member.github_id,
336+
Member.generation,
337+
Member.is_active,
338+
Member.created_at,
339+
Member.position,
340+
]
341+
342+
column_searchable_list = [Member.first_name, Member.last_name]
343+
344+
column_sortable_list = Member.__table__.columns.keys()
345+
346+
347+
class ReviewAdmin(ModelView, model=Review):
348+
column_list = [
349+
Review.id,
350+
Review.member,
351+
Review.title,
352+
Review.content,
353+
]
354+
355+
column_formatters = {
356+
Review.member: member_formatter, # type: ignore
357+
}
358+
359+
column_searchable_list = [
360+
Review.title,
361+
]
362+
363+
column_sortable_list = Review.__table__.columns.keys()
364+
365+
366+
class SeminarAdmin(ModelView, model=Seminar):
367+
column_list = [
368+
Seminar.id,
369+
Seminar.seminar_type,
370+
Seminar.curriculum_info,
371+
Seminar.prerequisite_info,
372+
Seminar.is_active,
373+
]
374+
375+
column_searchable_list = [Seminar.seminar_type]
376+
377+
column_sortable_list = Seminar.__table__.columns.keys()
378+
379+
380+
class PreRegistrationAdmin(ModelView, model=PreRegistration):
381+
column_list = [
382+
PreRegistration.id,
383+
PreRegistration.url,
384+
PreRegistration.generation,
385+
PreRegistration.is_active,
386+
]
387+
column_searchable_list = [
388+
PreRegistration.url,
389+
PreRegistration.generation,
390+
]
391+
392+
column_sortable_list = PreRegistration.__table__.columns.keys()
393+
394+
395+
class SponsorAdmin(ModelView, model=Sponsor):
396+
column_list = [
397+
Sponsor.id,
398+
Sponsor.name,
399+
Sponsor.amount,
400+
Sponsor.email,
401+
Sponsor.phone_number,
402+
Sponsor.sponsored_date,
403+
]
404+
405+
column_searchable_list = [
406+
Sponsor.name,
407+
]
408+
409+
column_sortable_list = Sponsor.__table__.columns.keys()
410+
411+
412+
class TimelineAdmin(ModelView, model=Timeline):
413+
column_list = [
414+
Timeline.id,
415+
Timeline.title,
416+
Timeline.category,
417+
Timeline.group,
418+
Timeline.start_date,
419+
Timeline.end_date,
420+
]
421+
column_formatters = {
422+
Timeline.category: timeline_category_formatter, # type: ignore
423+
}
424+
column_searchable_list = [
425+
Timeline.title,
426+
]
427+
428+
column_sortable_list = Timeline.__table__.columns.keys()
429+
430+
431+
class TimelineCategoryAdmin(ModelView, model=TimelineCategory):
432+
column_list = [
433+
TimelineCategory.id,
434+
TimelineCategory.title,
435+
]
436+
437+
column_searchable_list = [
438+
TimelineCategory.title,
439+
]
440+
441+
column_sortable_list = TimelineCategory.__table__.columns.keys()
442+
443+
444+
class FAQAdmin(ModelView, model=FAQ):
445+
column_list = [
446+
FAQ.id,
447+
FAQ.question,
448+
FAQ.answer,
449+
]
450+
451+
column_searchable_list = [
452+
FAQ.question,
453+
]
454+
455+
column_sortable_list = FAQ.__table__.columns.keys()
456+
457+
458+
class RecruitingInfoAdmin(ModelView, model=RecruitingInfo):
459+
column_list = [
460+
RecruitingInfo.id,
461+
RecruitingInfo.recruiting,
462+
RecruitingInfo.info_num,
463+
]
464+
465+
column_formatters = {
466+
RecruitingInfo.recruiting: recruiting_formatter # type: ignore
467+
}
468+
469+
column_searchable_list = [
470+
"recruiting.name",
471+
RecruitingInfo.info_num,
472+
]
473+
474+
column_sortable_list = RecruitingInfo.__table__.columns.keys()
475+
476+
477+
class HistoryAdmin(ModelView, model=History):
478+
column_list = [
479+
History.id,
480+
History.history_key,
481+
History.history_value,
482+
]
483+
484+
column_searchable_list = [
485+
History.history_key,
486+
]
487+
488+
column_sortable_list = History.__table__.columns.keys()
489+
490+
287491
admin_views = [
288492
UserAdmin,
289493
RecruitingAdmin,
@@ -294,4 +498,15 @@ class RecruitingApplicationAdmin(ModelView, model=RecruitingApplication):
294498
ResumeQuestionAdmin,
295499
ResumeSubmissionAdmin,
296500
RecruitingApplicationAdmin,
501+
ProjectAdmin,
502+
MemberAdmin,
503+
ReviewAdmin,
504+
SeminarAdmin,
505+
PreRegistrationAdmin,
506+
SponsorAdmin,
507+
TimelineAdmin,
508+
TimelineCategoryAdmin,
509+
FAQAdmin,
510+
RecruitingInfoAdmin,
511+
HistoryAdmin,
297512
]

0 commit comments

Comments
 (0)