Skip to content

University Schedule Content Management System (CMS) — a backend system for educational process management, implemented in Java using PostgreSQL and multi-layered architecture.

Notifications You must be signed in to change notification settings

YuriiJavaDev/UniversityCMS_V0.1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UniversityCMS_V0.1

Цей репозиторій містить планування та початкову архітектуру веб-застосунку "Система управління розкладом університету" (University Schedule CMS). Головною функцією програми є надання зручного доступу до розкладу занять для студентів та викладачів, а також управління цим розкладом.

📦 Діаграма класів UML

Нижче представлена UML-діаграма класів, яка відображає основні сутності та їхні взаємозв'язки в системі. Ця діаграма є основою для подальшої розробки бази даних та програмного коду.

UML Class Diagram

###PlantUML Код класів UML: university_class_diagram.puml

!theme plain

' Абстрактний базовий клас для всіх типів людей '
abstract class Person {
    + Long id
    + String firstName
    + String lastName![UML Class Diagram](src/main/resources/static/images/UML_Class_Diagram_University.png)
    + String email
    + String phone
}

' Спеціалізовані типи людей (ролі) '
class Student {
    + Integer academicYear
}
class Teacher {
}
class LaboratoryAssistant {
}
class Scientist {
}

' Ролі керівництва '
class DeanOfFaculty {
}
class RectorOfUniversity {
}

' Основні структурні сутності університету '
class University {
    + String name
}
class Faculty {
    + Long id
    + String name
}
class Group {
    + Long id
    + String name
}
class Course {
    + Long courseId
    + String name
    + String description
}
class Classroom {
    + Long id
    + String name
    + Integer capacity
}

' Сутність для визначення навчального плану/програми '
class CurriculumItem {
    + Long id
    + Integer requiredAcademicYear
}

' Сутність, що стосується розкладу '
class Lesson {
    + Long id
    + LocalDateTime startTime
    + LocalDateTime endTime
    + LocalDate date
    + String lessonType
}

' Проміжна таблиця для зв'язку Студент-Курс '
class StudentCourse {
    + Long id
    + LocalDate enrollmentDate
    + String grade
    + String status
}

class StudentProject {
    + Long id
    + String projectName
    + String description
    + String projectType
}

' Зв'язки успадкування '
Person <|-- Student
Person <|-- Teacher
Person <|-- LaboratoryAssistant
Person <|-- Scientist
Person <|-- DeanOfFaculty
Person <|-- RectorOfUniversity

' Зв'язки структури університету '
University "1" -- "0..*" Faculty : has
RectorOfUniversity "1" -- "1" University : manages
DeanOfFaculty "1" -- "1" Faculty : leads

' Факультет та його складові/пропозиції '
Faculty "1" -- "0..*" Group : contains
Faculty "1" -- "0..*" Teacher : employs
Faculty "1" -- "0..*" LaboratoryAssistant : employs
Faculty "1" -- "0..*" Scientist : employs

Faculty "1" -- "0..*" CurriculumItem : offers
Course "1" -- "0..*" CurriculumItem : is offered as

' Студент та Група/Факультет '
Student "0..*" -- "1" Group : belongs to
Student "0..*" -- "1" Faculty : studies at

' Студент та зарахування на курс '
Student "1" -- "0..*" StudentCourse
Course "1" -- "0..*" StudentCourse

' Компоненти заняття '
Teacher "1" -- "0..*" Lesson
Classroom "1" -- "0..*" Lesson
Course "1" -- "0..*" Lesson

' Заняття та учасники '
Lesson "1" -- "1..*" Group

' Наукові проекти / Дипломні роботи '
Student "1" -- "0..1" StudentProject
StudentProject "0..*" -- "0..*" Scientist

@enduml

📦 Основні історії користувачів (User Stories)

Ці історії користувачів описують ключові функціональні можливості системи з точки зору різних ролей.

###1. Перегляд розкладу для викладача Вчитель може переглядати свій щоденний розклад:

Користувач входить у систему як Вчитель. Коли він переходить до меню "Мій розклад" і обирає певну дату,

він бачить список уроків, призначених йому на цей день, включаючи назву курсу, групи, клас, час початку та час завершення уроку.

Вчитель може переглядати свій щомісячний розклад:

Користувач входить у систему як Вчитель. Коли він переходить до меню "Мій розклад" і обирає певний місяць,

він бачить календарний план занять та може розгорнути детальний список призначених йому уроків за будь яку дату цього місяця.

###2. Перегляд розкладу для студента Студент може переглядати свій щоденний розклад:

Користувач увійшов як Студент. Коли він переходить до меню "Мій розклад" і обирає певну дату,

він бачить список уроків на цю дату, які йому доступні у навчальному процесі, включаючи назву курсу (предмету навчання),

викладача, клас (номер аудиторії), час початку та час закінчення.

Студент може переглядати свій щомісячний розклад:

Користувач увійшов як Студент. Коли він переходить до меню "Мій розклад" і обирає певний місяць,

він бачить календарний план занять та може розгорнути детальний список призначених йому уроків за будь яку дату цього місяця,

які йому доступні у навчальному процесі, включаючи назву курсу (предмету навчання), викладача, клас (номер аудиторії), час початку та час закінчення.

###3. Управління розкладом (для адміністрації/викладачів) Адміністратор/Викладач може керувати потоком інформації про урок:

Користувач увійшов як Декан або Викладач (з відповідними дозволами). Коли він переходить до розділу "Управління уроками" та обирає існуючий урок,

він може редагувати будь яку інформацію про урок, таку як час початку, час завершення, дата, назва курсу (предмету навчання),

призначати/перепризначати Викладача, Клас, Курс та пов'язані групи.

###4. Управління зарахуванням студентів на курси Адміністратор/Викладач може керувати потоком реєстрації студентів на курси:

Користувач увійшов як Декан або Викладач (з відповідними дозволами). Коли вінпереходить до розділу "Реєстрація студентів" та обирає Студента або Курс (предмет навчання),

він може переглядати, додавати, редагувати або видаляти записи Студент/Курс, включаючи дату зарахування,

оцінку та статус для конкретного студента що до певного курсу (предмету навчання).

###5. Управління зарахуванням студентів в університет на факультети та у групи Адміністратор/Ректор може керувати потоком реєстрації студентів на курси:

Користувач увійшов як Ректор або Декан (з відповідними дозволами). Коли він переходить до розділу "Реєстрація студентів" та обирає Студента, Групу, Факультет, Університет,

він може переглядати, додавати, редагувати або видаляти записи щодо зарахування, переведення, відрахування студента,- включаючи дату, оцінку та статус для конкретного студента,

в тому числі переведення на наступний навчальний рік, затвердження курсових, наукових, дипломних проектів... .

📦 Функціонал

  • Додавання, редагування, видалення факультетів, груп, студентів і курсів (предметів навчання);
  • Призначення факультетів, груп, курсів студентам;
  • ID для нових студентів генеруються базою даних автоматично (використовуючи стратегію Identity);
  • REST API;
  • Генерація тестових даних;
  • Міграція бази даних з Flyway;
  • Інтеграційне тестування з Testcontainers;

🛠️ Технології

Проект буде розроблений як веб-застосунок, ймовірно, з використанням:

  • Java 21
  • Spring Boot 3.x
  • Spring Data JPA
  • Hibernate
  • PostgreSQL
  • Flyway (міграції)
  • Testcontainers (тестова база)
  • Maven
  • JUnit 5
  • Frontend: (буде визначено пізніше)
  • Version Control: Git / GitLab

🧱 Структура проекту

university-cms/
│
├── src/
│   ├── main/
│   │   ├── java/                                               # Основний Java-код проекту
│   │   │   └── com/
│   │   │       └── yurii/
│   │   │           └── pavlenko/                               # Кореневий пакет вашого застосунку
│   │   │               ├── application/
│   │   │               │    └── UniversityCmsApp.java          # Головний клас Spring Boot
│   │   │               │                                               # (з @SpringBootApplication)
│   │   │               │
│   │   │               ├── model/                              # Класи-сутності (JPA Entities)
│   │   │               │   ├── Person.java
│   │   │               │   ├── Student.java
│   │   │               │   ├── Teacher.java
│   │   │               │   ├── LaboratoryAssistant.java
│   │   │               │   ├── Scientist.java
│   │   │               │   ├── DeanOfFaculty.java
│   │   │               │   ├── RectorOfUniversity.java
│   │   │               │   ├── University.java
│   │   │               │   ├── Faculty.java
│   │   │               │   ├── Group.java
│   │   │               │   ├── Course.java
│   │   │               │   ├── Classroom.java
│   │   │               │   ├── Lesson.java
│   │   │               │   ├── StudentCourse.java
│   │   │               │   └── StudentProject.java
│   │   │               │
│   │   │               ├── repository/                         # Інтерфейси Spring Data JPA репозиторіїв
│   │   │               │   ├── PersonRepository.java
│   │   │               │   ├── StudentRepository.java
│   │   │               │   ├── TeacherRepository.java
│   │   │               │   ├── LaboratoryAssistantRepository.java
│   │   │               │   ├── ScientistRepository.java
│   │   │               │   ├── DeanOfFacultyRepository.java
│   │   │               │   ├── RectorOfUniversityRepository.java
│   │   │               │   ├── UniversityRepository.java
│   │   │               │   ├── FacultyRepository.java
│   │   │               │   ├── GroupRepository.java
│   │   │               │   ├── CourseRepository.java
│   │   │               │   ├── ClassroomRepository.java
│   │   │               │   ├── LessonRepository.java
│   │   │               │   ├── StudentCourseRepository.java
│   │   │               │   └── StudentProjectRepository.java
│   │   │               │
│   │   │               ├── service/                            # Класи бізнес-логіки
│   │   │               │   ├── ScheduleService.java
│   │   │               │   ├── StudentService.java
│   │   │               │   ├── TeacherService.java
│   │   │               │   └── ... (інші сервіси за потребою)
│   │   │               │
│   │   │               ├── controller/                         # Контролери (REST API або MVC)
│   │   │               │   ├── ScheduleController.java
│   │   │               │   ├── StudentController.java
│   │   │               │   ├── TeacherController.java
│   │   │               │   └── ... (інші контролери)
│   │   │               │
│   │   │               ├── config/                             # Класи конфігурації Spring
│   │   │               │   └── WebSecurityConfig.java
│   │   │               │
│   │   │               ├── dto/                    # (Опціонально) Об'єкти передачі даних для API
│   │   │               │   ├── StudentScheduleDto.java
│   │   │               │   └── TeacherScheduleDto.java
│   │   │               │
│   │   │               └── exception/              # (Опціонально) Користувацькі винятки
│   │   │                   └── ResourceNotFoundException.java
│   │   │
│   │   └── resources/                              # Ресурси та конфігураційні файли
│   │       ├── application.yml                     # основна конфігурація Spring Boot
│   │       ├── db/migration/V1__init.sql           # SQL-міграції
│   │       ├── static/                             # Статичні файли (CSS, JavaScript, зображення)
│   │       │   ├── css/
│   │       │   ├── js/
│   │       │   └── images/
│   │       │       └── UML_Class_Diagram_University.png  # Діаграма класів PNG
│   │       │
│   │       └── templates/                # Шаблони веб-сторінок (наприклад, Thymeleaf, JSP)
│   │           ├── schedule.html
│   │           └── ...
│   │
│   └── test/                             # Тести
│       └── java/
│           └── com/
│               └── yurii/
│                   └── pavlenko/
│                       └── UniversityCmsAppTests.java # Тести для Spring Boot
│                       └── repository/
│                       └── service/
│                       └── ...
│
├── logs/                                  # Директорія для файлів логів
│   └── application.log                    # Основний файл логів програми
├── pom.xml                               # Maven Project Object Model - файл конфігурації збірки
└── README.md                             # Опис проекту, діаграма, історії користувачів

⚙️ Налаштування

Flyway

У папці src/main/resources/db/migration/ розмісти SQL-міграції у форматі V1__init.sql, V2__insert_data.sql, тощо.

Flyway автоматично виконає їх при старті застосунку.

PostgreSQL

Для розробки можна використовувати локальний або docker-контейнер:

docker run --name university_cms_db -e POSTGRES_PASSWORD=1111 -e POSTGRES_DB=university_cms_db -p 5432:5432 -d postgres:14

application.yml

  datasource:
    url: jdbc:postgresql://localhost:5432/university_cms_db
    username: postgres
    password: 1111
    driver-class-name: org.postgresql.Driver
    hikari:
      minimum-idle: 5
      maximum-pool-size: 10

  jpa:
    show-sql: true
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        format_sql: true
        dialect: org.hibernate.dialect.PostgreSQLDialect

  flyway:
    enabled: true
    baseline-on-migrate: true
    locations: classpath:db/migration

logging:
  level:
    root: info
    com.yurii.pavlenko: debug
    org.hibernate.SQL: debug
    org.hibernate.orm.jdbc.bind: trace

report:
  file:
    path: C:/repository/university-cms/database-interaction-report.txt

▶️ Запуск

mvn spring-boot:run

```bash
mvn clean package
java -jar target/university-cms-app.jar

Запуск з налаштуваннями бази даних через командний рядок:
Ви можете перевизначити параметри підключення до бази даних, передаючи їх як системні
властивості JVM за допомогою опції -D. Це корисно для динамічної конфігурації
без редагування файлів application.yml.

Приклад:

```bash
java -Dspring.datasource.url=jdbc:postgresql://localhost:5432/my_custom_db \
     -Dspring.datasource.username=myuser \
     -Dspring.datasource.password=mypassword \
     -jar target/university-cms-app.jar

⚠️ Важливе зауваження щодо генерації даних

При перегенерації даних (після підтвердження користувачем в консолі "Y") всі таблиці бази даних
повністю очищаються за допомогою команди TRUNCATE TABLE ... RESTART IDENTITY CASCADE.
Це скидає лічильники ID для всіх таблиць, тому наступні ID починають генеруватися знову
з початкового значення (зазвичай 1).

🧪 Тестування

mvn test

Використовується Testcontainers:

# src/test/resources/application-test.yml
spring:
  datasource:
    driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
    url: jdbc:tc:postgresql:14.6:///test?currentSchema=public&TC_REUSABLE=true
    username: root
    password: test
    hikari:
      minimum-idle: 1
      maximum-pool-size: 5

  flyway:
    enabled: true
    locations: classpath:db/migration

  jpa:
    show-sql: false
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: false

📄 Ліцензія

Цей проєкт створений з навчальною метою та може бути використаний як шаблон.

About

University Schedule Content Management System (CMS) — a backend system for educational process management, implemented in Java using PostgreSQL and multi-layered architecture.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •