- პროექტის მიზანი
- ძირითადი იუზ-კეისები (მენიუს პუნქტები)
- მოთხოვნები არქიტექტურაზე
- მოთხოვნები ინტერფეისულ შრეზე
- მოთხოვნები ბიზნეს შრეზე
- მოთხოვნები მონაცემთა შრეზე
სანამ გაუშვებთ ჩახედეთ
pom.xml
ფაილს და მიხვდებით როგორ გაუშვათ. Java-ს 17 ვერსიაზეა აწყობილი ამიტომ Intelij-ით შეიძლება გაგიჭირდეთ გაშვება თუ 21 JDK გიყენიათ
შეიქმნას IP-მისამართზე დაფუძნებული ლექციების მართვის სისტემა, რომელიც საგანმანათლებლო დაწესებულებებს საშუალებას მისცემს ეფექტურად მართონ და აკონტროლონ ლექციების ჩატარების პროცესი. სისტემა უზრუნველყოფს ორმაგი როლის (ადმინისტრატორი და ლექტორი) ინტერფეისს სასწავლო რესურსების სამართავად, ლექციების დასაგეგმად და იმის უზრუნველსაყოფად, რომ ლექციები ტარდება მხოლოდ მათთვის განკუთვნილ აუდიტორიებში.
- მომხმარებლების მართვა (დამატება, წაშლა, რედაქტირება)
- აუდიტორიების მართვა და IP მისამართების მინიჭება
- ლექციების მართვა და რედაქტირება
- სისტემაში შესვლა
- აუდიტორიების და IP მისმართების ნახვა
- დღის ლექციების ნახვა
- ლექციების სიის ნახვა
- ლექციების დაწყება/დასრულება
- ლექციის სტატუსის ნახვა
- აუდიტორიების დამატება
- IP მისამართების კონფიგურაცია
- აუდიტორიების სტატუსის მონიტორინგი
- IP მისამართების შემოწმება
- დროის შემოწმება
- ლექციის სტატუსის ავტომატური განახლება
- ჩატარებული ლექციების ისტორია
- გაცდენილი ლექციების აღრიცხვა
- სტატისტიკის გენერირება
- მომხმარებლის ავთენტიფიკაცია
- როლებზე დაფუძნებული წვდომის კონტროლი
- ლექციების განრიგის იმპორტი csv ფორმატში
სისტემა უნდა აიგოს სამშრიანი არქიტექტურით ვებ აპლიკაციის სახით Java-ზე Spring Boot ფრეიმვორკის გამოყენებით. იგი უნდა შედგებოდეს სამი შრისგან:
ინტერფეისული შრე წარმოადგენს ვებ-ინტერფეისს, შესრულებულს Thymeleaf-ის შაბლონებით HTML/CSS Bootstrap5-ის და Spring MVC-ის გამოყენებით.
- Front-End ტექნოლოგიები:
- Thymeleaf - სერვერის მხარეს დინამიური HTML შაბლონების შესაქმნელად
- HTML/CSS (Bootstrap5) - ვებ გვერდის სტრუქტურისა და სტილის შესაქმნელად
- Javascript - ბრაუზერში დინამიური ფუნქციონალის დასამატებლად
- კონტროლერები:
- @RestController და @Controller ანოტაციები - HTTP მოთხოვნების დასამუშავებლად
- Validation - მომხარებლის შეყვანილი მონაცემების ვალიდაციისთვის
- RequestMapping – URL მისამართების მარშუტიზაციისთვის
ბიზნეს შრე მოიცავს სისტემაში შემავალ მოდელებს და სერვისებს:
- Spring Boot სერვისები:
- @Service ანოტაციით მონიშნული კლასები - ბიზნეს ლოგიკის განსახორციებლად
- Spring Security - აუთენთიფიკაციისა და ავტორიზაციის უზრუნველსაყოფად
- DTO (Data Transfer Objects):
- მონაცემების გადაცემისთვის სხვადასხვა შრეებს შორის
- Lombok ანოტაციები - კოდის გასამარტივებლად
მონაცემთა შრე უზრუნველყოფს მონაცემებთან წვდომას JPA-ს გამოყენებით:
- Spring Data JPA:
- Entity კლასები - მონაცემთა ბაზის ცხრილების წარმოსადგენად
- Repository ინტერფეისები - მონაცემთა ბაზასთან საამუშაოდ
- JPA/Hibernate - ობიექტ-რელაციური დაკავშირებისთვის (ORM)
- მონაცემთა ბაზა:
- MySQL - მონაცემების შესანახად
- JDBC - მონაცემთა ბაზასტან კავშირისთვის
- ავტორიზაციის გვერდი
- მთავარი გვერდი
- ლექციების გვერდი
- აუდიტორიების მართვის გვერდი
- მომხმარებლების მართვის გვერდი
- AuthController - ავტორიზაციის მართვისთვის
- LectureController - ლექციების მართვისთვის
- RoomController - ოთახების მართვისთვის
- MainController - მთავარი გვერდის მართვისთვის
- User – მომხმარებლის მოდელი
- Lecture – ლექციის მოდელი
- Room – აუდიტორიის მოდელი
- Role - როლის მოდელი
- LectureStatus – ლექციის სტატუსის მოდელი
- UserService – მომხმარებლების მართვის ლოგიკა
- LectureService – ლექციების მართვის ლოგიკა
- RoomService – ოთახების მართვის ლოგიკა
- IpVerificationService – IP მისამართების შემოწმების ლოგიკა
- UserDto - მომხმარებლების მონაცემთა გადაცემისთვის
- LectureDto - ლექციის მონაცემთა გადაცემისთვის
- RoomDto - აუდიტორიის მონაცემების გადაცემისთვის
- UserRepository - მომხმარებლებთან სამუშაოდ
- LectureRepository - ლექციებთან სამუშაოდ
- RoomRepository - ოთახებთან სამუშაოდ
- RoleRepository - როლებთან სამუშაოდ
მონაცემთა შრე მოიცავს მონაცემებთან წვდომის მოდულს და მონაცემთა ბაზას, რეალიზებულს MySql-ზე. სტუდენტების მონაცემთა ბაზა შედგება ხუთი ცხრილისგან (lectures, roles, rooms, users, user_roles), იხილეთ დიაგრამა. ასევე მოყვანილია ამ ბაზის შექმნის სკრიპტის მაგალითი:
-- ბაზის შექმნა
CREATE DATABASE tlat;
USE tlat;
-- ლექტორის თეიბლის გაკეთება
CREATE TABLE lectures (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
date DATE,
end_time TIME,
lecturer VARCHAR(255),
start_time TIME,
subject VARCHAR(255),
room_id BIGINT,
is_active BOOLEAN,
session_end_time DATETIME,
session_start_time DATETIME,
status VARCHAR(50)
);
-- როლების თეიბლის გაკეთება
CREATE TABLE roles (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255)
);
-- ოთახის თეიბლის გაკეთება
CREATE TABLE rooms (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
ip_address VARCHAR(255),
room_number VARCHAR(255)
);
-- მომხმარებლების თეიბლის გაკეთება
CREATE TABLE users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
address VARCHAR(255),
age INT,
email VARCHAR(255),
gender VARCHAR(255),
name VARCHAR(255),
password VARCHAR(255),
phone VARCHAR(255),
username VARCHAR(255)
);
-- users_roles ცხრილის შექმნა (many-to-many ურთიერთობისთვის)
CREATE TABLE users_roles (
user_id BIGINT,
role_id BIGINT,
PRIMARY KEY (user_id, role_id),
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (role_id) REFERENCES roles(id)
);
-- ნაგულისხმევი როლების ჩასმა
INSERT INTO roles (name) VALUES
('ROLE_ADMIN'),
('ROLE_USER');
-- foreign key შეზღუდვის დამატება lectures ცხრილში room_id სვეტისთვის
ALTER TABLE lectures
ADD CONSTRAINT fk_lecture_room
FOREIGN KEY (room_id) REFERENCES rooms(id);