diff --git a/2023-03/spring-24-ss-start/new-style/pom.xml b/2023-03/spring-23-ss-start/new-style/pom.xml
similarity index 100%
rename from 2023-03/spring-24-ss-start/new-style/pom.xml
rename to 2023-03/spring-23-ss-start/new-style/pom.xml
diff --git a/2023-03/spring-24-ss-start/new-style/src/main/java/ru/otus/spring/Main.java b/2023-03/spring-23-ss-start/new-style/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2023-03/spring-24-ss-start/new-style/src/main/java/ru/otus/spring/Main.java
rename to 2023-03/spring-23-ss-start/new-style/src/main/java/ru/otus/spring/Main.java
diff --git a/2023-03/spring-24-ss-start/new-style/src/main/java/ru/otus/spring/rest/PagesController.java b/2023-03/spring-23-ss-start/new-style/src/main/java/ru/otus/spring/rest/PagesController.java
similarity index 100%
rename from 2023-03/spring-24-ss-start/new-style/src/main/java/ru/otus/spring/rest/PagesController.java
rename to 2023-03/spring-23-ss-start/new-style/src/main/java/ru/otus/spring/rest/PagesController.java
diff --git a/2023-03/spring-24-ss-start/new-style/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2023-03/spring-23-ss-start/new-style/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
similarity index 100%
rename from 2023-03/spring-24-ss-start/new-style/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
rename to 2023-03/spring-23-ss-start/new-style/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
diff --git a/2023-03/spring-24-ss-start/new-style/src/main/resources/application.yml b/2023-03/spring-23-ss-start/new-style/src/main/resources/application.yml
similarity index 100%
rename from 2023-03/spring-24-ss-start/new-style/src/main/resources/application.yml
rename to 2023-03/spring-23-ss-start/new-style/src/main/resources/application.yml
diff --git a/2023-03/spring-24-ss-start/new-style/src/main/resources/templates/authenticated.html b/2023-03/spring-23-ss-start/new-style/src/main/resources/templates/authenticated.html
similarity index 100%
rename from 2023-03/spring-24-ss-start/new-style/src/main/resources/templates/authenticated.html
rename to 2023-03/spring-23-ss-start/new-style/src/main/resources/templates/authenticated.html
diff --git a/2023-03/spring-24-ss-start/new-style/src/main/resources/templates/index.html b/2023-03/spring-23-ss-start/new-style/src/main/resources/templates/index.html
similarity index 100%
rename from 2023-03/spring-24-ss-start/new-style/src/main/resources/templates/index.html
rename to 2023-03/spring-23-ss-start/new-style/src/main/resources/templates/index.html
diff --git a/2023-03/spring-24-ss-start/new-style/src/main/resources/templates/public.html b/2023-03/spring-23-ss-start/new-style/src/main/resources/templates/public.html
similarity index 100%
rename from 2023-03/spring-24-ss-start/new-style/src/main/resources/templates/public.html
rename to 2023-03/spring-23-ss-start/new-style/src/main/resources/templates/public.html
diff --git a/2023-03/spring-24-ss-start/new-style/src/main/resources/templates/success.html b/2023-03/spring-23-ss-start/new-style/src/main/resources/templates/success.html
similarity index 100%
rename from 2023-03/spring-24-ss-start/new-style/src/main/resources/templates/success.html
rename to 2023-03/spring-23-ss-start/new-style/src/main/resources/templates/success.html
diff --git a/2023-03/spring-24-ss-start/old-style/pom.xml b/2023-03/spring-23-ss-start/old-style/pom.xml
similarity index 100%
rename from 2023-03/spring-24-ss-start/old-style/pom.xml
rename to 2023-03/spring-23-ss-start/old-style/pom.xml
diff --git a/2023-03/spring-24-ss-start/old-style/src/main/java/ru/otus/spring/Main.java b/2023-03/spring-23-ss-start/old-style/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2023-03/spring-24-ss-start/old-style/src/main/java/ru/otus/spring/Main.java
rename to 2023-03/spring-23-ss-start/old-style/src/main/java/ru/otus/spring/Main.java
diff --git a/2023-03/spring-24-ss-start/old-style/src/main/java/ru/otus/spring/rest/PagesController.java b/2023-03/spring-23-ss-start/old-style/src/main/java/ru/otus/spring/rest/PagesController.java
similarity index 100%
rename from 2023-03/spring-24-ss-start/old-style/src/main/java/ru/otus/spring/rest/PagesController.java
rename to 2023-03/spring-23-ss-start/old-style/src/main/java/ru/otus/spring/rest/PagesController.java
diff --git a/2023-03/spring-24-ss-start/old-style/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2023-03/spring-23-ss-start/old-style/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
similarity index 100%
rename from 2023-03/spring-24-ss-start/old-style/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
rename to 2023-03/spring-23-ss-start/old-style/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
diff --git a/2023-03/spring-24-ss-start/old-style/src/main/resources/application.yml b/2023-03/spring-23-ss-start/old-style/src/main/resources/application.yml
similarity index 100%
rename from 2023-03/spring-24-ss-start/old-style/src/main/resources/application.yml
rename to 2023-03/spring-23-ss-start/old-style/src/main/resources/application.yml
diff --git a/2023-03/spring-24-ss-start/old-style/src/main/resources/templates/authenticated.html b/2023-03/spring-23-ss-start/old-style/src/main/resources/templates/authenticated.html
similarity index 100%
rename from 2023-03/spring-24-ss-start/old-style/src/main/resources/templates/authenticated.html
rename to 2023-03/spring-23-ss-start/old-style/src/main/resources/templates/authenticated.html
diff --git a/2023-03/spring-24-ss-start/old-style/src/main/resources/templates/index.html b/2023-03/spring-23-ss-start/old-style/src/main/resources/templates/index.html
similarity index 100%
rename from 2023-03/spring-24-ss-start/old-style/src/main/resources/templates/index.html
rename to 2023-03/spring-23-ss-start/old-style/src/main/resources/templates/index.html
diff --git a/2023-03/spring-24-ss-start/old-style/src/main/resources/templates/public.html b/2023-03/spring-23-ss-start/old-style/src/main/resources/templates/public.html
similarity index 100%
rename from 2023-03/spring-24-ss-start/old-style/src/main/resources/templates/public.html
rename to 2023-03/spring-23-ss-start/old-style/src/main/resources/templates/public.html
diff --git a/2023-03/spring-24-ss-start/old-style/src/main/resources/templates/success.html b/2023-03/spring-23-ss-start/old-style/src/main/resources/templates/success.html
similarity index 100%
rename from 2023-03/spring-24-ss-start/old-style/src/main/resources/templates/success.html
rename to 2023-03/spring-23-ss-start/old-style/src/main/resources/templates/success.html
diff --git a/2023-03/spring-25-SS-auth/classwork/pom.xml b/2023-03/spring-24-SS-auth/classwork/pom.xml
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/pom.xml
rename to 2023-03/spring-24-SS-auth/classwork/pom.xml
diff --git a/2023-03/spring-25-SS-auth/classwork/src/main/java/ru/otus/spring/Main.java b/2023-03/spring-24-SS-auth/classwork/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/main/java/ru/otus/spring/Main.java
rename to 2023-03/spring-24-SS-auth/classwork/src/main/java/ru/otus/spring/Main.java
diff --git a/2023-03/spring-25-SS-auth/classwork/src/main/java/ru/otus/spring/controller/PagesController.java b/2023-03/spring-24-SS-auth/classwork/src/main/java/ru/otus/spring/controller/PagesController.java
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/main/java/ru/otus/spring/controller/PagesController.java
rename to 2023-03/spring-24-SS-auth/classwork/src/main/java/ru/otus/spring/controller/PagesController.java
diff --git a/2023-03/spring-25-SS-auth/classwork/src/main/java/ru/otus/spring/security/AnonimusUD.java b/2023-03/spring-24-SS-auth/classwork/src/main/java/ru/otus/spring/security/AnonimusUD.java
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/main/java/ru/otus/spring/security/AnonimusUD.java
rename to 2023-03/spring-24-SS-auth/classwork/src/main/java/ru/otus/spring/security/AnonimusUD.java
diff --git a/2023-03/spring-25-SS-auth/classwork/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2023-03/spring-24-SS-auth/classwork/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
rename to 2023-03/spring-24-SS-auth/classwork/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
diff --git a/2023-03/spring-25-SS-auth/classwork/src/main/java/ru/otus/spring/security/filter/MyOwnFilter.java b/2023-03/spring-24-SS-auth/classwork/src/main/java/ru/otus/spring/security/filter/MyOwnFilter.java
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/main/java/ru/otus/spring/security/filter/MyOwnFilter.java
rename to 2023-03/spring-24-SS-auth/classwork/src/main/java/ru/otus/spring/security/filter/MyOwnFilter.java
diff --git a/2023-03/spring-25-SS-auth/classwork/src/main/resources/application.yml b/2023-03/spring-24-SS-auth/classwork/src/main/resources/application.yml
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/main/resources/application.yml
rename to 2023-03/spring-24-SS-auth/classwork/src/main/resources/application.yml
diff --git a/2023-03/spring-25-SS-auth/classwork/src/main/resources/templates/authenticated.html b/2023-03/spring-24-SS-auth/classwork/src/main/resources/templates/authenticated.html
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/main/resources/templates/authenticated.html
rename to 2023-03/spring-24-SS-auth/classwork/src/main/resources/templates/authenticated.html
diff --git a/2023-03/spring-25-SS-auth/classwork/src/main/resources/templates/error.html b/2023-03/spring-24-SS-auth/classwork/src/main/resources/templates/error.html
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/main/resources/templates/error.html
rename to 2023-03/spring-24-SS-auth/classwork/src/main/resources/templates/error.html
diff --git a/2023-03/spring-25-SS-auth/classwork/src/main/resources/templates/index.html b/2023-03/spring-24-SS-auth/classwork/src/main/resources/templates/index.html
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/main/resources/templates/index.html
rename to 2023-03/spring-24-SS-auth/classwork/src/main/resources/templates/index.html
diff --git a/2023-03/spring-25-SS-auth/classwork/src/main/resources/templates/public.html b/2023-03/spring-24-SS-auth/classwork/src/main/resources/templates/public.html
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/main/resources/templates/public.html
rename to 2023-03/spring-24-SS-auth/classwork/src/main/resources/templates/public.html
diff --git a/2023-03/spring-25-SS-auth/classwork/src/main/resources/templates/success.html b/2023-03/spring-24-SS-auth/classwork/src/main/resources/templates/success.html
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/main/resources/templates/success.html
rename to 2023-03/spring-24-SS-auth/classwork/src/main/resources/templates/success.html
diff --git a/2023-03/spring-25-SS-auth/classwork/src/test/java/ru/otus/spring/controller/PagesControllerTest.java b/2023-03/spring-24-SS-auth/classwork/src/test/java/ru/otus/spring/controller/PagesControllerTest.java
similarity index 100%
rename from 2023-03/spring-25-SS-auth/classwork/src/test/java/ru/otus/spring/controller/PagesControllerTest.java
rename to 2023-03/spring-24-SS-auth/classwork/src/test/java/ru/otus/spring/controller/PagesControllerTest.java
diff --git a/2023-03/spring-25-SS-auth/solution4/pom.xml b/2023-03/spring-24-SS-auth/solution4/pom.xml
similarity index 100%
rename from 2023-03/spring-25-SS-auth/solution4/pom.xml
rename to 2023-03/spring-24-SS-auth/solution4/pom.xml
diff --git a/2023-03/spring-25-SS-auth/solution4/src/main/java/ru/otus/spring/Main.java b/2023-03/spring-24-SS-auth/solution4/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2023-03/spring-25-SS-auth/solution4/src/main/java/ru/otus/spring/Main.java
rename to 2023-03/spring-24-SS-auth/solution4/src/main/java/ru/otus/spring/Main.java
diff --git a/2023-03/spring-25-SS-auth/solution4/src/main/java/ru/otus/spring/controller/PagesController.java b/2023-03/spring-24-SS-auth/solution4/src/main/java/ru/otus/spring/controller/PagesController.java
similarity index 100%
rename from 2023-03/spring-25-SS-auth/solution4/src/main/java/ru/otus/spring/controller/PagesController.java
rename to 2023-03/spring-24-SS-auth/solution4/src/main/java/ru/otus/spring/controller/PagesController.java
diff --git a/2023-03/spring-25-SS-auth/solution4/src/main/java/ru/otus/spring/security/AnonimusUD.java b/2023-03/spring-24-SS-auth/solution4/src/main/java/ru/otus/spring/security/AnonimusUD.java
similarity index 100%
rename from 2023-03/spring-25-SS-auth/solution4/src/main/java/ru/otus/spring/security/AnonimusUD.java
rename to 2023-03/spring-24-SS-auth/solution4/src/main/java/ru/otus/spring/security/AnonimusUD.java
diff --git a/2023-03/spring-25-SS-auth/solution4/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2023-03/spring-24-SS-auth/solution4/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
similarity index 100%
rename from 2023-03/spring-25-SS-auth/solution4/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
rename to 2023-03/spring-24-SS-auth/solution4/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
diff --git a/2023-03/spring-25-SS-auth/solution4/src/main/resources/application.yml b/2023-03/spring-24-SS-auth/solution4/src/main/resources/application.yml
similarity index 100%
rename from 2023-03/spring-25-SS-auth/solution4/src/main/resources/application.yml
rename to 2023-03/spring-24-SS-auth/solution4/src/main/resources/application.yml
diff --git a/2023-03/spring-25-SS-auth/solution4/src/main/resources/templates/authenticated.html b/2023-03/spring-24-SS-auth/solution4/src/main/resources/templates/authenticated.html
similarity index 100%
rename from 2023-03/spring-25-SS-auth/solution4/src/main/resources/templates/authenticated.html
rename to 2023-03/spring-24-SS-auth/solution4/src/main/resources/templates/authenticated.html
diff --git a/2023-03/spring-25-SS-auth/solution4/src/main/resources/templates/error.html b/2023-03/spring-24-SS-auth/solution4/src/main/resources/templates/error.html
similarity index 100%
rename from 2023-03/spring-25-SS-auth/solution4/src/main/resources/templates/error.html
rename to 2023-03/spring-24-SS-auth/solution4/src/main/resources/templates/error.html
diff --git a/2023-03/spring-25-SS-auth/solution4/src/main/resources/templates/index.html b/2023-03/spring-24-SS-auth/solution4/src/main/resources/templates/index.html
similarity index 100%
rename from 2023-03/spring-25-SS-auth/solution4/src/main/resources/templates/index.html
rename to 2023-03/spring-24-SS-auth/solution4/src/main/resources/templates/index.html
diff --git a/2023-03/spring-25-SS-auth/solution4/src/main/resources/templates/public.html b/2023-03/spring-24-SS-auth/solution4/src/main/resources/templates/public.html
similarity index 100%
rename from 2023-03/spring-25-SS-auth/solution4/src/main/resources/templates/public.html
rename to 2023-03/spring-24-SS-auth/solution4/src/main/resources/templates/public.html
diff --git a/2023-03/spring-25-SS-auth/solution4/src/main/resources/templates/success.html b/2023-03/spring-24-SS-auth/solution4/src/main/resources/templates/success.html
similarity index 100%
rename from 2023-03/spring-25-SS-auth/solution4/src/main/resources/templates/success.html
rename to 2023-03/spring-24-SS-auth/solution4/src/main/resources/templates/success.html
diff --git a/2023-03/spring-26/WebFlux/pom.xml b/2023-03/spring-25/WebFlux/pom.xml
similarity index 100%
rename from 2023-03/spring-26/WebFlux/pom.xml
rename to 2023-03/spring-25/WebFlux/pom.xml
diff --git a/2023-03/spring-26/WebFlux/src/main/java/ru/otus/spring/WebFluxStarter.java b/2023-03/spring-25/WebFlux/src/main/java/ru/otus/spring/WebFluxStarter.java
similarity index 100%
rename from 2023-03/spring-26/WebFlux/src/main/java/ru/otus/spring/WebFluxStarter.java
rename to 2023-03/spring-25/WebFlux/src/main/java/ru/otus/spring/WebFluxStarter.java
diff --git a/2023-03/spring-26/WebFlux/src/main/java/ru/otus/spring/data/Person.java b/2023-03/spring-25/WebFlux/src/main/java/ru/otus/spring/data/Person.java
similarity index 100%
rename from 2023-03/spring-26/WebFlux/src/main/java/ru/otus/spring/data/Person.java
rename to 2023-03/spring-25/WebFlux/src/main/java/ru/otus/spring/data/Person.java
diff --git a/2023-03/spring-26/WebFlux/src/main/java/ru/otus/spring/data/PersonRepository.java b/2023-03/spring-25/WebFlux/src/main/java/ru/otus/spring/data/PersonRepository.java
similarity index 100%
rename from 2023-03/spring-26/WebFlux/src/main/java/ru/otus/spring/data/PersonRepository.java
rename to 2023-03/spring-25/WebFlux/src/main/java/ru/otus/spring/data/PersonRepository.java
diff --git a/2023-03/spring-26/WebFlux/src/main/java/ru/otus/spring/rest/PersonController.java b/2023-03/spring-25/WebFlux/src/main/java/ru/otus/spring/rest/PersonController.java
similarity index 100%
rename from 2023-03/spring-26/WebFlux/src/main/java/ru/otus/spring/rest/PersonController.java
rename to 2023-03/spring-25/WebFlux/src/main/java/ru/otus/spring/rest/PersonController.java
diff --git a/2023-03/spring-26/WebFlux/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2023-03/spring-25/WebFlux/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
similarity index 100%
rename from 2023-03/spring-26/WebFlux/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
rename to 2023-03/spring-25/WebFlux/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
diff --git a/2023-03/spring-26/WebFlux/src/main/resources/application.yml b/2023-03/spring-25/WebFlux/src/main/resources/application.yml
similarity index 100%
rename from 2023-03/spring-26/WebFlux/src/main/resources/application.yml
rename to 2023-03/spring-25/WebFlux/src/main/resources/application.yml
diff --git a/2023-03/spring-26/WebFlux/src/main/resources/static/authenticated.html b/2023-03/spring-25/WebFlux/src/main/resources/static/authenticated.html
similarity index 100%
rename from 2023-03/spring-26/WebFlux/src/main/resources/static/authenticated.html
rename to 2023-03/spring-25/WebFlux/src/main/resources/static/authenticated.html
diff --git a/2023-03/spring-26/WebFlux/src/main/resources/static/index.html b/2023-03/spring-25/WebFlux/src/main/resources/static/index.html
similarity index 100%
rename from 2023-03/spring-26/WebFlux/src/main/resources/static/index.html
rename to 2023-03/spring-25/WebFlux/src/main/resources/static/index.html
diff --git a/2023-03/spring-26/WebFlux/src/main/resources/static/public.html b/2023-03/spring-25/WebFlux/src/main/resources/static/public.html
similarity index 100%
rename from 2023-03/spring-26/WebFlux/src/main/resources/static/public.html
rename to 2023-03/spring-25/WebFlux/src/main/resources/static/public.html
diff --git a/2023-03/spring-26/classwork/pom.xml b/2023-03/spring-25/classwork/pom.xml
similarity index 100%
rename from 2023-03/spring-26/classwork/pom.xml
rename to 2023-03/spring-25/classwork/pom.xml
diff --git a/2023-03/spring-26/classwork/src/main/java/ru/otus/spring/SpringSecurityAuthorization.java b/2023-03/spring-25/classwork/src/main/java/ru/otus/spring/SpringSecurityAuthorization.java
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/java/ru/otus/spring/SpringSecurityAuthorization.java
rename to 2023-03/spring-25/classwork/src/main/java/ru/otus/spring/SpringSecurityAuthorization.java
diff --git a/2023-03/spring-26/classwork/src/main/java/ru/otus/spring/controller/PagesController.java b/2023-03/spring-25/classwork/src/main/java/ru/otus/spring/controller/PagesController.java
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/java/ru/otus/spring/controller/PagesController.java
rename to 2023-03/spring-25/classwork/src/main/java/ru/otus/spring/controller/PagesController.java
diff --git a/2023-03/spring-26/classwork/src/main/java/ru/otus/spring/controller/SecurityControllerAdvice.java b/2023-03/spring-25/classwork/src/main/java/ru/otus/spring/controller/SecurityControllerAdvice.java
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/java/ru/otus/spring/controller/SecurityControllerAdvice.java
rename to 2023-03/spring-25/classwork/src/main/java/ru/otus/spring/controller/SecurityControllerAdvice.java
diff --git a/2023-03/spring-26/classwork/src/main/java/ru/otus/spring/security/MethodSecurityConfiguration.java b/2023-03/spring-25/classwork/src/main/java/ru/otus/spring/security/MethodSecurityConfiguration.java
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/java/ru/otus/spring/security/MethodSecurityConfiguration.java
rename to 2023-03/spring-25/classwork/src/main/java/ru/otus/spring/security/MethodSecurityConfiguration.java
diff --git a/2023-03/spring-26/classwork/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2023-03/spring-25/classwork/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
rename to 2023-03/spring-25/classwork/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
diff --git a/2023-03/spring-26/classwork/src/main/java/ru/otus/spring/service/MyService.java b/2023-03/spring-25/classwork/src/main/java/ru/otus/spring/service/MyService.java
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/java/ru/otus/spring/service/MyService.java
rename to 2023-03/spring-25/classwork/src/main/java/ru/otus/spring/service/MyService.java
diff --git a/2023-03/spring-26/classwork/src/main/resources/templates/admin.html b/2023-03/spring-25/classwork/src/main/resources/templates/admin.html
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/resources/templates/admin.html
rename to 2023-03/spring-25/classwork/src/main/resources/templates/admin.html
diff --git a/2023-03/spring-26/classwork/src/main/resources/templates/authenticated.html b/2023-03/spring-25/classwork/src/main/resources/templates/authenticated.html
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/resources/templates/authenticated.html
rename to 2023-03/spring-25/classwork/src/main/resources/templates/authenticated.html
diff --git a/2023-03/spring-26/classwork/src/main/resources/templates/error.html b/2023-03/spring-25/classwork/src/main/resources/templates/error.html
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/resources/templates/error.html
rename to 2023-03/spring-25/classwork/src/main/resources/templates/error.html
diff --git a/2023-03/spring-26/classwork/src/main/resources/templates/index.html b/2023-03/spring-25/classwork/src/main/resources/templates/index.html
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/resources/templates/index.html
rename to 2023-03/spring-25/classwork/src/main/resources/templates/index.html
diff --git a/2023-03/spring-26/classwork/src/main/resources/templates/manager.html b/2023-03/spring-25/classwork/src/main/resources/templates/manager.html
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/resources/templates/manager.html
rename to 2023-03/spring-25/classwork/src/main/resources/templates/manager.html
diff --git a/2023-03/spring-26/classwork/src/main/resources/templates/public.html b/2023-03/spring-25/classwork/src/main/resources/templates/public.html
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/resources/templates/public.html
rename to 2023-03/spring-25/classwork/src/main/resources/templates/public.html
diff --git a/2023-03/spring-26/classwork/src/main/resources/templates/success.html b/2023-03/spring-25/classwork/src/main/resources/templates/success.html
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/resources/templates/success.html
rename to 2023-03/spring-25/classwork/src/main/resources/templates/success.html
diff --git a/2023-03/spring-26/classwork/src/main/resources/templates/user.html b/2023-03/spring-25/classwork/src/main/resources/templates/user.html
similarity index 100%
rename from 2023-03/spring-26/classwork/src/main/resources/templates/user.html
rename to 2023-03/spring-25/classwork/src/main/resources/templates/user.html
diff --git a/2023-03/spring-26/oauth/pom.xml b/2023-03/spring-25/oauth/pom.xml
similarity index 100%
rename from 2023-03/spring-26/oauth/pom.xml
rename to 2023-03/spring-25/oauth/pom.xml
diff --git a/2023-03/spring-26/oauth/src/main/java/ru/otus/spring/sso/GithubApplication.java b/2023-03/spring-25/oauth/src/main/java/ru/otus/spring/sso/GithubApplication.java
similarity index 100%
rename from 2023-03/spring-26/oauth/src/main/java/ru/otus/spring/sso/GithubApplication.java
rename to 2023-03/spring-25/oauth/src/main/java/ru/otus/spring/sso/GithubApplication.java
diff --git a/2023-03/spring-26/oauth/src/main/java/ru/otus/spring/sso/controller/IndexController.java b/2023-03/spring-25/oauth/src/main/java/ru/otus/spring/sso/controller/IndexController.java
similarity index 100%
rename from 2023-03/spring-26/oauth/src/main/java/ru/otus/spring/sso/controller/IndexController.java
rename to 2023-03/spring-25/oauth/src/main/java/ru/otus/spring/sso/controller/IndexController.java
diff --git a/2023-03/spring-26/oauth/src/main/java/ru/otus/spring/sso/controller/UserController.java b/2023-03/spring-25/oauth/src/main/java/ru/otus/spring/sso/controller/UserController.java
similarity index 100%
rename from 2023-03/spring-26/oauth/src/main/java/ru/otus/spring/sso/controller/UserController.java
rename to 2023-03/spring-25/oauth/src/main/java/ru/otus/spring/sso/controller/UserController.java
diff --git a/2023-03/spring-26/oauth/src/main/java/ru/otus/spring/sso/security/SecurityConfig.java b/2023-03/spring-25/oauth/src/main/java/ru/otus/spring/sso/security/SecurityConfig.java
similarity index 100%
rename from 2023-03/spring-26/oauth/src/main/java/ru/otus/spring/sso/security/SecurityConfig.java
rename to 2023-03/spring-25/oauth/src/main/java/ru/otus/spring/sso/security/SecurityConfig.java
diff --git a/2023-03/spring-26/oauth/src/main/resources/application.yml b/2023-03/spring-25/oauth/src/main/resources/application.yml
similarity index 100%
rename from 2023-03/spring-26/oauth/src/main/resources/application.yml
rename to 2023-03/spring-25/oauth/src/main/resources/application.yml
diff --git a/2023-03/spring-26/oauth/src/main/resources/templates/index.html b/2023-03/spring-25/oauth/src/main/resources/templates/index.html
similarity index 100%
rename from 2023-03/spring-26/oauth/src/main/resources/templates/index.html
rename to 2023-03/spring-25/oauth/src/main/resources/templates/index.html
diff --git a/2023-03/spring-26/solution2/pom.xml b/2023-03/spring-25/solution2/pom.xml
similarity index 100%
rename from 2023-03/spring-26/solution2/pom.xml
rename to 2023-03/spring-25/solution2/pom.xml
diff --git a/2023-03/spring-26/solution2/src/main/java/ru/otus/spring/SpringSecurityAuthorization.java b/2023-03/spring-25/solution2/src/main/java/ru/otus/spring/SpringSecurityAuthorization.java
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/java/ru/otus/spring/SpringSecurityAuthorization.java
rename to 2023-03/spring-25/solution2/src/main/java/ru/otus/spring/SpringSecurityAuthorization.java
diff --git a/2023-03/spring-26/solution2/src/main/java/ru/otus/spring/controller/PagesController.java b/2023-03/spring-25/solution2/src/main/java/ru/otus/spring/controller/PagesController.java
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/java/ru/otus/spring/controller/PagesController.java
rename to 2023-03/spring-25/solution2/src/main/java/ru/otus/spring/controller/PagesController.java
diff --git a/2023-03/spring-26/solution2/src/main/java/ru/otus/spring/security/MethodSecurityConfiguration.java b/2023-03/spring-25/solution2/src/main/java/ru/otus/spring/security/MethodSecurityConfiguration.java
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/java/ru/otus/spring/security/MethodSecurityConfiguration.java
rename to 2023-03/spring-25/solution2/src/main/java/ru/otus/spring/security/MethodSecurityConfiguration.java
diff --git a/2023-03/spring-26/solution2/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2023-03/spring-25/solution2/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
rename to 2023-03/spring-25/solution2/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
diff --git a/2023-03/spring-26/solution2/src/main/java/ru/otus/spring/service/MyService.java b/2023-03/spring-25/solution2/src/main/java/ru/otus/spring/service/MyService.java
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/java/ru/otus/spring/service/MyService.java
rename to 2023-03/spring-25/solution2/src/main/java/ru/otus/spring/service/MyService.java
diff --git a/2023-03/spring-26/solution2/src/main/resources/templates/admin.html b/2023-03/spring-25/solution2/src/main/resources/templates/admin.html
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/resources/templates/admin.html
rename to 2023-03/spring-25/solution2/src/main/resources/templates/admin.html
diff --git a/2023-03/spring-26/solution2/src/main/resources/templates/authenticated.html b/2023-03/spring-25/solution2/src/main/resources/templates/authenticated.html
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/resources/templates/authenticated.html
rename to 2023-03/spring-25/solution2/src/main/resources/templates/authenticated.html
diff --git a/2023-03/spring-26/solution2/src/main/resources/templates/error.html b/2023-03/spring-25/solution2/src/main/resources/templates/error.html
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/resources/templates/error.html
rename to 2023-03/spring-25/solution2/src/main/resources/templates/error.html
diff --git a/2023-03/spring-26/solution2/src/main/resources/templates/index.html b/2023-03/spring-25/solution2/src/main/resources/templates/index.html
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/resources/templates/index.html
rename to 2023-03/spring-25/solution2/src/main/resources/templates/index.html
diff --git a/2023-03/spring-26/solution2/src/main/resources/templates/manager.html b/2023-03/spring-25/solution2/src/main/resources/templates/manager.html
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/resources/templates/manager.html
rename to 2023-03/spring-25/solution2/src/main/resources/templates/manager.html
diff --git a/2023-03/spring-26/solution2/src/main/resources/templates/public.html b/2023-03/spring-25/solution2/src/main/resources/templates/public.html
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/resources/templates/public.html
rename to 2023-03/spring-25/solution2/src/main/resources/templates/public.html
diff --git a/2023-03/spring-26/solution2/src/main/resources/templates/success.html b/2023-03/spring-25/solution2/src/main/resources/templates/success.html
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/resources/templates/success.html
rename to 2023-03/spring-25/solution2/src/main/resources/templates/success.html
diff --git a/2023-03/spring-26/solution2/src/main/resources/templates/user.html b/2023-03/spring-25/solution2/src/main/resources/templates/user.html
similarity index 100%
rename from 2023-03/spring-26/solution2/src/main/resources/templates/user.html
rename to 2023-03/spring-25/solution2/src/main/resources/templates/user.html
diff --git a/2023-03/spring-27/ACL/pom.xml b/2023-03/spring-26/ACL/pom.xml
similarity index 100%
rename from 2023-03/spring-27/ACL/pom.xml
rename to 2023-03/spring-26/ACL/pom.xml
diff --git a/2023-03/spring-27/ACL/src/main/java/ru/otus/spring/Main.java b/2023-03/spring-26/ACL/src/main/java/ru/otus/spring/Main.java
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/java/ru/otus/spring/Main.java
rename to 2023-03/spring-26/ACL/src/main/java/ru/otus/spring/Main.java
diff --git a/2023-03/spring-27/ACL/src/main/java/ru/otus/spring/model/NoticeMessage.java b/2023-03/spring-26/ACL/src/main/java/ru/otus/spring/model/NoticeMessage.java
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/java/ru/otus/spring/model/NoticeMessage.java
rename to 2023-03/spring-26/ACL/src/main/java/ru/otus/spring/model/NoticeMessage.java
diff --git a/2023-03/spring-27/ACL/src/main/java/ru/otus/spring/model/Pack.java b/2023-03/spring-26/ACL/src/main/java/ru/otus/spring/model/Pack.java
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/java/ru/otus/spring/model/Pack.java
rename to 2023-03/spring-26/ACL/src/main/java/ru/otus/spring/model/Pack.java
diff --git a/2023-03/spring-27/ACL/src/main/java/ru/otus/spring/repository/NoticeMessageRepository.java b/2023-03/spring-26/ACL/src/main/java/ru/otus/spring/repository/NoticeMessageRepository.java
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/java/ru/otus/spring/repository/NoticeMessageRepository.java
rename to 2023-03/spring-26/ACL/src/main/java/ru/otus/spring/repository/NoticeMessageRepository.java
diff --git a/2023-03/spring-27/ACL/src/main/java/ru/otus/spring/rest/NoticeMessageController.java b/2023-03/spring-26/ACL/src/main/java/ru/otus/spring/rest/NoticeMessageController.java
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/java/ru/otus/spring/rest/NoticeMessageController.java
rename to 2023-03/spring-26/ACL/src/main/java/ru/otus/spring/rest/NoticeMessageController.java
diff --git a/2023-03/spring-27/ACL/src/main/java/ru/otus/spring/security/AclConfig.java b/2023-03/spring-26/ACL/src/main/java/ru/otus/spring/security/AclConfig.java
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/java/ru/otus/spring/security/AclConfig.java
rename to 2023-03/spring-26/ACL/src/main/java/ru/otus/spring/security/AclConfig.java
diff --git a/2023-03/spring-27/ACL/src/main/java/ru/otus/spring/security/AclMethodSecurityConfiguration.java b/2023-03/spring-26/ACL/src/main/java/ru/otus/spring/security/AclMethodSecurityConfiguration.java
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/java/ru/otus/spring/security/AclMethodSecurityConfiguration.java
rename to 2023-03/spring-26/ACL/src/main/java/ru/otus/spring/security/AclMethodSecurityConfiguration.java
diff --git a/2023-03/spring-27/ACL/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2023-03/spring-26/ACL/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
rename to 2023-03/spring-26/ACL/src/main/java/ru/otus/spring/security/SecurityConfiguration.java
diff --git a/2023-03/spring-27/ACL/src/main/java/ru/otus/spring/service/NoticeService.java b/2023-03/spring-26/ACL/src/main/java/ru/otus/spring/service/NoticeService.java
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/java/ru/otus/spring/service/NoticeService.java
rename to 2023-03/spring-26/ACL/src/main/java/ru/otus/spring/service/NoticeService.java
diff --git a/2023-03/spring-27/ACL/src/main/resources/application.yml b/2023-03/spring-26/ACL/src/main/resources/application.yml
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/resources/application.yml
rename to 2023-03/spring-26/ACL/src/main/resources/application.yml
diff --git a/2023-03/spring-27/ACL/src/main/resources/data.sql b/2023-03/spring-26/ACL/src/main/resources/data.sql
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/resources/data.sql
rename to 2023-03/spring-26/ACL/src/main/resources/data.sql
diff --git a/2023-03/spring-27/ACL/src/main/resources/schema.sql b/2023-03/spring-26/ACL/src/main/resources/schema.sql
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/resources/schema.sql
rename to 2023-03/spring-26/ACL/src/main/resources/schema.sql
diff --git a/2023-03/spring-27/ACL/src/main/resources/templates/error.html b/2023-03/spring-26/ACL/src/main/resources/templates/error.html
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/resources/templates/error.html
rename to 2023-03/spring-26/ACL/src/main/resources/templates/error.html
diff --git a/2023-03/spring-27/ACL/src/main/resources/templates/index.html b/2023-03/spring-26/ACL/src/main/resources/templates/index.html
similarity index 100%
rename from 2023-03/spring-27/ACL/src/main/resources/templates/index.html
rename to 2023-03/spring-26/ACL/src/main/resources/templates/index.html
diff --git a/2023-03/spring-27/jwt/pom.xml b/2023-03/spring-26/jwt/pom.xml
similarity index 100%
rename from 2023-03/spring-27/jwt/pom.xml
rename to 2023-03/spring-26/jwt/pom.xml
diff --git a/2023-03/spring-27/jwt/src/main/java/ru/otus/security/jwt/JwtStarter.java b/2023-03/spring-26/jwt/src/main/java/ru/otus/security/jwt/JwtStarter.java
similarity index 100%
rename from 2023-03/spring-27/jwt/src/main/java/ru/otus/security/jwt/JwtStarter.java
rename to 2023-03/spring-26/jwt/src/main/java/ru/otus/security/jwt/JwtStarter.java
diff --git a/2023-03/spring-27/jwt/src/main/java/ru/otus/security/jwt/config/SecurityConfig.java b/2023-03/spring-26/jwt/src/main/java/ru/otus/security/jwt/config/SecurityConfig.java
similarity index 100%
rename from 2023-03/spring-27/jwt/src/main/java/ru/otus/security/jwt/config/SecurityConfig.java
rename to 2023-03/spring-26/jwt/src/main/java/ru/otus/security/jwt/config/SecurityConfig.java
diff --git a/2023-03/spring-27/jwt/src/main/java/ru/otus/security/jwt/controller/HelloController.java b/2023-03/spring-26/jwt/src/main/java/ru/otus/security/jwt/controller/HelloController.java
similarity index 100%
rename from 2023-03/spring-27/jwt/src/main/java/ru/otus/security/jwt/controller/HelloController.java
rename to 2023-03/spring-26/jwt/src/main/java/ru/otus/security/jwt/controller/HelloController.java
diff --git a/2023-03/spring-27/jwt/src/main/java/ru/otus/security/jwt/controller/TokenController.java b/2023-03/spring-26/jwt/src/main/java/ru/otus/security/jwt/controller/TokenController.java
similarity index 100%
rename from 2023-03/spring-27/jwt/src/main/java/ru/otus/security/jwt/controller/TokenController.java
rename to 2023-03/spring-26/jwt/src/main/java/ru/otus/security/jwt/controller/TokenController.java
diff --git a/2023-03/spring-27/jwt/src/main/resources/app.key b/2023-03/spring-26/jwt/src/main/resources/app.key
similarity index 100%
rename from 2023-03/spring-27/jwt/src/main/resources/app.key
rename to 2023-03/spring-26/jwt/src/main/resources/app.key
diff --git a/2023-03/spring-27/jwt/src/main/resources/app.pub b/2023-03/spring-26/jwt/src/main/resources/app.pub
similarity index 100%
rename from 2023-03/spring-27/jwt/src/main/resources/app.pub
rename to 2023-03/spring-26/jwt/src/main/resources/app.pub
diff --git a/2023-03/spring-27/jwt/src/main/resources/application.yml b/2023-03/spring-26/jwt/src/main/resources/application.yml
similarity index 100%
rename from 2023-03/spring-27/jwt/src/main/resources/application.yml
rename to 2023-03/spring-26/jwt/src/main/resources/application.yml
diff --git a/2023-03/spring-27/jwt/src/main/resources/templates/index.html b/2023-03/spring-26/jwt/src/main/resources/templates/index.html
similarity index 100%
rename from 2023-03/spring-27/jwt/src/main/resources/templates/index.html
rename to 2023-03/spring-26/jwt/src/main/resources/templates/index.html
diff --git a/2023-03/spring-28-spring-batch/.gitignore b/2023-03/spring-27-spring-batch/.gitignore
similarity index 100%
rename from 2023-03/spring-28-spring-batch/.gitignore
rename to 2023-03/spring-27-spring-batch/.gitignore
diff --git a/2023-03/spring-28-spring-batch/entries.csv b/2023-03/spring-27-spring-batch/entries.csv
similarity index 100%
rename from 2023-03/spring-28-spring-batch/entries.csv
rename to 2023-03/spring-27-spring-batch/entries.csv
diff --git a/2023-03/spring-28-spring-batch/pom.xml b/2023-03/spring-27-spring-batch/pom.xml
similarity index 100%
rename from 2023-03/spring-28-spring-batch/pom.xml
rename to 2023-03/spring-27-spring-batch/pom.xml
diff --git a/2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/Main.java b/2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/Main.java
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/Main.java
rename to 2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/Main.java
diff --git a/2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/chandgelogs/InitMongoDBDataChangeLog.java b/2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/chandgelogs/InitMongoDBDataChangeLog.java
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/chandgelogs/InitMongoDBDataChangeLog.java
rename to 2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/chandgelogs/InitMongoDBDataChangeLog.java
diff --git a/2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/config/AppProps.java b/2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/config/AppProps.java
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/config/AppProps.java
rename to 2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/config/AppProps.java
diff --git a/2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/config/BatchConfig.java b/2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/config/BatchConfig.java
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/config/BatchConfig.java
rename to 2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/config/BatchConfig.java
diff --git a/2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/config/JobConfig.java b/2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/config/JobConfig.java
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/config/JobConfig.java
rename to 2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/config/JobConfig.java
diff --git a/2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/model/Person.java b/2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/model/Person.java
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/model/Person.java
rename to 2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/model/Person.java
diff --git a/2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/service/CleanUpService.java b/2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/service/CleanUpService.java
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/service/CleanUpService.java
rename to 2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/service/CleanUpService.java
diff --git a/2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/service/HappyBirthdayService.java b/2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/service/HappyBirthdayService.java
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/service/HappyBirthdayService.java
rename to 2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/service/HappyBirthdayService.java
diff --git a/2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/shell/BatchCommands.java b/2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/shell/BatchCommands.java
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/main/java/ru/otus/example/springbatch/shell/BatchCommands.java
rename to 2023-03/spring-27-spring-batch/src/main/java/ru/otus/example/springbatch/shell/BatchCommands.java
diff --git a/2023-03/spring-28-spring-batch/src/main/resources/application.yml b/2023-03/spring-27-spring-batch/src/main/resources/application.yml
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/main/resources/application.yml
rename to 2023-03/spring-27-spring-batch/src/main/resources/application.yml
diff --git a/2023-03/spring-28-spring-batch/src/test/java/ru/otus/example/springbatch/config/ImportUserJobTest.java b/2023-03/spring-27-spring-batch/src/test/java/ru/otus/example/springbatch/config/ImportUserJobTest.java
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/test/java/ru/otus/example/springbatch/config/ImportUserJobTest.java
rename to 2023-03/spring-27-spring-batch/src/test/java/ru/otus/example/springbatch/config/ImportUserJobTest.java
diff --git a/2023-03/spring-28-spring-batch/src/test/resources/application.yml b/2023-03/spring-27-spring-batch/src/test/resources/application.yml
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/test/resources/application.yml
rename to 2023-03/spring-27-spring-batch/src/test/resources/application.yml
diff --git a/2023-03/spring-28-spring-batch/src/test/resources/expected-test-output.dat b/2023-03/spring-27-spring-batch/src/test/resources/expected-test-output.dat
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/test/resources/expected-test-output.dat
rename to 2023-03/spring-27-spring-batch/src/test/resources/expected-test-output.dat
diff --git a/2023-03/spring-28-spring-batch/src/test/resources/test-entries.csv b/2023-03/spring-27-spring-batch/src/test/resources/test-entries.csv
similarity index 100%
rename from 2023-03/spring-28-spring-batch/src/test/resources/test-entries.csv
rename to 2023-03/spring-27-spring-batch/src/test/resources/test-entries.csv
diff --git a/2023-03/spring-29-integrations-channels/.gitignore b/2023-03/spring-29-integrations-channels/.gitignore
new file mode 100644
index 00000000..549e00a2
--- /dev/null
+++ b/2023-03/spring-29-integrations-channels/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/2023-03/spring-29-integrations-channels/integrations-channels-exercise/pom.xml b/2023-03/spring-29-integrations-channels/integrations-channels-exercise/pom.xml
new file mode 100644
index 00000000..ac7dcb22
--- /dev/null
+++ b/2023-03/spring-29-integrations-channels/integrations-channels-exercise/pom.xml
@@ -0,0 +1,51 @@
+
+
+ 4.0.0
+
+ ru.otus
+ integrations-channels-exercise
+ 1.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.1.1
+
+
+
+
+ 17
+ 17
+ UTF-8
+ 2.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-integration
+
+
+
+ org.yaml
+ snakeyaml
+ ${snakeyaml.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
diff --git a/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/main/java/ru/otus/spring/integration/App.java b/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/main/java/ru/otus/spring/integration/App.java
new file mode 100644
index 00000000..c3ce524d
--- /dev/null
+++ b/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/main/java/ru/otus/spring/integration/App.java
@@ -0,0 +1,59 @@
+package ru.otus.spring.integration;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.integration.annotation.IntegrationComponentScan;
+import org.springframework.integration.channel.QueueChannel;
+import org.springframework.integration.dsl.DirectChannelSpec;
+import org.springframework.integration.dsl.MessageChannels;
+import org.springframework.messaging.PollableChannel;
+import org.springframework.messaging.SubscribableChannel;
+import org.springframework.messaging.support.MessageBuilder;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import static java.util.Objects.requireNonNull;
+
+@SpringBootApplication
+@IntegrationComponentScan
+public class App {
+
+ public static void main(String[] args) throws InterruptedException {
+ ConfigurableApplicationContext ctx = SpringApplication.run(App.class, args);
+
+ PollableChannel queueChannel = ctx.getBean("queueChannel", PollableChannel.class);
+ SubscribableChannel subscribableDirectChannel = ctx.getBean("subscribableDirectChannel", SubscribableChannel.class);
+
+ subscribableDirectChannel.subscribe(System.out::println);
+
+ ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
+ executor.scheduleWithFixedDelay(() -> {
+ System.out.println("I am here!!!");
+ subscribableDirectChannel.send(requireNonNull(queueChannel.receive(5000)));
+ }, 100, 300, TimeUnit.MILLISECONDS);
+
+ queueChannel.send(MessageBuilder.withPayload("Hello").build());
+ queueChannel.send(MessageBuilder.withPayload("Hello2").build());
+
+ Thread.sleep(2_000);
+
+ queueChannel.send(MessageBuilder.withPayload("Hello3").build());
+
+ Thread.sleep(3_000);
+ executor.shutdown();
+ }
+
+ @Bean
+ public PollableChannel queueChannel() {
+ return new QueueChannel(100);
+ }
+
+ @Bean
+ public DirectChannelSpec subscribableDirectChannel() {
+ return MessageChannels.direct("subscribableDirectChannel");
+ }
+}
diff --git a/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/main/resources/application.yml b/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/main/resources/application.yml
new file mode 100644
index 00000000..efa5596f
--- /dev/null
+++ b/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/main/resources/application.yml
@@ -0,0 +1,5 @@
+logging:
+ level:
+ root: debug
+ sun: error
+ javax: error
\ No newline at end of file
diff --git a/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/test/java/ru/otus/spring/integration/MessagesTest.java b/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/test/java/ru/otus/spring/integration/MessagesTest.java
new file mode 100644
index 00000000..491cdcef
--- /dev/null
+++ b/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/test/java/ru/otus/spring/integration/MessagesTest.java
@@ -0,0 +1,98 @@
+package ru.otus.spring.integration;
+
+
+import org.junit.jupiter.api.Test;
+import org.springframework.messaging.Message;
+import org.springframework.messaging.MessageHeaders;
+import org.springframework.messaging.support.ErrorMessage;
+import org.springframework.messaging.support.GenericMessage;
+import org.springframework.messaging.support.MessageBuilder;
+
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+
+@SuppressWarnings("all")
+public class MessagesTest {
+
+ @Test
+ public void testCreateSimpleGenericMessage() {
+ // TODO: Создайте сообщение с payload-ом "Hello" с помощью конструктора
+ Message message = null;
+
+ assertNotNull( message );
+ assertEquals( GenericMessage.class, message.getClass() );
+ assertNotNull( message.getPayload() );
+ assertEquals( "Hello", message.getPayload() );
+ }
+
+ @Test
+ public void testCreateGenericMessage() {
+ // TODO: Создайте сообщение с пользователем с помощью конструктора
+ Message message = null;
+
+ assertNotNull( message );
+ assertEquals( GenericMessage.class, message.getClass() );
+ assertNotNull( message.getPayload() );
+ assertEquals( new User( "John", 23 ), message.getPayload() );
+ }
+
+ @Test
+ public void testGenericMessageWithHeaders() {
+ // TODO: Создайте сообщение с payload-ом "Hello" и header-ом "to":"World"
+ Map headers = null;
+ Message message = null;
+
+ assertNotNull( message );
+ assertEquals( "Hello", message.getPayload() );
+ assertEquals( "World", message.getHeaders().get( "to", String.class ) );
+ }
+
+ @Test
+ public void testGenericMessageWithMessageHeaders() {
+ // TODO: Создайте сообщение с payload-ом "Hello" и header-ом "to":"World"
+ MessageHeaders headers = null;
+ Message message = null;
+
+ assertNotNull( message );
+ assertEquals( "Hello", message.getPayload() );
+ assertEquals( "World", message.getHeaders().get( "to", String.class ) );
+ }
+
+ @Test
+ public void testErrorMessage() {
+ // TODO: Создайте сообщение об ошибки с объектом NullPointerException внутри
+ Message errorMessage = null;
+
+ assertNotNull( errorMessage );
+ assertEquals( ErrorMessage.class, errorMessage.getClass() );
+ assertEquals( NullPointerException.class, errorMessage.getPayload().getClass() );
+ }
+
+ @Test
+ public void testMessageBuilder() {
+ // TODO: Создайте сообщение с payload-ом "Hello" и header-ом "to":"World" с помощью MessageBuilder
+ Message message = null;
+
+ assertNotNull( message );
+ assertEquals( "Hello", message.getPayload() );
+ assertEquals( "World", message.getHeaders().get( "to", String.class ) );
+ }
+
+ @Test
+ public void testBuildFromMessage() {
+ Message original = MessageBuilder
+ .withPayload( new User( "Kate", 30 ) )
+ .setHeader( "processor", "userService" )
+ .build();
+
+ // TODO: Создайте новое сообщение с теми же payload и header-ами c помощью MessageBuilder
+ Message newMessage = null;
+
+ assertNotNull( newMessage );
+ assertEquals( original.getPayload(), newMessage.getPayload() );
+ assertEquals( original.getHeaders().get( "processor" ), newMessage.getHeaders().get( "processor" ) );
+ }
+}
diff --git a/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/test/java/ru/otus/spring/integration/User.java b/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/test/java/ru/otus/spring/integration/User.java
new file mode 100644
index 00000000..e0ebbfa4
--- /dev/null
+++ b/2023-03/spring-29-integrations-channels/integrations-channels-exercise/src/test/java/ru/otus/spring/integration/User.java
@@ -0,0 +1,36 @@
+package ru.otus.spring.integration;
+
+import java.util.Objects;
+
+public class User {
+
+ private final String name;
+ private final int age;
+
+ public User(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof User)) return false;
+ User user = (User) o;
+ return age == user.age &&
+ Objects.equals(name, user.name);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, age);
+ }
+}
diff --git a/2023-03/spring-29-integrations-channels/integrations-channels-solution/pom.xml b/2023-03/spring-29-integrations-channels/integrations-channels-solution/pom.xml
new file mode 100644
index 00000000..270046a6
--- /dev/null
+++ b/2023-03/spring-29-integrations-channels/integrations-channels-solution/pom.xml
@@ -0,0 +1,51 @@
+
+
+ 4.0.0
+
+ ru.otus
+ integrations-channels-solution
+ 1.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.1.1
+
+
+
+
+ 17
+ 17
+ UTF-8
+ 2.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-integration
+
+
+
+ org.yaml
+ snakeyaml
+ ${snakeyaml.version}
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
diff --git a/2023-03/spring-29-integrations-channels/integrations-channels-solution/src/main/java/ru/otus/spring/integration/App.java b/2023-03/spring-29-integrations-channels/integrations-channels-solution/src/main/java/ru/otus/spring/integration/App.java
new file mode 100644
index 00000000..c3ce524d
--- /dev/null
+++ b/2023-03/spring-29-integrations-channels/integrations-channels-solution/src/main/java/ru/otus/spring/integration/App.java
@@ -0,0 +1,59 @@
+package ru.otus.spring.integration;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.integration.annotation.IntegrationComponentScan;
+import org.springframework.integration.channel.QueueChannel;
+import org.springframework.integration.dsl.DirectChannelSpec;
+import org.springframework.integration.dsl.MessageChannels;
+import org.springframework.messaging.PollableChannel;
+import org.springframework.messaging.SubscribableChannel;
+import org.springframework.messaging.support.MessageBuilder;
+
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import static java.util.Objects.requireNonNull;
+
+@SpringBootApplication
+@IntegrationComponentScan
+public class App {
+
+ public static void main(String[] args) throws InterruptedException {
+ ConfigurableApplicationContext ctx = SpringApplication.run(App.class, args);
+
+ PollableChannel queueChannel = ctx.getBean("queueChannel", PollableChannel.class);
+ SubscribableChannel subscribableDirectChannel = ctx.getBean("subscribableDirectChannel", SubscribableChannel.class);
+
+ subscribableDirectChannel.subscribe(System.out::println);
+
+ ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
+ executor.scheduleWithFixedDelay(() -> {
+ System.out.println("I am here!!!");
+ subscribableDirectChannel.send(requireNonNull(queueChannel.receive(5000)));
+ }, 100, 300, TimeUnit.MILLISECONDS);
+
+ queueChannel.send(MessageBuilder.withPayload("Hello").build());
+ queueChannel.send(MessageBuilder.withPayload("Hello2").build());
+
+ Thread.sleep(2_000);
+
+ queueChannel.send(MessageBuilder.withPayload("Hello3").build());
+
+ Thread.sleep(3_000);
+ executor.shutdown();
+ }
+
+ @Bean
+ public PollableChannel queueChannel() {
+ return new QueueChannel(100);
+ }
+
+ @Bean
+ public DirectChannelSpec subscribableDirectChannel() {
+ return MessageChannels.direct("subscribableDirectChannel");
+ }
+}
diff --git a/2023-03/spring-29-integrations-channels/integrations-channels-solution/src/test/java/ru/otus/spring/integration/MessagesTest.java b/2023-03/spring-29-integrations-channels/integrations-channels-solution/src/test/java/ru/otus/spring/integration/MessagesTest.java
new file mode 100644
index 00000000..3adb95b6
--- /dev/null
+++ b/2023-03/spring-29-integrations-channels/integrations-channels-solution/src/test/java/ru/otus/spring/integration/MessagesTest.java
@@ -0,0 +1,101 @@
+package ru.otus.spring.integration;
+
+
+import org.junit.jupiter.api.Test;
+import org.springframework.messaging.Message;
+import org.springframework.messaging.MessageHeaders;
+import org.springframework.messaging.support.ErrorMessage;
+import org.springframework.messaging.support.GenericMessage;
+import org.springframework.messaging.support.MessageBuilder;
+
+import java.util.Collections;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+
+@SuppressWarnings("all")
+public class MessagesTest {
+
+ @Test
+ public void testCreateSimpleGenericMessage() {
+ // TODO: Создайте сообщение с payload-ом "Hello" с помощью конструктора
+ Message message = new GenericMessage<>( "Hello" );
+
+ assertNotNull( message );
+ assertEquals( GenericMessage.class, message.getClass() );
+ assertNotNull( message.getPayload() );
+ assertEquals( "Hello", message.getPayload() );
+ }
+
+ @Test
+ public void testCreateGenericMessage() {
+ // TODO: Создайте сообщение с пользователем с помощью конструктора
+ Message message = new GenericMessage<>( new User( "John", 23 ) );
+
+ assertNotNull( message );
+ assertEquals( GenericMessage.class, message.getClass() );
+ assertNotNull( message.getPayload() );
+ assertEquals( new User( "John", 23 ), message.getPayload() );
+ }
+
+ @Test
+ public void testGenericMessageWithHeaders() {
+ // TODO: Создайте сообщение с payload-ом "Hello" и header-ом "to":"World"
+ Map headers = Collections.singletonMap( "to", "World" );
+ Message message = new GenericMessage<>( "Hello", headers );
+
+ assertNotNull( message );
+ assertEquals( "Hello", message.getPayload() );
+ assertEquals( "World", message.getHeaders().get( "to", String.class ) );
+ }
+
+ @Test
+ public void testGenericMessageWithMessageHeaders() {
+ // TODO: Создайте сообщение с payload-ом "Hello" и header-ом "to":"World"
+ MessageHeaders headers = new MessageHeaders( Collections.singletonMap( "to", "World" ) );
+ Message message = new GenericMessage<>( "Hello", headers );
+
+ assertNotNull( message );
+ assertEquals( "Hello", message.getPayload() );
+ assertEquals( "World", message.getHeaders().get( "to", String.class ) );
+ }
+
+ @Test
+ public void testErrorMessage() {
+ // TODO: Создайте сообщение об ошибки с объектом NullPointerException внутри
+ Message errorMessage = new ErrorMessage( new NullPointerException() );
+
+ assertNotNull( errorMessage );
+ assertEquals( ErrorMessage.class, errorMessage.getClass() );
+ assertEquals( NullPointerException.class, errorMessage.getPayload().getClass() );
+ }
+
+ @Test
+ public void testMessageBuilder() {
+ // TODO: Создайте сообщение с payload-ом "Hello" и header-ом "to":"World" с помощью MessageBuilder
+ Message message = MessageBuilder.withPayload( "Hello" )
+ .setHeader( "to", "World" )
+ .build();
+
+ assertNotNull( message );
+ assertEquals( "Hello", message.getPayload() );
+ assertEquals( "World", message.getHeaders().get( "to", String.class ) );
+ }
+
+ @Test
+ public void testBuildFromMessage() {
+ Message original = MessageBuilder
+ .withPayload( new User( "Kate", 30 ) )
+ .setHeader( "processor", "userService" )
+ .build();
+
+ // TODO: Создайте новое сообщение с теми же payload и header-ами c помощью MessageBuilder
+ Message newMessage = MessageBuilder.fromMessage( original ).build();
+
+ assertNotNull( newMessage );
+ assertEquals( original.getPayload(), newMessage.getPayload() );
+ assertEquals( original.getHeaders().get( "processor" ), newMessage.getHeaders().get( "processor" ) );
+ }
+}
diff --git a/2023-03/spring-29-integrations-channels/integrations-channels-solution/src/test/java/ru/otus/spring/integration/User.java b/2023-03/spring-29-integrations-channels/integrations-channels-solution/src/test/java/ru/otus/spring/integration/User.java
new file mode 100644
index 00000000..e0ebbfa4
--- /dev/null
+++ b/2023-03/spring-29-integrations-channels/integrations-channels-solution/src/test/java/ru/otus/spring/integration/User.java
@@ -0,0 +1,36 @@
+package ru.otus.spring.integration;
+
+import java.util.Objects;
+
+public class User {
+
+ private final String name;
+ private final int age;
+
+ public User(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof User)) return false;
+ User user = (User) o;
+ return age == user.age &&
+ Objects.equals(name, user.name);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name, age);
+ }
+}
diff --git a/2023-03/spring-29-integrations-channels/pom.xml b/2023-03/spring-29-integrations-channels/pom.xml
new file mode 100644
index 00000000..03842063
--- /dev/null
+++ b/2023-03/spring-29-integrations-channels/pom.xml
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+
+ ru.otus
+ integrations-channels
+ 1.0
+
+ pom
+
+
+ integrations-channels-exercise
+ integrations-channels-solution
+
+