Add server examples

This commit is contained in:
aNNiMON 2023-12-30 13:12:05 +02:00 committed by Victor Melnik
parent 7e9dc9038d
commit 8ca3672204
5 changed files with 152 additions and 0 deletions

View File

@ -0,0 +1,27 @@
<html>
<head>
<meta charset="UTF-8">
<title>Notes</title>
<link href="styles.css" rel="stylesheet">
</head>
<body>
<div class="notes">
<h2>Notes</h2>
<div class="new-note">
<input placeholder="Your note" />
<button onclick="addNote()">add</button>
</div>
<ul id="notes"></ul>
</div>
<templates>
<ul name="note">
<li class="note">
<h4>Note 1</h4>
<p>Content</p>
</li>
</ul>
</templates>
</body>
<script src="notes.js"></script>
</html>

View File

@ -0,0 +1,33 @@
const elNotes = document.querySelector('#notes');
const elNoteTemplate = document.querySelector('templates ul[name="note"] li');
function renderNote(note) {
const el = elNoteTemplate.cloneNode(true);
el.querySelector('h4').innerText = 'Note #' + note.id;
el.querySelector('p').innerText = note.content;
return el;
}
async function addNote() {
const inpEl = document.querySelector('.new-note input');
const content = inpEl.value;
const resp = await fetch('/notes/', {
method: "POST",
body: content
});
const note = await resp.json();
inpEl.value = '';
console.log(note);
elNotes.prepend(renderNote(note));
}
async function getNotes() {
const resp = await fetch("/notes");
const notes = await resp.json();
elNotes.innerHTML = '';
for (const note of notes) {
elNotes.prepend(renderNote(note));
}
}
getNotes();

View File

@ -0,0 +1,35 @@
templates {
display: none;
}
#notes {
list-style-type: none;
padding: 0;
}
.note {
margin: 0;
padding: 0rem 0.3rem;
}
.note h4 {
margin: 0;
}
.note p {
color: #333;
margin-top: 0;
}
.new-note {
margin-bottom: 2rem;
}
.new-note input {
width: 15rem;
padding: 0.3rem;
}
.new-note button {
padding: 0.3rem 1rem;
background-color: #4caf50;
color: #fff;
border: none;
cursor: pointer;
font-size: 1rem;
}

View File

@ -0,0 +1,37 @@
use std, jdbc, server
// curl -X POST http://localhost:8084/notes/ -d "New note 2"
conn = getConnection("jdbc:sqlite::memory:")
st = conn.createStatement()
st.executeUpdate("CREATE TABLE IF NOT EXISTS notes(id integer primary key, content string)")
stAddNote = conn.prepareStatement("INSERT INTO notes(content) VALUES(?)", RETURN_GENERATED_KEYS)
stGetNote = conn.prepareStatement("SELECT id, content FROM notes WHERE id = ?")
createNote("This is your first note.")
def getNotes() {
notes = []
rs = st.executeQuery("SELECT id, content FROM notes")
while (rs.next()) {
notes += {"id": rs.getInt(1), "content": rs.getString(2)}
}
rs.close()
return notes
}
def createNote(content) {
stAddNote.setString(1, content)
stAddNote.executeUpdate()
rs = stAddNote.getGeneratedKeys()
rs.next()
return {"id": rs.getLong(1) ?? -1, "content": content}
}
newServer({"dev": true, "externalDirs": ["notes_public"]})
.get("/notes", def(ctx) = ctx.json( getNotes() ))
.post("/notes", def(ctx) {
ctx.status(201)
ctx.json( createNote(ctx.body()) )
})
.start(8084)

View File

@ -0,0 +1,20 @@
use std, jdbc, server
// curl -X POST http://localhost:8084/notes/ -d "New note 2"
notes = []
createNote("This is your first note.")
def createNote(content) {
note = {"id": notes.length + 1, "content": content};
notes += note
return note
}
newServer({"externalDirs": ["notes_public"]})
.get("/notes", def(ctx) = ctx.json(notes))
.post("/notes", def(ctx) {
ctx.status(201)
ctx.json( createNote(ctx.body()) )
})
.start(8084)