Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
6738499
Fix: Regex for filtering schedule
florczaq Jul 31, 2025
80e2559
Merge pull request #25 from PKTTTeam/fix/fix-timetable-group-filtering
florczaq Jul 31, 2025
1c9058e
Clear subject name from unnecessary characters
florczaq Aug 4, 2025
9febb6b
Move exception handling to GlobalExceptionHandler
florczaq Aug 4, 2025
2cb0820
Delete duplicated dependency
florczaq Aug 4, 2025
072e5df
Merge pull request #26 from PKTTTeam/feat/timetable
florczaq Aug 4, 2025
f1319f8
Update README.md
florczaq Aug 4, 2025
2bd8d2d
Add logging errors to file app.log
florczaq Aug 6, 2025
3e2b0d6
Created CacheInspectorController for cache debugging
florczaq Aug 6, 2025
a5428a7
Merge pull request #28 from PKTTTeam/feat/logs
florczaq Aug 6, 2025
aa0328d
Rename CachableTimetableService to TimetableCacheService
florczaq Aug 8, 2025
da31231
Fix: Cast data to json in cache for better storage
florczaq Aug 8, 2025
b05eb7b
Fix: Cast data to json in cache for better storage
florczaq Aug 8, 2025
4858620
Fix: Cast data to json in cache for better storage
florczaq Aug 8, 2025
d67884f
Merge branch 'main' into fix/timetable-cache
florczaq Aug 8, 2025
62bfbfd
Merge pull request #29 from PKTTTeam/fix/timetable-cache
florczaq Aug 8, 2025
0e73756
Make exception handler specifically for TimetableController; Change l…
florczaq Aug 11, 2025
643ee3d
Delete CacheInspectorController.java
florczaq Aug 11, 2025
2bed0c1
Move ErrorResponseDTO to /exceptions/dto
florczaq Aug 11, 2025
7409d44
Clear log files
florczaq Aug 11, 2025
3b814e7
Small improvements 1/X
Aug 11, 2025
0510f96
Merge pull request #30 from PKTTTeam/fix/quick-improvements
florczaq Aug 11, 2025
2b50f6f
Merge pull request #31 from PKTTTeam/test
florczaq Aug 11, 2025
2970b1a
Merge branch 'refs/heads/main' into feat/timetable
florczaq Aug 11, 2025
7545645
Code improvement
florczaq Aug 11, 2025
6f2773e
Merge pull request #33 from PKTTTeam/feat/timetable
florczaq Aug 11, 2025
4398152
Update README.md
florczaq Aug 12, 2025
bc5a9c8
Write more tests and improve existing ones
florczaq Aug 12, 2025
3ccea23
Merge branch 'main' into feat/timetable-tests
florczaq Aug 12, 2025
1b4ab1a
Merge pull request #34 from PKTTTeam/feat/timetable-tests
florczaq Aug 12, 2025
16b2138
Small improvements 1/X
Aug 11, 2025
2f36a7c
Add wiremock into tests
Aug 12, 2025
9ebf1cc
Add more wiremock into tests
Aug 13, 2025
a9a7f06
fix: update database schema and JPA entities
Michal-Piotrkowski Aug 13, 2025
cc65281
fix: update new init.sql
Michal-Piotrkowski Aug 13, 2025
597ca86
Merge pull request #39 from PKTTTeam/fix/db-schema-update
florczaq Aug 13, 2025
a1c95a6
Merge pull request #38 from PKTTTeam/Damians-changes
florczaq Aug 13, 2025
b737fd5
Create application-prod.properties
florczaq Aug 14, 2025
ccae33a
Merge branch 'main' into feat/production-conf
florczaq Aug 14, 2025
cdf490e
Merge pull request #40 from PKTTTeam/feat/production-conf
florczaq Aug 14, 2025
3f303dc
Update application-prod.properties
florczaq Aug 14, 2025
7bee9f4
Update Dockerfile
florczaq Aug 14, 2025
37022ec
Merge branch 'main' into feat/update-dockerfile
florczaq Aug 14, 2025
3cb8a99
Merge pull request #41 from PKTTTeam/feat/update-dockerfile
florczaq Aug 14, 2025
3aaa859
Injection-proof solution
florczaq Aug 14, 2025
b329864
Merge pull request #42 from PKTTTeam/fix/security-vurnabilities
florczaq Aug 14, 2025
54dc796
Update application-prod.properties
florczaq Aug 15, 2025
5cd3cfe
Created Email service
florczaq Aug 15, 2025
3d856b0
Update docker-image.yml
florczaq Aug 15, 2025
2da45e3
Merge branch 'main' into feat/mailing-service
florczaq Aug 15, 2025
4612a1e
Change value signature
florczaq Aug 15, 2025
e97f0ce
Merge remote-tracking branch 'origin/feat/mailing-service' into feat/…
florczaq Aug 15, 2025
367f195
Update docker-image.yml
florczaq Aug 15, 2025
1392e99
Merge pull request #43 from PKTTTeam/feat/mailing-service
florczaq Aug 15, 2025
b832f3c
Detect if the mail server is available
florczaq Aug 16, 2025
13cee6a
Merge branch 'main' into feat/mailing-service
florczaq Aug 16, 2025
197117b
Merge pull request #44 from PKTTTeam/feat/mailing-service
florczaq Aug 16, 2025
9f247bc
Create status checker endpoint for service condition
florczaq Aug 16, 2025
03ab493
Merge pull request #45 from PKTTTeam/feat/stystem-status-controller
florczaq Aug 16, 2025
bd46c75
Merge pull request #46 from PKTTTeam/main
florczaq Aug 18, 2025
a4309e5
fix: update new init.sql
Michal-Piotrkowski Aug 18, 2025
cff1c63
Merge pull request #47 from PKTTTeam/fix/init-sql-update
florczaq Aug 18, 2025
b168113
Merge branch 'deploy' into main
florczaq Aug 18, 2025
2eb3b96
Resolve conficlts
florczaq Aug 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/docker-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ jobs:
SPRING_DATASOURCE_USERNAME: ${{ secrets.SPRING_DATASOURCE_USERNAME }}
SPRING_DATASOURCE_PASSWORD: ${{ secrets.SPRING_DATASOURCE_PASSWORD }}
SPRING_PROFILES_ACTIVE: ${{ secrets.SPRING_PROFILES_ACTIVE }}
EMAIL_USERNAME: ${{ secrets.EMAIL_USERNAME }}
EMAIL_PASSWORD: ${{ secrets.EMAIL_PASSWORD }}

steps:
- name: Checkout code
Expand Down Expand Up @@ -108,3 +110,6 @@ jobs:
ghcr.io/${{ env.IMAGE_REPO }}:${{ github.run_number }}
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
EMAIL_USERNAME=${{ secrets.EMAIL_USERNAME }}
EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }}
21 changes: 2 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,10 @@
### 1. Clone the repository

```shell
docker pull ghcr.io/pkttteam/pkwmtt-backend:[PACKAGE_NUMBER]
docker pull ghcr.io/pkttteam/pkwmtt-backend:latest
```

### 2. Create a `.env` file

Create `.env` file in project

Update values like:

```dotenv
MYSQL_ROOT_PASSWORD=example
MYSQL_DATABASE=example_db
MYSQL_USER=username
MYSQL_PASSWORD=password

SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/example_db
SPRING_DATASOURCE_USERNAME=username
SPRING_DATASOURCE_PASSWORD=password
```

### 3. Run
### 2. Run

```shell
docker run -d --name [image_name] -p 8080:8080 ghcr.io/pkttteam/pkwmttt-backend:[PACKAGE_NUMBER]
Expand Down
178 changes: 124 additions & 54 deletions init.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
-- https://www.phpmyadmin.net/
--
-- Host: db
-- Generation Time: Lip 31, 2025 at 06:56 PM
-- Generation Time: Aug 18, 2025 at 07:00 PM
-- Wersja serwera: 9.3.0
-- Wersja PHP: 8.2.27

Expand Down Expand Up @@ -32,10 +32,9 @@ USE `pktt`;
DROP TABLE IF EXISTS `exams`;
CREATE TABLE `exams` (
`exam_id` int NOT NULL,
`title` varchar(255) DEFAULT NULL,
`title` varchar(255) NOT NULL,
`description` varchar(255) DEFAULT NULL,
`date` datetime(6) DEFAULT NULL,
`groups` varchar(255) DEFAULT NULL,
`exam_date` datetime NOT NULL,
`exam_type_id` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

Expand All @@ -48,10 +47,51 @@ TRUNCATE TABLE `exams`;
-- Zrzut danych tabeli `exams`
--

INSERT INTO `exams` (`exam_id`, `title`, `description`, `date`, `groups`, `exam_type_id`) VALUES
(1, 'Matematyka Dyskretna', 'Egzamin końcowy z matematyki dyskretnej', '2025-07-30 00:00:00.000000', '12K3,11L1', 2),
(2, 'Programowanie C++', 'Kolokwium z programowania w C++', '2025-08-05 00:00:00.000000', '12K2,13S3', 1),
(3, 'Sieci Komputerowe', 'Projekt zespołowy na sieciach komputerowych', '2025-09-10 00:00:00.000000', '14S4,12K1', 3);
INSERT INTO `exams` (`exam_id`, `title`, `description`, `exam_date`, `exam_type_id`) VALUES
(1, 'Kolokwium z matematyki', 'Pierwsze kolokwium obejmujące rozdziały 1–3', '2025-10-01 10:00:00', 1),
(2, 'Egzamin końcowy z programowania', 'Egzamin pisemny i praktyczny', '2025-01-20 09:00:00', 2),
(3, 'Projekt z baz danych', 'Oddanie projektu grupowego', '2025-06-15 23:59:00', 3),
(4, 'Kolokwium z fizyki', 'Druga część materiału: mechanika', '2025-11-05 12:00:00', 1),
(5, 'Egzamin końcowy z ekonomii', 'Egzamin pisemny testowy', '2025-02-10 08:30:00', 2),
(6, 'Projekt z systemów operacyjnych', 'Prezentacja projektu semestralnego', '2025-06-25 14:00:00', 3);

-- --------------------------------------------------------

--
-- Struktura tabeli dla tabeli `exams_groups`
--

DROP TABLE IF EXISTS `exams_groups`;
CREATE TABLE `exams_groups` (
`exam_group_id` int NOT NULL,
`exam_id` int NOT NULL,
`group_id` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Tabela Truncate przed wstawieniem `exams_groups`
--

TRUNCATE TABLE `exams_groups`;
--
-- Zrzut danych tabeli `exams_groups`
--

INSERT INTO `exams_groups` (`exam_group_id`, `exam_id`, `group_id`) VALUES
(7, 1, 9),
(8, 1, 10),
(9, 2, 12),
(10, 2, 13),
(11, 2, 14),
(12, 3, 15),
(13, 3, 16),
(14, 3, 17),
(15, 4, 9),
(16, 4, 10),
(17, 5, 12),
(18, 5, 13),
(19, 6, 15),
(20, 6, 16);

-- --------------------------------------------------------

Expand All @@ -62,7 +102,7 @@ INSERT INTO `exams` (`exam_id`, `title`, `description`, `date`, `groups`, `exam_
DROP TABLE IF EXISTS `exam_type`;
CREATE TABLE `exam_type` (
`exam_type_id` int NOT NULL,
`name` varchar(255) DEFAULT NULL
`name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
Expand All @@ -88,7 +128,7 @@ INSERT INTO `exam_type` (`exam_type_id`, `name`) VALUES
DROP TABLE IF EXISTS `general_group`;
CREATE TABLE `general_group` (
`general_group_id` int NOT NULL,
`name` varchar(255) DEFAULT NULL
`name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
Expand All @@ -101,10 +141,10 @@ TRUNCATE TABLE `general_group`;
--

INSERT INTO `general_group` (`general_group_id`, `name`) VALUES
(11, '1'),
(12, '2'),
(13, '3'),
(14, '4');
(17, '11A'),
(18, '12E'),
(19, '13K'),
(20, '14M');

-- --------------------------------------------------------

Expand All @@ -115,10 +155,7 @@ INSERT INTO `general_group` (`general_group_id`, `name`) VALUES
DROP TABLE IF EXISTS `groups`;
CREATE TABLE `groups` (
`group_id` int NOT NULL,
`letter` char(1) NOT NULL,
`group_count` int NOT NULL,
`general_group_id` int NOT NULL,
`name` varchar(255) DEFAULT NULL
`name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
Expand All @@ -130,15 +167,16 @@ TRUNCATE TABLE `groups`;
-- Zrzut danych tabeli `groups`
--

INSERT INTO `groups` (`group_id`, `letter`, `group_count`, `general_group_id`, `name`) VALUES
(1, 'K', 1, 11, NULL),
(2, 'K', 2, 12, NULL),
(3, 'L', 1, 11, NULL),
(4, 'L', 2, 12, NULL),
(5, 'S', 3, 13, NULL),
(6, 'S', 4, 14, NULL),
(7, 'K', 3, 12, NULL),
(8, 'L', 4, 14, NULL);
INSERT INTO `groups` (`group_id`, `name`) VALUES
(9, '11A1'),
(10, '11A2'),
(12, '12E1'),
(13, '12E2'),
(14, '12E3'),
(15, '13K1'),
(16, '13K2'),
(17, '13K3'),
(18, '14M1');

-- --------------------------------------------------------

Expand All @@ -148,19 +186,27 @@ INSERT INTO `groups` (`group_id`, `letter`, `group_count`, `general_group_id`, `

DROP TABLE IF EXISTS `otp_codes`;
CREATE TABLE `otp_codes` (
`code` varchar(255) DEFAULT NULL,
`expire` timestamp NOT NULL,
`used` tinyint(1) NOT NULL,
`user_id` int NOT NULL,
`otp_code_id` int NOT NULL,
`timestamp` datetime(6) DEFAULT NULL
`code` varchar(255) NOT NULL,
`expire` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`general_group_id` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
-- Tabela Truncate przed wstawieniem `otp_codes`
--

TRUNCATE TABLE `otp_codes`;
--
-- Zrzut danych tabeli `otp_codes`
--

INSERT INTO `otp_codes` (`otp_code_id`, `code`, `expire`, `general_group_id`) VALUES
(1, 'ABC123', '2025-08-18 19:51:40', 17),
(2, 'XYZ789', '2025-08-18 20:51:40', 18),
(3, 'QWE456', '2025-08-18 21:51:40', 19),
(4, 'JKL999', '2025-08-18 22:51:40', 20);

-- --------------------------------------------------------

--
Expand All @@ -171,9 +217,9 @@ DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`user_id` int NOT NULL,
`general_group_id` int NOT NULL,
`email` varchar(254) NOT NULL,
`is_active` tinyint(1) NOT NULL,
`role` enum('ADMIN','REPRESENTATIVE') NOT NULL
`email` varchar(255) NOT NULL,
`is_active` tinyint(1) NOT NULL DEFAULT '1',
`role` enum('ADMIN','REPRESENTATIVE') NOT NULL DEFAULT 'REPRESENTATIVE'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

--
Expand All @@ -186,10 +232,10 @@ TRUNCATE TABLE `users`;
--

INSERT INTO `users` (`user_id`, `general_group_id`, `email`, `is_active`, `role`) VALUES
(1, 12, 'jan.kowalski@example.com', 1, 'ADMIN'),
(2, 11, 'anna.nowak@example.com', 1, 'REPRESENTATIVE'),
(3, 13, 'piotr.zielinski@example.com', 0, 'REPRESENTATIVE'),
(4, 14, 'ewa.wisniewska@example.com', 1, 'ADMIN');
(1, 17, 'user11a@example.com', 1, 'REPRESENTATIVE'),
(2, 18, 'user12e@example.com', 1, 'REPRESENTATIVE'),
(3, 19, 'user13k@example.com', 1, 'REPRESENTATIVE'),
(4, 20, 'user14m@example.com', 1, 'ADMIN');

--
-- Indeksy dla zrzutów tabel
Expand All @@ -200,8 +246,15 @@ INSERT INTO `users` (`user_id`, `general_group_id`, `email`, `is_active`, `role`
--
ALTER TABLE `exams`
ADD PRIMARY KEY (`exam_id`),
ADD KEY `exam_type` (`exam_type_id`),
ADD KEY `exam_type_id` (`exam_type_id`);
ADD KEY `exam_type_id_idx` (`exam_type_id`);

--
-- Indeksy dla tabeli `exams_groups`
--
ALTER TABLE `exams_groups`
ADD PRIMARY KEY (`exam_group_id`),
ADD KEY `exam_id_idx` (`exam_id`),
ADD KEY `group_id_idx` (`group_id`);

--
-- Indeksy dla tabeli `exam_type`
Expand All @@ -219,28 +272,38 @@ ALTER TABLE `general_group`
-- Indeksy dla tabeli `groups`
--
ALTER TABLE `groups`
ADD PRIMARY KEY (`group_id`),
ADD KEY `general_group` (`general_group_id`),
ADD KEY `general_group_id` (`general_group_id`);
ADD PRIMARY KEY (`group_id`);

--
-- Indeksy dla tabeli `otp_codes`
--
ALTER TABLE `otp_codes`
ADD PRIMARY KEY (`otp_code_id`),
ADD KEY `user_id` (`user_id`);
ADD KEY `general_group_id_idx` (`general_group_id`);

--
-- Indeksy dla tabeli `users`
--
ALTER TABLE `users`
ADD PRIMARY KEY (`user_id`),
ADD KEY `general_group_id` (`general_group_id`);
ADD KEY `general_group_id_idx` (`general_group_id`);

--
-- AUTO_INCREMENT dla zrzuconych tabel
--

--
-- AUTO_INCREMENT dla tabeli `exams`
--
ALTER TABLE `exams`
MODIFY `exam_id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;

--
-- AUTO_INCREMENT dla tabeli `exams_groups`
--
ALTER TABLE `exams_groups`
MODIFY `exam_group_id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;

--
-- AUTO_INCREMENT dla tabeli `exam_type`
--
Expand All @@ -251,13 +314,19 @@ ALTER TABLE `exam_type`
-- AUTO_INCREMENT dla tabeli `general_group`
--
ALTER TABLE `general_group`
MODIFY `general_group_id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15;
MODIFY `general_group_id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;

--
-- AUTO_INCREMENT dla tabeli `groups`
--
ALTER TABLE `groups`
MODIFY `group_id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
MODIFY `group_id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;

--
-- AUTO_INCREMENT dla tabeli `otp_codes`
--
ALTER TABLE `otp_codes`
MODIFY `otp_code_id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;

--
-- AUTO_INCREMENT dla tabeli `users`
Expand All @@ -273,25 +342,26 @@ ALTER TABLE `users`
-- Ograniczenia dla tabeli `exams`
--
ALTER TABLE `exams`
ADD CONSTRAINT `exams_ibfk_1` FOREIGN KEY (`exam_type_id`) REFERENCES `exam_type` (`exam_type_id`);
ADD CONSTRAINT `exams_ibfk_1` FOREIGN KEY (`exam_type_id`) REFERENCES `exam_type` (`exam_type_id`) ON DELETE CASCADE;

--
-- Ograniczenia dla tabeli `groups`
-- Ograniczenia dla tabeli `exams_groups`
--
ALTER TABLE `groups`
ADD CONSTRAINT `groups_ibfk_1` FOREIGN KEY (`general_group_id`) REFERENCES `general_group` (`general_group_id`);
ALTER TABLE `exams_groups`
ADD CONSTRAINT `exams_groups_ibfk_1` FOREIGN KEY (`exam_id`) REFERENCES `exams` (`exam_id`) ON DELETE CASCADE,
ADD CONSTRAINT `exams_groups_ibfk_2` FOREIGN KEY (`group_id`) REFERENCES `groups` (`group_id`) ON DELETE CASCADE;

--
-- Ograniczenia dla tabeli `otp_codes`
--
ALTER TABLE `otp_codes`
ADD CONSTRAINT `otp_codes_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`);
ADD CONSTRAINT `otp_codes_ibfk_1` FOREIGN KEY (`general_group_id`) REFERENCES `general_group` (`general_group_id`) ON DELETE CASCADE;

--
-- Ograniczenia dla tabeli `users`
--
ALTER TABLE `users`
ADD CONSTRAINT `users_ibfk_1` FOREIGN KEY (`general_group_id`) REFERENCES `general_group` (`general_group_id`);
ADD CONSTRAINT `users_ibfk_1` FOREIGN KEY (`general_group_id`) REFERENCES `general_group` (`general_group_id`) ON DELETE CASCADE;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
Expand Down
Empty file added logs/app.log
Empty file.
Loading
Loading