Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
build/
.gradle/
out/

.idea/
*.iml
*.iws
*.ipr

.gradle/
.intellijPlatform/
.kotlin/
15 changes: 0 additions & 15 deletions .idea/.gitignore

This file was deleted.

90 changes: 7 additions & 83 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,88 +1,12 @@
# PŁ: Zaawansowane Zagadnienia Programowania w Javie - Edycja 2026
Dzień dobry, z tej strony Zespół 2 IAS. Chcemy przedstawić nasz plugin inspirowany grą PacMan.

## Zaliczenie
Żeby zobaczyć nasze arcydzieło trzeba sklonować repozytorium, w cli zbudować projekt za pomocą polecenia: ./gradlew build (może to potrwać nawet 10 minut).

- Projekt grupowy: od 3 do 6 osób (brak odstępstw)
- Tematyka realizowanego projektu: dowolna
- Elementy, które powinny znaleźć się końcowym projekcie i podlegają ocenie:
- Współpraca z repozytorium Git (dowolnie wybrany darmowy hosting według upodobań, na przykład: Github, Gitlab lub
Bitbucket)
- Aktywność w realizacji projektu:
- *pull requesty* wraz z *code review* wewnątrz zespołu
- *githubowy pulse* lub inne narzędzie pokazujące ciągłość pracy podczas semestru
- podział zadań przy implementacji funkcjonalności projektu poprzez *board projektowy* (Jira, Trello,...)
Jak się powiedzie build wpisujemy polcenie: ./gradlew runIde . Wyświetli nam się okienko gdzie stwórzmy nowy projekt i z lewej strony będzie zakładka Pacman_Game.

- Praktyczna implementacja i wdrożenie rozwiązań, tematów, narzędzi prezentowanych podczas zajęć (nie muszą być
wszystkie, 60-80% jest ok)
- [ ] Aplikacja oparta o **Spring (Boot) Framework**
- [ ] Integracja z zewnętrznym zasobem po **REST** z wykorzystaniem publicznego API (
np.: https://github.com/public-apis/public-apis) wraz z wykorzystaniem (przetworzeniem) otrzymanych danych
- [ ] Zaprojektowanie własnego API z wykorzystaniem biblioteki **OpenAPI** wraz z drugą aplikacją, która
konsumuje udostępnione API. Klient będzie wykonywał zapytania HTTP do serwisu i analizował otrzymane dane.
- [ ] Architektura mikroserwisowa z wykorzystaniem **Spring Cloud Eureka**, umożliwiająca rejestrację i
wykrywanie usług. Aplikacja będzie składała się z minimum dwóch mikroserwisów, które będą się wzajemnie
komunikowały przy użyciu Spring Eureka jako serwera rejestracji usług.
- [ ] Wykorzystanie **Spring Cloud Config Server**, który centralizuje zarządzanie konfiguracją dla wielu
mikroserwisów. Dzięki temu wszystkie serwisy w systemie mogą korzystać z jednej wspólnej konfiguracji,
przechowywanej w centralnym miejscu (np. w plikach YAML na oddzielnym repozytorium Git), a zmiany w
konfiguracji są natychmiastowo propagowane do aplikacji.
- [ ] Wykorzystanie **Keycloak** lub **Spring Authorization Server** (lub inny nieprezentowany podczas zajęć)
jako systemu zarządzającego autoryzacją i autentykacją użytkowników oraz/i serwisów.
- [ ] Aplikacja powinna być zaprojektowana w taki sposób, aby jej komponenty zostały odpowiednio przetestowane
przy użyciu różnych typów testów, np. **jednostkowych (unit tests)**, **integracyjnych (integration tests)**
oraz **testów BDD (Behavior Driven Development)**. Celem jest zapewnienie wysokiej jakości kodu, wykrywanie
błędów na wczesnym etapie oraz zapewnienie, że aplikacja działa zgodnie z oczekiwaniami użytkowników
końcowych. Użycie **Cucumber** – napisanie kilku testów z wykorzystaniem różnych konstrukcji **Gherkina** i
dodanie testów realizowanych przez **AssertJ**
- [ ] Statyczna analiza kodu – lokalne postawienie SonarQube, utworzenie projektu, dodanie skanera, analiza
wyników, dbanie o utrzymanie długu technicznego na akceptowalnym poziomie
- [ ] Aplikacja wykorzystująca ostatnie nowości w **JDK** (np. Local-Variable Type Inference, Text Blocks,
Sealed Classes, Pattern Matching dla instanceof, Virtual Threads, Records)
- [ ] Obsługa **LLM / AI w Javie** – skorzystanie z API do zadania przetwarzania tekstu lub np.
predykcja/klasyfikacja własnym modelem
- UI oraz UX nie mają znaczenia, podczas prezentacji można użyć narzędzi typu Swagger albo Postman
- Unikanie typowych aplikacji Create-Read-Update-Delete (CRUD)
Gra polega na tym, żeby unikać niebieskiego i różowego ducha swoją zółtą postacią. Dla zwycięstwa musimy zebrać wszystkie różowe punkciki, jeżeli jakikolwiek duch złapie nas
do tego mementu to przegraliśmy i wyświetla się "Game Over!", żeby ponownie zagrać wystarczy kliknąć Restart Game u góry. Jak wygramy wyświetli się "You Win!".

## Realizowane zagadnienia
Nasz plugin w działaniu możemy zobaczyć tutaj:

| Prowadzący | Temat |
|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ŁCh | - Cucumber (BDD) + AssertJ<br>- Spring: Podstawowe zagadnienia, MVC, RestController, HttpClient, JPA<br>- LLM |
| MD | - Wprowadzenie + IntelliJ<br>- Testy Mutacyjne<br>- From Java to Go |
| MK | - Logi + Observability (JMX+Spring Atuators/Endpoints)<br>- Spring AOP<br>- Refleksja, Classloader, Annotation Processing |
| ZN | - JDK Updates (od wersji 9 do wersji 25)<br>- Mikroserwisy 101: praktyczne podstawy budowy systemu z wykorzystaniem REST i Spring Cloud Eureka<br>- Mikroserwisy 102 (+ Spring Security): zaawansowane tematy związane z wykorzystaniem narzędzi do zarządzania autoryzacją i autentykacją |

## Ramowy plan zajęć

| Lp | Data | Temat | Uwagi |
|----|-------|------------------------------------------------|--------------------------------------------------------------------------------------|
| 1 | 2.03 | Wprowadzenie + IntelliJ | [Materiały na zajęcia](https://github.com/zzpj/pl-java2026/tree/main/intro-intellij) |
| 2 | 9.03 | | |
| 3 | 16.03 | | |
| 4 | 23.03 | Przedstawienie pomysłu na projekt | |
| 5 | 30.03 | | |
| 6 | 13.04 | | |
| 7 | 20.04 | | |
| 8 | 4.05 | | |
| 9 | 11.05 | | |
| 10 | 18.05 | | |
| 11 | 25.05 | Sprawdzanie postępu realizacji projektu | |
| 12 | 1.06 | | |
| 13 | 8.06 | | |
| 14 | 15.06 | | |
| 15 | 22.06 | Finalne przedstawienie zrealizowanego projektu | |

## Ankiety

- [Ankieta Wejściowa: Oczekiwania](https://forms.gle/3VvpUs9ntmiUmmBB7 ) - wypełnij teraz, abyśmy mogli lepiej
dostosować zajęcia do Twoich potrzeb i oczekiwań!
- [Ankieta Wyjściowa: Ocena zajęć i wnioski](https://to-be-defined-abc) - wypełnij po zakończeniu zajęć, aby podzielić
się swoimi doświadczeniami i pomóc nam w przyszłości!

## Youtube
- [Nagrania z zajęć 2026](https://to-be-defined-xyz)
- [Nagrania z zajęć 2025](https://www.youtube.com/playlist?list=PLIPonSYREXmIEPZtRujsooBwAPBSsxROs)
- [Nagrania z zajęć 2024](https://www.youtube.com/playlist?list=PLIPonSYREXmIQN-S_9i0mrTyAK5u0gA8t)
- [Nagrania z zajęć 2023](https://www.youtube.com/playlist?list=PLIPonSYREXmKVCktLuj_Duve4tQNEA3p1)
- [Nagrania z zajęć 2022](https://www.youtube.com/playlist?list=PLIPonSYREXmLkAgnHHFsoRL3bRZwOwrMi)
- [Nagrania z zajęć 2021](https://www.youtube.com/playlist?list=PLIPonSYREXmICvsCV_osPqDlTg3MDPDPg)
![gameplay.mp4](gameplay.gif)
55 changes: 55 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
plugins {
id("java")
id("org.jetbrains.kotlin.jvm") version "2.1.20"
id("org.jetbrains.intellij.platform") version "2.10.2"
}

group = "com.example"
version = "1.0-SNAPSHOT"

repositories {
mavenCentral()
intellijPlatform {
defaultRepositories()
}
}

// Read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin.html
dependencies {
intellijPlatform {
intellijIdea("2025.2.4")
testFramework(org.jetbrains.intellij.platform.gradle.TestFrameworkType.Platform)


// Add plugin dependencies for compilation here, example:
// bundledPlugin("com.intellij.java")
}
}

intellijPlatform {
pluginConfiguration {
ideaVersion {
sinceBuild = "252.25557"
}

changeNotes = """
Initial version
""".trimIndent()
}
}

tasks {
// Set the JVM compatibility versions
withType<JavaCompile> {
sourceCompatibility = "21"
targetCompatibility = "21"
}
}

kotlin {
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21)
}
}


Binary file added gameplay.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added gameplay.mp4
Binary file not shown.
4 changes: 4 additions & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Enable Gradle Configuration Cache -> https://docs.gradle.org/current/userguide/configuration_cache.html
org.gradle.configuration-cache=false
# Enable Gradle Build Cache -> https://docs.gradle.org/current/userguide/build_cache.html
org.gradle.caching=false
Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 5 additions & 0 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading