Skip to content

Commit 0ac6982

Browse files
попыточка пофиксить время работы
1 parent 6a7e025 commit 0ac6982

13 files changed

Lines changed: 113 additions & 95 deletions

File tree

calendar_backend/methods/list_calendar.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ async def get_user_calendar(group_id: int, session: Session, start_date: date_,
2525
logger.debug(f"Getting user calendar (iCal) for group {group_id}")
2626
group = Group.get(group_id, session=session)
2727
user_calendar = Calendar()
28-
timetable = await utils.get_group_lessons_in_daterange(group, start_date, end_date)
28+
timetable = await utils.get_group_lessons_in_daterange(group, start_date, end_date, session=session)
2929
for lesson in timetable:
3030
teacher = (
3131
str([f"{row.first_name} {row.middle_name} {row.last_name}" for row in lesson.lecturer])

calendar_backend/methods/utils.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@
77
from fastapi import File, UploadFile
88
from sqlalchemy.orm import Session
99

10-
from calendar_backend.models.db import Event, Group, Lecturer, Photo, Room
10+
from calendar_backend.models.db import Event, Group, Lecturer, Photo, Room, EventsRooms, EventsLecturers
1111
from calendar_backend.settings import get_settings
1212

13-
1413
settings = get_settings()
1514

1615

@@ -36,30 +35,34 @@ async def get_lessons_by_group_from_date(group: Group, date: datetime.date) -> l
3635

3736

3837
async def get_group_lessons_in_daterange(
39-
group: Group, date_start: datetime.date, date_end: datetime.date
38+
group: Group, date_start: datetime.date, date_end: datetime.date, session: Session
4039
) -> list[Event]:
4140
events_list = []
42-
events = group.events
41+
events = Event.get_all(session=session).filter(Event.group_id == group.id).all()
4342
for lesson in events:
4443
if lesson.start_ts.date() >= date_start and lesson.end_ts.date() < date_end:
4544
events_list.append(lesson)
4645
return events_list
4746

4847

49-
async def get_room_lessons_in_daterange(room: Room, date_start: datetime.date, date_end: datetime.date) -> list[Event]:
48+
async def get_room_lessons_in_daterange(
49+
room: Room, date_start: datetime.date, date_end: datetime.date, session: Session
50+
) -> list[Event]:
5051
events_list = []
51-
events = room.events
52+
events_ids = EventsRooms.get_all(session=session).filter(EventsRooms.room_id == room.id).all()
53+
events = [Event.get(row, session=session) for row in events_ids]
5254
for lesson in events:
5355
if lesson.start_ts.date() >= date_start and lesson.end_ts.date() < date_end:
5456
events_list.append(lesson)
5557
return events_list
5658

5759

5860
async def get_lecturer_lessons_in_daterange(
59-
lecturer: Lecturer, date_start: datetime.date, date_end: datetime.date
61+
lecturer: Lecturer, date_start: datetime.date, date_end: datetime.date, session: Session
6062
) -> list[Event]:
6163
events_list = []
62-
events = lecturer.events
64+
events_ids = EventsLecturers.get_all(session=session).filter(EventsRooms.room_id == lecturer.id).all()
65+
events = [Event.get(row, session=session) for row in events_ids]
6366
for lesson in events:
6467
if lesson.start_ts.date() >= date_start and lesson.end_ts.date() < date_end:
6568
events_list.append(lesson)
Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,25 @@
1-
from .db import Credentials, Group, Lecturer, Event, Room, Direction, CommentEvent, CommentLecturer, EventsLecturers, EventsRooms
1+
from .db import (
2+
Credentials,
3+
Group,
4+
Lecturer,
5+
Event,
6+
Room,
7+
Direction,
8+
CommentEvent,
9+
CommentLecturer,
10+
EventsLecturers,
11+
EventsRooms,
12+
)
213

3-
__all__ = ["Credentials", "Group", "Lecturer", "Event",
4-
"Room", "Direction", "CommentEvent", "CommentLecturer", "EventsLecturers", "EventsRooms"]
14+
__all__ = [
15+
"Credentials",
16+
"Group",
17+
"Lecturer",
18+
"Event",
19+
"Room",
20+
"Direction",
21+
"CommentEvent",
22+
"CommentLecturer",
23+
"EventsLecturers",
24+
"EventsRooms",
25+
]

calendar_backend/routes/event.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
EventGet,
1616
EventPatch,
1717
EventPost,
18-
GetListEvent, EventCommentPost, EventCommentPatch, EventComments,
18+
GetListEvent,
19+
EventCommentPost,
20+
EventCommentPatch,
21+
EventComments,
1922
)
2023
from calendar_backend.settings import get_settings
2124

@@ -55,11 +58,13 @@ async def _get_timetable(start: date, end: date, group_id, lecturer_id, room_id,
5558
if detail and "comment" not in detail:
5659
fmt["comments"] = ...
5760
if detail and "description" not in detail:
58-
fmt["lecturer"] = [{
59-
"avatar_id": ...,
60-
"description": ...,
61-
"is_deleted": ...,
62-
}]
61+
fmt["lecturer"] = [
62+
{
63+
"avatar_id": ...,
64+
"description": ...,
65+
"is_deleted": ...,
66+
}
67+
]
6368

6469
return GetListEvent(items=events, limit=limit, offset=offset, total=cnt).dict(exclude=fmt)
6570

@@ -112,15 +117,17 @@ async def http_delete_event(id: int, _: auth.User = Depends(auth.get_current_use
112117

113118
@event_router.post("/{id}/comment", response_model=CommentEventGet)
114119
async def http_comment_event(id: int, comment: EventCommentPost) -> CommentEventGet:
115-
return CommentEventGet.from_orm(DbCommentEvent.create(event_id = id, session=db.session, **comment.dict()))
120+
return CommentEventGet.from_orm(DbCommentEvent.create(event_id=id, session=db.session, **comment.dict()))
116121

117122

118123
@event_router.patch("/{event_id}/comment/{id}", response_model=CommentEventGet)
119124
async def http_udpate_comment(id: int, event_id: int, comment_inp: EventCommentPatch) -> CommentEventGet:
120125
comment = DbCommentEvent.get(id, session=db.session)
121126
if comment.event_id != event_id:
122127
raise ObjectNotFound(DbCommentEvent, id)
123-
return CommentEventGet.from_orm(DbCommentEvent.update(id, session=db.session, **comment_inp.dict(exclude_unset=True)))
128+
return CommentEventGet.from_orm(
129+
DbCommentEvent.update(id, session=db.session, **comment_inp.dict(exclude_unset=True))
130+
)
124131

125132

126133
@event_router.get("/{event_id}/comment/{id}", response_model=CommentEventGet)
@@ -146,11 +153,4 @@ async def http_get_event_comments(event_id: int, limit: int = 10, offset: int =
146153
cnt, res = res.count(), res.offset(offset).limit(limit).all()
147154
else:
148155
cnt, res = res.count(), res.offset(offset).all()
149-
return EventComments(**{
150-
"items": res,
151-
"limit": limit,
152-
"offset": offset,
153-
"total": cnt
154-
})
155-
156-
156+
return EventComments(**{"items": res, "limit": limit, "offset": offset, "total": cnt})

calendar_backend/routes/group.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import datetime
22
import logging
3-
from typing import Any
3+
from typing import Any, Union
44

55
from fastapi import APIRouter, HTTPException, Depends
66
from fastapi_sqlalchemy import db
@@ -15,15 +15,16 @@
1515
logger = logging.getLogger(__name__)
1616

1717

18-
@group_router.get("/{id}", response_model=GroupEvents)
18+
@group_router.get("/{id}", response_model=Union[GroupEvents, GroupGet])
1919
async def http_get_group_by_id(
2020
id: int, start: datetime.date | None = None, end: datetime.date | None = None
2121
) -> GroupEvents:
2222
group = Group.get(id, session=db.session)
2323
result = GroupEvents.from_orm(group)
2424
if start and end:
25-
result.events = await utils.get_group_lessons_in_daterange(group, start, end)
26-
return result
25+
result.events = await utils.get_group_lessons_in_daterange(group, start, end, db.session)
26+
return GroupEvents.from_orm(result)
27+
return GroupGet.from_orm(result)
2728

2829

2930
@group_router.get("/", response_model=GetListGroup)
@@ -33,12 +34,14 @@ async def http_get_groups(query: str = "", limit: int = 10, offset: int = 0) ->
3334
cnt, res = res.count(), res.offset(offset).limit(limit).all()
3435
else:
3536
cnt, res = res.count(), res.offset(offset).all()
36-
return GetListGroup(**{
37-
"items": res,
38-
"limit": limit,
39-
"offset": offset,
40-
"total": cnt,
41-
})
37+
return GetListGroup(
38+
**{
39+
"items": res,
40+
"limit": limit,
41+
"offset": offset,
42+
"total": cnt,
43+
}
44+
)
4245

4346

4447
@group_router.post("/", response_model=GroupGet)

calendar_backend/routes/lecturer.py

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import datetime
22
import logging
3-
from typing import Any, Literal
3+
from typing import Any, Union
44

5-
from fastapi import APIRouter, Depends, UploadFile, File, Query, HTTPException
5+
from fastapi import APIRouter, Depends, UploadFile, File
66
from fastapi_sqlalchemy import db
7-
from calendar_backend.models.db import Lecturer
8-
from calendar_backend.models.db import CommentLecturer as DbCommentLecturer
9-
from calendar_backend.models.db import Photo as DbPhoto
107

11-
from calendar_backend.settings import get_settings
8+
from calendar_backend.exceptions import ObjectNotFound
129
from calendar_backend.methods import utils, auth
10+
from calendar_backend.models.db import CommentLecturer as DbCommentLecturer
11+
from calendar_backend.models.db import Lecturer
12+
from calendar_backend.models.db import Photo as DbPhoto
1313
from calendar_backend.routes.models import (
1414
LecturerEvents,
1515
GetListLecturer,
@@ -18,25 +18,29 @@
1818
LecturerPatch,
1919
Photo,
2020
LecturerPhotos,
21-
CommentLecturer, LecturerCommentPost, LecturerCommentPatch, LecturerComments
21+
CommentLecturer,
22+
LecturerCommentPost,
23+
LecturerCommentPatch,
24+
LecturerComments,
2225
)
23-
from calendar_backend.exceptions import ObjectNotFound
26+
from calendar_backend.settings import get_settings
2427

2528
lecturer_router = APIRouter(prefix="/timetable/lecturer", tags=["Lecturer"])
2629
settings = get_settings()
2730
logger = logging.getLogger(__name__)
2831

2932

30-
@lecturer_router.get("/{id}", response_model=LecturerEvents)
33+
@lecturer_router.get("/{id}", response_model=Union[LecturerEvents, LecturerGet])
3134
async def http_get_lecturer_by_id(
3235
id: int, start: datetime.date | None = None, end: datetime.date | None = None
33-
) -> LecturerEvents:
36+
) -> LecturerEvents | LecturerGet:
3437
lecturer = Lecturer.get(id, session=db.session)
3538
lecturer.avatar_link = lecturer.avatar.link if lecturer.avatar else None
3639
result = LecturerEvents.from_orm(lecturer)
3740
if start and end:
38-
result.events = await utils.get_lecturer_lessons_in_daterange(lecturer, start, end)
39-
return result
41+
result.events = await utils.get_lecturer_lessons_in_daterange(lecturer, start, end, db.session)
42+
return LecturerEvents.from_orm(result)
43+
return LecturerGet.from_orm(result)
4044

4145

4246
@lecturer_router.get("/", response_model=GetListLecturer)
@@ -85,32 +89,30 @@ async def http_upload_photo(lecturer_id: int, photo: UploadFile = File(...)) ->
8589

8690

8791
@lecturer_router.get("/{lecturer_id}/photo", response_model=LecturerPhotos)
88-
async def http_get_lecturer_photos(lecturer_id: int, limit: int = 10,
89-
offset: int = 0) -> LecturerPhotos:
92+
async def http_get_lecturer_photos(lecturer_id: int, limit: int = 10, offset: int = 0) -> LecturerPhotos:
9093
res = DbPhoto.get_all(session=db.session).filter(DbPhoto.lecturer_id == lecturer_id)
9194
if limit:
9295
cnt, res = res.count(), res.offset(offset).limit(limit).all()
9396
else:
9497
cnt, res = res.count(), res.offset(offset).all()
95-
return LecturerPhotos(**{
96-
"items": [row.link for row in res],
97-
"limit": limit,
98-
"offset": offset,
99-
"total": cnt
100-
})
98+
return LecturerPhotos(**{"items": [row.link for row in res], "limit": limit, "offset": offset, "total": cnt})
10199

102100

103101
@lecturer_router.post("/{lecturer_id}/comment/", response_model=CommentLecturer)
104102
async def http_comment_lecturer(lecturer_id: int, comment: LecturerCommentPost) -> CommentLecturer:
105-
return CommentLecturer.from_orm(DbCommentLecturer.create(lecturer_id=lecturer_id, session=db.session, **comment.dict()))
103+
return CommentLecturer.from_orm(
104+
DbCommentLecturer.create(lecturer_id=lecturer_id, session=db.session, **comment.dict())
105+
)
106106

107107

108108
@lecturer_router.patch("/{lecturer_id}/comment/{id}", response_model=CommentLecturer)
109109
async def http_update_comment_lecturer(id: int, lecturer_id: int, comment_inp: LecturerCommentPatch) -> CommentLecturer:
110110
comment = DbCommentLecturer.get(id=id, session=db.session)
111111
if comment.lecturer_id != lecturer_id:
112112
raise ObjectNotFound(DbCommentLecturer, id)
113-
return CommentLecturer.from_orm(DbCommentLecturer.update(id, session=db.session, **comment_inp.dict(exclude_unset=True)))
113+
return CommentLecturer.from_orm(
114+
DbCommentLecturer.update(id, session=db.session, **comment_inp.dict(exclude_unset=True))
115+
)
114116

115117

116118
@lecturer_router.post("/{id}/avatar", response_model=LecturerGet)
@@ -149,12 +151,7 @@ async def http_get_all_lecturer_comments(lecturer_id: int, limit: int = 10, offs
149151
cnt, res = res.count(), res.offset(offset).limit(limit).all()
150152
else:
151153
cnt, res = res.count(), res.offset(offset).all()
152-
return LecturerComments(**{
153-
"items": res,
154-
"limit": limit,
155-
"offset": offset,
156-
"total": cnt
157-
})
154+
return LecturerComments(**{"items": res, "limit": limit, "offset": offset, "total": cnt})
158155

159156

160157
@lecturer_router.get("/{lecturer_id}/photo/{id}", response_model=Photo)
@@ -163,4 +160,3 @@ async def get_photo(id: int, lecturer_id: int) -> Photo:
163160
if photo.lecturer_id != lecturer_id:
164161
raise ObjectNotFound(DbPhoto, id)
165162
return Photo.from_orm(photo)
166-

calendar_backend/routes/models/__init__.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,8 @@
99
Photo,
1010
LecturerCommentPost,
1111
LecturerCommentPatch,
12-
LecturerComments
12+
LecturerComments,
1313
)
1414
from .room import RoomPost, RoomPatch, RoomEvents, GetListRoom
15-
from .event import (
16-
EventPost,
17-
EventPatch,
18-
Event,
19-
GetListEvent,
20-
CommentEventGet,
21-
EventComments
22-
)
15+
from .event import EventPost, EventPatch, Event, GetListEvent, CommentEventGet, EventComments
2316
from .group import GroupPost, GroupPatch, GroupEvents, GetListGroup

calendar_backend/routes/models/event.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def __repr__(self):
3636
f" lecturer={self.lecturer_id}, start_ts={self.start_ts}, end_ts={self.end_ts})"
3737
)
3838

39+
3940
class Event(Base):
4041
id: int
4142
name: str
@@ -67,4 +68,4 @@ class EventComments(Base):
6768
items: list[CommentEventGet]
6869
limit: int
6970
offset: int
70-
total: int
71+
total: int

calendar_backend/routes/models/group.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,4 @@ class GetListGroup(Base):
5050

5151

5252
class GroupEvents(GroupGet):
53-
events: list[EventGet] = []
53+
events: list[EventGet]

calendar_backend/routes/models/lecturer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class Photo(Base):
4343

4444

4545
class LecturerEvents(LecturerGet):
46-
events: list[EventGet] = []
46+
events: list[EventGet]
4747

4848

4949
class LecturerCommentPost(Base):
@@ -60,4 +60,4 @@ class LecturerComments(Base):
6060
items: list[CommentLecturer]
6161
limit: int
6262
offset: int
63-
total: int
63+
total: int

0 commit comments

Comments
 (0)