Git Product home page Git Product logo

projektzapisy's Introduction

System do obsługi cyklu dydaktycznego w Instytucie Informatyki Uniwersystetu Wrocławskiego. Za pomocą tego systemu: Nauczyciele tworzą swoje propozycje nowych przedmiotów; Studenci kształtują ofertę dydaktyczną poprzez głosowanie na te propozycje; Dyrekcja Instytutu przydziela zajęcia prowadzącym; Studenci zapisują się na zajęcia; W końcu studenci oceniają swoich nauczycieli w anonimowych ankietach. System zarządza też tematami prac dyplomowych i pozwala studentom je rezerwować.

Uruchamianie

Do postawienia developerskiej wersji systemu zapisów musimy mieć zainstalowanego Vagranta oraz Virtualboxa. Klonujemy niniejsze repozytorium na nasz komputer i odpalamy z niego polecenie vagrant up. Na naszym komputerze zostanie skonfigurowana maszyna wirtualna z uruchomionym testowym serwerem, który można odwiedzić pod adresem 0.0.0.0:8000. Folder projektzapisy na naszym komputerze jest współdzielony z maszyną wirtualną (folder /vagrant), więc serwer łapie na żywo wszystkie zmiany w robione przez nas w kodzie. Więcej informacji o maszynie developerskiej można przeczytać w instrukcji.

Jeżeli zamierzasz zajmować się frontendem, warto zapoznać się też z opisem systemu plików statycznych.

Architektura systemu

System Zapisów jest podzielony na moduły (zwane aplikacjami). Każda aplikacja definiuje swoje własne typy danych (modele), którym odpowiadają automatycznie obsługiwane tabele w bazie danych. Każda aplikacja dba o swoje własne ścieżki (URL-e) i implementuje funkcje odpowiadające na zapytania HTTP (zwane widokami). Powiązania między aplikacjami są realizowane poprzez importowanie kodu z jednego modułu do drugiego oraz przez klucze obce w bazie danych. Zwięzły opis wszystkich aplikacji w naszym systemie tutaj.

Zmiany w schemacie bazy danych

Każda zmiana w modelach musi zostać odzwierciedlona w schemacie bazy danych, co Django rozwiązuje migracjami — małymi skryptami w Pythonie, które mówią, jak ma się zmienić schemat bazy danych. Migracje można automatycznie wygenerować poleceniem python zapisy/manage.py makemigrations (w maszynie wirtualnej), ale czasem trzeba je ręcznie przerobić, jeśli zmiana w modelach wymaga transformacji danych.

Maszyna produkcyjna

Proces instalacji i konfiguracji maszyny produkcyjnej jest mocno zautomatyzowany dzięki narzędziu Ansible. Instrukcje w katalogu infra/.

Zespół

Zespół Systemu Zapisów tworzą w każdym semestrze studenci uczęszczający na przedmiot Rozwój Systemu Zapisów. Lider projektu jest zarazem prowadzącym przedmiot. W naszej pracy używamy następujących narzędzi:

  • Slack — nasz główny komunikator.
  • Rollbar — raportuje o błędach (wyjątkach) pojawiających się na produkcji.
  • Travis CI — testowanie kodu.
  • New Relic — monitorowanie wydajności serwera.

Schemat pracy

  1. Gdy zaczynamy pracować nad jakimś zadaniem, tworzymy gałąź, która odgałęzia się od master-dev. W swojej własnej gałęzi możemy przepisywać historię, szczególnie jeśli ma nam to pomóc zaktualizować się w stosunku do master-dev.
  2. Po ukończeniu tworzymy Pull Requesta z bazową gałęzią master-dev. Zaznaczamy lidera projektu do code-review. PR musi być ładnie i jasno opisany — opis ten może w przyszłości pomóc komuś zrozumieć intencje stojące za zmianą w kodzie.
  3. Proces code-review, dyskusji i nanoszenia poprawek zazwyczaj składa się z więcej niż jednego etapu. Należy na niego zarezerwować z grubsza tyle czasu, co na przygotowanie PR-a.
  4. Zaakceptowane Pull Requesty będą scalane przez lidera projektu za pomocą git merge --squash. Nie musimy się zatem wstydzić rewizji (commitów) w naszej gałęzi.
  5. Co jakiś czas (około dwóch tygodni-miesiąca) robiony jest deploy na produkcję. Gałąź master przechowuje wersję produkcyjną.

projektzapisy's People

Contributors

user-45-20 avatar lewymati avatar twasilczyk avatar gosia avatar jasiekmarc avatar averethel avatar apamnapat avatar ayertienna avatar kostero avatar swistak35 avatar bpodrygajlo avatar nerd911 avatar gyarill avatar mhib avatar maciekjablonski avatar renovate[bot] avatar threaz avatar 0ctothorp avatar iochaos avatar niczka avatar notechus avatar lzatorski avatar kamirus avatar asiabiega avatar kstarzyk avatar florczakraf avatar pkacprzak avatar fpacanowski avatar ibb avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.