Closed cahirwpz closed 4 years ago
Course
.Jeśli chodzi o zagnieżdżanie — jest ono intencjonalne. Dzięki temu zawsze masz dostęp do USOS-owych kluczy i nie musisz pamiętać identyfikatorów z Systemu Zapisów w swoich skryptach.
Przy aktualizacji pola usos_id
dla Term
kod SZ robi niepotrzebnie sprawdzanie semantyczne:
"usos_id": ["Istnieje już termin z tą wartością pola Kod terminu w systemie USOS."]
W tym przypadku jest ok, że usos_id
dla dwóch różnych terminów z SZ jest takie samo. W tym przypadku usos_id
odnosi się do DZ_TERMINY
, a nie DZ_TERMINY_GRUP
.
- Odmowa. Paginacja ma sens. Służy temu, żebyś nie blokował wątku na serwerze na zbyt długo swoim zapytaniem.
To jest rzeczywisty problem? Czy próba optymalizacji przypadku, który zdarza się bardzo rzadko. Nie próbujesz przerzucać odpowiedzialności na klienta API?
- Odmowa. Jeśli te dane są gdzieś niepoprawne, możesz powiedzieć Lewemu — on to poprawi. Ale nie potrzebujesz prawa zapisu do danych, które zasadniczo się nie zmieniają.
Ok. Sugeruję zatem możliwość wyboru z listy, a nie jako wpisywany z palca ciąg znaków.
- Masz. Poprzez model Course.
Nalegam na takie zaprojektowanie API by było jednorodne. Dzięki temu moje API dostępowe będzie miało do rozważenia mniej przypadków. Na prawdę nie rozumiem przyczyny za potraktowaniem tej tabeli w inny sposób niż pozostałe.
Dzięki temu zawsze masz dostęp do USOS-owych kluczy i nie musisz pamiętać identyfikatorów z Systemu Zapisów w swoich skryptach.
Ten argument absolutnie mnie nie boli. Co więcej zrobienie tego w sposób jaki zasugerowałem zmniejsza złożoność mojego API i prawdopodobnie zmniejsza obciążenie bazy danych pojedynczym zapytaniem.
Przy aktualizacji pola
usos_id
dlaTerm
kod SZ robi niepotrzebnie sprawdzanie semantyczne:"usos_id": ["Istnieje już termin z tą wartością pola Kod terminu w systemie USOS."]
W tym przypadku jest ok, że
usos_id
dla dwóch różnych terminów z SZ jest takie samo. W tym przypadkuusos_id
odnosi się doDZ_TERMINY
, a nieDZ_TERMINY_GRUP
.
Po co w ogóle jest Ci pole usos_id
w modelu Term
, jeśli nie jest to identyfikator?
Jest to identyfikator, ale odnoszący się do terminu (w oderwaniu od zajęć), a nie terminu grupy. Nie wszystkie rzeczy mapują się 1:1 między SZ i USOS. Poza tym grzecznie proszę :)
Co to znaczy „termin w oderwaniu od zajęć”?
Proszę, odpowiednio definicje DZ_TERMINY
i DZ_TERMINY_GRUP
:
Z grubsza chodzi o to, że w SZ tabela Term
jest zaprojektowana nieefektywnie. Bardzo dużo wierszy ma identyczne pola dayOfWeek
, start_time
, end_time
. W USOS zrobiono to lepiej i takie pola wydzielono do osobnej tabeli.
EDIT: Żeby zrobić to lepiej możemy utworzyć dodatkowe pole usos_term_id
.
Pozwoliłem sobie dodać etykietę hot
, ze względu na opóźnienie w planowanej dacie eksportu danych z SZ do USOS.
W USOS zrobiono to lepiej i takie pola wydzielono do osobnej tabeli.
Ok. Rozumiem. Będę się spierał, że rozwiązanie z USOSa wcale nie jest lepsze.
Czyli w tabeli DZ_TERMINY_GRUP pole ID jest unikalnym identyfikatorem?
Jeśli tak, to umówmy się, że będziesz umieszczał tę właśnie liczbę w polu Term.usos_id
.
Tak DZ_TERMINY_GRUP.ID
jest unikatowy. Możemy się umówić, że usos_id
będzie się odnosił właśnie do niego. Zatem poproszę jeszcze o pole usos_term_id
w Term
.
Odmowa. Skoro DZ_TERMINY_GRUP.ID
jest unikatowy, to odpowiadający mu DZ_TERMINY.ID
z niego wynika. Nie będziemy duplikować całej bazy USOSa w Systemie Zapisów.
Jak wspominałem, akceptuję punkty 3 i 4 jako udogodnienie. Na razie masz wszystko, czego potrzebujesz do przeprowadzenia eksportu tego semestru (id: 341), zatem zdejmuję etykietkę hot (ona służy do zgłaszania pilnych błędów, które uniemożliwiają korzystanie z systemu). Zajmę się nimi w bliżej nieokreślonej przyszłości.
Zamykam w związku z powstaniem wrappera #812.
Ogólnie zrobiliście z grubsza to czego potrzebuję. Dobra robota! :+1:
Oczywiście nie uzgodniliśmy wszystkiego w detalach, więc potrzebuję paru poprawek:
Classroom
chcę mieć możliwość edycji polabuilding
.Semester
dostał możliwość zrobienia zapytaniacurrent
.Semester
potrzebuję pólyear
itype
zamiastdisplay_name
.Classroom
potrzebuję tylko pól:id
,type
,number
,building
,capacity
iusos_id
.CourseEntity
.Co do paginacji – rozumiem, że ona jest przydatna, jeśli używa się interfejsu webowego i myślę, że to dobre rozwiązanie. Natomiast z poziomu skryptów w Pythonie ona nic mi nie daje, a tylko komplikuje kod, jeśli miałbym to obsłużyć.
Nie jestem pewien czy to dobry pomysł, żeby konstruować zagnieżdżone rekordy, tj.:
Classroom.entity
w wyniku można zastąpićClassroom.entity_id
Group.course
=>Group.course_id
Group.teacher
=>Group.teacher_id
Record.group
=>Record.group_id
Record.student
=>Record.student_id
Employees.user
=>Employees.user_id
Term.group
=>Term.group_id
Z grubsza oczekuję, że REST API będzie działało jak prosta baza danych key-value, bez żadnych fajerwerków. Wyniki mogę sobie cache'ować, żeby nie zamulać serwera pytaniami.