first commit

This commit is contained in:
adrian
2025-10-11 17:15:21 +02:00
commit f3671429ee
6 changed files with 201 additions and 0 deletions

29
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,29 @@
{
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "enter program name, for example ${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
],
"version": "2.0.0"
}

15
Makefile Normal file
View File

@ -0,0 +1,15 @@
CXX = g++
CXXFLAGS = -std=c++17 -Wall -pthread
TARGET = backend
SRCS = backend.cpp
all: $(TARGET)
./$(TARGET)
$(TARGET): $(SRCS)
$(CXX) $(CXXFLAGS) -o $(TARGET) $(SRCS)
clean:
rm -f $(TARGET)
.PHONY: all clean

BIN
backend Executable file

Binary file not shown.

31
backend.cpp Normal file
View File

@ -0,0 +1,31 @@
#include "crow.h"
#include <string>
#include <iostream>
int main() {
crow::SimpleApp app;
CROW_ROUTE(app, "/")([](){
auto page = crow::mustache::load_text("index.html");
return page;
});
CROW_ROUTE(app, "/button").methods("POST"_method)([](const crow::request& req) {
auto x = crow::json::load(req.body);
if (!x) {
return crow::response(400, "invalid JSON");
}
std::string name = x["name"].s();
name.erase(std::remove_if(name.begin(), name.end(), ::isspace), name.end());
std::cout << name << std::endl;
return crow::response(200, name);
});
app.port(18080).multithreaded().run();
}

33
compose.yml Normal file
View File

@ -0,0 +1,33 @@
version: "3.8"
services:
db:
image: postgres:latest
container_name: postgres_latest
restart: unless-stopped
environment:
POSTGRES_USER: duck
POSTGRES_PASSWORD: duckpass
POSTGRES_DB: duckdb
volumes:
- db_data:/var/lib/postgresql/data
ports:
- "5432:5432"
pgadmin:
image: dpage/pgadmin4:latest
container_name: pgadmin_latest
restart: unless-stopped
environment:
PGADMIN_DEFAULT_EMAIL: admin@example.com
PGADMIN_DEFAULT_PASSWORD: adminpass
volumes:
- pgadmin_data:/var/lib/pgadmin
ports:
- "8080:80"
depends_on:
- db
volumes:
db_data:
pgadmin_data:

93
templates/index.html Normal file
View File

@ -0,0 +1,93 @@
<!DOCTYPE html>
<html lang ="en">
<head>
<style>
body {
background-color: #2B2A34;
}
.input_field {
display: flex;
justify-content: center;
}
.response_container {
display: flex;
justify-content: center;
align-items: center;
max-width: fit-content;
margin: 5px auto;
}
.response_text {
display: flex;
justify-content: center;
border: 2px solid black;
border-radius: 5px;
max-width: 300px;
margin: 5px auto;
background-color: white;
width: 200px;
height: 20px;
}
.response_button {
display: flex;
justify-content: center;
}
</style>
<script>
async function send_input() {
const input = document.getElementById('input').value;
const res = await fetch('/button', {
method: 'POST',
headers: {
'Content-type': 'application/json',
},
body: JSON.stringify({name: input})
});
const data = await res.text();
const box = document.getElementById('response_text');
box.textContent = data
document.getElementById('input').value = '';
}
</script>
<meta charset="UTF-8">
<meta name="viewpoint" content="width=device-width, initial-scale=1.0">
<title>javascript test</title>
</head>
<body>
<div class="input_field">
<input type="text" id="input"/>
<button onclick = "send_input()"> send </button>
<script>
const input = document.getElementById('input');
input.addEventListener('keydown', function(event) {
if (event.code == 'Enter'){
send_input();
}
})
</script>
</div>
<div id="response_container" class="response_container">
<div id="response_text" class="response_text"></div>
<div class="response_button">
<button onclick="copy_to_clipboard()">📋</button>
</div>
<script>
function copy_to_clipboard() {
const copyText = document.getElementById('response_text').textContent;
console.log(copyText);
navigator.clipboard.writeText(copyText);
}
</script>
</div>
</body>
</html>