54 lines
2.0 KiB
Java
54 lines
2.0 KiB
Java
import com.google.common.base.Charsets;
|
|
import com.google.common.base.Supplier;
|
|
import com.google.common.base.Suppliers;
|
|
import com.sun.net.httpserver.HttpHandler;
|
|
import com.sun.net.httpserver.HttpServer;
|
|
|
|
import java.io.OutputStream;
|
|
import java.net.InetSocketAddress;
|
|
import java.sql.*;
|
|
import java.util.NoSuchElementException;
|
|
|
|
public class Main {
|
|
public static void main(String[] args) throws Exception {
|
|
Class.forName("org.postgresql.Driver");
|
|
|
|
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
|
|
server.createContext("/noun", handler(Suppliers.memoize(() -> randomWord("nouns"))));
|
|
server.createContext("/verb", handler(Suppliers.memoize(() -> randomWord("verbs"))));
|
|
server.createContext("/adjective", handler(Suppliers.memoize(() -> randomWord("adjectives"))));
|
|
server.start();
|
|
}
|
|
|
|
private static String randomWord(String table) {
|
|
try (Connection connection = DriverManager.getConnection("jdbc:postgresql://db:5432/postgres", "postgres", "")) {
|
|
try (Statement statement = connection.createStatement()) {
|
|
try (ResultSet set = statement.executeQuery("SELECT word FROM " + table + " ORDER BY random() LIMIT 1")) {
|
|
while (set.next()) {
|
|
return set.getString(1);
|
|
}
|
|
}
|
|
}
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
throw new NoSuchElementException(table);
|
|
}
|
|
|
|
private static HttpHandler handler(Supplier<String> word) {
|
|
return t -> {
|
|
String response = "{\"word\":\"" + word.get() + "\"}";
|
|
byte[] bytes = response.getBytes(Charsets.UTF_8);
|
|
|
|
System.out.println(response);
|
|
t.getResponseHeaders().add("content-type", "application/json; charset=utf-8");
|
|
t.sendResponseHeaders(200, bytes.length);
|
|
|
|
try (OutputStream os = t.getResponseBody()) {
|
|
os.write(bytes);
|
|
}
|
|
};
|
|
}
|
|
}
|