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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/TvkQWWs6)
# Features of modern Java

# Цели и задачи л/р:
Expand Down
26 changes: 26 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,20 +1,46 @@
plugins {
id("org.springframework.boot") version "3.3.0"
id("io.spring.dependency-management") version "1.1.0"
id("java")
}

group = "org.lab"
version = "1.0-SNAPSHOT"

java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(21))
}
}

repositories {
mavenCentral()
}

dependencies {
implementation("org.springframework.boot:spring-boot-starter")

implementation("org.springframework.boot:spring-boot-starter-web")

compileOnly("org.projectlombok:lombok")
annotationProcessor("org.projectlombok:lombok")

testCompileOnly("org.projectlombok:lombok")
testAnnotationProcessor("org.projectlombok:lombok")

testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}

tasks.withType<JavaCompile> {
options.compilerArgs.addAll(listOf(
"--enable-preview",
"--release", "21"
))
options.encoding = "UTF-8"
}

tasks.test {
useJUnitPlatform()
}
31 changes: 31 additions & 0 deletions src/main/WHERE_WHAT_IMPLEMENTED.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# В ходе реализации необходимо использовать возможности современных версий языка Java:
* Pattern matching для switch
* строковые шаблоны))))))))))))))
* расширенные возможности стандартной библиотеки Java
* sealed классы и record
* программирование в функциональном стиле
* preview как project Valhalla, structured concurrency...
* и т.д.

# Pattern matching для switch

Ctrl + Shift + F: createBugReport( - связано с bugType'ами

# строковые шаблоны))))))))))))))

Ctrl + Shift + F: STR.

# расширенные возможности стандартной библиотеки Java

Optional
Streams

# sealed классы и record

Sealed: org.lab.util.BugType - все наследники

record: реализующие org.lab.util.BugType + TicketType + MilestoneTemplate

# программирование в функциональном стиле

Ctrl + Shift + F: Stream; все сервисы на стримах
14 changes: 11 additions & 3 deletions src/main/java/org/lab/Main.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
void main() {
IO.println("Hello and welcome!");
}
package org.lab;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Main {

public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
44 changes: 44 additions & 0 deletions src/main/java/org/lab/config/AuthInterceptor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package org.lab.config;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.lab.service.UserService;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class AuthInterceptor implements HandlerInterceptor {

private final UserService userService;

public AuthInterceptor(UserService userService) {
this.userService = userService;
}

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String userIdHeader = request.getHeader("X-User-Id");
String authToken = request.getHeader("Authorization");

if (userIdHeader == null || authToken == null) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return false;
}

try {
Long userId = Long.parseLong(userIdHeader);

if (userService.findById(userId) == null) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return false;
}

request.setAttribute("userId", userId);
return true;

} catch (NumberFormatException e) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return false;
}
}
}
Loading