-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.html
More file actions
94 lines (86 loc) · 3.54 KB
/
Copy pathsetup.html
File metadata and controls
94 lines (86 loc) · 3.54 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
85
86
87
88
89
90
91
92
93
94
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Setup – Domácí Finance</title>
<style>
body{font-family:monospace;background:#0f0f0f;color:#f0ede8;padding:24px;max-width:800px;margin:0 auto;}
h2{font-family:sans-serif;margin-bottom:16px;color:#c8f060;}
pre{background:#1a1a1a;border:1px solid #2e2e2e;border-radius:10px;padding:20px;white-space:pre-wrap;font-size:13px;line-height:1.6;}
.btn{display:block;width:100%;padding:14px;background:#c8f060;color:#0f0f0f;border:none;border-radius:8px;font-size:15px;font-weight:700;cursor:pointer;margin-bottom:16px;font-family:sans-serif;}
.btn:active{background:#b0d840;}
.ok{color:#4ade80;font-family:sans-serif;font-weight:700;display:none;margin-bottom:12px;}
</style>
</head>
<body>
<h2>Domácí Finance – SQL Schema</h2>
<button class="btn" onclick="kopirovat()">📋 Kopírovat SQL</button>
<div class="ok" id="ok">✓ Zkopírováno!</div>
<pre id="sql">-- Volitelně: smaž staré tabulky
-- DROP TABLE IF EXISTS zaznamy CASCADE;
-- DROP TABLE IF EXISTS energie CASCADE;
-- DROP TABLE IF EXISTS plan CASCADE;
CREATE TABLE osnova (
id BIGSERIAL PRIMARY KEY,
nazev TEXT NOT NULL,
parent_id BIGINT REFERENCES osnova(id) ON DELETE CASCADE,
typ TEXT CHECK (typ IN ('prijem', 'vydaj')),
poradi INTEGER DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE penezenky (
id BIGSERIAL PRIMARY KEY,
nazev TEXT NOT NULL,
pocatecni_zustatek NUMERIC(12,2) DEFAULT 0,
barva TEXT DEFAULT '#c8f060',
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE zaznamy (
id BIGSERIAL PRIMARY KEY,
datum DATE NOT NULL,
castka NUMERIC(12,2) NOT NULL,
typ TEXT CHECK (typ IN ('prijem', 'vydaj')) NOT NULL,
kategorie_id BIGINT REFERENCES osnova(id),
kde TEXT,
poznamka TEXT,
penezenka_id BIGINT REFERENCES penezenky(id),
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE plan (
id BIGSERIAL PRIMARY KEY,
mesic TEXT NOT NULL,
kategorie_id BIGINT REFERENCES osnova(id) ON DELETE CASCADE,
castka NUMERIC(12,2) NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(mesic, kategorie_id)
);
CREATE INDEX idx_zaznamy_datum ON zaznamy(datum);
CREATE INDEX idx_zaznamy_kategorie ON zaznamy(kategorie_id);
CREATE INDEX idx_zaznamy_penezenka ON zaznamy(penezenka_id);
CREATE INDEX idx_plan_mesic ON plan(mesic);
ALTER TABLE osnova ENABLE ROW LEVEL SECURITY;
ALTER TABLE penezenky ENABLE ROW LEVEL SECURITY;
ALTER TABLE zaznamy ENABLE ROW LEVEL SECURITY;
ALTER TABLE plan ENABLE ROW LEVEL SECURITY;
CREATE POLICY "anon_all" ON osnova FOR ALL TO anon USING (true) WITH CHECK (true);
CREATE POLICY "anon_all" ON penezenky FOR ALL TO anon USING (true) WITH CHECK (true);
CREATE POLICY "anon_all" ON zaznamy FOR ALL TO anon USING (true) WITH CHECK (true);
CREATE POLICY "anon_all" ON plan FOR ALL TO anon USING (true) WITH CHECK (true);</pre>
<script>
function kopirovat(){
const text=document.getElementById('sql').textContent;
navigator.clipboard.writeText(text).then(()=>{
const ok=document.getElementById('ok');
ok.style.display='block';
setTimeout(()=>ok.style.display='none',2500);
}).catch(()=>{
const r=document.createRange();
r.selectNode(document.getElementById('sql'));
window.getSelection().removeAllRanges();
window.getSelection().addRange(r);
});
}
</script>
</body>
</html>