-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.java
More file actions
84 lines (68 loc) · 3.04 KB
/
App.java
File metadata and controls
84 lines (68 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package hexlet.code;
import hexlet.code.repository.BaseRepository;
import hexlet.code.controller.UrlController;
import hexlet.code.util.NamedRoutes;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.stream.Collectors;
import gg.jte.ContentType;
import gg.jte.TemplateEngine;
import gg.jte.resolve.ResourceCodeResolver;
import io.javalin.Javalin;
import io.javalin.rendering.template.JavalinJte;
import lombok.extern.slf4j.Slf4j;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Slf4j
public class App {
private static TemplateEngine createTemplateEngine() {
ClassLoader classLoader = App.class.getClassLoader();
ResourceCodeResolver codeResolver = new ResourceCodeResolver("templates", classLoader);
return TemplateEngine.create(codeResolver, ContentType.Html);
}
private static String getDatabaseUrl() {
// Получаю url базы данных из переменной окружения DATABASE_URL
// Если она не установлена, используем базу в памяти
return System.getenv().getOrDefault("JDBC_DATABASE_URL", "jdbc:h2:mem:project;DB_CLOSE_DELAY=-1;");
}
private static String readResourceFile(String fileName) throws IOException {
InputStream inputStream = App.class.getClassLoader().getResourceAsStream(fileName);
try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {
return reader.lines().collect(Collectors.joining("\n"));
}
}
public static Javalin getApp() throws IOException, SQLException { //
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl(getDatabaseUrl());
HikariDataSource dataSource = new HikariDataSource(hikariConfig);
String sql = readResourceFile("schema.sql");
log.info(sql);
try (Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement()) {
statement.execute(sql);
}
BaseRepository.dataSource = dataSource;
Javalin app = Javalin.create(config -> {
config.bundledPlugins.enableDevLogging();
config.fileRenderer(new JavalinJte(createTemplateEngine()));
});
// root path
app.get(NamedRoutes.mainPage(), ctx -> ctx.render("index.jte"));
// other
app.post(NamedRoutes.urlsPath(), UrlController::create);
app.get(NamedRoutes.buildPath(), UrlController::build);
app.get(NamedRoutes.urlsPath(), UrlController::index);
app.get(NamedRoutes.urlPath("{id}"), UrlController::show);
return app;
}
public static void main(String[] args) throws IOException, SQLException { //throws SQLException
Javalin app = getApp();
app.start(7070);
}
}