Compare commits
836 Commits
dev-moritz
...
chat-syste
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0c22453f1 | ||
|
|
e18f27675d | ||
|
|
1380dcb43a | ||
|
|
a8be6db8aa | ||
|
|
e24310bdb7 | ||
|
|
39e8527c59 | ||
|
|
76bd0bb5dd | ||
|
|
4b9e7dda5f | ||
|
|
73b44d574b | ||
|
|
f778641be6 | ||
|
|
75723d666e | ||
|
|
272b044157 | ||
|
|
10bc17963a | ||
|
|
35c24b0380 | ||
|
|
3e09686cf6 | ||
|
|
aca01b859f | ||
|
|
344651dfc1 | ||
|
|
4a2eb72f0a | ||
|
|
eb1763a6c1 | ||
|
|
e276c71461 | ||
|
|
2bf4eba44d | ||
|
|
9e2d7ecf08 | ||
|
|
058b61908f | ||
|
|
5a6bfcc900 | ||
|
|
ec0d5ddf5a | ||
|
|
7204957749 | ||
|
|
8c4345924f | ||
|
|
ed609a4690 | ||
|
|
b29b26ef0e | ||
|
|
d6f01bef98 | ||
|
|
bfb17795a6 | ||
|
|
dc5c6ac557 | ||
|
|
6416b0f749 | ||
|
|
a094036d07 | ||
|
|
8c69e6add1 | ||
|
|
78decc697e | ||
|
|
5c846ec400 | ||
|
|
b13b145d16 | ||
|
|
c2542e7dab | ||
|
|
422a03a2e8 | ||
|
|
e09513d50e | ||
|
|
e159e81c2d | ||
|
|
a113d09775 | ||
|
|
25aa048c4a | ||
|
|
207bf31058 | ||
|
|
f9daeceeca | ||
|
|
b47a5fd5f6 | ||
|
|
88c35f81f7 | ||
|
|
cc583080ea | ||
|
|
e535cdaeba | ||
|
|
f17a8a6481 | ||
|
|
d5fb937dd6 | ||
|
|
23246fbda2 | ||
|
|
735344cea4 | ||
|
|
8488472ebc | ||
|
|
299ec89216 | ||
|
|
a9aaa508f5 | ||
|
|
52261e8d2a | ||
|
|
4ac3999f67 | ||
|
|
9c059eb4b6 | ||
|
|
ba5d5ac5d5 | ||
|
|
6d48cee1fa | ||
|
|
d157ed3c0f | ||
|
|
0495d48669 | ||
|
|
7ba5c9de92 | ||
|
|
b64282a7ca | ||
|
|
bd67288887 | ||
|
|
68f51d4553 | ||
|
|
5dbbde0856 | ||
|
|
a9f01a5a8e | ||
|
|
28a383a476 | ||
|
|
56b6bcd1a1 | ||
|
|
14b3cdf744 | ||
|
|
38f77d862d | ||
|
|
f3c2c82d8d | ||
|
|
87f6bf14d8 | ||
|
|
72ed91ddcc | ||
|
|
a4c3c38912 | ||
|
|
e86b44f5a0 | ||
|
|
101b1e9aab | ||
|
|
ecd4b08119 | ||
|
|
f958eb07bf | ||
|
|
611866508c | ||
|
|
076c49c054 | ||
|
|
9c8b1b1913 | ||
|
|
cfad65878e | ||
|
|
379ae672c4 | ||
|
|
b568f5c101 | ||
|
|
7c36bb8728 | ||
|
|
df0fa82482 | ||
|
|
70fd424488 | ||
|
|
8470ad5915 | ||
|
|
a8a9553d20 | ||
|
|
8d8fb96f0d | ||
|
|
25280f2cd1 | ||
|
|
3ab5992210 | ||
|
|
de8dd9e9f1 | ||
|
|
3e15724c3e | ||
|
|
dfe7856d03 | ||
|
|
b70417e9ed | ||
|
|
f5d6fa03e5 | ||
|
|
e35378ced8 | ||
|
|
414727fdc1 | ||
|
|
e2c14dace9 | ||
|
|
568f9769ee | ||
|
|
6901973e5c | ||
|
|
a588837605 | ||
|
|
6e6ac36178 | ||
|
|
cfc6d3c230 | ||
|
|
b6aa1fdf6d | ||
|
|
d9f6b7e825 | ||
|
|
68bffa8944 | ||
|
|
f8e890e9a9 | ||
|
|
64eb0d4e15 | ||
|
|
d7a862e061 | ||
|
|
6a2c386b5d | ||
|
|
62e6dd44b9 | ||
|
|
05b31a4862 | ||
|
|
55305f31b7 | ||
|
|
1f86a063ef | ||
|
|
217885587e | ||
|
|
28f8933f72 | ||
|
|
5360ec3d24 | ||
|
|
6339a3aeda | ||
|
|
974d0e28a1 | ||
|
|
e9dab58a57 | ||
|
|
3aa72ea258 | ||
|
|
0b161cf53e | ||
|
|
590723b297 | ||
|
|
fd390238d9 | ||
|
|
6388669d66 | ||
|
|
b475e4dd79 | ||
|
|
f5373fc7b1 | ||
|
|
265e58d80d | ||
|
|
d2fac65a6d | ||
|
|
b0df7fc4cf | ||
|
|
e21a829cb6 | ||
|
|
bef1cff348 | ||
|
|
f9555c7a1e | ||
|
|
03389a04ba | ||
|
|
008a6f05a5 | ||
|
|
6aa8816dd1 | ||
|
|
70427e8a45 | ||
|
|
51ea0ec007 | ||
|
|
1381f5787a | ||
|
|
722db2d2ec | ||
|
|
72458f4631 | ||
|
|
bde6b3e102 | ||
|
|
936ca5abaa | ||
|
|
1f03bf5570 | ||
|
|
e7e2390bcd | ||
|
|
3ac6164c82 | ||
|
|
3bb6778e67 | ||
|
|
fa797c00c2 | ||
|
|
f0ae1a9205 | ||
|
|
af7da9c07f | ||
|
|
4106253b58 | ||
|
|
c787dce10c | ||
|
|
b265910b2a | ||
|
|
5e3f4c0f59 | ||
|
|
2fe07ebfad | ||
|
|
7be766d2c7 | ||
|
|
15651fc803 | ||
|
|
5b3b81551e | ||
|
|
330841f8ee | ||
|
|
0708c6ce43 | ||
|
|
2c1945584d | ||
|
|
183178f943 | ||
|
|
b1b95159fa | ||
|
|
b0828592c5 | ||
|
|
21446b3bf3 | ||
|
|
935fbfba78 | ||
|
|
fa195a79f5 | ||
|
|
f6a367c567 | ||
|
|
bf6d8f47e7 | ||
|
|
02761610d1 | ||
|
|
bf3107d3b7 | ||
|
|
66e596bb57 | ||
|
|
cdfdb6c001 | ||
|
|
c583229cc8 | ||
|
|
417009fd6e | ||
|
|
d3ffbca858 | ||
|
|
db4fc19c1a | ||
|
|
eefae0635a | ||
|
|
1d7c12ec60 | ||
|
|
4d7f94e292 | ||
|
|
e13810b16a | ||
|
|
d4be779cf1 | ||
|
|
3912262f4b | ||
|
|
ed753b71c1 | ||
|
|
5b78e8b075 | ||
|
|
71dd1de503 | ||
|
|
2a95f7750a | ||
|
|
6d3dcb503a | ||
|
|
57c6bbd96c | ||
|
|
3f18ad9c59 | ||
|
|
c09cdcc788 | ||
|
|
473ff8d774 | ||
|
|
4ec3f42a8b | ||
|
|
36a4d7415c | ||
|
|
df81964b86 | ||
|
|
7130b6ba65 | ||
|
|
bfa79fb06e | ||
|
|
52e2459d47 | ||
|
|
5081f70570 | ||
|
|
f4e6b7baf8 | ||
|
|
e55388e4b7 | ||
|
|
f14c376791 | ||
|
|
071fd8c7be | ||
|
|
2bb2bd74db | ||
|
|
9d9fdebf3a | ||
|
|
0d9675fb35 | ||
|
|
7b5b272c17 | ||
|
|
a7427c3462 | ||
|
|
2b8ebcf182 | ||
|
|
eb72b600b4 | ||
|
|
606b851661 | ||
|
|
15f94c7752 | ||
|
|
04dbd4adcd | ||
|
|
853fe54e3b | ||
|
|
e2490f2296 | ||
|
|
cbddcf0968 | ||
|
|
8b1e5df851 | ||
|
|
29d8e5e7b3 | ||
|
|
e86328b0c2 | ||
|
|
b8d37d4e38 | ||
|
|
fd93f3fd54 | ||
|
|
9035de79ce | ||
|
|
2304de45b1 | ||
|
|
f1007d325f | ||
|
|
44679dbef0 | ||
|
|
682c97b3e7 | ||
|
|
b65c3eeeaa | ||
|
|
883c019293 | ||
|
|
50c2e3a6ce | ||
|
|
b7082e2318 | ||
|
|
f30b1cbd09 | ||
|
|
8936479c78 | ||
|
|
f02b30c6b5 | ||
|
|
fd34f6bcf7 | ||
|
|
e9eb113c33 | ||
|
|
1caee4e19e | ||
|
|
e18188d2a8 | ||
|
|
682cf056b6 | ||
|
|
5d11889fb2 | ||
|
|
566780b5e2 | ||
|
|
2d025b9fde | ||
|
|
64e97b6593 | ||
|
|
a05daedc54 | ||
|
|
e5756abb4d | ||
|
|
bfd30ace70 | ||
|
|
5858bff825 | ||
|
|
99c1a127b4 | ||
|
|
70af2e2d07 | ||
|
|
7db145af7c | ||
|
|
dfe13dd6bd | ||
|
|
33596e4b61 | ||
|
|
ca9c1b025a | ||
|
|
ca5102cd77 | ||
|
|
cfe160f34d | ||
|
|
d0a7033bf4 | ||
|
|
415291b083 | ||
|
|
4208c3ecc5 | ||
|
|
76dbe27c5d | ||
|
|
cfbf1dd69b | ||
|
|
313b6e328e | ||
|
|
22532f3783 | ||
|
|
3ced32b235 | ||
|
|
300b1d5ea3 | ||
|
|
40df8c7104 | ||
|
|
83727ac71d | ||
|
|
f31d710b20 | ||
|
|
6da7c0e501 | ||
|
|
f7b6a50482 | ||
|
|
48f72a2f0f | ||
|
|
43d2c114f4 | ||
|
|
aa84dd967e | ||
|
|
c413f76fe2 | ||
|
|
7762310bf3 | ||
|
|
7dd3a6c60d | ||
|
|
80a6992f5b | ||
|
|
4b651b733b | ||
|
|
c269306d9d | ||
|
|
cf0f0bdee0 | ||
|
|
d4e2d50e00 | ||
|
|
e303c44822 | ||
|
|
3eb30d2248 | ||
|
|
9b6b30ae30 | ||
|
|
9d9e6f7786 | ||
|
|
98f32ca279 | ||
|
|
ab7e5bc6d6 | ||
|
|
636c5463b2 | ||
|
|
85c0216e9d | ||
|
|
5e2861546f | ||
|
|
c1fc08ecba | ||
|
|
458a6ab254 | ||
|
|
1259f642e1 | ||
|
|
3cb71b8e2c | ||
|
|
eb8bae6d69 | ||
|
|
4f382c150d | ||
|
|
53ea51885a | ||
|
|
f5ae2cd0d4 | ||
|
|
8860750487 | ||
|
|
a58c8d466e | ||
|
|
8daee69576 | ||
|
|
7665141a5a | ||
|
|
7327d39c57 | ||
|
|
9177ca18f0 | ||
|
|
0956744878 | ||
|
|
b0235056a7 | ||
|
|
d354189d3c | ||
|
|
07760aa26a | ||
|
|
13322836aa | ||
|
|
d8acd0476a | ||
|
|
a2e0d50b1f | ||
|
|
176f1c08ad | ||
|
|
1970a105a9 | ||
|
|
71438a39eb | ||
|
|
ba7792a4b9 | ||
|
|
145bf46ee1 | ||
|
|
ecdce5b279 | ||
|
|
c0d4ede483 | ||
|
|
3fa207ea9c | ||
|
|
2a302a4b59 | ||
|
|
42e0907bb9 | ||
|
|
a20aa88096 | ||
|
|
aef820f448 | ||
|
|
f487b25aa1 | ||
|
|
babd929f6a | ||
|
|
1d27e2bd67 | ||
|
|
2abb143cfe | ||
|
|
5289273fc2 | ||
|
|
32d8e2383e | ||
|
|
f9538e770a | ||
|
|
05b2711f7f | ||
|
|
703f06c7a7 | ||
|
|
6d8dcb1b0e | ||
|
|
1e883866ed | ||
|
|
17f2983c3a | ||
|
|
607dfed53f | ||
|
|
0f20fc1184 | ||
|
|
a8202ff10d | ||
|
|
e06c8273e8 | ||
|
|
63fda2ce72 | ||
|
|
7d3b0396c7 | ||
|
|
21c47a5310 | ||
|
|
2086ac3d9c | ||
|
|
c3ffc0446a | ||
|
|
33411d8473 | ||
|
|
528d4a33eb | ||
|
|
1332b8e798 | ||
|
|
f1bb2fc55c | ||
|
|
ef7e0a1df9 | ||
|
|
e8083462e2 | ||
|
|
86f8a9fba7 | ||
|
|
b7f9649036 | ||
|
|
3acf581775 | ||
|
|
18227c7beb | ||
|
|
0811e2dd16 | ||
|
|
f305d2f6eb | ||
|
|
c2ea0bcd37 | ||
|
|
6b0b88e9ac | ||
|
|
221e94a8d7 | ||
|
|
371b8422ce | ||
|
|
4b43aa3e8f | ||
|
|
d72a93fbff | ||
|
|
ba51f36a8e | ||
|
|
1fa3faff52 | ||
|
|
820da9a235 | ||
|
|
91485aa009 | ||
|
|
c8c6238583 | ||
|
|
624fd3c045 | ||
|
|
7b0fdbf5f8 | ||
|
|
1f4e2eb4ce | ||
|
|
0b89320007 | ||
|
|
074ee8b463 | ||
|
|
55ff99a4ca | ||
|
|
009e1a8cad | ||
|
|
6c108f0455 | ||
|
|
09cd167a70 | ||
|
|
4239bc7917 | ||
|
|
77665af171 | ||
|
|
2a51b96b24 | ||
|
|
559dfe38e6 | ||
|
|
2dadfebccf | ||
|
|
0bc4fd6670 | ||
|
|
516e854616 | ||
|
|
912970923f | ||
|
|
4e5ee5174f | ||
|
|
51e9a5c97c | ||
|
|
09c4f5b06e | ||
|
|
aff26d7e16 | ||
|
|
49920caecc | ||
|
|
5f9c010d09 | ||
|
|
edce3ca5a3 | ||
|
|
d0c4b32a2c | ||
|
|
3acd5c5170 | ||
|
|
79e8c9e19a | ||
|
|
cc2a92a2a5 | ||
|
|
f0e1126dbb | ||
|
|
8804346424 | ||
|
|
a194e8a17e | ||
|
|
f0dbb2a1af | ||
|
|
6fb22d2ee0 | ||
|
|
78523171e9 | ||
|
|
cfdfef039e | ||
|
|
fecbf8948b | ||
|
|
40d33532c8 | ||
|
|
69d40eb52b | ||
|
|
4c79e8cb67 | ||
|
|
3fa4ede71f | ||
|
|
15b818acdb | ||
|
|
fa4c4d16d0 | ||
|
|
5997037328 | ||
|
|
29c63a585d | ||
|
|
71f5093a49 | ||
|
|
be94bd482c | ||
|
|
14e1d89024 | ||
|
|
c8b41458e1 | ||
|
|
e2e576e4fe | ||
|
|
2f35b8c403 | ||
|
|
5ea258705c | ||
|
|
f4dbe590df | ||
|
|
f4bbc979f9 | ||
|
|
8175b97073 | ||
|
|
085cf9783b | ||
|
|
f80b04ee77 | ||
|
|
e1a83aed77 | ||
|
|
9acf9e1e50 | ||
|
|
75ade8ebaa | ||
|
|
0117f94c07 | ||
|
|
00772317e7 | ||
|
|
efc1e8329a | ||
|
|
fc9fca0ee6 | ||
|
|
5d66eb10ca | ||
|
|
84a3a2dd39 | ||
|
|
a9c2b5c173 | ||
|
|
1678ac64b8 | ||
|
|
83b618b59d | ||
|
|
302ae192ac | ||
|
|
3af32c0153 | ||
|
|
9f64f8a3c2 | ||
|
|
048c1fc4d4 | ||
|
|
6f00b66013 | ||
|
|
d42209c3a0 | ||
|
|
7ce6e1d7a0 | ||
|
|
666b94bfad | ||
|
|
a597947e80 | ||
|
|
51a8cc576b | ||
|
|
9901688668 | ||
|
|
c39efcdbf0 | ||
|
|
01cd027e09 | ||
|
|
e3f7214af2 | ||
|
|
f77a013767 | ||
|
|
8b3e6b80c4 | ||
|
|
9706a839d6 | ||
|
|
d38bd8a6ad | ||
|
|
9e7f1da680 | ||
|
|
499cbfb47d | ||
|
|
7c7e76ca82 | ||
|
|
a57c97f59d | ||
|
|
91872ee3d3 | ||
|
|
5cf9892da0 | ||
|
|
2db7508859 | ||
|
|
06eb1dff34 | ||
|
|
bba1fc0b47 | ||
|
|
113f40ebb1 | ||
|
|
147b1ff44f | ||
|
|
dee9afcda4 | ||
|
|
bf5cc87510 | ||
|
|
fb6b88c499 | ||
|
|
b1d5cde032 | ||
|
|
cb7b1f0c41 | ||
|
|
6c0ab35f91 | ||
|
|
219ffc7fbb | ||
|
|
973fd76d1a | ||
|
|
915898c26f | ||
|
|
8277eb100c | ||
|
|
aea651c7f7 | ||
|
|
959fcd7f3b | ||
|
|
8d73143932 | ||
|
|
e01de6f03e | ||
|
|
27027c0f0e | ||
|
|
90522e1f81 | ||
|
|
7ef726c7c2 | ||
|
|
ba459c2ef4 | ||
|
|
89256c8ab1 | ||
|
|
34af0d655f | ||
|
|
1c282c0d9a | ||
|
|
34a1f1015b | ||
|
|
661a75ee9c | ||
|
|
afd9ef16df | ||
|
|
48d94b08ad | ||
|
|
310794a049 | ||
|
|
cd7fce3b1b | ||
|
|
d47651b5a1 | ||
|
|
8e9dfc5153 | ||
|
|
de94e1ba6d | ||
|
|
5b6c0c7d97 | ||
|
|
d9dfa18e28 | ||
|
|
c66d7dd260 | ||
|
|
215640f57a | ||
|
|
539e7a6b36 | ||
|
|
5a1c02e6f5 | ||
|
|
45da8032de | ||
|
|
8703b3b633 | ||
|
|
69298f2c71 | ||
|
|
ab5f9d71d3 | ||
|
|
1cbb01c8e7 | ||
|
|
2d3db305db | ||
|
|
50b53e8bba | ||
|
|
65ccda0ac0 | ||
|
|
c25928cd18 | ||
|
|
6a0ffe25f2 | ||
|
|
850b0bfff8 | ||
|
|
a4f1e10f0e | ||
|
|
6bcad2fecc | ||
|
|
93f22bfe5d | ||
|
|
3f2d62e125 | ||
|
|
f85a61dcff | ||
|
|
5388b4eb91 | ||
|
|
02f70e84fc | ||
|
|
e0faf0bced | ||
|
|
3a66e21ebd | ||
|
|
4ecbeab1da | ||
|
|
9c34ac833c | ||
|
|
fc3f4b0e3e | ||
|
|
64978b7e65 | ||
|
|
4378f25642 | ||
|
|
9ad163a469 | ||
|
|
2a47b8f482 | ||
|
|
5084346b28 | ||
|
|
2391629b36 | ||
|
|
8964c9f533 | ||
|
|
2000e8b80e | ||
|
|
00015b30cd | ||
|
|
b4af4ad667 | ||
|
|
6b255232c6 | ||
|
|
54b9ff8ce5 | ||
|
|
b7f4f9e8a4 | ||
|
|
f4647ebd53 | ||
|
|
ed4f5fdf37 | ||
|
|
5f5cdc5728 | ||
|
|
0b93b2d230 | ||
|
|
7f213930b1 | ||
|
|
76240ce840 | ||
|
|
011f4b37ba | ||
|
|
691df89535 | ||
|
|
bbb0fcaa8f | ||
|
|
e741af6901 | ||
|
|
68dd22e509 | ||
|
|
2a1e3568af | ||
|
|
cf68652880 | ||
|
|
b1d2a40534 | ||
|
|
c588f69b0c | ||
|
|
8b489a94cc | ||
|
|
9b50053007 | ||
|
|
4979a1d112 | ||
|
|
08a26cbc2d | ||
|
|
51f6909aaf | ||
|
|
deb73f0e3c | ||
|
|
c93a78066c | ||
|
|
e69362536e | ||
|
|
a1e5945d73 | ||
|
|
c3c7fd313f | ||
|
|
c4de916057 | ||
|
|
096f325292 | ||
|
|
0333f9315a | ||
|
|
a5894a3285 | ||
|
|
d0e0f4aa27 | ||
|
|
f174cf8428 | ||
|
|
fc35f35f5f | ||
|
|
ad53e45c15 | ||
|
|
7b3166ad3a | ||
|
|
0e07d9784e | ||
|
|
a1b6681eeb | ||
|
|
ba96a54d2e | ||
|
|
aa429d0a0d | ||
|
|
a10c46d8cb | ||
|
|
4a59c69f68 | ||
|
|
d1ab64780b | ||
|
|
534b26080d | ||
|
|
1c0a391c16 | ||
|
|
142a1e2988 | ||
|
|
6214d2dd02 | ||
|
|
8b3c4b3b76 | ||
|
|
e867a74478 | ||
|
|
9b61b66890 | ||
|
|
25da5c9bb0 | ||
|
|
9b33755cdd | ||
|
|
d7f57a4d04 | ||
|
|
daf3307e2a | ||
|
|
3becee4b4f | ||
|
|
512dd0ecdf | ||
|
|
b466794e16 | ||
|
|
eed6d9b3bd | ||
|
|
6576609166 | ||
|
|
15b5ff8ac4 | ||
|
|
14ac72f8d2 | ||
|
|
76b7ccf5ec | ||
|
|
38079d6df4 | ||
|
|
5d6962b283 | ||
|
|
a860b133c9 | ||
|
|
4bf250734a | ||
|
|
af26efe23a | ||
|
|
5f35cf6f96 | ||
|
|
aea0732c42 | ||
|
|
49b090ea52 | ||
|
|
7c987f6581 | ||
|
|
1b96822f0b | ||
|
|
476ce29c57 | ||
|
|
d0c693a0fe | ||
|
|
096000d001 | ||
|
|
12a85136b3 | ||
|
|
567ad2cc12 | ||
|
|
0d4736f1f0 | ||
|
|
59e08e66fb | ||
|
|
3606fbd856 | ||
|
|
e3b1490493 | ||
|
|
5d2a3b4c30 | ||
|
|
41f8f9903e | ||
|
|
83690789ac | ||
|
|
bdc4f7bf0a | ||
|
|
6178dcd229 | ||
|
|
e9c4e3d0c3 | ||
|
|
1852c1071b | ||
|
|
bc1e84b4d2 | ||
|
|
d591a8700e | ||
|
|
8886a37630 | ||
|
|
924d3e8513 | ||
|
|
57a43f64d7 | ||
|
|
1a9c57546f | ||
|
|
f223373f4f | ||
|
|
2fac04a148 | ||
|
|
f328a8262f | ||
|
|
253b3d664f | ||
|
|
1c29b57d08 | ||
|
|
ad7abeba05 | ||
|
|
cc2b9bdbf1 | ||
|
|
dee753ddba | ||
|
|
af50e6ffad | ||
|
|
e825377ff1 | ||
|
|
1484f54fe2 | ||
|
|
80b88df992 | ||
|
|
35db825e6a | ||
|
|
f4aeff329a | ||
|
|
d7acd67326 | ||
|
|
ee7b1e4471 | ||
|
|
778d0435f3 | ||
|
|
74a6844981 | ||
|
|
8f9f79a02d | ||
|
|
4a81a08157 | ||
|
|
1bfa3276d6 | ||
|
|
afa97cbae9 | ||
|
|
85ba433452 | ||
|
|
f8f53d0ac9 | ||
|
|
e4888849b1 | ||
|
|
cdb8b500bc | ||
|
|
106c420447 | ||
|
|
83c6aa8550 | ||
|
|
f262710f59 | ||
|
|
04d69a4e95 | ||
|
|
e96ac71d1d | ||
|
|
399b43149b | ||
|
|
693b9968e9 | ||
|
|
4edd73de52 | ||
|
|
e7a554cac0 | ||
|
|
a973586a2b | ||
|
|
c682dc4409 | ||
|
|
f404f5a1fe | ||
|
|
3678cd7b37 | ||
|
|
14196bf66c | ||
|
|
3f5f1cebe7 | ||
|
|
8fc6a88f58 | ||
|
|
591c5ec9e6 | ||
|
|
57c05b8672 | ||
|
|
e6fdf39e00 | ||
|
|
fabef77366 | ||
|
|
b14d80d101 | ||
|
|
a04a71df23 | ||
|
|
eb4d67d04e | ||
|
|
0e5a74725e | ||
|
|
fdbe165343 | ||
|
|
a40a809e12 | ||
|
|
69e169362b | ||
|
|
6cf8910839 | ||
|
|
fb706c5999 | ||
|
|
b5d6ba731e | ||
|
|
224697fd06 | ||
|
|
065e9a5e14 | ||
|
|
999cfbc7cb | ||
|
|
5f075814dd | ||
|
|
dfcd3e359c | ||
|
|
67aaee6f09 | ||
|
|
c05d02b002 | ||
|
|
412d2dc7ef | ||
|
|
d3ca67399c | ||
|
|
21e87339b9 | ||
|
|
fa18a0f94e | ||
|
|
d050fcecec | ||
|
|
aa6effcc90 | ||
|
|
785e0f78ff | ||
|
|
c4942affe8 | ||
|
|
8ee620935e | ||
|
|
5ffcb4b3ff | ||
|
|
2a5416673b | ||
|
|
21446bf4e8 | ||
|
|
45ee28c332 | ||
|
|
c0df0d73af | ||
|
|
1ce0164e70 | ||
|
|
9d4359ea89 | ||
|
|
2eb44a9bb3 | ||
|
|
6242fc9ef8 | ||
|
|
270fcc329f | ||
|
|
0e50cbe118 | ||
|
|
47767e4316 | ||
|
|
37339da412 | ||
|
|
91704f6037 | ||
|
|
c9e372ce53 | ||
|
|
226e9a6d77 | ||
|
|
b2121ec76e | ||
|
|
77eaa41cc3 | ||
|
|
2e1ec82d77 | ||
|
|
8669b6d7ff | ||
|
|
192e71ac60 | ||
|
|
095655e9e8 | ||
|
|
fb14dbd6bc | ||
|
|
7c56d036fd | ||
|
|
fa272cf0f3 | ||
|
|
6a51b0b02f | ||
|
|
d6e137d50f | ||
|
|
6e49ba328e | ||
|
|
d31a958df7 | ||
|
|
993d58c170 | ||
|
|
d1e3b51635 | ||
|
|
1df144e5b2 | ||
|
|
3e160b3af1 | ||
|
|
26ea187a09 | ||
|
|
45e8ebb29d | ||
|
|
85fe01bc60 | ||
|
|
cba9d7a0e0 | ||
|
|
d672c957f9 | ||
|
|
685cb114f8 | ||
|
|
86532ec251 | ||
|
|
b283013116 | ||
|
|
927f0157be | ||
|
|
eac6f0c035 | ||
|
|
727ea1c924 | ||
|
|
d538f754c4 | ||
|
|
4d801eef4c | ||
|
|
dd60f42d7b | ||
|
|
8049af9f17 | ||
|
|
39476ac5d5 | ||
|
|
dc0dfff31f | ||
|
|
d228908430 | ||
|
|
d73b0af435 | ||
|
|
2f04be6da9 | ||
|
|
a38fea3955 | ||
|
|
850a51569f | ||
|
|
22ada149f4 | ||
|
|
051f758566 | ||
|
|
5bee70f95a | ||
|
|
bfcc44dbe2 | ||
|
|
cde5661e30 | ||
|
|
902743f0d9 | ||
|
|
52e07ea0bf | ||
|
|
daec65e051 | ||
|
|
7986adc9c6 | ||
|
|
0686f2930b | ||
|
|
faa8f2c673 | ||
|
|
69566f1c74 | ||
|
|
198912c792 | ||
|
|
df00cb88e2 | ||
|
|
b2f86696cc | ||
|
|
2b0fda66f1 | ||
|
|
47533d5794 | ||
|
|
78248ba0a4 | ||
|
|
b3b59591be | ||
|
|
c3da028ed7 | ||
|
|
feb3145169 | ||
|
|
003882a16a | ||
|
|
137cef3114 | ||
|
|
0777fc39eb | ||
|
|
9359ee0432 | ||
|
|
c8ba17fab3 | ||
|
|
faf9ef8b0b | ||
|
|
404f5845a4 | ||
|
|
8486421f12 | ||
|
|
3abaa89107 | ||
|
|
1af751042c | ||
|
|
0daa65bd94 | ||
|
|
c4350ec75a | ||
|
|
9951179b2a | ||
|
|
7f6430f20f | ||
|
|
5f8d30a5a3 | ||
|
|
f18b5ca03c | ||
|
|
74f05d404c | ||
|
|
8935479fad | ||
|
|
23cadae581 | ||
|
|
b6db5cde51 | ||
|
|
a9ab3daa6f | ||
|
|
0d0f6c8851 | ||
|
|
8ac9005e8b | ||
|
|
ae970e376e | ||
|
|
c6ab7adba3 | ||
|
|
dbd70febdb | ||
|
|
2acd91f270 | ||
|
|
0381a6f473 | ||
|
|
e86c4d94b8 | ||
|
|
8d1f95ec89 | ||
|
|
89ce919802 | ||
|
|
ed5b71f8bf | ||
|
|
0927883055 | ||
|
|
2ac1e3f436 | ||
|
|
66297101ff | ||
|
|
6e2f29c673 | ||
|
|
a4fe9b4f80 | ||
|
|
fe3b2809d9 | ||
|
|
e61481c1b0 | ||
|
|
8b3371cf26 | ||
|
|
e48753f9bd | ||
|
|
8b3578aa74 | ||
|
|
094b40e604 | ||
|
|
843c417f19 | ||
|
|
f4ba7c8111 | ||
|
|
01d3312989 | ||
|
|
60a0f3af70 | ||
|
|
de8e68e21b | ||
|
|
158752b16d | ||
|
|
b1feb53b79 | ||
|
|
28ece60c76 | ||
|
|
30f699297c | ||
|
|
91fd0ec516 | ||
|
|
c6c7d5bc14 | ||
|
|
06f05104ab | ||
|
|
23c95dab63 |
3
.crontab
@@ -1,3 +0,0 @@
|
|||||||
# Jeden Monat müssen wir die neuen Klimafaktoren vom DWD abholen, der Cronjob läuft immer am 28. für die höchste Wahrscheinlichkeit
|
|
||||||
# dass die Daten schon da sind, falls der DWD mal später dran ist...
|
|
||||||
0 12 28 * * bun ./src/cronjobs/update-dwd-klimafaktoren.ts
|
|
||||||
16
.env
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
# Environment variables declared in this file are automatically made available to Prisma.
|
||||||
|
# See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema
|
||||||
|
|
||||||
|
# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
|
||||||
|
# See the documentation for all the connection string options: https://pris.ly/d/connection-strings
|
||||||
|
|
||||||
|
POSTGRES_DB=main
|
||||||
|
POSTGRES_HOST=localhost
|
||||||
|
POSTGRES_PORT=5432
|
||||||
|
POSTGRES_USER=main
|
||||||
|
POSTGRES_PASSWORD=hHMP8cd^N3SnzGRR
|
||||||
|
|
||||||
|
DB_CONTAINER_NAME=database
|
||||||
|
|
||||||
|
POSTGRES_DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}"
|
||||||
|
POSTGRES_DATABASE_URL_EXTERNAL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DB_CONTAINER_NAME}:${POSTGRES_PORT}/${POSTGRES_DB}"
|
||||||
76
.github/workflows/auto-merge-staging-into-main.yml
vendored
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
name: Auto Merge Staging into Main
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 2 * * *' # 2:00 UTC = 4:00 Europäische Zeit
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
merge:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set Git user
|
||||||
|
run: |
|
||||||
|
git config user.name "github-actions[bot]"
|
||||||
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
|
|
||||||
|
- name: Fetch all branches
|
||||||
|
run: |
|
||||||
|
git fetch origin main
|
||||||
|
git fetch origin staging
|
||||||
|
|
||||||
|
- name: Check if main has commits not in staging
|
||||||
|
id: check
|
||||||
|
run: |
|
||||||
|
git fetch origin
|
||||||
|
if [ $(git rev-list --count origin/staging..origin/main) -gt 0 ]; then
|
||||||
|
echo "❌ Staging is behind main and requires manual merging."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Create PR from staging to main
|
||||||
|
id: create_pr
|
||||||
|
run: |
|
||||||
|
PR_URL=$(gh pr create --base main --head staging --title "Auto-merge staging into main" --body "This PR was created automatically by GitHub Actions. It merges the latest \`staging\` into \`main\`.")
|
||||||
|
echo "PR_URL=$PR_URL" >> $GITHUB_OUTPUT
|
||||||
|
PR_NUMBER=$(echo $PR_URL | awk -F'/' '{print $NF}')
|
||||||
|
echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_OUTPUT
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Enable auto-merge on PR
|
||||||
|
if: steps.create_pr.outputs.PR_NUMBER != ''
|
||||||
|
run: |
|
||||||
|
gh pr merge ${{ steps.create_pr.outputs.PR_NUMBER }} --merge --auto
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
|
||||||
|
notify_failure:
|
||||||
|
needs: merge
|
||||||
|
if: failure()
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Send Discord notification on failure
|
||||||
|
run: |
|
||||||
|
curl -H "Content-Type: application/json" \
|
||||||
|
-X POST \
|
||||||
|
-d "{\"content\": \"🚨 Auto-Merge fehlgeschlagen! Bitte manuell prüfen: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\"}" \
|
||||||
|
${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||||
|
|
||||||
|
notify_success:
|
||||||
|
needs: merge
|
||||||
|
if: success()
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Send Discord notification on success
|
||||||
|
run: |
|
||||||
|
curl -H "Content-Type: application/json" \
|
||||||
|
-X POST \
|
||||||
|
-d "{\"content\": \"✅ Auto-Merge ausgeführt! Ergebnis jetzt auf [GitHub](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) und [online-energieausweis.org](https://online-energieausweis.org) einsehen.\"}" \
|
||||||
|
${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||||
17
.github/workflows/dev-pipeline.yml
vendored
@@ -1,16 +1,18 @@
|
|||||||
name: Dev Pipeline
|
name: Development Pipeline
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
|
||||||
branches: [main]
|
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches: [dev]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
- name: Install Bun
|
||||||
|
run: |
|
||||||
|
curl -fsSL https://bun.sh/install | bash
|
||||||
|
|
||||||
- uses: appleboy/ssh-action@master
|
- uses: appleboy/ssh-action@master
|
||||||
with:
|
with:
|
||||||
host: ${{ secrets.DEV_HOST }}
|
host: ${{ secrets.DEV_HOST }}
|
||||||
@@ -18,9 +20,12 @@ jobs:
|
|||||||
password: ${{ secrets.DEV_PASSWORD }}
|
password: ${{ secrets.DEV_PASSWORD }}
|
||||||
port: 22
|
port: 22
|
||||||
script: |
|
script: |
|
||||||
|
export PATH=$HOME/.bun/bin:$PATH
|
||||||
|
export PATH=$HOME/.nvm/versions/node/v22.14.0/bin:$PATH
|
||||||
|
echo $PATH
|
||||||
cd ~/online-energieausweis
|
cd ~/online-energieausweis
|
||||||
git reset --hard origin/main
|
git reset --hard origin/dev
|
||||||
git clean -f -d
|
git clean -f -d
|
||||||
git pull origin main
|
git pull origin dev
|
||||||
git status
|
git status
|
||||||
make prod
|
make prod
|
||||||
27
.github/workflows/prevent-wrong-pr.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
name: PR Rules Enforcement
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
- staging
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check-pr:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Validate Pull Request Sources
|
||||||
|
steps:
|
||||||
|
- name: Prevent dev merges
|
||||||
|
run: |
|
||||||
|
if [[ "${{ github.head_ref }}" == "dev" ]]; then
|
||||||
|
echo "ERROR: Merging 'dev' into '${{ github.base_ref }}' is forbidden!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Allow only staging into main
|
||||||
|
if: github.base_ref == 'main'
|
||||||
|
run: |
|
||||||
|
if [[ "${{ github.head_ref }}" != "staging" ]]; then
|
||||||
|
echo "ERROR: Only 'staging' branch is allowed to merge into 'main'. Current: '${{ github.head_ref }}'"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
31
.github/workflows/prod-pipeline.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
name: Production Pipeline
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Install Bun
|
||||||
|
run: |
|
||||||
|
curl -fsSL https://bun.sh/install | bash
|
||||||
|
|
||||||
|
- uses: appleboy/ssh-action@master
|
||||||
|
with:
|
||||||
|
host: ${{ secrets.PROD_HOST }}
|
||||||
|
username: ${{ secrets.PROD_USERNAME }}
|
||||||
|
password: ${{ secrets.PROD_PASSWORD }}
|
||||||
|
port: 22
|
||||||
|
script: |
|
||||||
|
export PATH=$HOME/.bun/bin:$PATH
|
||||||
|
export PATH=$HOME/.nvm/versions/node/v22.14.0/bin:$PATH
|
||||||
|
echo $PATH
|
||||||
|
cd ~/online-energieausweis
|
||||||
|
git reset --hard origin/main
|
||||||
|
git clean -f -d
|
||||||
|
git pull origin main
|
||||||
|
git status
|
||||||
|
make prod
|
||||||
17
.gitignore
vendored
@@ -20,15 +20,22 @@ pnpm-debug.log*
|
|||||||
pnpm-lock.yaml
|
pnpm-lock.yaml
|
||||||
bun.lockb
|
bun.lockb
|
||||||
|
|
||||||
# environment variables
|
src/astro-typesafe-api-caller.ts
|
||||||
.env
|
|
||||||
.env.production
|
|
||||||
|
|
||||||
# macOS-specific files
|
# macOS-specific files
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
public/fonts/
|
|
||||||
|
|
||||||
*.Identifier
|
*.Identifier
|
||||||
|
|
||||||
src/lib/Berechnungen/BedarfsausweisWohnen/18599-Tabellenverfahren-Wohngebaeude-komplett-ocr.pdf
|
src/lib/Berechnungen/BedarfsausweisWohnen/18599-Tabellenverfahren-Wohngebaeude-komplett-ocr.pdf
|
||||||
|
src/astro-typesafe-api-caller.ts
|
||||||
|
|
||||||
|
dbml/schema.dbml
|
||||||
|
|
||||||
|
prisma/migrations/20250315143314_/migration.sql
|
||||||
|
|
||||||
|
# src/astro-typesafe-api-caller.ts
|
||||||
|
|
||||||
|
src/testing/ausweise.csv
|
||||||
|
src/testing/users.csv
|
||||||
|
src/testing/rechnungen.csv
|
||||||
|
|||||||
20
Dockerfile
@@ -1,10 +1,16 @@
|
|||||||
FROM oven/bun:1.0.23
|
FROM postgres:latest
|
||||||
|
ENV POSTGRES_USER ${POSTGRES_USER}
|
||||||
|
ENV POSTGRES_PASSWORD ${POSTGRES_PASSWORD}
|
||||||
|
ENV POSTGRES_DB ${POSTGRES_DB}
|
||||||
|
|
||||||
EXPOSE 3000
|
COPY ./prisma/migrations/ /docker-entrypoint-initdb.d/
|
||||||
|
|
||||||
WORKDIR /online-energieausweis
|
EXPOSE 5432
|
||||||
COPY ./package.json ./
|
|
||||||
COPY . .
|
|
||||||
RUN bun install --prod
|
|
||||||
|
|
||||||
CMD ["bun", "run", "build:production"]
|
# Use a loop to copy migration.sql from each folder to the corresponding directory in the build context
|
||||||
|
RUN for folder in /docker-entrypoint-initdb.d/*; do \
|
||||||
|
if [ -d "$folder" ]; then \
|
||||||
|
cp "$folder/migration.sql" "$folder.sql"; \
|
||||||
|
rm -rf "$folder"; \
|
||||||
|
fi \
|
||||||
|
done
|
||||||
92
Makefile
@@ -1,52 +1,74 @@
|
|||||||
.PHONY: dev database online-energieausweis all prod bun-install-database # api bun-install-api
|
.PHONY: dev online-energieausweis all prod backup run-database build-database install-dependencies wait-for-database prod database prisma-studio backup-database-cronjob update-dwd-klimafaktoren-cron
|
||||||
|
|
||||||
|
DB_CONTAINER_NAME := database
|
||||||
|
DB_NAME := main
|
||||||
|
DB_USER := main
|
||||||
|
DB_PASSWORD := hHMP8cd^N3SnzGRR
|
||||||
|
DB_PORT := 5432
|
||||||
|
DB_VOLUME := postgres_data
|
||||||
|
PERSISTENT_DIR := $(HOME)/persistent/$(APP_NAME)
|
||||||
|
BACKUP_FILENAME := $(HOME)/backups/$(shell date +"%Y-%m-%d_%H-%M-%S").sql.gz
|
||||||
|
|
||||||
online-energieausweis:
|
online-energieausweis:
|
||||||
bun run dev --host
|
bun run dev --host
|
||||||
|
|
||||||
dev: database online-energieausweis # api
|
dev: database online-energieausweis
|
||||||
|
|
||||||
database:
|
database:
|
||||||
$(MAKE) -C ../database dev
|
docker compose up
|
||||||
|
|
||||||
bun-install-database:
|
prisma-studio:
|
||||||
cd ../database
|
- pm2 delete prisma-studio
|
||||||
bun link
|
pm2 start --name "prisma-studio" bunx -- prisma studio
|
||||||
|
|
||||||
|
backup:
|
||||||
|
mkdir -p $(PERSISTENT_DIR)
|
||||||
|
- docker exec -t $(DB_CONTAINER_NAME) pg_dump --data-only -U $(DB_USER) $(DB_NAME) | gzip > $(BACKUP_FILENAME)
|
||||||
|
|
||||||
|
run-database: stop-database
|
||||||
|
docker volume rm -f $(DB_VOLUME)
|
||||||
|
docker volume create $(DB_VOLUME)
|
||||||
|
docker build -t $(DB_CONTAINER_NAME) .
|
||||||
|
docker run -d --name $(DB_CONTAINER_NAME) \
|
||||||
|
-e POSTGRES_USER=$(DB_USER) \
|
||||||
|
-e POSTGRES_PASSWORD=$(DB_PASSWORD) \
|
||||||
|
-p $(DB_PORT):5432 \
|
||||||
|
-v $(DB_VOLUME):/var/lib/postgresql/data \
|
||||||
|
-v $(PERSISTENT_DIR):/persistent \
|
||||||
|
$(DB_CONTAINER_NAME)
|
||||||
|
|
||||||
|
stop-database:
|
||||||
|
- docker stop $(DB_CONTAINER_NAME)
|
||||||
|
- docker rm $(DB_CONTAINER_NAME)
|
||||||
|
|
||||||
|
wait-for-database:
|
||||||
|
@while ! docker exec $(DB_CONTAINER_NAME) pg_isready -U $(DB_USER) -h localhost -p $(DB_PORT) > /dev/null 2>&1; do \
|
||||||
|
sleep 1; \
|
||||||
|
done
|
||||||
|
|
||||||
|
restore-backup:
|
||||||
|
gunzip -c $(BACKUP_FILENAME) | docker exec -i $(DB_CONTAINER_NAME) psql -U $(DB_USER) -d postgres
|
||||||
|
|
||||||
|
install-dependencies:
|
||||||
bun install
|
bun install
|
||||||
|
bunx prisma generate
|
||||||
# bun-install-api: bun-install-database
|
|
||||||
# cd ../api
|
|
||||||
# bun install
|
|
||||||
# bun link @ibcornelsen/database
|
|
||||||
|
|
||||||
# api:
|
|
||||||
# $(MAKE) -C ../api dev
|
|
||||||
|
|
||||||
all:
|
all:
|
||||||
mkdir -p ~/logs
|
mkdir -p ~/logs
|
||||||
bun run dev 2>&1 | tee ~/logs/`date '+%d-%m-%Y_%H:%M:%S'`.log
|
bun run dev 2>&1 | tee ~/logs/`date '+%d-%m-%Y_%H:%M:%S'`.log
|
||||||
|
|
||||||
prod: bun-install-database # bun-install-api
|
update-dwd-klimafaktoren-cron:
|
||||||
|
pm2 start bun --name "update-dwd-klimafaktoren-cron" --cron "0 12 28 * *" -- src/cronjobs/update-dwd-klimafaktoren.ts
|
||||||
|
|
||||||
|
prod: install-dependencies prisma-studio backup-database-cronjob update-dwd-klimafaktoren-cron
|
||||||
|
bun run build
|
||||||
mkdir -p ~/logs
|
mkdir -p ~/logs
|
||||||
mkdir -p ~/persistent/online-energieausweis
|
mkdir -p ~/persistent/online-energieausweis
|
||||||
|
|
||||||
# Wir müssen sichergehen, dass der Database Container läuft, sonst können wir ihn nicht linken.
|
|
||||||
@if [ ! $$(docker ps | grep database | wc -l) -gt 0 ]; then \
|
|
||||||
cd ../database; \
|
|
||||||
$(MAKE) prod; \
|
|
||||||
cd ../online-energieausweis; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Auch die API sollte bereits laufen
|
|
||||||
# @if [ $$(pm2 pid api) -eq "0" ]; then \
|
|
||||||
# cd ../api; \
|
|
||||||
# $(MAKE) prod; \
|
|
||||||
# cd ../online-energieausweis; \
|
|
||||||
# fi
|
|
||||||
|
|
||||||
- rm -f ~/online-energieausweis/.env;
|
|
||||||
- touch ~/online-energieausweis/.env;
|
|
||||||
- echo "PRIVATE_KEY=$(cat /etc/letsencrypt/live/ibcornelsen.de/privkey.pem | base64 | tr -d '\n')" >> ~/online-energieausweis/.env;
|
|
||||||
- echo "CERTIFICATE=$(cat /etc/letsencrypt/live/ibcornelsen.de/fullchain.pem | base64 | tr -d '\n')" >> ~/online-energieausweis/.env;
|
|
||||||
|
|
||||||
- pm2 delete online-energieausweis
|
- pm2 delete online-energieausweis
|
||||||
pm2 start --name "online-energieausweis" --log ~/logs/`date '+%d-%m-%Y_%H:%M:%S'`.log --time bun -- astro dev
|
NODE_ENV="production" pm2 start --name "online-energieausweis" --update-env --log ~/logs/`date '+%d-%m-%Y_%H:%M:%S'`.log --time bun -- run ./server.ts
|
||||||
|
pm2 save
|
||||||
|
|
||||||
|
backup-database-cronjob:
|
||||||
|
- pm2 delete daily-db-backup
|
||||||
|
pm2 start bash --name "daily-db-backup" --cron "0 0 * * *" -- backup-database.bash
|
||||||
@@ -4,38 +4,37 @@ import svelte from "@astrojs/svelte";
|
|||||||
import tailwind from "@astrojs/tailwind";
|
import tailwind from "@astrojs/tailwind";
|
||||||
import node from "@astrojs/node";
|
import node from "@astrojs/node";
|
||||||
import mdx from "@astrojs/mdx";
|
import mdx from "@astrojs/mdx";
|
||||||
import dsv from "@rollup/plugin-dsv"
|
|
||||||
import astroTypesafeAPI from "astro-typesafe-api"
|
import astroTypesafeAPI from "astro-typesafe-api"
|
||||||
|
|
||||||
import { fileURLToPath } from "url";
|
|
||||||
|
|
||||||
// https://astro.build/config
|
// https://astro.build/config
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
integrations: [svelte(), tailwind(), mdx(), astroTypesafeAPI()],
|
integrations: [svelte(), tailwind(), mdx(), astroTypesafeAPI()],
|
||||||
outDir: "./dist",
|
outDir: "./dist",
|
||||||
output: "server",
|
output: "server",
|
||||||
vite: {
|
|
||||||
optimizeDeps: {
|
|
||||||
exclude: ["@ibcornelsen/api", "@ibcornelsen/database"]
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
"#": fileURLToPath(new URL("./src", import.meta.url))
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ssr: {
|
|
||||||
noExternal: ["@pdfme/generator", "@pdfme/common", "@pdfme/schemas"]
|
|
||||||
},
|
|
||||||
build: {
|
|
||||||
commonjsOptions: {
|
|
||||||
transformMixedEsModules: false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
plugins: [dsv()]
|
|
||||||
},
|
|
||||||
adapter: node({
|
adapter: node({
|
||||||
mode: "middleware"
|
mode: "middleware",
|
||||||
}),
|
}),
|
||||||
|
vite: {
|
||||||
|
server: {
|
||||||
|
allowedHosts: ["ibcornelsen.de", "online-energieausweis.org"]
|
||||||
|
},
|
||||||
|
optimizeDeps: {
|
||||||
|
exclude: ["bun"]
|
||||||
|
},
|
||||||
|
build: {
|
||||||
|
rollupOptions: {
|
||||||
|
external: ["bun", "stream", "node:stream", "http", "node:http", "https", "http2", "path", "os", "crypto", "fs", "url", "util", "child_process"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ssr: {
|
||||||
|
external: ["@prisma/client", "bun", "stream"],
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
".prisma/client/index-browser": "./node_modules/.prisma/client/index-browser.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
server: {
|
server: {
|
||||||
port: 3000
|
port: 3000
|
||||||
},
|
},
|
||||||
|
|||||||
28
backup-database.bash
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
FILE_NAME=data-dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql.br
|
||||||
|
FILE_NAME_COMPLETE=full-dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql.br
|
||||||
|
|
||||||
|
# Das wird benötigt für AWS Ionos Kompatibilität.
|
||||||
|
export AWS_REQUEST_CHECKSUM_CALCULATION=when_required
|
||||||
|
export AWS_RESPONSE_CHECKSUM_VALIDATION=when_required
|
||||||
|
|
||||||
|
# Wir exportieren die Datenbank und komprimieren sie.
|
||||||
|
# IMPORTANT: Dieser Befehl benötigt das `ionos` Profil, sonst wird er nicht funktionieren.
|
||||||
|
# Das Profil kann mit `aws configure --profile ionos` erstellt werden.
|
||||||
|
# Den Key dafür findet man auf https://dcd.ionos.com/latest/?lang=en#/key-management
|
||||||
|
docker exec -t online-energieausweis-database-1 pg_dump --data-only -U main main | brotli --best > $FILE_NAME
|
||||||
|
|
||||||
|
aws s3 cp $FILE_NAME s3://ibc-db-backup/ --profile ionos --endpoint-url https://s3-eu-central-1.ionoscloud.com --storage-class STANDARD
|
||||||
|
|
||||||
|
echo "Uploaded $FILE_NAME"
|
||||||
|
|
||||||
|
docker exec -t online-energieausweis-database-1 pg_dumpall -c -U main | brotli --best > $FILE_NAME_COMPLETE
|
||||||
|
|
||||||
|
aws s3 cp $FILE_NAME_COMPLETE s3://ibc-db-backup/ --profile ionos --endpoint-url https://s3-eu-central-1.ionoscloud.com --storage-class STANDARD
|
||||||
|
|
||||||
|
echo "Uploaded $FILE_NAME_COMPLETE"
|
||||||
|
|
||||||
|
# Wir entfernen das Backup
|
||||||
|
rm $FILE_NAME
|
||||||
|
rm $FILE_NAME_COMPLETE
|
||||||
71474
backup/postleitzahlen.json
Normal file
6
build.sh
@@ -39,11 +39,11 @@ bun link @ibcornelsen/database
|
|||||||
PERSISTENT_DIR="${HOME}/persistent/${APP_NAME}";
|
PERSISTENT_DIR="${HOME}/persistent/${APP_NAME}";
|
||||||
mkdir -p $PERSISTENT_DIR;
|
mkdir -p $PERSISTENT_DIR;
|
||||||
|
|
||||||
# TODO: Wir legen hier die .env Datei an, die die SSL Zertifikate enthält.
|
# Wir legen hier die .env Datei an, die die SSL Zertifikate enthält.
|
||||||
rm -f ~/$APP_NAME/.env;
|
rm -f ~/$APP_NAME/.env;
|
||||||
touch ~/$APP_NAME/.env;
|
touch ~/$APP_NAME/.env;
|
||||||
echo "PRIVATE_KEY=$(cat /etc/letsencrypt/live/ibcornelsen.de/privkey.pem | base64 | tr -d '\n')" >> ~/$APP_NAME/.env;
|
echo "PRIVATE_KEY=$(cat /etc/letsencrypt/live/online-energieausweis.org/privkey.pem | base64 | tr -d '\n')" >> ~/$APP_NAME/.env;
|
||||||
echo "CERTIFICATE=$(cat /etc/letsencrypt/live/ibcornelsen.de/fullchain.pem | base64 | tr -d '\n')" >> ~/$APP_NAME/.env;
|
echo "CERTIFICATE=$(cat /etc/letsencrypt/live/online-energieausweis.org/fullchain.pem | base64 | tr -d '\n')" >> ~/$APP_NAME/.env;
|
||||||
|
|
||||||
# Wir müssen sichergehen, dass der Database Container läuft, sonst können wir ihn nicht linken.
|
# Wir müssen sichergehen, dass der Database Container läuft, sonst können wir ihn nicht linken.
|
||||||
if [ ! $((docker ps | grep $DB_CONTAINER_NAME) | wc -l) -gt 0 ]; then
|
if [ ! $((docker ps | grep $DB_CONTAINER_NAME) | wc -l) -gt 0 ]; then
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { defineConfig } from "cypress";
|
import { defineConfig } from "cypress";
|
||||||
import dsv from "@rollup/plugin-dsv"
|
import dsv from "@rollup/plugin-dsv"
|
||||||
|
import { prisma } from "./src/lib/server/prisma"
|
||||||
import { fileURLToPath } from "url";
|
import { fileURLToPath } from "url";
|
||||||
import vitePreprocessor from "cypress-vite";
|
import vitePreprocessor from "cypress-vite";
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@ export default defineConfig({
|
|||||||
baseUrl: "http://localhost:3000",
|
baseUrl: "http://localhost:3000",
|
||||||
viewportHeight: 900,
|
viewportHeight: 900,
|
||||||
viewportWidth: 1660,
|
viewportWidth: 1660,
|
||||||
supportFile: false,
|
supportFile: fileURLToPath(new URL("./src/cypress/support/commands.ts", import.meta.url)),
|
||||||
specPattern: "./src/cypress/e2e/**/*.{ts,js}",
|
specPattern: "./src/cypress/e2e/**/*.{ts,js}",
|
||||||
setupNodeEvents(on, config) {
|
setupNodeEvents(on, config) {
|
||||||
on("file:preprocessor", vitePreprocessor({
|
on("file:preprocessor", vitePreprocessor({
|
||||||
@@ -18,6 +18,7 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
|
".prisma/client/index-browser": fileURLToPath(new URL("./node_modules/.prisma/client/index-browser.js", import.meta.url)),
|
||||||
"#": fileURLToPath(new URL("./src", import.meta.url)),
|
"#": fileURLToPath(new URL("./src", import.meta.url)),
|
||||||
"#components": fileURLToPath(new URL("./src/components", import.meta.url)),
|
"#components": fileURLToPath(new URL("./src/components", import.meta.url)),
|
||||||
"#lib": fileURLToPath(new URL("./src/lib", import.meta.url))
|
"#lib": fileURLToPath(new URL("./src/lib", import.meta.url))
|
||||||
@@ -31,6 +32,19 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
plugins: [dsv()]
|
plugins: [dsv()]
|
||||||
}))
|
}))
|
||||||
|
on("task", {
|
||||||
|
async verbrauchsausweisWohnen(query) {
|
||||||
|
return await prisma.verbrauchsausweisWohnen.findFirst(query)
|
||||||
|
},
|
||||||
|
async plz() {
|
||||||
|
const total = await prisma.postleitzahlen.count()
|
||||||
|
const result = await prisma.postleitzahlen.findFirst({
|
||||||
|
skip: Math.floor(Math.random() * total)
|
||||||
|
})
|
||||||
|
|
||||||
|
return result?.plz
|
||||||
|
}
|
||||||
|
})
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
component: {
|
component: {
|
||||||
|
|||||||
@@ -1,26 +1,8 @@
|
|||||||
version: '3'
|
version: '3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
ibcornelsen-online-energieausweis:
|
|
||||||
build: ./
|
|
||||||
command: bun run dev --host
|
|
||||||
environment:
|
|
||||||
PORT: 3000
|
|
||||||
NODE_ENV: "development"
|
|
||||||
ports:
|
|
||||||
- "3000:3000"
|
|
||||||
volumes:
|
|
||||||
- ./:/online-energieausweis
|
|
||||||
- ./node_modules/@ibcornelsen/ui:/online-energieausweis/node_modules/@ibcornelsen/ui
|
|
||||||
- ./node_modules/@ibcornelsen/database:/online-energieausweis/node_modules/@ibcornelsen/database
|
|
||||||
# - ./node_modules/@ibcornelsen/api:/online-energieausweis/node_modules/@ibcornelsen/api
|
|
||||||
- ./node_modules/radix-svelte-icons:/online-energieausweis/node_modules/radix-svelte-icons
|
|
||||||
- ../api/persistent:/persistent
|
|
||||||
ibcornelsen-api:
|
|
||||||
extends:
|
|
||||||
file: ../api/docker-compose.yml
|
|
||||||
service: ibcornelsen-api
|
|
||||||
database:
|
database:
|
||||||
extends:
|
build: ./
|
||||||
file: ../database/docker-compose.yml
|
env_file:
|
||||||
service: database
|
- .env
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
15
install.sh
@@ -1,15 +0,0 @@
|
|||||||
git clone https://github.com/IBCornelsen/online-energieausweis
|
|
||||||
git clone https://github.com/IBCornelsen/database
|
|
||||||
git clone https://github.com/IBCornelsen/api
|
|
||||||
|
|
||||||
cd ./database
|
|
||||||
bun link
|
|
||||||
bun install
|
|
||||||
|
|
||||||
cd ../api
|
|
||||||
bun link
|
|
||||||
bun install
|
|
||||||
|
|
||||||
cd ../online-energieausweis
|
|
||||||
bun link
|
|
||||||
bun install
|
|
||||||
34
package.json
@@ -22,7 +22,8 @@
|
|||||||
"@astrojs/node": "^8.3.4",
|
"@astrojs/node": "^8.3.4",
|
||||||
"@astrojs/svelte": "^2.2.0",
|
"@astrojs/svelte": "^2.2.0",
|
||||||
"@astrojs/tailwind": "^3.1.3",
|
"@astrojs/tailwind": "^3.1.3",
|
||||||
"@ibcornelsen/database": "link:@ibcornelsen/database",
|
"@aws-sdk/client-s3": "^3.758.0",
|
||||||
|
"@highlight-run/node": "^3.12.0",
|
||||||
"@ibcornelsen/ui": "^0.0.2",
|
"@ibcornelsen/ui": "^0.0.2",
|
||||||
"@mollie/api-client": "^4.1.0",
|
"@mollie/api-client": "^4.1.0",
|
||||||
"@pdfme/common": "^5.2.16",
|
"@pdfme/common": "^5.2.16",
|
||||||
@@ -31,26 +32,34 @@
|
|||||||
"@trpc/client": "^10.45.2",
|
"@trpc/client": "^10.45.2",
|
||||||
"@trpc/server": "^10.45.2",
|
"@trpc/server": "^10.45.2",
|
||||||
"astro": "^4.16.17",
|
"astro": "^4.16.17",
|
||||||
"astro-typesafe-api": "^0.2.1",
|
"astro-typesafe-api": "^0.2.4",
|
||||||
"body-scroll-lock": "^4.0.0-beta.0",
|
"body-scroll-lock": "^4.0.0-beta.0",
|
||||||
"buffer": "^6.0.3",
|
"buffer": "^6.0.3",
|
||||||
"bun": "^1.1.45",
|
"bun": "^1.2.5",
|
||||||
"csvtojson": "^2.0.10",
|
"csvtojson": "^2.0.10",
|
||||||
"express": "^4.21.2",
|
"express": "^4.21.2",
|
||||||
"flag-icons": "^6.15.0",
|
"flag-icons": "^6.15.0",
|
||||||
"fontkit": "^2.0.4",
|
"fontkit": "^2.0.4",
|
||||||
|
"highlight.run": "^9.14.0",
|
||||||
"is-base64": "^1.1.0",
|
"is-base64": "^1.1.0",
|
||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
"js-interpolate": "^1.3.2",
|
"js-interpolate": "^1.3.2",
|
||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"jwt-decode": "^4.0.0",
|
"jwt-decode": "^4.0.0",
|
||||||
|
"mime": "^4.0.6",
|
||||||
"moment": "^2.30.1",
|
"moment": "^2.30.1",
|
||||||
"moment-timezone": "^0.5.46",
|
"moment-timezone": "^0.5.46",
|
||||||
"nodemailer": "^6.10.0",
|
"nodemailer": "^6.10.0",
|
||||||
"pdf-lib": "^1.17.1",
|
"pdf-lib": "^1.17.1",
|
||||||
"postcss-nested": "^7.0.2",
|
"postcss-nested": "^7.0.2",
|
||||||
|
"puppeteer": "^24.7.2",
|
||||||
"radix-svelte-icons": "^1.0.0",
|
"radix-svelte-icons": "^1.0.0",
|
||||||
"sass": "^1.83.4",
|
"sass": "^1.83.4",
|
||||||
|
"sharp": "^0.33.5",
|
||||||
|
"siema": "^1.5.1",
|
||||||
|
"soap": "^1.1.8",
|
||||||
|
"sqids": "^0.3.0",
|
||||||
|
"ssh2-sftp-client": "^12.0.0",
|
||||||
"svelte": "^3.59.2",
|
"svelte": "^3.59.2",
|
||||||
"svelte-dialogs": "^1.2.2",
|
"svelte-dialogs": "^1.2.2",
|
||||||
"svelte-preprocess": "^5.1.4",
|
"svelte-preprocess": "^5.1.4",
|
||||||
@@ -58,6 +67,7 @@
|
|||||||
"tailwindcss": "^3.4.17",
|
"tailwindcss": "^3.4.17",
|
||||||
"trpc-openapi": "^1.2.0",
|
"trpc-openapi": "^1.2.0",
|
||||||
"uuid": "^9.0.1",
|
"uuid": "^9.0.1",
|
||||||
|
"winston": "^3.17.0",
|
||||||
"zod": "^3.24.1"
|
"zod": "^3.24.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -65,12 +75,16 @@
|
|||||||
"@rollup/plugin-dsv": "^3.0.5",
|
"@rollup/plugin-dsv": "^3.0.5",
|
||||||
"@tailwindcss/typography": "^0.5.16",
|
"@tailwindcss/typography": "^0.5.16",
|
||||||
"@types/body-scroll-lock": "^3.1.2",
|
"@types/body-scroll-lock": "^3.1.2",
|
||||||
|
"@types/bun": "^1.2.2",
|
||||||
"@types/express": "^5.0.0",
|
"@types/express": "^5.0.0",
|
||||||
"@types/fontkit": "^2.0.7",
|
"@types/fontkit": "^2.0.7",
|
||||||
"@types/is-base64": "^1.1.3",
|
"@types/is-base64": "^1.1.3",
|
||||||
"@types/js-cookie": "^3.0.6",
|
"@types/js-cookie": "^3.0.6",
|
||||||
"@types/jsonwebtoken": "^9.0.7",
|
"@types/jsonwebtoken": "^9.0.7",
|
||||||
"@types/nodemailer": "^6.4.17",
|
"@types/nodemailer": "^6.4.17",
|
||||||
|
"@types/papaparse": "^5.3.15",
|
||||||
|
"@types/siema": "^1.4.11",
|
||||||
|
"@types/ssh2-sftp-client": "^9.0.4",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^9.0.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
||||||
"@typescript-eslint/parser": "^5.62.0",
|
"@typescript-eslint/parser": "^5.62.0",
|
||||||
@@ -79,16 +93,22 @@
|
|||||||
"cypress": "^13.17.0",
|
"cypress": "^13.17.0",
|
||||||
"cypress-file-upload": "^5.0.8",
|
"cypress-file-upload": "^5.0.8",
|
||||||
"cypress-vite": "^1.6.0",
|
"cypress-vite": "^1.6.0",
|
||||||
"daisyui": "^4.12.23",
|
|
||||||
"eslint": "~8.15.0",
|
"eslint": "~8.15.0",
|
||||||
"eslint-config-prettier": "8.1.0",
|
"eslint-config-prettier": "8.1.0",
|
||||||
|
"papaparse": "^5.5.2",
|
||||||
"postcss": "^8.5.1",
|
"postcss": "^8.5.1",
|
||||||
"postcss-import": "^16.1.0",
|
"postcss-import": "^16.1.0",
|
||||||
"postcss-nesting": "^13.0.1",
|
"postcss-nesting": "^13.0.1",
|
||||||
"prettier": "^2.8.8",
|
"prettier": "^2.8.8",
|
||||||
"typescript": "^4.9.5"
|
"prisma": "6.4.1",
|
||||||
|
"prisma-dbml-generator": "^0.12.0",
|
||||||
|
"prisma-generator-fake-data": "^0.14.3",
|
||||||
|
"tsx": "^4.19.3",
|
||||||
|
"typescript": "^5.8.3",
|
||||||
|
"zod-prisma": "^0.5.4"
|
||||||
},
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"zod": "^3.24.1"
|
"zod": "^3.24.1"
|
||||||
}
|
},
|
||||||
}
|
"module": "index.ts"
|
||||||
|
}
|
||||||
BIN
persistent/images/haken.png
Normal file
|
After Width: | Height: | Size: 256 B |
BIN
persistent/images/img-00114710-09d3-4a60-a7e1-44e651b1e4df.webp
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
persistent/images/img-00a51279-518a-4c93-a7ac-08daffca4fc6.jpg
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
persistent/images/img-53cc77f5-940f-4fcb-b21c-fb46e1d6aaaf.webp
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
persistent/images/img-6475bf75-b46d-4359-bd17-79c4e3593b59.webp
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
persistent/images/img-694ca166-c339-44df-9240-0bb642291459.webp
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
persistent/images/img-741ae0ba-9f33-4eb5-adfc-391e29dcdbdc.jpg
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
persistent/images/img-74790f80-8087-40b2-937e-e05b757672c5.webp
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
persistent/images/img-85f8a7cd-7351-408f-8576-6d7b9d0ac82b.webp
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
persistent/images/img-a4e04cf7-9443-4462-9582-3c18b33ef711.webp
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
persistent/images/img-a50b7f82-0add-4e3a-bb42-3f9b2e49936a.webp
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
persistent/images/img-af39ffd3-389b-43a4-9afb-5e82020dc5b0.webp
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
persistent/images/img-bc4f9c3e-b74c-450b-9109-6de7d6023521.webp
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
persistent/images/img-e7269e2e-de35-491a-b24e-76bde9d88ac0.webp
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
persistent/unterlagen/pln-7628272a-1a70-44fb-8c00-a6b5125153c4
Normal file
BIN
persistent/unterlagen/pln-9412f6f9-16b2-4c96-a612-d0b788b73df7
Normal file
BIN
persistent/unterlagen/pln-bc44e0e7-14e5-4112-b113-59f172c387a6
Normal file
BIN
persistent/unterlagen/pln-be301689-303e-4f78-b0f2-08cda642e8cf
Normal file
BIN
persistent/unterlagen/pln-c86f7c42-55cd-4448-9830-4c41ce7b3815
Normal file
856
prisma/migrations/20250407184656_id/migration.sql
Normal file
@@ -0,0 +1,856 @@
|
|||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "Heizungsstatus" AS ENUM ('BEHEIZT', 'UNBEHEIZT', 'NICHT_VORHANDEN');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "Lueftungskonzept" AS ENUM ('Fensterlueftung', 'Schachtlueftung', 'LueftungsanlageMitWaermerueckgewinnung', 'LueftungsanlageOhneWaermerueckgewinnung');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "BenutzerRolle" AS ENUM ('USER', 'ADMIN');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "BilderKategorie" AS ENUM ('Heizung', 'Fenster', 'Gebaeude', 'Daemmung', 'AnlagenTechnik');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "Einpreisungsstatus" AS ENUM ('open', 'canceled', 'pending', 'expired');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "Bezahlmethoden" AS ENUM ('paypal', 'giropay', 'sofort', 'creditcard', 'rechnung');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "Rechnungsstatus" AS ENUM ('open', 'canceled', 'pending', 'authorized', 'expired', 'failed', 'paid');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "AusweisTyp" AS ENUM ('Standard', 'standardXL', 'Beratung', 'BeratungXL', 'Offline', 'OfflineXL');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "TicketStatus" AS ENUM ('OFFEN', 'IN_BEARBEITUNG', 'IN_WARTESCHLEIFE', 'GESCHLOSSEN', 'GELOEST');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "UnterlagenKategorie" AS ENUM ('Grundriss', 'Sonstiges');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "Ausstellgrund" AS ENUM ('Neubau', 'Vermietung', 'Verkauf', 'Modernisierung', 'Sonstiges');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "Ausweisart" AS ENUM ('VerbrauchsausweisWohnen', 'VerbrauchsausweisGewerbe', 'BedarfsausweisWohnen', 'BedarfsausweisGewerbe', 'GEGNachweisWohnen', 'GEGNachweisGewerbe');
|
||||||
|
|
||||||
|
-- CreateEnum
|
||||||
|
CREATE TYPE "Service" AS ENUM ('Telefonberatung', 'Aushang', 'Qualitaetsdruck', 'SameDay');
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Anteilshaber" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"rolle" VARCHAR,
|
||||||
|
"privilegien" BIGINT,
|
||||||
|
"benutzer_id" TEXT NOT NULL,
|
||||||
|
"objekt_id" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Anteilshaber_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "ApiRequests" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"date" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"ip" VARCHAR(50) NOT NULL,
|
||||||
|
"method" VARCHAR(10) NOT NULL,
|
||||||
|
"path" VARCHAR(100) NOT NULL,
|
||||||
|
"status" INTEGER NOT NULL,
|
||||||
|
"responseTime" DOUBLE PRECISION NOT NULL,
|
||||||
|
"responseSize" INTEGER NOT NULL,
|
||||||
|
"userAgent" VARCHAR(500) NOT NULL,
|
||||||
|
"user_id" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "ApiRequests_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Aufnahme" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"benutzer_id" TEXT,
|
||||||
|
"gebaeudetyp" VARCHAR,
|
||||||
|
"gebaeudeteil" VARCHAR,
|
||||||
|
"baujahr_gebaeude" INTEGER[],
|
||||||
|
"baujahr_heizung" INTEGER[],
|
||||||
|
"baujahr_klima" INTEGER[],
|
||||||
|
"einheiten" INTEGER,
|
||||||
|
"flaeche" INTEGER,
|
||||||
|
"nutzflaeche" INTEGER,
|
||||||
|
"saniert" BOOLEAN,
|
||||||
|
"keller" "Heizungsstatus",
|
||||||
|
"dachgeschoss" "Heizungsstatus",
|
||||||
|
"lueftung" "Lueftungskonzept",
|
||||||
|
"kuehlung" VARCHAR(50),
|
||||||
|
"leerstand" INTEGER,
|
||||||
|
"alternative_heizung" BOOLEAN,
|
||||||
|
"alternative_warmwasser" BOOLEAN,
|
||||||
|
"alternative_lueftung" BOOLEAN,
|
||||||
|
"alternative_kuehlung" BOOLEAN,
|
||||||
|
"erstellungsdatum" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"zentralheizung" BOOLEAN,
|
||||||
|
"solarsystem_warmwasser" BOOLEAN,
|
||||||
|
"warmwasser_rohre_gedaemmt" BOOLEAN,
|
||||||
|
"niedertemperatur_kessel" BOOLEAN,
|
||||||
|
"brennwert_kessel" BOOLEAN,
|
||||||
|
"heizungsrohre_gedaemmt" BOOLEAN,
|
||||||
|
"standard_kessel" BOOLEAN,
|
||||||
|
"waermepumpe" BOOLEAN,
|
||||||
|
"raum_temperatur_regler" BOOLEAN,
|
||||||
|
"photovoltaik" BOOLEAN,
|
||||||
|
"durchlauf_erhitzer" BOOLEAN,
|
||||||
|
"einzelofen" BOOLEAN,
|
||||||
|
"zirkulation" BOOLEAN,
|
||||||
|
"einfach_verglasung" BOOLEAN,
|
||||||
|
"dreifach_verglasung" BOOLEAN,
|
||||||
|
"fenster_teilweise_undicht" BOOLEAN,
|
||||||
|
"doppel_verglasung" BOOLEAN,
|
||||||
|
"fenster_dicht" BOOLEAN,
|
||||||
|
"rolllaeden_kaesten_gedaemmt" BOOLEAN,
|
||||||
|
"isolier_verglasung" BOOLEAN,
|
||||||
|
"tueren_undicht" BOOLEAN,
|
||||||
|
"tueren_dicht" BOOLEAN,
|
||||||
|
"dachgeschoss_gedaemmt" BOOLEAN,
|
||||||
|
"keller_decke_gedaemmt" BOOLEAN,
|
||||||
|
"keller_wand_gedaemmt" BOOLEAN,
|
||||||
|
"aussenwand_gedaemmt" BOOLEAN,
|
||||||
|
"oberste_geschossdecke_gedaemmt" BOOLEAN,
|
||||||
|
"aussenwand_min_12cm_gedaemmt" BOOLEAN,
|
||||||
|
"dachgeschoss_min_12cm_gedaemmt" BOOLEAN,
|
||||||
|
"oberste_geschossdecke_min_12cm_gedaemmt" BOOLEAN,
|
||||||
|
"objekt_id" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Aufnahme_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "BedarfsausweisGewerbe" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"ausstellgrund" "Ausstellgrund",
|
||||||
|
"keller_beheizt" BOOLEAN,
|
||||||
|
"storniert" BOOLEAN DEFAULT false,
|
||||||
|
"bestellt" BOOLEAN DEFAULT false,
|
||||||
|
"zurueckgestellt" BOOLEAN DEFAULT false,
|
||||||
|
"abluftanlage" BOOLEAN DEFAULT false,
|
||||||
|
"zu_abluftanlage" BOOLEAN DEFAULT false,
|
||||||
|
"konditionierung_der_zuluft" BOOLEAN DEFAULT false,
|
||||||
|
"luftheizung" BOOLEAN DEFAULT false,
|
||||||
|
"hallenheizung" BOOLEAN DEFAULT false,
|
||||||
|
"dunkelstrahler" BOOLEAN DEFAULT false,
|
||||||
|
"direktheizung" BOOLEAN DEFAULT false,
|
||||||
|
"infrarotstrahler" BOOLEAN DEFAULT false,
|
||||||
|
"fussbodenheizung" BOOLEAN DEFAULT false,
|
||||||
|
"bauteilaktivierung" BOOLEAN DEFAULT false,
|
||||||
|
"klimatisierung" BOOLEAN DEFAULT false,
|
||||||
|
"nachweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard',
|
||||||
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||||
|
"benutzer_id" TEXT,
|
||||||
|
"aufnahme_id" TEXT NOT NULL,
|
||||||
|
"rechnung_id" TEXT,
|
||||||
|
"geg_einpreisung_id" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "BedarfsausweisGewerbe_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "BedarfsausweisWohnen" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"alte_ausweis_id" INTEGER,
|
||||||
|
"benutzer_id" TEXT,
|
||||||
|
"ausstellgrund" "Ausstellgrund",
|
||||||
|
"registriernummer" VARCHAR,
|
||||||
|
"alternative_heizung" BOOLEAN,
|
||||||
|
"alternative_warmwasser" BOOLEAN,
|
||||||
|
"alternative_lueftung" BOOLEAN,
|
||||||
|
"alternative_kuehlung" BOOLEAN,
|
||||||
|
"energieeffizienzklasse" VARCHAR(5),
|
||||||
|
"ausstellungsdatum" TIMESTAMP(3),
|
||||||
|
"boxpruefung" BOOLEAN DEFAULT false,
|
||||||
|
"anzahl_vollgeschosse" INTEGER,
|
||||||
|
"geschosshoehe" DOUBLE PRECISION,
|
||||||
|
"anzahl_gauben" INTEGER,
|
||||||
|
"breite_gauben" DOUBLE PRECISION,
|
||||||
|
"masse_a" DOUBLE PRECISION,
|
||||||
|
"masse_b" DOUBLE PRECISION,
|
||||||
|
"masse_c" DOUBLE PRECISION,
|
||||||
|
"masse_d" DOUBLE PRECISION,
|
||||||
|
"masse_e" DOUBLE PRECISION,
|
||||||
|
"masse_f" DOUBLE PRECISION,
|
||||||
|
"fensterflaeche_so_sw" DOUBLE PRECISION,
|
||||||
|
"fensterflaeche_nw_no" DOUBLE PRECISION,
|
||||||
|
"aussenwandflaeche_unbeheizt" DOUBLE PRECISION,
|
||||||
|
"dachflaeche" DOUBLE PRECISION,
|
||||||
|
"deckenflaeche" DOUBLE PRECISION,
|
||||||
|
"dach_u_wert" DOUBLE PRECISION,
|
||||||
|
"decke_u_wert" DOUBLE PRECISION,
|
||||||
|
"aussenwand_flaeche" DOUBLE PRECISION,
|
||||||
|
"aussenwand_u_wert" DOUBLE PRECISION,
|
||||||
|
"fussboden_flaeche" DOUBLE PRECISION,
|
||||||
|
"fussboden_u_wert" DOUBLE PRECISION,
|
||||||
|
"volumen" DOUBLE PRECISION,
|
||||||
|
"dicht" BOOLEAN,
|
||||||
|
"fenster_flaeche_1" DOUBLE PRECISION,
|
||||||
|
"fenster_art_1" DOUBLE PRECISION,
|
||||||
|
"fenster_flaeche_2" DOUBLE PRECISION,
|
||||||
|
"fenster_art_2" DOUBLE PRECISION,
|
||||||
|
"dachfenster_flaeche" DOUBLE PRECISION,
|
||||||
|
"dachfenster_art" DOUBLE PRECISION,
|
||||||
|
"haustuer_flaeche" DOUBLE PRECISION,
|
||||||
|
"haustuer_art" DOUBLE PRECISION,
|
||||||
|
"dach_bauart" VARCHAR,
|
||||||
|
"decke_bauart" VARCHAR,
|
||||||
|
"dach_daemmung" DOUBLE PRECISION,
|
||||||
|
"decke_daemmung" DOUBLE PRECISION,
|
||||||
|
"aussenwand_daemmung" DOUBLE PRECISION,
|
||||||
|
"boden_daemmung" DOUBLE PRECISION,
|
||||||
|
"aussenwand_bauart" VARCHAR,
|
||||||
|
"boden_bauart" VARCHAR,
|
||||||
|
"warmwasser_verteilung" VARCHAR,
|
||||||
|
"warmwasser_speicherung" VARCHAR,
|
||||||
|
"warmwasser_erzeugung" VARCHAR,
|
||||||
|
"heizung_zentral" BOOLEAN,
|
||||||
|
"heizung_verteilung" VARCHAR,
|
||||||
|
"heizung_speicherung" VARCHAR,
|
||||||
|
"waerme_erzeugung_heizung" VARCHAR,
|
||||||
|
"anteil_zusatzheizung" DOUBLE PRECISION,
|
||||||
|
"kollektor_flaeche" DOUBLE PRECISION,
|
||||||
|
"ausgestellt" BOOLEAN DEFAULT false,
|
||||||
|
"storniert" BOOLEAN DEFAULT false,
|
||||||
|
"bestellt" BOOLEAN DEFAULT false,
|
||||||
|
"zurueckgestellt" BOOLEAN DEFAULT false,
|
||||||
|
"prueftext" VARCHAR(1000),
|
||||||
|
"beschreibung" TEXT,
|
||||||
|
"kontrolldatei_angefragt" BOOLEAN DEFAULT false,
|
||||||
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||||
|
"pruefpunkt_heizungsalter" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_niedrig" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_hoch" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_null" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_abweichung" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_wohnflaeche_einheiten" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_strom_null" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_strom_abweichung" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_plz" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_heizungsanlage" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_anteil_warmwasser" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_wohnflaeche" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_geometrie" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_fenster" BOOLEAN DEFAULT false,
|
||||||
|
"ausweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard',
|
||||||
|
"rechnung_id" TEXT,
|
||||||
|
"aufnahme_id" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "BedarfsausweisWohnen_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "benutzer" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"alte_id" INTEGER,
|
||||||
|
"name" VARCHAR(100),
|
||||||
|
"vorname" VARCHAR(50),
|
||||||
|
"email" VARCHAR(255) NOT NULL,
|
||||||
|
"passwort" VARCHAR(255) NOT NULL,
|
||||||
|
"profilbild" VARCHAR,
|
||||||
|
"plz" VARCHAR(5),
|
||||||
|
"ort" VARCHAR(50),
|
||||||
|
"adresse" VARCHAR(150),
|
||||||
|
"telefon" VARCHAR(50),
|
||||||
|
"anrede" VARCHAR(50),
|
||||||
|
"rolle" "BenutzerRolle" NOT NULL DEFAULT 'USER',
|
||||||
|
"firma" TEXT,
|
||||||
|
"lex_office_id" TEXT,
|
||||||
|
"verified" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
|
||||||
|
CONSTRAINT "benutzer_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Bild" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"kategorie" "BilderKategorie" NOT NULL,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"aufnahme_id" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "Bild_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Event" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"date" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"title" VARCHAR(255) NOT NULL,
|
||||||
|
"description" TEXT,
|
||||||
|
"aufnahme_id" TEXT NOT NULL,
|
||||||
|
"benutzer_id" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "Event_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "GEGEinpreisung" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"empfaenger" VARCHAR,
|
||||||
|
"strasse" VARCHAR,
|
||||||
|
"plz" VARCHAR,
|
||||||
|
"ort" VARCHAR,
|
||||||
|
"zusatzzeile" VARCHAR,
|
||||||
|
"telefon" VARCHAR,
|
||||||
|
"email" VARCHAR,
|
||||||
|
"abweichende_versand_adresse" BOOLEAN DEFAULT false,
|
||||||
|
"versand_empfaenger" VARCHAR,
|
||||||
|
"versand_strasse" VARCHAR,
|
||||||
|
"versand_plz" VARCHAR,
|
||||||
|
"versand_ort" VARCHAR,
|
||||||
|
"versand_zusatzzeile" VARCHAR,
|
||||||
|
"status" "Einpreisungsstatus" NOT NULL,
|
||||||
|
"benutzer_id" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "GEGEinpreisung_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "GEGNachweisGewerbe" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"ausstellgrund" "Ausstellgrund",
|
||||||
|
"keller_beheizt" BOOLEAN,
|
||||||
|
"storniert" BOOLEAN DEFAULT false,
|
||||||
|
"bestellt" BOOLEAN DEFAULT false,
|
||||||
|
"zurueckgestellt" BOOLEAN DEFAULT false,
|
||||||
|
"beschreibung" TEXT,
|
||||||
|
"nachweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard',
|
||||||
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||||
|
"benutzer_id" TEXT,
|
||||||
|
"aufnahme_id" TEXT NOT NULL,
|
||||||
|
"rechnung_id" TEXT,
|
||||||
|
"geg_einpreisung_id" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "GEGNachweisGewerbe_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "GEGNachweisWohnen" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"ausstellgrund" "Ausstellgrund",
|
||||||
|
"keller_beheizt" BOOLEAN,
|
||||||
|
"storniert" BOOLEAN DEFAULT false,
|
||||||
|
"bestellt" BOOLEAN DEFAULT false,
|
||||||
|
"zurueckgestellt" BOOLEAN DEFAULT false,
|
||||||
|
"beschreibung" TEXT,
|
||||||
|
"nachweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard',
|
||||||
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||||
|
"benutzer_id" TEXT,
|
||||||
|
"aufnahme_id" TEXT NOT NULL,
|
||||||
|
"rechnung_id" TEXT,
|
||||||
|
"geg_einpreisung_id" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "GEGNachweisWohnen_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Klimafaktoren" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"plz" VARCHAR(5) NOT NULL,
|
||||||
|
"month" INTEGER NOT NULL,
|
||||||
|
"year" INTEGER NOT NULL,
|
||||||
|
"klimafaktor" DOUBLE PRECISION NOT NULL DEFAULT 1,
|
||||||
|
|
||||||
|
CONSTRAINT "Klimafaktoren_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Objekt" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"latitude" DOUBLE PRECISION,
|
||||||
|
"longitude" DOUBLE PRECISION,
|
||||||
|
"plz" VARCHAR(5),
|
||||||
|
"ort" VARCHAR(50),
|
||||||
|
"adresse" VARCHAR(100),
|
||||||
|
"erstellungsdatum" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"benutzer_id" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "Objekt_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Postleitzahlen" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"plz" VARCHAR(5) NOT NULL,
|
||||||
|
"stadt" VARCHAR(100) NOT NULL,
|
||||||
|
"bundesland" VARCHAR(100) NOT NULL,
|
||||||
|
"landkreis" VARCHAR(100) NOT NULL,
|
||||||
|
"lat" DOUBLE PRECISION NOT NULL,
|
||||||
|
"lon" DOUBLE PRECISION NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Postleitzahlen_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Rechnung" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"alte_id" INTEGER,
|
||||||
|
"empfaenger" VARCHAR,
|
||||||
|
"strasse" VARCHAR,
|
||||||
|
"plz" VARCHAR,
|
||||||
|
"ort" VARCHAR,
|
||||||
|
"zusatzzeile" VARCHAR,
|
||||||
|
"telefon" VARCHAR,
|
||||||
|
"email" VARCHAR,
|
||||||
|
"abweichende_versand_adresse" BOOLEAN DEFAULT false,
|
||||||
|
"versand_empfaenger" VARCHAR,
|
||||||
|
"versand_strasse" VARCHAR,
|
||||||
|
"versand_plz" VARCHAR,
|
||||||
|
"versand_ort" VARCHAR,
|
||||||
|
"versand_zusatzzeile" VARCHAR,
|
||||||
|
"bezahlmethode" "Bezahlmethoden" NOT NULL,
|
||||||
|
"status" "Rechnungsstatus" NOT NULL,
|
||||||
|
"services" "Service"[],
|
||||||
|
"betrag" DOUBLE PRECISION NOT NULL,
|
||||||
|
"erstellt_am" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"bezahlt_am" TIMESTAMP(3),
|
||||||
|
"storniert_am" TIMESTAMP(3),
|
||||||
|
"transaktions_referenz" VARCHAR,
|
||||||
|
"partner_code" TEXT,
|
||||||
|
"lex_office_id" TEXT,
|
||||||
|
"benutzer_id" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Rechnung_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "RefreshTokens" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"token" TEXT NOT NULL,
|
||||||
|
"ip" TEXT NOT NULL,
|
||||||
|
"expiry" TIMESTAMP(3) NOT NULL,
|
||||||
|
"benutzer_id" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "RefreshTokens_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Tickets" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updated_at" TIMESTAMP(3),
|
||||||
|
"deleted_at" TIMESTAMP(3),
|
||||||
|
"status" "TicketStatus" NOT NULL DEFAULT 'OFFEN',
|
||||||
|
"titel" TEXT NOT NULL,
|
||||||
|
"beschreibung" TEXT NOT NULL,
|
||||||
|
"metadata" JSONB,
|
||||||
|
"email" TEXT NOT NULL,
|
||||||
|
"bearbeiter_id" TEXT,
|
||||||
|
"prioritaet" INTEGER DEFAULT 0,
|
||||||
|
"benutzer_id" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "Tickets_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Unterlage" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"name" TEXT,
|
||||||
|
"kategorie" TEXT,
|
||||||
|
"mime" TEXT NOT NULL,
|
||||||
|
"aufnahme_id" TEXT,
|
||||||
|
|
||||||
|
CONSTRAINT "Unterlage_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "VerbrauchsausweisGewerbe" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"alte_ausweis_id" INTEGER,
|
||||||
|
"ausstellgrund" "Ausstellgrund",
|
||||||
|
"registriernummer" VARCHAR,
|
||||||
|
"zusaetzliche_heizquelle" BOOLEAN,
|
||||||
|
"einheit_1" VARCHAR(50),
|
||||||
|
"einheit_2" VARCHAR(50),
|
||||||
|
"startdatum" TIMESTAMP(6),
|
||||||
|
"verbrauch_1" INTEGER,
|
||||||
|
"verbrauch_2" INTEGER,
|
||||||
|
"verbrauch_3" INTEGER,
|
||||||
|
"verbrauch_4" INTEGER,
|
||||||
|
"verbrauch_5" INTEGER,
|
||||||
|
"verbrauch_6" INTEGER,
|
||||||
|
"brennstoff_1" VARCHAR(50),
|
||||||
|
"brennstoff_2" VARCHAR(50),
|
||||||
|
"energieeffizienzklasse" VARCHAR(5),
|
||||||
|
"ausstellungsdatum" TIMESTAMP(3),
|
||||||
|
"boxpruefung" BOOLEAN DEFAULT false,
|
||||||
|
"strom_1" INTEGER,
|
||||||
|
"strom_2" INTEGER,
|
||||||
|
"strom_3" INTEGER,
|
||||||
|
"stromverbrauch_enthaelt_heizung" BOOLEAN,
|
||||||
|
"stromverbrauch_enthaelt_warmwasser" BOOLEAN,
|
||||||
|
"stromverbrauch_enthaelt_lueftung" BOOLEAN,
|
||||||
|
"stromverbrauch_enthaelt_beleuchtung" BOOLEAN,
|
||||||
|
"stromverbrauch_enthaelt_kuehlung" BOOLEAN,
|
||||||
|
"stromverbrauch_enthaelt_sonstige" VARCHAR(255),
|
||||||
|
"kuehlung_enthalten" BOOLEAN,
|
||||||
|
"anteil_kuehlung_1" DOUBLE PRECISION,
|
||||||
|
"anteil_kuehlung_2" DOUBLE PRECISION,
|
||||||
|
"keller_beheizt" BOOLEAN,
|
||||||
|
"alternative_heizung" BOOLEAN,
|
||||||
|
"alternative_warmwasser" BOOLEAN,
|
||||||
|
"alternative_lueftung" BOOLEAN,
|
||||||
|
"alternative_kuehlung" BOOLEAN,
|
||||||
|
"warmwasser_enthalten" BOOLEAN,
|
||||||
|
"warmwasser_anteil_bekannt" BOOLEAN,
|
||||||
|
"anteil_warmwasser_1" DOUBLE PRECISION,
|
||||||
|
"anteil_warmwasser_2" DOUBLE PRECISION,
|
||||||
|
"ausgestellt" BOOLEAN DEFAULT false,
|
||||||
|
"storniert" BOOLEAN DEFAULT false,
|
||||||
|
"bestellt" BOOLEAN DEFAULT false,
|
||||||
|
"zurueckgestellt" BOOLEAN DEFAULT false,
|
||||||
|
"prueftext" VARCHAR(1000),
|
||||||
|
"beschreibung" TEXT,
|
||||||
|
"kontrolldatei_angefragt" BOOLEAN DEFAULT false,
|
||||||
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||||
|
"ausweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard',
|
||||||
|
"pruefpunkt_heizungsalter" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_niedrig" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_hoch" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_null" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_abweichung" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_wohnflaeche_einheiten" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_strom_null" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_strom_abweichung" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_plz" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_heizungsanlage" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_anteil_warmwasser" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_wohnflaeche" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_geometrie" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_fenster" BOOLEAN DEFAULT false,
|
||||||
|
"benutzer_id" TEXT,
|
||||||
|
"rechnung_id" TEXT,
|
||||||
|
"aufnahme_id" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "VerbrauchsausweisGewerbe_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "VerbrauchsausweisWohnen" (
|
||||||
|
"id" VARCHAR(11) NOT NULL,
|
||||||
|
"alte_ausweis_id" INTEGER,
|
||||||
|
"ausstellgrund" "Ausstellgrund",
|
||||||
|
"registriernummer" VARCHAR,
|
||||||
|
"zusaetzliche_heizquelle" BOOLEAN,
|
||||||
|
"einheit_1" VARCHAR(50),
|
||||||
|
"einheit_2" VARCHAR(50),
|
||||||
|
"brennstoff_1" VARCHAR(50),
|
||||||
|
"brennstoff_2" VARCHAR(50),
|
||||||
|
"energieeffizienzklasse" VARCHAR(5),
|
||||||
|
"ausstellungsdatum" TIMESTAMP(3),
|
||||||
|
"boxpruefung" BOOLEAN DEFAULT false,
|
||||||
|
"startdatum" TIMESTAMPTZ(6),
|
||||||
|
"verbrauch_1" INTEGER,
|
||||||
|
"verbrauch_2" INTEGER,
|
||||||
|
"verbrauch_3" INTEGER,
|
||||||
|
"verbrauch_4" INTEGER,
|
||||||
|
"verbrauch_5" INTEGER,
|
||||||
|
"verbrauch_6" INTEGER,
|
||||||
|
"warmwasser_enthalten" BOOLEAN,
|
||||||
|
"warmwasser_anteil_bekannt" BOOLEAN,
|
||||||
|
"faktorKeller" DOUBLE PRECISION,
|
||||||
|
"alternative_heizung" BOOLEAN,
|
||||||
|
"alternative_warmwasser" BOOLEAN,
|
||||||
|
"alternative_lueftung" BOOLEAN,
|
||||||
|
"alternative_kuehlung" BOOLEAN,
|
||||||
|
"anteil_warmwasser_1" DOUBLE PRECISION,
|
||||||
|
"anteil_warmwasser_2" DOUBLE PRECISION,
|
||||||
|
"ausgestellt" BOOLEAN DEFAULT false,
|
||||||
|
"storniert" BOOLEAN DEFAULT false,
|
||||||
|
"bestellt" BOOLEAN DEFAULT false,
|
||||||
|
"zurueckgestellt" BOOLEAN DEFAULT false,
|
||||||
|
"prueftext" VARCHAR(1000),
|
||||||
|
"beschreibung" TEXT,
|
||||||
|
"kontrolldatei_angefragt" BOOLEAN DEFAULT false,
|
||||||
|
"ausweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard',
|
||||||
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||||
|
"pruefpunkt_heizungsalter" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_niedrig" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_hoch" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_null" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_verbrauch_abweichung" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_wohnflaeche_einheiten" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_strom_null" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_strom_abweichung" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_plz" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_heizungsanlage" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_anteil_warmwasser" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_wohnflaeche" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_geometrie" BOOLEAN DEFAULT false,
|
||||||
|
"pruefpunkt_fenster" BOOLEAN DEFAULT false,
|
||||||
|
"benutzer_id" TEXT,
|
||||||
|
"rechnung_id" TEXT,
|
||||||
|
"aufnahme_id" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "VerbrauchsausweisWohnen_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "documenttemplates" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"name" VARCHAR(100) NOT NULL,
|
||||||
|
"shortdescription" VARCHAR(100) NOT NULL,
|
||||||
|
"longdescription" VARCHAR(5000) NOT NULL,
|
||||||
|
"user_id" TEXT NOT NULL,
|
||||||
|
"is_private" BOOLEAN NOT NULL DEFAULT true,
|
||||||
|
"documenttype" INTEGER NOT NULL,
|
||||||
|
"filename" VARCHAR(100) NOT NULL,
|
||||||
|
"created_at" TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updated_at" TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "PK_DOCUMENTTEMPLATES" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "documenttypes" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"name" VARCHAR(100) NOT NULL,
|
||||||
|
"shortdescription" VARCHAR(100) NOT NULL,
|
||||||
|
"longdescription" VARCHAR(5000) NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "PK_DOCUMENTTYPES" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "tokens" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"token" VARCHAR(36) NOT NULL,
|
||||||
|
"user_id" TEXT NOT NULL,
|
||||||
|
"date_created" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"last_used" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"times_used" INTEGER NOT NULL DEFAULT 0,
|
||||||
|
"permissions" INTEGER NOT NULL DEFAULT 0,
|
||||||
|
|
||||||
|
CONSTRAINT "PK_TOKENS" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Anteilshaber_id_key" ON "Anteilshaber"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "ApiRequests_id_key" ON "ApiRequests"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Aufnahme_id_key" ON "Aufnahme"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "BedarfsausweisGewerbe_id_key" ON "BedarfsausweisGewerbe"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "BedarfsausweisGewerbe_aufnahme_id_key" ON "BedarfsausweisGewerbe"("aufnahme_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "BedarfsausweisGewerbe_rechnung_id_key" ON "BedarfsausweisGewerbe"("rechnung_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "BedarfsausweisGewerbe_geg_einpreisung_id_key" ON "BedarfsausweisGewerbe"("geg_einpreisung_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "BedarfsausweisWohnen_id_key" ON "BedarfsausweisWohnen"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "BedarfsausweisWohnen_rechnung_id_key" ON "BedarfsausweisWohnen"("rechnung_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "BedarfsausweisWohnen_aufnahme_id_key" ON "BedarfsausweisWohnen"("aufnahme_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "benutzer_id_key" ON "benutzer"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "benutzer_email_idx" ON "benutzer"("email");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Bild_id_key" ON "Bild"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Event_id_key" ON "Event"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "GEGEinpreisung_id_key" ON "GEGEinpreisung"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "GEGNachweisGewerbe_id_key" ON "GEGNachweisGewerbe"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "GEGNachweisGewerbe_aufnahme_id_key" ON "GEGNachweisGewerbe"("aufnahme_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "GEGNachweisGewerbe_rechnung_id_key" ON "GEGNachweisGewerbe"("rechnung_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "GEGNachweisGewerbe_geg_einpreisung_id_key" ON "GEGNachweisGewerbe"("geg_einpreisung_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "GEGNachweisWohnen_id_key" ON "GEGNachweisWohnen"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "GEGNachweisWohnen_aufnahme_id_key" ON "GEGNachweisWohnen"("aufnahme_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "GEGNachweisWohnen_rechnung_id_key" ON "GEGNachweisWohnen"("rechnung_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "GEGNachweisWohnen_geg_einpreisung_id_key" ON "GEGNachweisWohnen"("geg_einpreisung_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Klimafaktoren_plz_month_year_key" ON "Klimafaktoren"("plz", "month", "year");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Objekt_id_key" ON "Objekt"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Rechnung_id_key" ON "Rechnung"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "RefreshTokens_token_key" ON "RefreshTokens"("token");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Tickets_id_key" ON "Tickets"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Unterlage_id_key" ON "Unterlage"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "VerbrauchsausweisGewerbe_id_key" ON "VerbrauchsausweisGewerbe"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "VerbrauchsausweisGewerbe_rechnung_id_key" ON "VerbrauchsausweisGewerbe"("rechnung_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "VerbrauchsausweisGewerbe_aufnahme_id_key" ON "VerbrauchsausweisGewerbe"("aufnahme_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "VerbrauchsausweisWohnen_id_key" ON "VerbrauchsausweisWohnen"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "VerbrauchsausweisWohnen_rechnung_id_key" ON "VerbrauchsausweisWohnen"("rechnung_id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "VerbrauchsausweisWohnen_aufnahme_id_key" ON "VerbrauchsausweisWohnen"("aufnahme_id");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Anteilshaber" ADD CONSTRAINT "Anteilshaber_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Anteilshaber" ADD CONSTRAINT "Anteilshaber_objekt_id_fkey" FOREIGN KEY ("objekt_id") REFERENCES "Objekt"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "ApiRequests" ADD CONSTRAINT "ApiRequests_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Aufnahme" ADD CONSTRAINT "Aufnahme_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Aufnahme" ADD CONSTRAINT "Aufnahme_objekt_id_fkey" FOREIGN KEY ("objekt_id") REFERENCES "Objekt"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_geg_einpreisung_id_fkey" FOREIGN KEY ("geg_einpreisung_id") REFERENCES "GEGEinpreisung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "BedarfsausweisWohnen" ADD CONSTRAINT "BedarfsausweisWohnen_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "BedarfsausweisWohnen" ADD CONSTRAINT "BedarfsausweisWohnen_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "BedarfsausweisWohnen" ADD CONSTRAINT "BedarfsausweisWohnen_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Bild" ADD CONSTRAINT "Bild_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Event" ADD CONSTRAINT "Event_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Event" ADD CONSTRAINT "Event_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "GEGEinpreisung" ADD CONSTRAINT "GEGEinpreisung_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_geg_einpreisung_id_fkey" FOREIGN KEY ("geg_einpreisung_id") REFERENCES "GEGEinpreisung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_geg_einpreisung_id_fkey" FOREIGN KEY ("geg_einpreisung_id") REFERENCES "GEGEinpreisung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Objekt" ADD CONSTRAINT "Objekt_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Rechnung" ADD CONSTRAINT "Rechnung_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "RefreshTokens" ADD CONSTRAINT "RefreshTokens_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Tickets" ADD CONSTRAINT "Tickets_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Tickets" ADD CONSTRAINT "Tickets_bearbeiter_id_fkey" FOREIGN KEY ("bearbeiter_id") REFERENCES "benutzer"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Unterlage" ADD CONSTRAINT "Unterlage_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "VerbrauchsausweisGewerbe" ADD CONSTRAINT "VerbrauchsausweisGewerbe_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "VerbrauchsausweisGewerbe" ADD CONSTRAINT "VerbrauchsausweisGewerbe_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "VerbrauchsausweisGewerbe" ADD CONSTRAINT "VerbrauchsausweisGewerbe_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "VerbrauchsausweisWohnen" ADD CONSTRAINT "VerbrauchsausweisWohnen_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "VerbrauchsausweisWohnen" ADD CONSTRAINT "VerbrauchsausweisWohnen_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "VerbrauchsausweisWohnen" ADD CONSTRAINT "VerbrauchsausweisWohnen_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "documenttemplates" ADD CONSTRAINT "benutzer_fk" FOREIGN KEY ("user_id") REFERENCES "benutzer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "documenttemplates" ADD CONSTRAINT "documenttypes_fk" FOREIGN KEY ("documenttype") REFERENCES "documenttypes"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "tokens" ADD CONSTRAINT "fk_benutzer_tokens_user_id" FOREIGN KEY ("user_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
|
||||||
14
prisma/migrations/20250407192734_/migration.sql
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- Added the required column `updated_at` to the `Rechnung` table without a default value. This is not possible if the table is not empty.
|
||||||
|
- Added the required column `updated_at` to the `benutzer` table without a default value. This is not possible if the table is not empty.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Rechnung" ADD COLUMN "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
ADD COLUMN "updated_at" TIMESTAMP(3) NOT NULL;
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "benutzer" ADD COLUMN "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
ADD COLUMN "updated_at" TIMESTAMP(3) NOT NULL;
|
||||||
9
prisma/migrations/20250407193006_bild/migration.sql
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- Added the required column `updated_at` to the `Bild` table without a default value. This is not possible if the table is not empty.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Bild" ADD COLUMN "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
ADD COLUMN "updated_at" TIMESTAMP(3) NOT NULL;
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "BedarfsausweisGewerbe" ALTER COLUMN "updated_at" SET DEFAULT CURRENT_TIMESTAMP;
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "BedarfsausweisWohnen" ALTER COLUMN "updated_at" SET DEFAULT CURRENT_TIMESTAMP;
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Bild" ALTER COLUMN "updated_at" SET DEFAULT CURRENT_TIMESTAMP;
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "GEGNachweisGewerbe" ALTER COLUMN "updated_at" SET DEFAULT CURRENT_TIMESTAMP;
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "GEGNachweisWohnen" ALTER COLUMN "updated_at" SET DEFAULT CURRENT_TIMESTAMP;
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Rechnung" ALTER COLUMN "updated_at" SET DEFAULT CURRENT_TIMESTAMP;
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "VerbrauchsausweisGewerbe" ALTER COLUMN "updated_at" SET DEFAULT CURRENT_TIMESTAMP;
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "VerbrauchsausweisWohnen" ALTER COLUMN "updated_at" SET DEFAULT CURRENT_TIMESTAMP;
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "benutzer" ALTER COLUMN "updated_at" SET DEFAULT CURRENT_TIMESTAMP;
|
||||||
17
prisma/migrations/20250409152238_ausweis_id/migration.sql
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "BedarfsausweisGewerbe" ADD COLUMN "ausweisart" "Ausweisart" NOT NULL DEFAULT 'BedarfsausweisGewerbe';
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "BedarfsausweisWohnen" ADD COLUMN "ausweisart" "Ausweisart" NOT NULL DEFAULT 'BedarfsausweisWohnen';
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "GEGNachweisGewerbe" ADD COLUMN "ausweisart" "Ausweisart" NOT NULL DEFAULT 'GEGNachweisGewerbe';
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "GEGNachweisWohnen" ADD COLUMN "ausweisart" "Ausweisart" NOT NULL DEFAULT 'GEGNachweisWohnen';
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "VerbrauchsausweisGewerbe" ADD COLUMN "ausweisart" "Ausweisart" NOT NULL DEFAULT 'VerbrauchsausweisGewerbe';
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "VerbrauchsausweisWohnen" ADD COLUMN "ausweisart" "Ausweisart" NOT NULL DEFAULT 'VerbrauchsausweisWohnen';
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "BedarfsausweisWohnen" ALTER COLUMN "fenster_art_1" SET DATA TYPE TEXT,
|
||||||
|
ALTER COLUMN "fenster_art_2" SET DATA TYPE TEXT,
|
||||||
|
ALTER COLUMN "dachfenster_art" SET DATA TYPE TEXT,
|
||||||
|
ALTER COLUMN "haustuer_art" SET DATA TYPE TEXT,
|
||||||
|
ALTER COLUMN "dach_daemmung" SET DATA TYPE TEXT,
|
||||||
|
ALTER COLUMN "decke_daemmung" SET DATA TYPE TEXT,
|
||||||
|
ALTER COLUMN "aussenwand_daemmung" SET DATA TYPE TEXT,
|
||||||
|
ALTER COLUMN "boden_daemmung" SET DATA TYPE TEXT;
|
||||||
10
prisma/migrations/20250429143447_log/migration.sql
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Log" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"level" TEXT NOT NULL,
|
||||||
|
"message" TEXT NOT NULL,
|
||||||
|
"meta" JSONB NOT NULL,
|
||||||
|
"timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "Log_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
64
prisma/migrations/20250429145532_messages/migration.sql
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Attachment" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT,
|
||||||
|
"kategorie" TEXT,
|
||||||
|
"mime" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "Attachment_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Message" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"content" TEXT NOT NULL,
|
||||||
|
"sender_id" TEXT NOT NULL,
|
||||||
|
"reply_to_id" TEXT,
|
||||||
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "Message_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "_AttachmentToMessage" (
|
||||||
|
"A" TEXT NOT NULL,
|
||||||
|
"B" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "_AttachmentToMessage_AB_pkey" PRIMARY KEY ("A","B")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "_recipients" (
|
||||||
|
"A" VARCHAR(11) NOT NULL,
|
||||||
|
"B" TEXT NOT NULL,
|
||||||
|
|
||||||
|
CONSTRAINT "_recipients_AB_pkey" PRIMARY KEY ("A","B")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Attachment_id_key" ON "Attachment"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE INDEX "_AttachmentToMessage_B_index" ON "_AttachmentToMessage"("B");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE INDEX "_recipients_B_index" ON "_recipients"("B");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Message" ADD CONSTRAINT "Message_sender_id_fkey" FOREIGN KEY ("sender_id") REFERENCES "benutzer"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Message" ADD CONSTRAINT "Message_reply_to_id_fkey" FOREIGN KEY ("reply_to_id") REFERENCES "Message"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "_AttachmentToMessage" ADD CONSTRAINT "_AttachmentToMessage_A_fkey" FOREIGN KEY ("A") REFERENCES "Attachment"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "_AttachmentToMessage" ADD CONSTRAINT "_AttachmentToMessage_B_fkey" FOREIGN KEY ("B") REFERENCES "Message"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "_recipients" ADD CONSTRAINT "_recipients_A_fkey" FOREIGN KEY ("A") REFERENCES "benutzer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "_recipients" ADD CONSTRAINT "_recipients_B_fkey" FOREIGN KEY ("B") REFERENCES "Message"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||||
56
prisma/migrations/20250429151551_conversations/migration.sql
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
Warnings:
|
||||||
|
|
||||||
|
- You are about to drop the column `created_at` on the `Message` table. All the data in the column will be lost.
|
||||||
|
- You are about to drop the column `updated_at` on the `Message` table. All the data in the column will be lost.
|
||||||
|
- You are about to drop the `_recipients` table. If the table is not empty, all the data it contains will be lost.
|
||||||
|
- Added the required column `conversation_id` to the `Message` table without a default value. This is not possible if the table is not empty.
|
||||||
|
|
||||||
|
*/
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "_recipients" DROP CONSTRAINT "_recipients_A_fkey";
|
||||||
|
|
||||||
|
-- DropForeignKey
|
||||||
|
ALTER TABLE "_recipients" DROP CONSTRAINT "_recipients_B_fkey";
|
||||||
|
|
||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Message" DROP COLUMN "created_at",
|
||||||
|
DROP COLUMN "updated_at",
|
||||||
|
ADD COLUMN "conversation_id" TEXT NOT NULL,
|
||||||
|
ADD COLUMN "sentAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||||
|
|
||||||
|
-- DropTable
|
||||||
|
DROP TABLE "_recipients";
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Conversation" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"name" TEXT,
|
||||||
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMP(3) NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Participant" (
|
||||||
|
"id" TEXT NOT NULL,
|
||||||
|
"benutzer_id" TEXT NOT NULL,
|
||||||
|
"conversation_id" TEXT NOT NULL,
|
||||||
|
"joined_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "Participant_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Conversation_id_key" ON "Conversation"("id");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Participant_benutzer_id_conversation_id_key" ON "Participant"("benutzer_id", "conversation_id");
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Message" ADD CONSTRAINT "Message_conversation_id_fkey" FOREIGN KEY ("conversation_id") REFERENCES "Conversation"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Participant" ADD CONSTRAINT "Participant_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
|
|
||||||
|
-- AddForeignKey
|
||||||
|
ALTER TABLE "Participant" ADD CONSTRAINT "Participant_conversation_id_fkey" FOREIGN KEY ("conversation_id") REFERENCES "Conversation"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||||
3
prisma/migrations/migration_lock.toml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Please do not edit this file manually
|
||||||
|
# It should be added in your version-control system (e.g., Git)
|
||||||
|
provider = "postgresql"
|
||||||
1
prisma/null.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export const x = 5
|
||||||
37
prisma/prisma-enum-generator.ts
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import { generatorHandler } from "@prisma/generator-helper";
|
||||||
|
import fs from "fs";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
const header = `// This file was generated by a custom prisma generator, do not edit manually.\n`;
|
||||||
|
|
||||||
|
generatorHandler({
|
||||||
|
onManifest() {
|
||||||
|
return {
|
||||||
|
defaultOutput: "./enums/index.ts",
|
||||||
|
prettyName: "Prisma Enum Generator",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
async onGenerate(options) {
|
||||||
|
const enums = options.dmmf.datamodel.enums;
|
||||||
|
|
||||||
|
const output = enums.map((e) => {
|
||||||
|
let enumString = `export const ${e.name} = {\n`;
|
||||||
|
e.values.forEach(({ name: value }) => {
|
||||||
|
enumString += ` ${value}: "${value}",\n`;
|
||||||
|
});
|
||||||
|
enumString += `} as const;\n\n`;
|
||||||
|
enumString += `export type ${e.name} = (typeof ${e.name})[keyof typeof ${e.name}];\n`;
|
||||||
|
|
||||||
|
return enumString;
|
||||||
|
});
|
||||||
|
|
||||||
|
const outputFile = options.generator.output;
|
||||||
|
if (!outputFile || !outputFile.value) {
|
||||||
|
throw new Error("No output file specified");
|
||||||
|
}
|
||||||
|
|
||||||
|
const outputPath = path.resolve(outputFile.value);
|
||||||
|
fs.mkdirSync(path.dirname(outputPath), { recursive: true });
|
||||||
|
fs.writeFileSync(outputPath, header + output.join("\n"), "utf-8");
|
||||||
|
},
|
||||||
|
});
|
||||||
11
prisma/schema/Anteilshaber.prisma
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
model Anteilshaber {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
rolle String? @db.VarChar
|
||||||
|
privilegien BigInt?
|
||||||
|
|
||||||
|
benutzer_id String
|
||||||
|
benutzer Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|
||||||
|
objekt_id String
|
||||||
|
objekt Objekt @relation(fields: [objekt_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
14
prisma/schema/ApiRequests.prisma
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
model ApiRequests {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
date DateTime @default(now()) @db.Timestamp(6)
|
||||||
|
ip String @db.VarChar(50)
|
||||||
|
method String @db.VarChar(10)
|
||||||
|
path String @db.VarChar(100)
|
||||||
|
status Int
|
||||||
|
responseTime Float
|
||||||
|
responseSize Int
|
||||||
|
userAgent String @db.VarChar(500)
|
||||||
|
user_id String?
|
||||||
|
user Benutzer? @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
9
prisma/schema/Attachment.prisma
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
model Attachment {
|
||||||
|
id String @id @unique @default(uuid())
|
||||||
|
|
||||||
|
name String?
|
||||||
|
kategorie String?
|
||||||
|
mime String
|
||||||
|
|
||||||
|
attached_to_messages Message[]
|
||||||
|
}
|
||||||
134
prisma/schema/Aufnahme.prisma
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
|
||||||
|
enum Heizungsstatus {
|
||||||
|
BEHEIZT
|
||||||
|
UNBEHEIZT
|
||||||
|
NICHT_VORHANDEN
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Lueftungskonzept {
|
||||||
|
Fensterlueftung
|
||||||
|
Schachtlueftung
|
||||||
|
LueftungsanlageMitWaermerueckgewinnung
|
||||||
|
LueftungsanlageOhneWaermerueckgewinnung
|
||||||
|
}
|
||||||
|
|
||||||
|
model Aufnahme {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
benutzer_id String?
|
||||||
|
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
/// @zod.describe("Art des Gebäudes und seiner primären Nutzungsart")
|
||||||
|
gebaeudetyp String? @db.VarChar
|
||||||
|
/// @zod.describe("Betrachteter Teil des Gebäudes, z.B. Gesamtgebäude, Wohnteil, Gewerbeteil")
|
||||||
|
gebaeudeteil String? @db.VarChar
|
||||||
|
/// @zod.describe("Alle Jahre in denen das Gebäude konstruiert oder grundlegend verändert wurde")
|
||||||
|
baujahr_gebaeude Int[]
|
||||||
|
/// @zod.describe("Alle Jahre in denen die Heizung eingebaut oder grundlegend verändert wurde")
|
||||||
|
baujahr_heizung Int[]
|
||||||
|
/// @zod.describe("Alle Jahre in denen die Klimaanlage eingebaut oder grundlegend verändert wurde")
|
||||||
|
baujahr_klima Int[]
|
||||||
|
/// @zod.describe("Anzahl der (Wohn)Einheiten im Gebäude")
|
||||||
|
einheiten Int?
|
||||||
|
/// @zod.describe("Wohnfläche bei Wohngebäuden, Nutzfläche bei Gewerbegebäuden")
|
||||||
|
flaeche Int?
|
||||||
|
/// @zod.describe("(energetische) Nutzfläche des Gebäudes. Bei Gewerbegebäuden entspricht Sie der Nutzfläche")
|
||||||
|
nutzflaeche Int?
|
||||||
|
/// @zod.describe("Falls das Gebäude energetisch saniert ist, sollte dieser Wert auf true stehen")
|
||||||
|
saniert Boolean?
|
||||||
|
/// @zod.describe("Ob ein Keller vorhanden, beheizt oder unbeheizt ist")
|
||||||
|
keller Heizungsstatus?
|
||||||
|
/// @zod.describe("Ob ein Dachgeschoss vorhanden, beheizt oder unbeheizt ist")
|
||||||
|
dachgeschoss Heizungsstatus?
|
||||||
|
/// @zod.describe("Art der Gebäudelüftung")
|
||||||
|
lueftung Lueftungskonzept?
|
||||||
|
/// @zod.describe("Art der Gebäudekühlung")
|
||||||
|
kuehlung String? @db.VarChar(50)
|
||||||
|
/// @zod.describe("Prozentualer Leerstand des Gebäudes in einem durchschnittlichen Jahr")
|
||||||
|
leerstand Int?
|
||||||
|
|
||||||
|
/// @zod.describe("Falls der Heizungsverbrauch alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")
|
||||||
|
alternative_heizung Boolean?
|
||||||
|
/// @zod.describe("Falls der Warmwasserverbrauch alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")
|
||||||
|
alternative_warmwasser Boolean?
|
||||||
|
/// @zod.describe("Falls die Lüftung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")
|
||||||
|
alternative_lueftung Boolean?
|
||||||
|
/// @zod.describe("Falls die Kühlung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")
|
||||||
|
alternative_kuehlung Boolean?
|
||||||
|
|
||||||
|
/// @zod.describe("Datum an dem der Kunde die Aufnahme erstellt hat")
|
||||||
|
erstellungsdatum DateTime? @default(now())
|
||||||
|
|
||||||
|
/// @zod.describe("Falls das Gebäude über eine Zentralbeheizung verfügt, sollte dieser Wert auf true stehen")
|
||||||
|
zentralheizung Boolean?
|
||||||
|
/// @zod.describe("Falls das Gebäude über ein Solarsystem für Warmwasser verfügt, sollte dieser Wert auf true stehen")
|
||||||
|
solarsystem_warmwasser Boolean?
|
||||||
|
/// @zod.describe("Falls die Warmwasserrohre des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")
|
||||||
|
warmwasser_rohre_gedaemmt Boolean?
|
||||||
|
/// @zod.describe("Falls das Gebäude über einen Niedertemperaturkessel verfügt, sollte dieser Wert auf true stehen")
|
||||||
|
niedertemperatur_kessel Boolean?
|
||||||
|
/// @zod.describe("Falls das Gebäude über einen Brennwertkessel verfügt, sollte dieser Wert auf true stehen")
|
||||||
|
brennwert_kessel Boolean?
|
||||||
|
/// @zod.describe("Falls die Heizungsrohre des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")
|
||||||
|
heizungsrohre_gedaemmt Boolean?
|
||||||
|
standard_kessel Boolean?
|
||||||
|
/// @zod.describe("Falls das Gebäude über eine Wärmepumpe verfügt, sollte dieser Wert auf true stehen")
|
||||||
|
waermepumpe Boolean?
|
||||||
|
/// @zod.describe("Falls das Gebäude über einen Raumtemperaturregler verfügt, sollte dieser Wert auf true stehen")
|
||||||
|
raum_temperatur_regler Boolean?
|
||||||
|
/// @zod.describe("Falls das Gebäude über eine Photovoltaikanlage verfügt, sollte dieser Wert auf true stehen")
|
||||||
|
photovoltaik Boolean?
|
||||||
|
/// @zod.describe("Falls das Gebäude über einen Durchlauferhitzer verfügt, sollte dieser Wert auf true stehen")
|
||||||
|
durchlauf_erhitzer Boolean?
|
||||||
|
einzelofen Boolean?
|
||||||
|
/// @zod.describe("Falls das Gebäude über eine Zirkulationspumpe verfügt, sollte dieser Wert auf true stehen")
|
||||||
|
zirkulation Boolean?
|
||||||
|
/// @zod.describe("Falls die Fenster des Gebäudes einfach gedämmt sind, sollte dieser Wert auf true stehen")
|
||||||
|
einfach_verglasung Boolean?
|
||||||
|
/// @zod.describe("Falls die Fenster des Gebäudes dreifach gedämmt sind, sollte dieser Wert auf true stehen")
|
||||||
|
dreifach_verglasung Boolean?
|
||||||
|
/// @zod.describe("Falls die Fenster des Gebäudes teilweise undicht sind, sollte dieser Wert auf true stehen")
|
||||||
|
fenster_teilweise_undicht Boolean?
|
||||||
|
/// @zod.describe("Falls die Fenster des Gebäudes doppelt gedämmt sind, sollte dieser Wert auf true stehen")
|
||||||
|
doppel_verglasung Boolean?
|
||||||
|
/// @zod.describe("Falls die Fenster des Gebäudes dicht sind, sollte dieser Wert auf true stehen")
|
||||||
|
fenster_dicht Boolean?
|
||||||
|
/// @zod.describe("Falls das Gebäude über gedämmte Rolllädenkästen verfügt, sollte dieser Wert auf true stehen")
|
||||||
|
rolllaeden_kaesten_gedaemmt Boolean?
|
||||||
|
/// @zod.describe("Falls die Fenster des Gebäudes isolier Verglasung haben, sollte dieser Wert auf true stehen")
|
||||||
|
isolier_verglasung Boolean?
|
||||||
|
/// @zod.describe("Falls die Türen des Gebäudes undicht sind, sollte dieser Wert auf true stehen")
|
||||||
|
tueren_undicht Boolean?
|
||||||
|
/// @zod.describe("Falls die Türen des Gebäudes dicht sind, sollte dieser Wert auf true stehen")
|
||||||
|
tueren_dicht Boolean?
|
||||||
|
/// @zod.describe("Falls das Dachgeschoss des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")
|
||||||
|
dachgeschoss_gedaemmt Boolean?
|
||||||
|
/// @zod.describe("Falls die Kellerdecke des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")
|
||||||
|
keller_decke_gedaemmt Boolean?
|
||||||
|
/// @zod.describe("Falls die Kellerwände des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")
|
||||||
|
keller_wand_gedaemmt Boolean?
|
||||||
|
/// @zod.describe("Falls die Außenwände des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")
|
||||||
|
aussenwand_gedaemmt Boolean?
|
||||||
|
/// @zod.describe("Falls die oberste Geschossdecke des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")
|
||||||
|
oberste_geschossdecke_gedaemmt Boolean?
|
||||||
|
/// @zod.describe("Falls die Außenwände des Gebäudes mindestens 12cm gedämmt sind, sollte dieser Wert auf true stehen")
|
||||||
|
aussenwand_min_12cm_gedaemmt Boolean?
|
||||||
|
/// @zod.describe("Falls das Dachgeschoss des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen")
|
||||||
|
dachgeschoss_min_12cm_gedaemmt Boolean?
|
||||||
|
/// @zod.describe("Falls die oberste Geschossdecke des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen")
|
||||||
|
oberste_geschossdecke_min_12cm_gedaemmt Boolean?
|
||||||
|
|
||||||
|
events Event[]
|
||||||
|
bilder Bild[]
|
||||||
|
unterlagen Unterlage[]
|
||||||
|
bedarfsausweise_wohnen BedarfsausweisWohnen[]
|
||||||
|
verbrauchsausweise_gewerbe VerbrauchsausweisGewerbe[]
|
||||||
|
verbrauchsausweise_wohnen VerbrauchsausweisWohnen[]
|
||||||
|
geg_nachweise_wohnen GEGNachweisWohnen[]
|
||||||
|
geg_nachweise_gewerbe GEGNachweisGewerbe[]
|
||||||
|
bedarfsausweise_gewerbe BedarfsausweisGewerbe[]
|
||||||
|
|
||||||
|
objekt_id String
|
||||||
|
objekt Objekt @relation(fields: [objekt_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
44
prisma/schema/BedarfsausweisGewerbe.prisma
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
model BedarfsausweisGewerbe {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
|
||||||
|
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
|
||||||
|
ausstellgrund Ausstellgrund?
|
||||||
|
/// @zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")
|
||||||
|
keller_beheizt Boolean?
|
||||||
|
|
||||||
|
/// @zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")
|
||||||
|
storniert Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
bestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
zurueckgestellt Boolean? @default(false)
|
||||||
|
|
||||||
|
abluftanlage Boolean? @default(false)
|
||||||
|
zu_abluftanlage Boolean? @default(false)
|
||||||
|
konditionierung_der_zuluft Boolean? @default(false)
|
||||||
|
luftheizung Boolean? @default(false)
|
||||||
|
hallenheizung Boolean? @default(false)
|
||||||
|
dunkelstrahler Boolean? @default(false)
|
||||||
|
direktheizung Boolean? @default(false)
|
||||||
|
infrarotstrahler Boolean? @default(false)
|
||||||
|
fussbodenheizung Boolean? @default(false)
|
||||||
|
bauteilaktivierung Boolean? @default(false)
|
||||||
|
klimatisierung Boolean? @default(false)
|
||||||
|
|
||||||
|
nachweistyp AusweisTyp @default(Standard)
|
||||||
|
ausweisart Ausweisart @default(BedarfsausweisGewerbe)
|
||||||
|
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt @default(now())
|
||||||
|
|
||||||
|
/// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")
|
||||||
|
benutzer_id String?
|
||||||
|
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
aufnahme_id String @unique
|
||||||
|
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|
||||||
|
rechnung_id String? @unique
|
||||||
|
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
geg_einpreisung_id String? @unique
|
||||||
|
geg_einpreisung GEGEinpreisung? @relation(fields: [geg_einpreisung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
113
prisma/schema/BedarfsausweisWohnen.prisma
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
|
||||||
|
model BedarfsausweisWohnen {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
alte_ausweis_id Int?
|
||||||
|
benutzer_id String?
|
||||||
|
ausstellgrund Ausstellgrund?
|
||||||
|
registriernummer String? @db.VarChar
|
||||||
|
|
||||||
|
alternative_heizung Boolean?
|
||||||
|
alternative_warmwasser Boolean?
|
||||||
|
alternative_lueftung Boolean?
|
||||||
|
alternative_kuehlung Boolean?
|
||||||
|
|
||||||
|
/// @zod.describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes")
|
||||||
|
energieeffizienzklasse String? @db.VarChar(5)
|
||||||
|
/// @zod.describe("Datum an dem der Aussteller den Ausweis ausgestellt hat")
|
||||||
|
ausstellungsdatum DateTime?
|
||||||
|
boxpruefung Boolean? @default(false)
|
||||||
|
|
||||||
|
anzahl_vollgeschosse Int?
|
||||||
|
geschosshoehe Float?
|
||||||
|
anzahl_gauben Int?
|
||||||
|
breite_gauben Float?
|
||||||
|
masse_a Float?
|
||||||
|
masse_b Float?
|
||||||
|
masse_c Float?
|
||||||
|
masse_d Float?
|
||||||
|
masse_e Float?
|
||||||
|
masse_f Float?
|
||||||
|
fensterflaeche_so_sw Float?
|
||||||
|
fensterflaeche_nw_no Float?
|
||||||
|
aussenwandflaeche_unbeheizt Float?
|
||||||
|
dachflaeche Float?
|
||||||
|
deckenflaeche Float?
|
||||||
|
dach_u_wert Float?
|
||||||
|
decke_u_wert Float?
|
||||||
|
aussenwand_flaeche Float?
|
||||||
|
aussenwand_u_wert Float?
|
||||||
|
fussboden_flaeche Float?
|
||||||
|
fussboden_u_wert Float?
|
||||||
|
volumen Float?
|
||||||
|
dicht Boolean?
|
||||||
|
fenster_flaeche_1 Float?
|
||||||
|
fenster_art_1 String?
|
||||||
|
fenster_flaeche_2 Float?
|
||||||
|
fenster_art_2 String?
|
||||||
|
dachfenster_flaeche Float?
|
||||||
|
dachfenster_art String?
|
||||||
|
haustuer_flaeche Float?
|
||||||
|
haustuer_art String?
|
||||||
|
dach_bauart String? @db.VarChar
|
||||||
|
decke_bauart String? @db.VarChar
|
||||||
|
dach_daemmung String?
|
||||||
|
decke_daemmung String?
|
||||||
|
aussenwand_daemmung String?
|
||||||
|
boden_daemmung String?
|
||||||
|
aussenwand_bauart String? @db.VarChar
|
||||||
|
boden_bauart String? @db.VarChar
|
||||||
|
warmwasser_verteilung String? @db.VarChar
|
||||||
|
warmwasser_speicherung String? @db.VarChar
|
||||||
|
warmwasser_erzeugung String? @db.VarChar
|
||||||
|
heizung_zentral Boolean?
|
||||||
|
heizung_verteilung String? @db.VarChar
|
||||||
|
heizung_speicherung String? @db.VarChar
|
||||||
|
waerme_erzeugung_heizung String? @db.VarChar
|
||||||
|
anteil_zusatzheizung Float?
|
||||||
|
kollektor_flaeche Float?
|
||||||
|
|
||||||
|
ausgestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")
|
||||||
|
storniert Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
bestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
zurueckgestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")
|
||||||
|
prueftext String? @db.VarChar(1000)
|
||||||
|
|
||||||
|
beschreibung String? @db.Text
|
||||||
|
|
||||||
|
/// @zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")
|
||||||
|
kontrolldatei_angefragt Boolean? @default(false)
|
||||||
|
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt @default(now())
|
||||||
|
|
||||||
|
pruefpunkt_heizungsalter Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_niedrig Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_hoch Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_null Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_abweichung Boolean? @default(false)
|
||||||
|
pruefpunkt_wohnflaeche_einheiten Boolean? @default(false)
|
||||||
|
pruefpunkt_strom_null Boolean? @default(false)
|
||||||
|
pruefpunkt_strom_abweichung Boolean? @default(false)
|
||||||
|
pruefpunkt_plz Boolean? @default(false)
|
||||||
|
pruefpunkt_heizungsanlage Boolean? @default(false)
|
||||||
|
pruefpunkt_anteil_warmwasser Boolean? @default(false)
|
||||||
|
pruefpunkt_wohnflaeche Boolean? @default(false)
|
||||||
|
pruefpunkt_geometrie Boolean? @default(false)
|
||||||
|
pruefpunkt_fenster Boolean? @default(false)
|
||||||
|
|
||||||
|
ausweistyp AusweisTyp @default(Standard)
|
||||||
|
ausweisart Ausweisart @default(BedarfsausweisWohnen)
|
||||||
|
|
||||||
|
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|
||||||
|
rechnung_id String? @unique
|
||||||
|
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|
||||||
|
/// @zod.describe("ID der korrespondierenden Gebäudeaufnahme")
|
||||||
|
aufnahme_id String @unique
|
||||||
|
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
59
prisma/schema/Benutzer.prisma
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
|
||||||
|
enum BenutzerRolle {
|
||||||
|
USER
|
||||||
|
ADMIN
|
||||||
|
}
|
||||||
|
|
||||||
|
model Benutzer {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
alte_id Int?
|
||||||
|
name String? @db.VarChar(100)
|
||||||
|
vorname String? @db.VarChar(50)
|
||||||
|
email String @unique(map: "benutzer_email_idx") @db.VarChar(255)
|
||||||
|
passwort String @db.VarChar(255)
|
||||||
|
profilbild String? @db.VarChar
|
||||||
|
plz String? @db.VarChar(5)
|
||||||
|
ort String? @db.VarChar(50)
|
||||||
|
adresse String? @db.VarChar(150)
|
||||||
|
telefon String? @db.VarChar(50)
|
||||||
|
anrede String? @db.VarChar(50)
|
||||||
|
rolle BenutzerRolle @default(USER)
|
||||||
|
firma String?
|
||||||
|
lex_office_id String?
|
||||||
|
|
||||||
|
verified Boolean @default(false)
|
||||||
|
|
||||||
|
Anteilshaber Anteilshaber[] @ignore
|
||||||
|
BedarfsausweisWohnen BedarfsausweisWohnen[]
|
||||||
|
documenttemplates documenttemplates[]
|
||||||
|
objekte Objekt[]
|
||||||
|
rechnungen Rechnung[]
|
||||||
|
tokens tokens[]
|
||||||
|
VerbrauchsausweisGewerbe VerbrauchsausweisGewerbe[]
|
||||||
|
VerbrauchsausweisWohnen VerbrauchsausweisWohnen[]
|
||||||
|
ApiRequests ApiRequests[]
|
||||||
|
RefreshTokens RefreshTokens[]
|
||||||
|
aufnahmen Aufnahme[]
|
||||||
|
|
||||||
|
// ---------------------------------- GEG ----------------------------------
|
||||||
|
geg_einpreisungen GEGEinpreisung[]
|
||||||
|
geg_nachweise_gewerbe GEGNachweisGewerbe[]
|
||||||
|
geg_nachweise_wohnen GEGNachweisWohnen[]
|
||||||
|
bedarfsausweise_gewerbe BedarfsausweisGewerbe[]
|
||||||
|
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt @default(now())
|
||||||
|
|
||||||
|
|
||||||
|
ErstellteTickets Tickets[] @relation("ErstellteTickets")
|
||||||
|
BearbeiteteTickets Tickets[] @relation("BearbeiteteTickets")
|
||||||
|
events Event[]
|
||||||
|
|
||||||
|
conversations Participant[]
|
||||||
|
messages Message[]
|
||||||
|
|
||||||
|
@@map("benutzer")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
20
prisma/schema/Bild.prisma
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
enum BilderKategorie {
|
||||||
|
Heizung
|
||||||
|
Fenster
|
||||||
|
Gebaeude
|
||||||
|
Daemmung
|
||||||
|
AnlagenTechnik
|
||||||
|
}
|
||||||
|
|
||||||
|
model Bild {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
kategorie BilderKategorie
|
||||||
|
name String
|
||||||
|
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt @default(now())
|
||||||
|
|
||||||
|
aufnahme_id String?
|
||||||
|
aufnahme Aufnahme? @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
9
prisma/schema/Conversation.prisma
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
model Conversation {
|
||||||
|
id String @unique @default(cuid())
|
||||||
|
|
||||||
|
name String?
|
||||||
|
participants Participant[]
|
||||||
|
messages Message[]
|
||||||
|
createdAt DateTime @default(now())
|
||||||
|
updatedAt DateTime @updatedAt
|
||||||
|
}
|
||||||
19
prisma/schema/Event.prisma
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
// Dieses Model wird für getriggerte Events verwendet
|
||||||
|
// Hier werden beispielsweise Events wie "Nachricht Verschickt" gespeichert.
|
||||||
|
// Diese Events werden dann in der Admin-Oberfläche angezeigt.
|
||||||
|
model Event {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
date DateTime @default(now()) @db.Timestamp(6)
|
||||||
|
|
||||||
|
title String @db.VarChar(255)
|
||||||
|
description String? @db.Text
|
||||||
|
|
||||||
|
|
||||||
|
// Verlinkung des Gebäudes
|
||||||
|
aufnahme_id String
|
||||||
|
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
// Verlinkung des Benutzers
|
||||||
|
benutzer_id String?
|
||||||
|
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
35
prisma/schema/GEGEinpreisung.prisma
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
enum Einpreisungsstatus {
|
||||||
|
open
|
||||||
|
canceled
|
||||||
|
pending
|
||||||
|
expired
|
||||||
|
}
|
||||||
|
|
||||||
|
model GEGEinpreisung {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
|
||||||
|
empfaenger String? @db.VarChar
|
||||||
|
strasse String? @db.VarChar
|
||||||
|
plz String? @db.VarChar
|
||||||
|
ort String? @db.VarChar
|
||||||
|
zusatzzeile String? @db.VarChar
|
||||||
|
telefon String? @db.VarChar
|
||||||
|
email String? @db.VarChar
|
||||||
|
|
||||||
|
abweichende_versand_adresse Boolean? @default(false)
|
||||||
|
versand_empfaenger String? @db.VarChar
|
||||||
|
versand_strasse String? @db.VarChar
|
||||||
|
versand_plz String? @db.VarChar
|
||||||
|
versand_ort String? @db.VarChar
|
||||||
|
versand_zusatzzeile String? @db.VarChar
|
||||||
|
|
||||||
|
status Einpreisungsstatus
|
||||||
|
|
||||||
|
geg_nachweis_wohnen GEGNachweisWohnen?
|
||||||
|
geg_nachweis_gewerbe GEGNachweisGewerbe?
|
||||||
|
bedarfsausweis_gewerbe BedarfsausweisGewerbe?
|
||||||
|
|
||||||
|
/// @zod.describe("Die ID des Benutzers, der diese Einpreisung bekommt.")
|
||||||
|
benutzer_id String?
|
||||||
|
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
35
prisma/schema/GEGNachweisGewerbe.prisma
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
model GEGNachweisGewerbe {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
|
||||||
|
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
|
||||||
|
ausstellgrund Ausstellgrund?
|
||||||
|
/// @zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")
|
||||||
|
keller_beheizt Boolean?
|
||||||
|
|
||||||
|
/// @zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")
|
||||||
|
storniert Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
bestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
zurueckgestellt Boolean? @default(false)
|
||||||
|
|
||||||
|
/// @zod.describe("Beschreibung des Bauvorhabens")
|
||||||
|
beschreibung String? @db.Text
|
||||||
|
|
||||||
|
nachweistyp AusweisTyp @default(Standard)
|
||||||
|
ausweisart Ausweisart @default(GEGNachweisGewerbe)
|
||||||
|
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt @default(now())
|
||||||
|
|
||||||
|
/// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")
|
||||||
|
benutzer_id String?
|
||||||
|
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
aufnahme_id String @unique
|
||||||
|
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|
||||||
|
rechnung_id String? @unique
|
||||||
|
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
geg_einpreisung_id String? @unique
|
||||||
|
geg_einpreisung GEGEinpreisung? @relation(fields: [geg_einpreisung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
35
prisma/schema/GEGNachweisWohnen.prisma
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
model GEGNachweisWohnen {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
|
||||||
|
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
|
||||||
|
ausstellgrund Ausstellgrund?
|
||||||
|
/// @zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")
|
||||||
|
keller_beheizt Boolean?
|
||||||
|
|
||||||
|
/// @zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")
|
||||||
|
storniert Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
bestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
zurueckgestellt Boolean? @default(false)
|
||||||
|
|
||||||
|
/// @zod.describe("Beschreibung des Bauvorhabens")
|
||||||
|
beschreibung String? @db.Text
|
||||||
|
|
||||||
|
nachweistyp AusweisTyp @default(Standard)
|
||||||
|
ausweisart Ausweisart @default(GEGNachweisWohnen)
|
||||||
|
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt @default(now())
|
||||||
|
|
||||||
|
/// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")
|
||||||
|
benutzer_id String?
|
||||||
|
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
aufnahme_id String @unique
|
||||||
|
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|
||||||
|
rechnung_id String? @unique
|
||||||
|
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
geg_einpreisung_id String? @unique
|
||||||
|
geg_einpreisung GEGEinpreisung? @relation(fields: [geg_einpreisung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
11
prisma/schema/Klimafaktoren.prisma
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
model Klimafaktoren {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
plz String @db.VarChar(5)
|
||||||
|
month Int
|
||||||
|
year Int
|
||||||
|
klimafaktor Float @default(1)
|
||||||
|
|
||||||
|
// Mithilfe eines composite keys können wir einfach den Monat und das Jahr mit der Postleitzahl verknüpfen
|
||||||
|
// somit müssen wir nicht mehr eine Zeile für jeden Monat anlegen.
|
||||||
|
@@unique([plz, month, year])
|
||||||
|
}
|
||||||
7
prisma/schema/Log.prisma
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
model Log {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
level String
|
||||||
|
message String
|
||||||
|
meta Json
|
||||||
|
timestamp DateTime @default(now())
|
||||||
|
}
|
||||||
17
prisma/schema/Message.prisma
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
model Message {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
|
||||||
|
attachments Attachment[]
|
||||||
|
|
||||||
|
reply_to_id String? // Nullable because not all messages are replies
|
||||||
|
reply_to Message? @relation("MessageReplies", fields: [reply_to_id], references: [id])
|
||||||
|
replies Message[] @relation("MessageReplies")
|
||||||
|
|
||||||
|
content String
|
||||||
|
sender_id String
|
||||||
|
conversation_id String
|
||||||
|
sentAt DateTime @default(now())
|
||||||
|
|
||||||
|
sender Benutzer @relation(fields: [sender_id], references: [id])
|
||||||
|
conversation Conversation @relation(fields: [conversation_id], references: [id])
|
||||||
|
}
|
||||||
20
prisma/schema/Objekt.prisma
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
model Objekt {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
|
||||||
|
latitude Float?
|
||||||
|
longitude Float?
|
||||||
|
|
||||||
|
/// @zod.describe("Postleitzahl des Gebäudes")
|
||||||
|
plz String? @db.VarChar(5)
|
||||||
|
/// @zod.describe("Ort des Gebäudes")
|
||||||
|
ort String? @db.VarChar(50)
|
||||||
|
/// @zod.describe("Adresse (Straße und Hausnummer) des Gebäudes")
|
||||||
|
adresse String? @db.VarChar(100)
|
||||||
|
|
||||||
|
erstellungsdatum DateTime? @default(now())
|
||||||
|
|
||||||
|
benutzer_id String?
|
||||||
|
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id])
|
||||||
|
aufnahmen Aufnahme[]
|
||||||
|
anteilshaber Anteilshaber[]
|
||||||
|
}
|
||||||
11
prisma/schema/Participant.prisma
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
model Participant {
|
||||||
|
id String @id @default(cuid())
|
||||||
|
benutzer_id String
|
||||||
|
conversation_id String
|
||||||
|
joined_at DateTime @default(now())
|
||||||
|
|
||||||
|
benutzer Benutzer @relation(fields: [benutzer_id], references: [id])
|
||||||
|
conversation Conversation @relation(fields: [conversation_id], references: [id])
|
||||||
|
|
||||||
|
@@unique([benutzer_id, conversation_id])
|
||||||
|
}
|
||||||
9
prisma/schema/Postleitzahlen.prisma
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
model Postleitzahlen {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
plz String @db.VarChar(5)
|
||||||
|
stadt String @db.VarChar(100)
|
||||||
|
bundesland String @db.VarChar(100)
|
||||||
|
landkreis String @db.VarChar(100)
|
||||||
|
lat Float
|
||||||
|
lon Float
|
||||||
|
}
|
||||||
73
prisma/schema/Rechnung.prisma
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
|
||||||
|
enum Bezahlmethoden {
|
||||||
|
paypal
|
||||||
|
giropay
|
||||||
|
sofort
|
||||||
|
creditcard
|
||||||
|
rechnung
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Rechnungsstatus {
|
||||||
|
open
|
||||||
|
canceled
|
||||||
|
pending
|
||||||
|
authorized
|
||||||
|
expired
|
||||||
|
failed
|
||||||
|
paid
|
||||||
|
}
|
||||||
|
|
||||||
|
enum AusweisTyp {
|
||||||
|
Standard
|
||||||
|
standardXL
|
||||||
|
Beratung
|
||||||
|
BeratungXL
|
||||||
|
Offline
|
||||||
|
OfflineXL
|
||||||
|
}
|
||||||
|
|
||||||
|
model Rechnung {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
alte_id Int?
|
||||||
|
|
||||||
|
empfaenger String? @db.VarChar
|
||||||
|
strasse String? @db.VarChar
|
||||||
|
plz String? @db.VarChar
|
||||||
|
ort String? @db.VarChar
|
||||||
|
zusatzzeile String? @db.VarChar
|
||||||
|
telefon String? @db.VarChar
|
||||||
|
email String? @db.VarChar
|
||||||
|
|
||||||
|
abweichende_versand_adresse Boolean? @default(false)
|
||||||
|
versand_empfaenger String? @db.VarChar
|
||||||
|
versand_strasse String? @db.VarChar
|
||||||
|
versand_plz String? @db.VarChar
|
||||||
|
versand_ort String? @db.VarChar
|
||||||
|
versand_zusatzzeile String? @db.VarChar
|
||||||
|
|
||||||
|
bezahlmethode Bezahlmethoden
|
||||||
|
status Rechnungsstatus
|
||||||
|
services Service[]
|
||||||
|
betrag Float
|
||||||
|
erstellt_am DateTime @default(now())
|
||||||
|
bezahlt_am DateTime?
|
||||||
|
storniert_am DateTime?
|
||||||
|
transaktions_referenz String? @db.VarChar
|
||||||
|
partner_code String?
|
||||||
|
lex_office_id String?
|
||||||
|
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt @default(now())
|
||||||
|
|
||||||
|
benutzer_id String
|
||||||
|
benutzer Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|
||||||
|
verbrauchsausweis_wohnen VerbrauchsausweisWohnen?
|
||||||
|
verbrauchsausweis_gewerbe VerbrauchsausweisGewerbe?
|
||||||
|
bedarfsausweis_wohnen BedarfsausweisWohnen?
|
||||||
|
bedarfsausweis_gewerbe BedarfsausweisGewerbe?
|
||||||
|
geg_nachweis_gewerbe GEGNachweisGewerbe?
|
||||||
|
geg_nachweis_wohnen GEGNachweisWohnen?
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
13
prisma/schema/RefreshTokens.prisma
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
model RefreshTokens {
|
||||||
|
id Int @id @default(autoincrement())
|
||||||
|
token String @unique
|
||||||
|
// Wir nehmen die IP Adresse des Clients mit auf.
|
||||||
|
// Falls sich die IP Adresse eines Refresh Token Owners ändert, können wir diesen einfach invalidieren.
|
||||||
|
ip String
|
||||||
|
expiry DateTime
|
||||||
|
|
||||||
|
// Relationen
|
||||||
|
benutzer_id String
|
||||||
|
user Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: Cascade)
|
||||||
|
}
|
||||||
29
prisma/schema/Tickets.prisma
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
|
||||||
|
enum TicketStatus {
|
||||||
|
OFFEN
|
||||||
|
IN_BEARBEITUNG
|
||||||
|
IN_WARTESCHLEIFE
|
||||||
|
GESCHLOSSEN
|
||||||
|
GELOEST
|
||||||
|
}
|
||||||
|
|
||||||
|
model Tickets {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime? @updatedAt
|
||||||
|
deleted_at DateTime?
|
||||||
|
// Attribute
|
||||||
|
status TicketStatus @default(OFFEN)
|
||||||
|
titel String
|
||||||
|
beschreibung String
|
||||||
|
metadata Json?
|
||||||
|
email String
|
||||||
|
|
||||||
|
bearbeiter_id String?
|
||||||
|
prioritaet Int? @default(0)
|
||||||
|
|
||||||
|
// Relationen
|
||||||
|
benutzer_id String?
|
||||||
|
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], name: "ErstellteTickets")
|
||||||
|
bearbeiter Benutzer? @relation(fields: [bearbeiter_id], references: [id], name: "BearbeiteteTickets")
|
||||||
|
}
|
||||||
15
prisma/schema/Unterlage.prisma
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
enum UnterlagenKategorie {
|
||||||
|
Grundriss
|
||||||
|
Sonstiges
|
||||||
|
}
|
||||||
|
|
||||||
|
model Unterlage {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
name String?
|
||||||
|
kategorie String?
|
||||||
|
mime String
|
||||||
|
|
||||||
|
aufnahme_id String?
|
||||||
|
aufnahme Aufnahme? @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
103
prisma/schema/VerbrauchsausweisGewerbe.prisma
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
|
||||||
|
model VerbrauchsausweisGewerbe {
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
alte_ausweis_id Int?
|
||||||
|
ausstellgrund Ausstellgrund?
|
||||||
|
registriernummer String? @db.VarChar
|
||||||
|
zusaetzliche_heizquelle Boolean?
|
||||||
|
einheit_1 String? @db.VarChar(50)
|
||||||
|
einheit_2 String? @db.VarChar(50)
|
||||||
|
startdatum DateTime? @db.Timestamp(6)
|
||||||
|
verbrauch_1 Int?
|
||||||
|
verbrauch_2 Int?
|
||||||
|
verbrauch_3 Int?
|
||||||
|
verbrauch_4 Int?
|
||||||
|
verbrauch_5 Int?
|
||||||
|
verbrauch_6 Int?
|
||||||
|
|
||||||
|
/// @zod.describe("Genutzer Brennstoff der primären Energiequelle")
|
||||||
|
brennstoff_1 String? @db.VarChar(50)
|
||||||
|
/// @zod.describe("Genutzer Brennstoff der sekundären Energiequelle")
|
||||||
|
brennstoff_2 String? @db.VarChar(50)
|
||||||
|
|
||||||
|
/// @zod.describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes")
|
||||||
|
energieeffizienzklasse String? @db.VarChar(5)
|
||||||
|
/// @zod.describe("Datum an dem der Aussteller den Ausweis ausgestellt hat")
|
||||||
|
ausstellungsdatum DateTime?
|
||||||
|
boxpruefung Boolean? @default(false)
|
||||||
|
|
||||||
|
strom_1 Int?
|
||||||
|
strom_2 Int?
|
||||||
|
strom_3 Int?
|
||||||
|
|
||||||
|
stromverbrauch_enthaelt_heizung Boolean?
|
||||||
|
stromverbrauch_enthaelt_warmwasser Boolean?
|
||||||
|
stromverbrauch_enthaelt_lueftung Boolean?
|
||||||
|
stromverbrauch_enthaelt_beleuchtung Boolean?
|
||||||
|
stromverbrauch_enthaelt_kuehlung Boolean?
|
||||||
|
stromverbrauch_enthaelt_sonstige String? @db.VarChar(255)
|
||||||
|
|
||||||
|
kuehlung_enthalten Boolean?
|
||||||
|
anteil_kuehlung_1 Float?
|
||||||
|
anteil_kuehlung_2 Float?
|
||||||
|
|
||||||
|
|
||||||
|
keller_beheizt Boolean?
|
||||||
|
|
||||||
|
alternative_heizung Boolean?
|
||||||
|
alternative_warmwasser Boolean?
|
||||||
|
alternative_lueftung Boolean?
|
||||||
|
alternative_kuehlung Boolean?
|
||||||
|
|
||||||
|
warmwasser_enthalten Boolean?
|
||||||
|
/// @zod.describe("Falls der Warmwasser Anteil am Verbrauch bekannt ist, sollte dieser Wert auf true stehen")
|
||||||
|
warmwasser_anteil_bekannt Boolean?
|
||||||
|
anteil_warmwasser_1 Float?
|
||||||
|
anteil_warmwasser_2 Float?
|
||||||
|
|
||||||
|
ausgestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")
|
||||||
|
storniert Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
bestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
zurueckgestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")
|
||||||
|
prueftext String? @db.VarChar(1000)
|
||||||
|
|
||||||
|
beschreibung String? @db.Text
|
||||||
|
|
||||||
|
/// @zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")
|
||||||
|
kontrolldatei_angefragt Boolean? @default(false)
|
||||||
|
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt @default(now())
|
||||||
|
|
||||||
|
ausweistyp AusweisTyp @default(Standard)
|
||||||
|
ausweisart Ausweisart @default(VerbrauchsausweisGewerbe)
|
||||||
|
|
||||||
|
pruefpunkt_heizungsalter Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_niedrig Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_hoch Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_null Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_abweichung Boolean? @default(false)
|
||||||
|
pruefpunkt_wohnflaeche_einheiten Boolean? @default(false)
|
||||||
|
pruefpunkt_strom_null Boolean? @default(false)
|
||||||
|
pruefpunkt_strom_abweichung Boolean? @default(false)
|
||||||
|
pruefpunkt_plz Boolean? @default(false)
|
||||||
|
pruefpunkt_heizungsanlage Boolean? @default(false)
|
||||||
|
pruefpunkt_anteil_warmwasser Boolean? @default(false)
|
||||||
|
pruefpunkt_wohnflaeche Boolean? @default(false)
|
||||||
|
pruefpunkt_geometrie Boolean? @default(false)
|
||||||
|
pruefpunkt_fenster Boolean? @default(false)
|
||||||
|
|
||||||
|
benutzer_id String?
|
||||||
|
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|
||||||
|
rechnung_id String? @unique
|
||||||
|
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|
||||||
|
/// @zod.describe("ID der korrespondierenden Gebäudeaufnahme")
|
||||||
|
aufnahme_id String @unique
|
||||||
|
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
108
prisma/schema/VerbrauchsausweisWohnen.prisma
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
|
||||||
|
model VerbrauchsausweisWohnen {
|
||||||
|
/// @zod.describe("ID des Ausweises")
|
||||||
|
id String @id @unique @db.VarChar(11)
|
||||||
|
alte_ausweis_id Int?
|
||||||
|
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
|
||||||
|
ausstellgrund Ausstellgrund?
|
||||||
|
/// @zod.describe("Die Registriernummer des Ausweises")
|
||||||
|
registriernummer String? @db.VarChar
|
||||||
|
/// @zod.describe("Falls eine sekundäre Heizquelle existiert, sollte dieser Wert auf true stehen")
|
||||||
|
zusaetzliche_heizquelle Boolean?
|
||||||
|
/// @zod.describe("Einheit des Energieträgers der primären Heizquelle")
|
||||||
|
einheit_1 String? @db.VarChar(50)
|
||||||
|
/// @zod.describe("Einheit des Energieträgers der sekundären Heizquelle")
|
||||||
|
einheit_2 String? @db.VarChar(50)
|
||||||
|
|
||||||
|
/// @zod.describe("Genutzer Brennstoff der primären Energiequelle")
|
||||||
|
brennstoff_1 String? @db.VarChar(50)
|
||||||
|
/// @zod.describe("Genutzer Brennstoff der sekundären Energiequelle")
|
||||||
|
brennstoff_2 String? @db.VarChar(50)
|
||||||
|
|
||||||
|
/// @zod.describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes")
|
||||||
|
energieeffizienzklasse String? @db.VarChar(5)
|
||||||
|
/// @zod.describe("Datum an dem der Aussteller den Ausweis ausgestellt hat")
|
||||||
|
ausstellungsdatum DateTime?
|
||||||
|
boxpruefung Boolean? @default(false)
|
||||||
|
|
||||||
|
startdatum DateTime? @db.Timestamptz(6)
|
||||||
|
/// @zod.describe("Energieverbrauch der primären Heizquelle im ersten der drei Verbrauchsjahre")
|
||||||
|
verbrauch_1 Int?
|
||||||
|
/// @zod.describe("Energieverbrauch der primären Heizquelle im zweiten der drei Verbrauchsjahre")
|
||||||
|
verbrauch_2 Int?
|
||||||
|
/// @zod.describe("Energieverbrauch der primären Heizquelle im letzten der drei Verbrauchsjahre")
|
||||||
|
verbrauch_3 Int?
|
||||||
|
/// @zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im ersten der drei Verbrauchsjahre")
|
||||||
|
verbrauch_4 Int?
|
||||||
|
/// @zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im zweiten der drei Verbrauchsjahre")
|
||||||
|
verbrauch_5 Int?
|
||||||
|
/// @zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im letzten der drei Verbrauchsjahre")
|
||||||
|
verbrauch_6 Int?
|
||||||
|
/// @zod.describe("Falls Warmwasser im Verbrauchswert enthalten ist, sollte dieser Wert auf true stehen")
|
||||||
|
warmwasser_enthalten Boolean?
|
||||||
|
/// @zod.describe("Falls der Warmwasser Anteil am Verbrauch bekannt ist, sollte dieser Wert auf true stehen")
|
||||||
|
warmwasser_anteil_bekannt Boolean?
|
||||||
|
/// @zod.describe("Der Faktor mit dem die Wohnfläche erhöht wird wenn die beheizte Gesamtfläche (energetische Nutzfläche) unbekannt ist.")
|
||||||
|
faktorKeller Float?
|
||||||
|
|
||||||
|
/// @zod.describe("Falls der Heizungsverbrauch alternative Energieversorgungssysteme beinhaltet, sollte dieser Wert auf true stehen.")
|
||||||
|
alternative_heizung Boolean?
|
||||||
|
/// @zod.describe("Falls der Warmwasserverbrauch alternative Energieversorgungssysteme (z.B. Solarsystem, Wärmepumpe, etc.) beinhaltet, sollte dieser Wert auf true stehen.")
|
||||||
|
alternative_warmwasser Boolean?
|
||||||
|
/// @zod.describe("Falls die Lüftung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen.")
|
||||||
|
alternative_lueftung Boolean?
|
||||||
|
/// @zod.describe("Falls die Kühlung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen.")
|
||||||
|
alternative_kuehlung Boolean?
|
||||||
|
|
||||||
|
/// @zod.describe("Anteil des Warmwassers am Gesamtverbrauch der primären Energiequelle in Prozent")
|
||||||
|
anteil_warmwasser_1 Float?
|
||||||
|
/// @zod.describe("Anteil des Warmwassers am Gesamtverbrauch der sekundären Energiequelle in Prozent")
|
||||||
|
anteil_warmwasser_2 Float?
|
||||||
|
|
||||||
|
ausgestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")
|
||||||
|
storniert Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
bestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")
|
||||||
|
zurueckgestellt Boolean? @default(false)
|
||||||
|
/// @zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")
|
||||||
|
prueftext String? @db.VarChar(1000)
|
||||||
|
|
||||||
|
beschreibung String? @db.Text
|
||||||
|
|
||||||
|
/// @zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")
|
||||||
|
kontrolldatei_angefragt Boolean? @default(false)
|
||||||
|
|
||||||
|
ausweistyp AusweisTyp @default(Standard)
|
||||||
|
ausweisart Ausweisart @default(VerbrauchsausweisWohnen)
|
||||||
|
|
||||||
|
created_at DateTime @default(now())
|
||||||
|
updated_at DateTime @updatedAt @default(now())
|
||||||
|
|
||||||
|
pruefpunkt_heizungsalter Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_niedrig Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_hoch Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_null Boolean? @default(false)
|
||||||
|
pruefpunkt_verbrauch_abweichung Boolean? @default(false)
|
||||||
|
pruefpunkt_wohnflaeche_einheiten Boolean? @default(false)
|
||||||
|
pruefpunkt_strom_null Boolean? @default(false)
|
||||||
|
pruefpunkt_strom_abweichung Boolean? @default(false)
|
||||||
|
pruefpunkt_plz Boolean? @default(false)
|
||||||
|
pruefpunkt_heizungsanlage Boolean? @default(false)
|
||||||
|
pruefpunkt_anteil_warmwasser Boolean? @default(false)
|
||||||
|
pruefpunkt_wohnflaeche Boolean? @default(false)
|
||||||
|
pruefpunkt_geometrie Boolean? @default(false)
|
||||||
|
pruefpunkt_fenster Boolean? @default(false)
|
||||||
|
|
||||||
|
/// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")
|
||||||
|
benutzer_id String?
|
||||||
|
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|
||||||
|
rechnung_id String? @unique
|
||||||
|
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|
||||||
|
/// @zod.describe("ID der korrespondierenden Gebäudeaufnahme")
|
||||||
|
aufnahme_id String @unique
|
||||||
|
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
}
|
||||||
15
prisma/schema/documenttemplates.prisma
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
model documenttemplates {
|
||||||
|
id Int @id(map: "PK_DOCUMENTTEMPLATES") @default(autoincrement())
|
||||||
|
name String @db.VarChar(100)
|
||||||
|
shortdescription String @db.VarChar(100)
|
||||||
|
longdescription String @db.VarChar(5000)
|
||||||
|
user_id String
|
||||||
|
is_private Boolean @default(true)
|
||||||
|
documenttype Int
|
||||||
|
filename String @db.VarChar(100)
|
||||||
|
created_at DateTime @default(now()) @db.Timestamp(0)
|
||||||
|
updated_at DateTime @default(now()) @db.Timestamp(0)
|
||||||
|
benutzer Benutzer @relation(fields: [user_id], references: [id], onDelete: Cascade, map: "benutzer_fk")
|
||||||
|
documenttypes documenttypes @relation(fields: [documenttype], references: [id], onDelete: Cascade, map: "documenttypes_fk")
|
||||||
|
}
|
||||||
8
prisma/schema/documenttypes.prisma
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
model documenttypes {
|
||||||
|
id Int @id(map: "PK_DOCUMENTTYPES") @default(autoincrement())
|
||||||
|
name String @db.VarChar(100)
|
||||||
|
shortdescription String @db.VarChar(100)
|
||||||
|
longdescription String @db.VarChar(5000)
|
||||||
|
documenttemplates documenttemplates[]
|
||||||
|
}
|
||||||
52
prisma/schema/schema.prisma
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
generator client {
|
||||||
|
provider = "prisma-client-js"
|
||||||
|
binaryTargets = ["native", "debian-openssl-1.1.x"]
|
||||||
|
previewFeatures = ["prismaSchemaFolder"]
|
||||||
|
}
|
||||||
|
|
||||||
|
generator zod {
|
||||||
|
provider = "bunx zod-prisma"
|
||||||
|
output = "../../src/generated/zod"
|
||||||
|
relationModel = false
|
||||||
|
modelCase = "PascalCase"
|
||||||
|
modelSuffix = "Schema"
|
||||||
|
useDecimalJs = false
|
||||||
|
imports = ""
|
||||||
|
prismaJsonNullability = true
|
||||||
|
useNullish = true
|
||||||
|
}
|
||||||
|
|
||||||
|
generator enum {
|
||||||
|
provider = "tsx ./prisma/prisma-enum-generator.ts"
|
||||||
|
output = "../../src/generated/enums.ts"
|
||||||
|
}
|
||||||
|
|
||||||
|
datasource db {
|
||||||
|
provider = "postgresql"
|
||||||
|
url = env("POSTGRES_DATABASE_URL")
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Ausstellgrund {
|
||||||
|
Neubau
|
||||||
|
Vermietung
|
||||||
|
Verkauf
|
||||||
|
Modernisierung
|
||||||
|
Sonstiges
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Ausweisart {
|
||||||
|
VerbrauchsausweisWohnen
|
||||||
|
VerbrauchsausweisGewerbe
|
||||||
|
BedarfsausweisWohnen
|
||||||
|
BedarfsausweisGewerbe
|
||||||
|
GEGNachweisWohnen
|
||||||
|
GEGNachweisGewerbe
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
enum Service {
|
||||||
|
Telefonberatung
|
||||||
|
Aushang
|
||||||
|
Qualitaetsdruck
|
||||||
|
SameDay
|
||||||
|
}
|
||||||
11
prisma/schema/tokens.prisma
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
model tokens {
|
||||||
|
id Int @id(map: "PK_TOKENS") @default(autoincrement())
|
||||||
|
token String @db.VarChar(36)
|
||||||
|
user_id String
|
||||||
|
date_created DateTime @default(now()) @db.Timestamp(6)
|
||||||
|
last_used DateTime @default(now()) @db.Timestamp(6)
|
||||||
|
times_used Int @default(0)
|
||||||
|
permissions Int @default(0)
|
||||||
|
benutzer Benutzer @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fk_benutzer_tokens_user_id")
|
||||||
|
}
|
||||||
384
prisma/seed.ts
Normal file
@@ -0,0 +1,384 @@
|
|||||||
|
// Das wird ausgeführt, wenn wir `npx prisma db seed` ausführen
|
||||||
|
// Hier können wir unsere Datenbank mit Beispieldaten füllen
|
||||||
|
// Mehr Infos: https://www.prisma.io/docs/orm/prisma-migrate/workflows/seeding
|
||||||
|
|
||||||
|
import { PrismaClient } from "@prisma/client";
|
||||||
|
import crypto from "node:crypto";
|
||||||
|
import { faker } from "@faker-js/faker";
|
||||||
|
import { Enums } from "../src/lib/client/prisma";
|
||||||
|
import moment from "moment";
|
||||||
|
|
||||||
|
function hashPassword(password: string): string {
|
||||||
|
const salt = crypto.randomBytes(16).toString("hex");
|
||||||
|
const hash = hashWithGivenSalt(password, salt) + salt;
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
function hashWithGivenSalt(password: string, salt: string): string {
|
||||||
|
const hash = crypto.scryptSync(password, salt, 32).toString("hex");
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
const prisma = new PrismaClient({
|
||||||
|
log: ["warn", "error"],
|
||||||
|
errorFormat: "pretty",
|
||||||
|
datasources: {
|
||||||
|
db: {
|
||||||
|
url: process.env.POSTGRES_DATABASE_URL,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Wir wollen erstmal das Backup mit den Klimafaktoren und der PLZ Liste einfuegen.
|
||||||
|
// Dazu muessen wir die Tabelle leeren.
|
||||||
|
|
||||||
|
await prisma.klimafaktoren.deleteMany({
|
||||||
|
where: {
|
||||||
|
id: { not: 0 },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
await prisma.postleitzahlen.deleteMany({
|
||||||
|
where: {
|
||||||
|
id: { not: 0 },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Jetzt koennen wir die Daten aus dem Backup einlesen.
|
||||||
|
|
||||||
|
const klimafaktoren = await Bun.file("./backup/klimafaktoren.json").json();
|
||||||
|
|
||||||
|
await prisma.klimafaktoren.createMany({
|
||||||
|
data: klimafaktoren.map((klimafaktor: [number, number, number, string]) => {
|
||||||
|
return {
|
||||||
|
plz: klimafaktor[3],
|
||||||
|
month: klimafaktor[1],
|
||||||
|
year: klimafaktor[0],
|
||||||
|
klimafaktor: klimafaktor[2],
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
const postleitzahlen = await Bun.file("./backup/postleitzahlen.json").json();
|
||||||
|
|
||||||
|
await prisma.postleitzahlen.createMany({
|
||||||
|
data: postleitzahlen.map(
|
||||||
|
(postleitzahl: {
|
||||||
|
plz: string;
|
||||||
|
ort: string;
|
||||||
|
landkreis: string;
|
||||||
|
bundesland: string;
|
||||||
|
lat: number;
|
||||||
|
lon: number;
|
||||||
|
}) => {
|
||||||
|
return {
|
||||||
|
plz: postleitzahl.plz,
|
||||||
|
stadt: postleitzahl.ort,
|
||||||
|
landkreis: postleitzahl.landkreis,
|
||||||
|
bundesland: postleitzahl.bundesland,
|
||||||
|
lat: postleitzahl.lat,
|
||||||
|
lon: postleitzahl.lon,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
),
|
||||||
|
});
|
||||||
|
|
||||||
|
// Admin erstellen
|
||||||
|
await prisma.benutzer.create({
|
||||||
|
data: {
|
||||||
|
email: "admin@ib-cornelsen.de",
|
||||||
|
passwort: hashPassword("passwort"),
|
||||||
|
rolle: "ADMIN",
|
||||||
|
name: "Admin",
|
||||||
|
vorname: "Admin",
|
||||||
|
adresse: "Adminstraße 1",
|
||||||
|
plz: "12345",
|
||||||
|
id: "USADMIN1"
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Test Benutzer erstellen
|
||||||
|
await prisma.benutzer.create({
|
||||||
|
data: {
|
||||||
|
email: "user@ib-cornelsen.de",
|
||||||
|
passwort: hashPassword("passwort"),
|
||||||
|
rolle: "USER",
|
||||||
|
name: "User",
|
||||||
|
vorname: "User",
|
||||||
|
adresse: "Userstraße 1",
|
||||||
|
plz: "12345",
|
||||||
|
id: "USUSER01"
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Benutzer erstellen
|
||||||
|
|
||||||
|
// for (let i = 0; i < 10; i++) {
|
||||||
|
// let firstName = faker.person.firstName();
|
||||||
|
// let lastName = faker.person.lastName();
|
||||||
|
// const benutzer = await prisma.benutzer.create({
|
||||||
|
// data: {
|
||||||
|
// email: faker.internet.email({
|
||||||
|
// firstName: firstName,
|
||||||
|
// lastName: lastName,
|
||||||
|
// }),
|
||||||
|
// passwort: hashPassword(faker.internet.password()),
|
||||||
|
// name: lastName,
|
||||||
|
// vorname: firstName,
|
||||||
|
// adresse: faker.location.street(),
|
||||||
|
// plz: faker.location.zipCode({ format: "#####" }),
|
||||||
|
// ort: faker.location.city(),
|
||||||
|
// rolle: "USER",
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
|
||||||
|
// for (let j = 0; j < Math.round(Math.random() * 5); j++) {
|
||||||
|
// // Für jeden Nutzer erstellen wir auch noch bis zu 5 Ausweise.
|
||||||
|
// await prisma.objekt.create({
|
||||||
|
// data: {
|
||||||
|
// adresse: faker.location.street(),
|
||||||
|
// latitude: faker.location.latitude(),
|
||||||
|
// longitude: faker.location.longitude(),
|
||||||
|
// ort: faker.location.city(),
|
||||||
|
// plz: faker.location.zipCode({ format: "#####" }),
|
||||||
|
// benutzer: {
|
||||||
|
// connect: {
|
||||||
|
// id: benutzer.id,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// aufnahmen: {
|
||||||
|
// create: {
|
||||||
|
// alternative_heizung: faker.datatype.boolean(),
|
||||||
|
// alternative_kuehlung: faker.datatype.boolean(),
|
||||||
|
// alternative_lueftung: faker.datatype.boolean(),
|
||||||
|
// alternative_warmwasser: faker.datatype.boolean(),
|
||||||
|
// aussenwand_gedaemmt: faker.datatype.boolean(),
|
||||||
|
// aussenwand_min_12cm_gedaemmt: faker.datatype.boolean(),
|
||||||
|
// baujahr_gebaeude: [faker.date.past().getFullYear()],
|
||||||
|
// baujahr_heizung: [faker.date.past().getFullYear()],
|
||||||
|
// baujahr_klima: [faker.date.past().getFullYear()],
|
||||||
|
// benutzer: {
|
||||||
|
// connect: {
|
||||||
|
// id: benutzer.id,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// verbrauchsausweise_wohnen: {
|
||||||
|
// create: {
|
||||||
|
// benutzer: {
|
||||||
|
// connect: {
|
||||||
|
// id: benutzer.id,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// export async function importVerbrauchsausweisWohnenAltesSystem(
|
||||||
|
// count: number = 5
|
||||||
|
// ) {
|
||||||
|
// const response = await fetch(
|
||||||
|
// "https://online-energieausweis.org/user/ausweis-import.php",
|
||||||
|
// {
|
||||||
|
// method: "POST",
|
||||||
|
// body: JSON.stringify({
|
||||||
|
// i: count,
|
||||||
|
// offset: 0,
|
||||||
|
// q: {},
|
||||||
|
// }),
|
||||||
|
// }
|
||||||
|
// );
|
||||||
|
|
||||||
|
// const data = await response.json();
|
||||||
|
|
||||||
|
// return data;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// export async function verbrauchsausweisWohnenImportTranslate(
|
||||||
|
// ausweis: Record<string, any>
|
||||||
|
// ) {
|
||||||
|
// let firstName = faker.person.firstName();
|
||||||
|
// let lastName = faker.person.lastName();
|
||||||
|
// const benutzer = await prisma.benutzer.create({
|
||||||
|
// data: {
|
||||||
|
// email: faker.internet.email({
|
||||||
|
// firstName: firstName,
|
||||||
|
// lastName: lastName,
|
||||||
|
// }),
|
||||||
|
// passwort: hashPassword(faker.internet.password()),
|
||||||
|
// name: lastName,
|
||||||
|
// vorname: firstName,
|
||||||
|
// adresse: faker.location.street(),
|
||||||
|
// plz: faker.location.zipCode({ format: "#####" }),
|
||||||
|
// ort: faker.location.city(),
|
||||||
|
// rolle: "USER",
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
|
||||||
|
// // TODO: Bilder Importieren
|
||||||
|
// const gebaeudeStammdaten = await prisma.objekt.create({
|
||||||
|
// data: {
|
||||||
|
// adresse: ausweis.objekt_strasse,
|
||||||
|
// plz: ausweis.objekt_plz,
|
||||||
|
// ort: ausweis.objekt_ort,
|
||||||
|
// uid: faker.string.uuid(),
|
||||||
|
// latitude: null,
|
||||||
|
// longitude: null,
|
||||||
|
// benutzer: {
|
||||||
|
// connect: {
|
||||||
|
// id: benutzer.id,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
|
||||||
|
// const gebaeudeAufnahmeAllgemein =
|
||||||
|
// await prisma.aufnahme.create({
|
||||||
|
// data: {
|
||||||
|
// benutzer: {
|
||||||
|
// connect: {
|
||||||
|
// id: benutzer.id,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// baujahr_gebaeude: [parseInt(ausweis.baujahr_gebaeude)],
|
||||||
|
// baujahr_heizung: ausweis.baujahr_anlage ? [parseInt(ausweis.baujahr_anlage)] : [],
|
||||||
|
// baujahr_klima: ausweis.baujahr_klimaanlage ? [parseInt(ausweis.baujahr_klimaanlage)] : [],
|
||||||
|
// nutzflaeche: parseInt(ausweis.nutzflaeche),
|
||||||
|
// einheiten: parseInt(ausweis.anzahl_einheiten),
|
||||||
|
// saniert: ausweis.objekt_saniert ? true : false,
|
||||||
|
// keller:
|
||||||
|
// ausweis.keller_beheizt == "Beheizt"
|
||||||
|
// ? Enums.Heizungsstatus.BEHEIZT
|
||||||
|
// : ausweis.keller_beheizt == "Unbeheizt"
|
||||||
|
// ? Enums.Heizungsstatus.UNBEHEIZT
|
||||||
|
// : Enums.Heizungsstatus.NICHT_VORHANDEN,
|
||||||
|
// dachgeschoss:
|
||||||
|
// ausweis.dachgeschoss == "Beheizt"
|
||||||
|
// ? Enums.Heizungsstatus.BEHEIZT
|
||||||
|
// : ausweis.dachgeschoss == "Unbeheizt"
|
||||||
|
// ? Enums.Heizungsstatus.UNBEHEIZT
|
||||||
|
// : Enums.Heizungsstatus.NICHT_VORHANDEN,
|
||||||
|
// flaeche: parseInt(ausweis.wohnflaeche),
|
||||||
|
// gebaeudetyp: ausweis.objekt_typ,
|
||||||
|
// gebaeudeteil: ausweis.objekt_gebaeudeteil,
|
||||||
|
// lueftung: ausweis.lueftungskonzept,
|
||||||
|
// // NOTE: Warum ist das kein Bool?
|
||||||
|
// kuehlung: ausweis.wird_gekuehlt ? "true" : "false",
|
||||||
|
// brennstoff_1: ausweis.energietraeger_1,
|
||||||
|
// brennstoff_2: ausweis.energietraeger_2,
|
||||||
|
// alternative_heizung: ausweis.alheizung ? true : false,
|
||||||
|
// alternative_kuehlung: ausweis.alkuehlung ? true : false,
|
||||||
|
// alternative_lueftung: ausweis.allueftung ? true : false,
|
||||||
|
// alternative_warmwasser: ausweis.alwarmwasser ? true : false,
|
||||||
|
// ausweisart: Enums.Ausweisart.VerbrauchsausweisWohnen,
|
||||||
|
// energieeffizienzklasse: "",
|
||||||
|
// aussenwand_gedaemmt: ausweis.aussenwand_gedaemmt ? true : false,
|
||||||
|
// aussenwand_min_12cm_gedaemmt: ausweis.aussenwand_min_12cm_gedaemmt ? true : false,
|
||||||
|
// bestellt: ausweis.bestellt ? true : false,
|
||||||
|
// boxpruefung: ausweis.boxpruefung ? true : false,
|
||||||
|
// brennwert_kessel: ausweis.brennwert_kessel ? true : false,
|
||||||
|
// dachgeschoss_gedaemmt: ausweis.dachgeschoss_gedaemmt ? true : false,
|
||||||
|
// dachgeschoss_min_12cm_gedaemmt: ausweis.dachgeschoss_min_12cm_gedaemmt ? true : false,
|
||||||
|
// doppel_verglasung: ausweis.doppel_verglasung ? true : false,
|
||||||
|
// dreifach_verglasung: ausweis.dreifach_verglasung ? true : false,
|
||||||
|
// durchlauf_erhitzer: ausweis.durchlauf_erhitzer ? true : false,
|
||||||
|
// einfach_verglasung: ausweis.einfach_verglasung ? true : false,
|
||||||
|
// einzelofen: ausweis.einzelofen ? true : false,
|
||||||
|
// erledigt: ausweis.erledigt ? true : false,
|
||||||
|
// fenster_dicht: ausweis.fenster_dicht ? true : false,
|
||||||
|
// fenster_teilweise_undicht: ausweis.fenster_teilweise_undicht ? true : false,
|
||||||
|
// heizungsrohre_gedaemmt: ausweis.heizungsrohre_gedaemmt ? true : false,
|
||||||
|
// isolier_verglasung: ausweis.isolier_verglasung ? true : false,
|
||||||
|
// keller_decke_gedaemmt: ausweis.keller_decke_gedaemmt ? true : false,
|
||||||
|
// keller_wand_gedaemmt: ausweis.keller_wand_gedaemmt ? true : false,
|
||||||
|
// niedertemperatur_kessel: ausweis.niedertemperatur_kessel ? true : false,
|
||||||
|
// oberste_geschossdecke_gedaemmt: ausweis.oberste_geschossdecke_gedaemmt ? true : false,
|
||||||
|
// oberste_geschossdecke_min_12cm_gedaemmt: ausweis.oberste_geschossdecke_min_12cm_gedaemmt ? true : false,
|
||||||
|
// raum_temperatur_regler: ausweis.raum_temperatur_regler ? true : false,
|
||||||
|
// rolllaeden_kaesten_gedaemmt: ausweis.rolllaeden_kaesten_gedaemmt ? true : false,
|
||||||
|
// solarsystem_warmwasser: ausweis.solarsystem_warmwasser ? true : false,
|
||||||
|
// standard_kessel: ausweis.standard_kessel ? true : false,
|
||||||
|
// waermepumpe: ausweis.waermepumpe ? true : false,
|
||||||
|
// warmwasser_rohre_gedaemmt: ausweis.warmwasser_rohre_gedaemmt ? true : false,
|
||||||
|
// zentralheizung: ausweis.zentralheizung ? true : false,
|
||||||
|
// zirkulation: ausweis.zirkulation ? true : false,
|
||||||
|
// photovoltaik: ausweis.photovoltaik ? true : false,
|
||||||
|
// leerstand: ausweis.leerstand,
|
||||||
|
// prueftext: ausweis["check-texts"],
|
||||||
|
|
||||||
|
// storniert: false,
|
||||||
|
// tueren_dicht: ausweis.tueren_dicht ? true : false,
|
||||||
|
// tueren_undicht: ausweis.tueren_undicht ? true : false,
|
||||||
|
// zurueckgestellt: ausweis.zurueckGestellt ? true : false,
|
||||||
|
// uid: faker.string.uuid(),
|
||||||
|
// ausstellungsdatum: moment(ausweis.bestelldatum).toDate(),
|
||||||
|
// erstellungsdatum: moment(ausweis.erstellungsdatum).toDate(),
|
||||||
|
// objekt: {
|
||||||
|
// connect: {
|
||||||
|
// id: gebaeudeStammdaten.id,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// });
|
||||||
|
|
||||||
|
// let startdatum = moment(
|
||||||
|
// `${ausweis.energieverbrauch_zeitraum_jahr}-${ausweis.energieverbrauch_zeitraum_monat}-01`
|
||||||
|
// ).toDate();
|
||||||
|
|
||||||
|
// if (isNaN(startdatum.getTime())) {
|
||||||
|
// startdatum = new Date();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const verbrauchsausweisWohnen = await prisma.verbrauchsausweisWohnen.create(
|
||||||
|
// {
|
||||||
|
// data: {
|
||||||
|
// aufnahme: {
|
||||||
|
// connect: {
|
||||||
|
// id: gebaeudeAufnahmeAllgemein.id,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// benutzer: {
|
||||||
|
// connect: {
|
||||||
|
// id: benutzer.id,
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
// verbrauch_1: parseInt(ausweis.energieverbrauch_1_heizquelle_1),
|
||||||
|
// verbrauch_2: parseInt(ausweis.energieverbrauch_2_heizquelle_1),
|
||||||
|
// verbrauch_3: parseInt(ausweis.energieverbrauch_3_heizquelle_1),
|
||||||
|
// verbrauch_4: parseInt(ausweis.energieverbrauch_1_heizquelle_2),
|
||||||
|
// verbrauch_5: parseInt(ausweis.energieverbrauch_2_heizquelle_2),
|
||||||
|
// verbrauch_6: parseInt(ausweis.energieverbrauch_3_heizquelle_2),
|
||||||
|
// einheit_1: ausweis.energietraeger_einheit_heizquelle_1,
|
||||||
|
// einheit_2: ausweis.energietraeger_einheit_heizquelle_2,
|
||||||
|
// warmwasser_enthalten: ausweis.warmwasser_enthalten ? true : false,
|
||||||
|
// uid: faker.string.uuid(),
|
||||||
|
// alternative_heizung: ausweis.alheizung ? true : false,
|
||||||
|
// alternative_kuehlung: ausweis.alkuehlung ? true : false,
|
||||||
|
// alternative_lueftung: ausweis.allueftung ? true : false,
|
||||||
|
// alternative_warmwasser: ausweis.alwarmwasser ? true : false,
|
||||||
|
// anteil_warmwasser_1: ausweis.anteil_warmwasser_1,
|
||||||
|
// anteil_warmwasser_2: ausweis.anteil_warmwasser_2,
|
||||||
|
// ausstellgrund: ausweis.ausstellgrund,
|
||||||
|
// keller_beheizt: ausweis.keller_beheizt ? true : false,
|
||||||
|
// registriernummer: ausweis.regnummer,
|
||||||
|
// // Der Monat im alten System ist 1-basiert, in der neuen Datenbank 0-basiert
|
||||||
|
// // Also müssen wir hier 1 abziehen
|
||||||
|
// startdatum,
|
||||||
|
// warmwasser_anteil_bekannt: ausweis.warmwasser_anteil_bekannt ? true : false,
|
||||||
|
// zusaetzliche_heizquelle: ausweis.zusaetzliche_heizquelle ? true : false,
|
||||||
|
// },
|
||||||
|
// }
|
||||||
|
// );
|
||||||
|
|
||||||
|
// return verbrauchsausweisWohnen;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const ausweise = (await importVerbrauchsausweisWohnenAltesSystem(10)) as { data: any[], result_count: number };
|
||||||
|
|
||||||
|
// for (const ausweis of ausweise.data) {
|
||||||
|
// await verbrauchsausweisWohnenImportTranslate(ausweis);
|
||||||
|
// }
|
||||||
92
public/effizienz-icon.svg
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="106.48949mm"
|
||||||
|
height="127.93927mm"
|
||||||
|
viewBox="0 0 106.48949 127.93927"
|
||||||
|
version="1.1"
|
||||||
|
id="svg1"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview1"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#000000"
|
||||||
|
borderopacity="0.25"
|
||||||
|
inkscape:showpageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm" />
|
||||||
|
<defs
|
||||||
|
id="defs1" />
|
||||||
|
<g
|
||||||
|
inkscape:label="Ebene 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-51.858335,-84.402082)">
|
||||||
|
<g
|
||||||
|
id="g9"
|
||||||
|
transform="matrix(0.26458333,0,0,0.26458333,51.858333,68.995396)">
|
||||||
|
<path
|
||||||
|
id="path3610"
|
||||||
|
d="m 0.02,129.3 v 59.43 h 250.93 l 21.58,-29.71 -21.65,-29.71 H 0.02 Z"
|
||||||
|
fill="#16a550" />
|
||||||
|
<path
|
||||||
|
id="path3612"
|
||||||
|
d="M 276.66,199.86 0.29,200.29 0,259.48 h 276.66 l 22.23,-29.42 -22.23,-30.21 v 0 z"
|
||||||
|
fill="#54cc4e" />
|
||||||
|
<path
|
||||||
|
id="path3614"
|
||||||
|
d="M 301.97,269.43 0,269.82 l 0.03,59.51 302.02,0.55 22.36,-30.23 -22.44,-30.23 v 0 z"
|
||||||
|
fill="#ffbc00" />
|
||||||
|
<path
|
||||||
|
id="path3616"
|
||||||
|
d="m 0,341.06 v 59.63 h 328.48 l 22.29,-29.81 -22.48,-29.81 H 0 Z"
|
||||||
|
fill="#ff5e0d" />
|
||||||
|
<path
|
||||||
|
id="path3618"
|
||||||
|
d="M 353.44,411.87 0.01,412.2 v 59.29 h 354.12 l 22.8,-29.81 z"
|
||||||
|
fill="#ff321d" />
|
||||||
|
<path
|
||||||
|
id="path3620"
|
||||||
|
d="m 0.02,482.15 v 59.63 l 379.93,-0.07 22.53,-29.76 -23.08,-29.76 z"
|
||||||
|
fill="#dd2238" />
|
||||||
|
<path
|
||||||
|
id="path3295"
|
||||||
|
d="m 0.02,58.23 v 61 H 224 l 22.32,-30.5 -22.39,-30.5 z"
|
||||||
|
fill="#128440" />
|
||||||
|
<path
|
||||||
|
d="M 45.88,103.36 43.77,96.42 H 33.15 l -2.11,6.94 H 24.38 L 34.67,74.1 h 7.55 l 10.32,29.26 z M 42.29,91.24 c -1.95,-6.29 -3.05,-9.84 -3.3,-10.66 -0.25,-0.82 -0.42,-1.47 -0.53,-1.95 -0.44,1.7 -1.69,5.91 -3.77,12.62 h 7.59 z"
|
||||||
|
fill="#ffffff"
|
||||||
|
id="path2" />
|
||||||
|
<path
|
||||||
|
d="m 24.51,144.44 h 9.07 c 4.13,0 7.13,0.59 9,1.76 1.87,1.18 2.8,3.05 2.8,5.61 0,1.74 -0.41,3.17 -1.23,4.29 -0.82,1.12 -1.9,1.79 -3.26,2.01 v 0.2 c 1.85,0.41 3.18,1.18 4,2.31 0.82,1.13 1.23,2.63 1.23,4.5 0,2.66 -0.96,4.73 -2.88,6.22 -1.92,1.49 -4.53,2.23 -7.82,2.23 h -10.9 v -29.14 z m 6.18,11.54 h 3.59 c 1.67,0 2.89,-0.26 3.64,-0.78 0.75,-0.52 1.13,-1.38 1.13,-2.57 0,-1.12 -0.41,-1.92 -1.23,-2.4 -0.82,-0.48 -2.11,-0.73 -3.88,-0.73 h -3.25 z m 0,4.9 v 7.59 h 4.03 c 1.7,0 2.96,-0.33 3.77,-0.98 0.81,-0.65 1.22,-1.65 1.22,-2.99 0,-2.42 -1.73,-3.63 -5.18,-3.63 H 30.7 Z"
|
||||||
|
fill="#ffffff"
|
||||||
|
id="path3" />
|
||||||
|
<path
|
||||||
|
d="m 37.77,219.84 c -2.33,0 -4.13,0.87 -5.4,2.62 -1.27,1.75 -1.91,4.18 -1.91,7.31 0,6.5 2.44,9.75 7.32,9.75 2.05,0 4.52,-0.51 7.43,-1.53 v 5.18 c -2.39,1 -5.06,1.49 -8.01,1.49 -4.24,0 -7.48,-1.29 -9.73,-3.86 -2.25,-2.57 -3.37,-6.26 -3.37,-11.07 0,-3.03 0.55,-5.68 1.65,-7.96 1.1,-2.28 2.69,-4.03 4.75,-5.24 2.07,-1.22 4.49,-1.82 7.27,-1.82 2.78,0 5.67,0.68 8.53,2.05 l -1.99,5.02 c -1.09,-0.52 -2.19,-0.97 -3.29,-1.36 -1.1,-0.39 -2.19,-0.58 -3.25,-0.58 z"
|
||||||
|
fill="#ffffff"
|
||||||
|
id="path5" />
|
||||||
|
<path
|
||||||
|
d="m 48.27,299.37 c 0,4.8 -1.37,8.47 -4.1,11.02 -2.73,2.55 -6.67,3.83 -11.83,3.83 h -8.25 v -29.14 h 9.15 c 4.76,0 8.45,1.26 11.08,3.77 2.63,2.51 3.95,6.02 3.95,10.52 z m -6.42,0.16 c 0,-6.26 -2.76,-9.39 -8.29,-9.39 h -3.29 v 18.98 h 2.65 c 5.95,0 8.93,-3.2 8.93,-9.59 z"
|
||||||
|
fill="#ffffff"
|
||||||
|
id="path6" />
|
||||||
|
<path
|
||||||
|
d="M 41.26,385.44 H 24.47 V 356.3 h 16.78 v 5.06 h -10.6 v 6.4 h 9.87 v 5.06 h -9.87 v 7.51 h 10.6 v 5.1 z"
|
||||||
|
fill="#ffffff"
|
||||||
|
id="path7" />
|
||||||
|
<path
|
||||||
|
d="m 30.59,456.25 h -6.08 v -29.14 h 16.7 v 5.06 H 30.59 v 7.51 h 9.89 v 5.04 h -9.89 v 11.52 z"
|
||||||
|
fill="#ffffff"
|
||||||
|
id="path8" />
|
||||||
|
<path
|
||||||
|
d="m 37.03,510.18 h 11.56 v 15.11 c -1.87,0.61 -3.64,1.04 -5.29,1.29 -1.65,0.25 -3.35,0.37 -5.07,0.37 -4.4,0 -7.76,-1.29 -10.08,-3.88 -2.32,-2.58 -3.48,-6.3 -3.48,-11.13 0,-4.83 1.35,-8.37 4.04,-11 2.69,-2.63 6.42,-3.95 11.19,-3.95 2.99,0 5.87,0.6 8.65,1.79 l -2.05,4.94 c -2.13,-1.06 -4.34,-1.59 -6.64,-1.59 -2.67,0 -4.81,0.9 -6.42,2.69 -1.61,1.79 -2.41,4.21 -2.41,7.24 0,3.03 0.65,5.58 1.94,7.25 1.29,1.67 3.18,2.5 5.65,2.5 1.29,0 2.6,-0.13 3.93,-0.4 v -6.08 h -5.52 v -5.14 z"
|
||||||
|
fill="#ffffff"
|
||||||
|
id="path9" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.6 KiB |
75
public/fonts/Content.svg
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
|
||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<metadata>Copyright (C) 2017 by original authors @ fontello.com</metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="t3_content" horiz-adv-x="1000" >
|
||||||
|
<font-face font-family="t3_content" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
|
||||||
|
<missing-glyph horiz-adv-x="1000" />
|
||||||
|
<glyph glyph-name="search" unicode="" d="M643 386q0 103-73 176t-177 74-177-74-73-176 73-177 177-73 177 73 73 177z m286-465q0-29-22-50t-50-21q-30 0-50 21l-191 191q-100-69-223-69-80 0-153 31t-125 84-84 125-31 153 31 152 84 126 125 84 153 31 153-31 125-84 84-126 31-152q0-123-69-223l191-191q21-21 21-51z" horiz-adv-x="928.6" />
|
||||||
|
|
||||||
|
<glyph glyph-name="experte" unicode="" d="M571 457v-232q0-22-15-38t-38-16-38 16-16 38v196h-35v-509q0-25-19-44t-44-18-44 18-18 44v259h-36v-259q0-25-19-44t-44-18-44 18-18 44v509h-36v-196q0-22-15-38t-38-16-38 16-16 38v232q0 45 31 76t76 31h357q45 0 76-31t31-76z m-160 250q0-52-37-88t-88-37-89 37-36 88 36 89 89 36 88-36 37-89z" horiz-adv-x="571.4" />
|
||||||
|
|
||||||
|
<glyph glyph-name="linktipp" unicode="" d="M813 171q0 23-16 38l-116 116q-16 16-38 16-24 0-40-18 1-1 10-10t12-12 9-11 7-14 2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7-11 9-12 12-10 10q-19-17-19-40 0-23 16-38l115-116q15-15 38-15 22 0 38 15l82 81q16 16 16 37z m-393 394q0 22-15 38l-115 115q-16 16-38 16-22 0-38-15l-82-82q-16-15-16-37 0-22 16-38l116-116q15-15 38-15 23 0 40 17-2 2-11 11t-12 12-8 10-7 14-2 16q0 22 15 38t38 15q9 0 16-2t14-7 11-8 12-12 10-11q18 17 18 41z m500-394q0-66-48-113l-82-81q-46-47-113-47-68 0-114 48l-115 115q-46 47-46 114 0 68 49 116l-49 49q-48-49-116-49-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46 67 0 114-47l115-116q46-46 46-113 0-69-49-117l49-49q48 49 116 49 67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" />
|
||||||
|
|
||||||
|
<glyph glyph-name="zitat" unicode="" d="M429 671v-392q0-58-23-111t-61-91-91-61-111-23h-36q-14 0-25 11t-11 25v71q0 15 11 25t25 11h36q59 0 101 42t42 101v17q0 23-16 38t-38 16h-125q-44 0-76 31t-31 76v214q0 45 31 76t76 32h214q45 0 76-32t32-76z m500 0v-392q0-58-23-111t-61-91-91-61-111-23h-36q-14 0-25 11t-11 25v71q0 15 11 25t25 11h36q59 0 101 42t42 101v17q0 23-16 38t-38 16h-125q-44 0-76 31t-31 76v214q0 45 31 76t76 32h214q45 0 76-32t32-76z" horiz-adv-x="928.6" />
|
||||||
|
|
||||||
|
<glyph glyph-name="medien" unicode="" d="M994 331q0 19-30 19h-607q-22 0-48-12t-39-29l-164-203q-11-13-11-22 0-20 30-20h607q23 0 48 13t40 29l164 203q10 12 10 22z m-637 90h429v90q0 22-16 38t-38 15h-321q-23 0-38 16t-16 38v36q0 22-15 38t-38 15h-179q-22 0-38-15t-16-38v-476l143 175q25 30 65 49t78 19z m708-90q0-35-25-67l-165-203q-24-30-65-49t-78-19h-607q-51 0-88 37t-37 88v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q52 0 88-37t37-88v-90h107q30 0 56-13t37-40q8-17 8-37z" horiz-adv-x="1071.4" />
|
||||||
|
|
||||||
|
<glyph glyph-name="newsletter" unicode="" d="M984 844q19-13 15-36l-142-857q-3-16-18-25-8-5-18-5-6 0-13 3l-294 120-166-182q-10-12-27-12-7 0-12 2-11 4-17 13t-6 21v252l-264 108q-20 8-22 30-2 22 18 33l928 536q20 12 38-1z m-190-837l123 739-800-462 187-76 482 356-267-444z" horiz-adv-x="1000" />
|
||||||
|
|
||||||
|
<glyph glyph-name="anleitung" unicode="" d="M213-54q0-45-31-70t-75-26q-60 0-96 37l31 49q28-25 60-25 16 0 28 8t12 24q0 35-59 31l-14 31q4 6 18 24t24 31 20 21v1q-9 0-27-1t-27 0v-30h-59v85h186v-49l-53-65q28-6 45-27t17-49z m1 350v-89h-202q-4 20-4 30 0 29 14 52t31 38 37 27 31 24 14 25q0 14-9 22t-22 7q-25 0-45-32l-47 33q13 28 40 44t59 16q40 0 68-23t28-63q0-28-19-51t-42-36-42-28-20-30h71v34h59z m786-178v-107q0-7-5-13t-13-5h-678q-8 0-13 5t-5 13v107q0 8 5 13t13 5h678q7 0 13-6t5-12z m-786 502v-56h-187v56h60q0 22 0 67t1 68v7h-1q-5-10-28-30l-40 42 76 71h59v-225h60z m786-216v-108q0-7-5-12t-13-5h-678q-8 0-13 5t-5 12v108q0 7 5 12t13 5h678q7 0 13-5t5-12z m0 285v-107q0-7-5-12t-13-6h-678q-8 0-13 6t-5 12v107q0 8 5 13t13 5h678q7 0 13-5t5-13z" horiz-adv-x="1000" />
|
||||||
|
|
||||||
|
<glyph glyph-name="rechner" unicode="" d="M214-7q0 29-21 50t-50 21-51-21-21-50 21-51 51-21 50 21 21 51z m215 0q0 29-21 50t-51 21-50-21-21-50 21-51 50-21 51 21 21 51z m-215 214q0 30-21 51t-50 21-51-21-21-51 21-50 51-21 50 21 21 50z m429-214q0 29-21 50t-51 21-50-21-21-50 21-51 50-21 51 21 21 51z m-214 214q0 30-21 51t-51 21-50-21-21-51 21-50 50-21 51 21 21 50z m-215 214q0 30-21 51t-50 21-51-21-21-51 21-50 51-21 50 21 21 50z m429-214q0 30-21 51t-51 21-50-21-21-51 21-50 50-21 51 21 21 50z m-214 214q0 30-21 51t-51 21-50-21-21-51 21-50 50-21 51 21 21 50z m428-428v214q0 29-21 50t-50 22-50-22-22-50v-214q0-29 22-50t50-22 50 22 21 50z m-214 428q0 30-21 51t-51 21-50-21-21-51 21-50 50-21 51 21 21 50z m214 179v143q0 14-10 25t-26 11h-714q-14 0-25-11t-11-25v-143q0-14 11-25t25-11h714q15 0 26 11t10 25z m0-179q0 30-21 51t-50 21-51-21-21-51 21-50 51-21 50 21 21 50z m72 358v-858q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v858q0 29 21 50t50 21h786q29 0 50-21t22-50z" horiz-adv-x="1000" />
|
||||||
|
|
||||||
|
<glyph glyph-name="teilen" unicode="" d="M650 200q62 0 106-43t44-107q0-62-44-106t-106-44-106 44-44 106q0 6 1 14t1 12l-260 156q-42-32-92-32-62 0-106 44t-44 106 44 106 106 44q54 0 92-30l260 156q0 4-1 12t-1 12q0 62 44 106t106 44 106-43 44-107q0-62-44-106t-106-44q-52 0-90 32l-262-156q2-8 2-26 0-16-2-24l262-156q36 30 90 30z" horiz-adv-x="800" />
|
||||||
|
|
||||||
|
<glyph glyph-name="circle" unicode="" d="M857 350q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||||
|
|
||||||
|
<glyph glyph-name="plus" unicode="" d="M786 439v-107q0-22-16-38t-38-15h-232v-233q0-22-16-37t-38-16h-107q-22 0-38 16t-15 37v233h-232q-23 0-38 15t-16 38v107q0 23 16 38t38 16h232v232q0 22 15 38t38 16h107q23 0 38-16t16-38v-232h232q23 0 38-16t16-38z" horiz-adv-x="785.7" />
|
||||||
|
|
||||||
|
<glyph glyph-name="minus" unicode="" d="M786 439v-107q0-22-16-38t-38-15h-678q-23 0-38 15t-16 38v107q0 23 16 38t38 16h678q23 0 38-16t16-38z" horiz-adv-x="785.7" />
|
||||||
|
|
||||||
|
<glyph glyph-name="rss" unicode="" d="M214 100q0-45-31-76t-76-31-76 31-31 76 31 76 76 31 76-31 31-76z m286-69q1-15-9-26-10-12-27-12h-75q-14 0-24 9t-11 23q-12 128-103 219t-219 103q-14 1-23 11t-9 24v75q0 16 12 26 9 10 24 10h3q89-7 170-45t145-101q63-63 101-145t45-171z m286-1q1-15-10-26-10-11-26-11h-80q-14 0-25 10t-10 23q-7 120-57 228t-129 188-188 129-227 57q-14 1-24 11t-10 24v80q0 16 11 26 10 10 25 10h1q147-8 280-67t238-164q104-104 164-238t67-280z" horiz-adv-x="785.7" />
|
||||||
|
|
||||||
|
<glyph glyph-name="pin" unicode="" d="M268 368v250q0 8-5 13t-13 5-13-5-5-13v-250q0-8 5-13t13-5 13 5 5 13z m375-197q0-14-11-25t-25-10h-239l-29-270q-1-7-6-11t-11-5h-1q-15 0-17 15l-43 271h-225q-15 0-25 10t-11 25q0 69 44 124t99 55v286q-29 0-50 21t-22 50 22 50 50 22h357q29 0 50-22t21-50-21-50-50-21v-286q55 0 99-55t44-124z" horiz-adv-x="642.9" />
|
||||||
|
|
||||||
|
<glyph glyph-name="spin1" unicode="" d="M496 850c-176 0-331-90-421-226-18-27-33-55-46-85-12-29-21-60-28-92 0 0 0-1 0-1l0 0 0 0c0-1 0-2 0-2 0-7 5-12 11-12l101 0c5 0 10 4 11 9 29 113 109 206 214 253 20 10 41 17 63 23 31 7 62 11 95 11l0 0 0 0 0 0c25 0 50-2 74-7 5-1 10-2 14-3 6-1 10-3 14-4l0 0c5-1 11 1 13 6l51 87c0 0 1 1 1 2 2 6-1 13-7 15-22 7-43 13-65 17-5 1-9 1-13 2-27 5-54 7-82 7l0 0 0 0z m327-114c-5 0-9-2-11-6l-50-87c-3-4-2-10 2-14 29-29 54-63 73-101 4-7 7-14 11-22 19-46 30-97 30-151l0 0 0 0c0-77-22-149-62-209-7-11-15-23-24-33-9-11-18-21-28-31l0 0 0 0 0 0c-4-4-5-10-2-14l50-87c0-1 1-2 2-3 4-5 11-5 16-1 58 52 104 117 134 190 6 15 11 29 15 44 14 46 21 94 21 144 0 108-34 209-92 291-11 16-23 31-37 46-13 14-26 28-41 41l0 0c-1 1-1 1-2 1-2 1-4 2-5 2z m-811-468l0 0c-1 0-2 0-3 0-6-1-10-8-9-14 34-166 149-302 302-366 30-12 61-21 93-28 32-6 66-10 100-10l0 0 0 0c40 0 79 5 117 14 7 1 14 3 22 5 6 2 13 5 20 7 1 0 2 1 3 1 6 3 8 10 4 16l-50 87c-3 5-8 7-13 6-14-4-28-7-42-9-3-1-6-1-8-2-18-2-35-3-53-3l0 0 0 0c-128 0-242 63-311 160-1 0-1 0-1 0-13 19-25 40-35 61-10 21-18 43-24 65-1 6-6 10-11 10l-101 0z" horiz-adv-x="1000" />
|
||||||
|
|
||||||
|
<glyph glyph-name="zoom" unicode="" d="M0 403q0 185 131 316t316 131 318-131 131-316q0-141-82-256l186-186-111-111-186 186q-115-82-256-82-185 0-316 131t-131 318z m127 0q0-133 94-227t226-93 227 93 94 227-94 225-227 93-226-93-94-225z m129-65l0 127 129 0 0 129 127 0 0-129 129 0 0-127-129 0 0-129-127 0 0 129-129 0z" horiz-adv-x="1000" />
|
||||||
|
|
||||||
|
<glyph glyph-name="bookmark" unicode="" d="M643 707h-572v-693l237 227 49 47 50-47 236-227v693z m7 72q12 0 24-5 19-8 29-23t11-35v-719q0-19-11-35t-29-23q-10-4-24-4-27 0-47 18l-246 236-246-236q-20-19-46-19-13 0-25 5-18 7-29 23t-11 35v719q0 19 11 35t29 23q12 5 25 5h585z" horiz-adv-x="714.3" />
|
||||||
|
|
||||||
|
<glyph glyph-name="fazit" unicode="" d="M464 797l447-446-447-448-157 160 175 176-464 0 0 224 464 0-175 176z" horiz-adv-x="928" />
|
||||||
|
|
||||||
|
<glyph glyph-name="close" unicode="" d="M724 112q0-22-15-38l-76-76q-16-15-38-15t-38 15l-164 165-164-165q-16-15-38-15t-38 15l-76 76q-16 16-16 38t16 38l164 164-164 164q-16 16-16 38t16 38l76 76q16 16 38 16t38-16l164-164 164 164q16 16 38 16t38-16l76-76q15-15 15-38t-15-38l-164-164 164-164q15-15 15-38z" horiz-adv-x="785.7" />
|
||||||
|
|
||||||
|
<glyph glyph-name="check" unicode="" d="M933 534q0-22-16-38l-404-404-76-76q-16-15-38-15t-38 15l-76 76-202 202q-15 16-15 38t15 38l76 76q16 16 38 16t38-16l164-165 366 367q16 16 38 16t38-16l76-76q16-15 16-38z" horiz-adv-x="1000" />
|
||||||
|
|
||||||
|
<glyph glyph-name="sparen" unicode="" d="M545 121l19-89q2-7-1-13t-10-8l-3 0q-2-1-6-2t-9-3-12-3-14-3-16-2-19-3-21-2-21 0q-131 0-228 73t-133 196h-53q-7 0-13 5t-5 13v63q0 7 5 12t13 6h37q-1 31 0 58h-37q-8 0-13 5t-5 13v64q0 8 5 13t13 5h55q37 117 135 188t224 72q57 0 108-13 6-2 11-9 4-6 2-13l-24-89q-2-7-8-11t-13-1l-2 1q-3 0-7 1l-10 2t-12 2-15 2-16 1-16 1q-71 0-126-36t-84-98h261q9 0 14-7 6-7 4-15l-13-63q-3-15-18-15h-273q-1-20 0-58h257q8 0 13-7 5-7 4-15l-14-63q-1-6-6-10t-11-4h-216q27-65 84-104t127-38q10 0 20 1t19 2 16 2 14 3 10 3l7 1 3 2q7 2 14-2 7-3 9-11z" horiz-adv-x="571.4" />
|
||||||
|
|
||||||
|
<glyph glyph-name="info-circled" unicode="" d="M571 82v89q0 8-5 13t-12 5h-54v286q0 8-5 13t-13 5h-178q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h53v-179h-53q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h250q7 0 12 5t5 13z m-71 500v89q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-89q0-8 5-13t13-5h107q8 0 13 5t5 13z m357-232q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z" horiz-adv-x="857.1" />
|
||||||
|
|
||||||
|
<glyph glyph-name="attention" unicode="" d="M571 83v106q0 8-5 13t-12 5h-108q-7 0-12-5t-5-13v-106q0-8 5-13t12-6h108q7 0 12 6t5 13z m-1 208l10 257q0 6-5 10-7 6-14 6h-122q-6 0-14-6-5-4-5-12l9-255q0-5 6-9t13-3h103q8 0 14 3t5 9z m-7 522l428-786q20-35-1-70-9-17-26-26t-35-10h-858q-18 0-35 10t-26 26q-21 35-1 70l429 786q9 17 26 27t36 10 36-10 27-27z" horiz-adv-x="1000" />
|
||||||
|
|
||||||
|
<glyph glyph-name="youtube-play" unicode="" d="M397 221l270 139-270 141v-280z m103 481q94 0 181-3t128-5l41-2q0 0 9-1t13-2 13-2 16-5 16-7 17-11 16-15q4-3 9-10t16-33 15-56q4-36 7-76t3-64v-98q1-81-10-162-4-30-14-55t-18-35l-8-9q-7-8-16-15t-17-10-16-7-16-5-13-2-13-2-9-1q-140-11-350-11-115 2-201 4t-111 4l-28 3-20 2q-20 3-30 5t-29 12-31 23q-4 3-9 10t-16 33-15 56q-4 36-7 76t-3 64v98q-1 81 10 162 4 31 14 55t18 35l8 9q8 9 16 15t17 11 16 7 16 5 13 2 13 2 9 1q140 10 350 10z" horiz-adv-x="1000" />
|
||||||
|
|
||||||
|
<glyph glyph-name="download" unicode="" d="M714 100q0 15-10 25t-25 11-25-11-11-25 11-25 25-11 25 11 10 25z m143 0q0 15-10 25t-26 11-25-11-10-25 10-25 25-11 26 11 10 25z m72 125v-179q0-22-16-37t-38-16h-821q-23 0-38 16t-16 37v179q0 22 16 38t38 16h259l75-76q33-32 76-32t76 32l76 76h259q22 0 38-16t16-38z m-182 318q10-23-8-39l-250-250q-10-11-25-11t-25 11l-250 250q-17 16-8 39 10 21 33 21h143v250q0 15 11 25t25 11h143q14 0 25-11t10-25v-250h143q24 0 33-21z" horiz-adv-x="928.6" />
|
||||||
|
|
||||||
|
<glyph glyph-name="praxistipp" unicode="" d="M411 529q0-8-6-13t-12-5-13 5-5 13q0 25-30 39t-59 14q-7 0-13 5t-5 13 5 13 13 5q28 0 55-9t49-30 21-50z m89 0q0 40-19 74t-50 57-69 35-76 12-76-12-69-35-50-57-20-74q0-57 38-101 6-6 17-18t17-19q72-85 79-166h127q8 81 79 166 6 6 17 19t17 18q38 44 38 101z m71 0q0-87-57-150-25-27-42-48t-33-54-19-60q26-15 26-46 0-20-13-35 13-15 13-36 0-29-25-45 8-13 8-26 0-26-18-40t-43-14q-11-25-34-39t-48-15-49 15-33 39q-26 0-44 14t-17 40q0 13 7 26-25 16-25 45 0 21 14 36-14 15-14 35 0 31 26 46-2 28-19 60t-33 54-41 48q-58 63-58 150 0 55 25 103t65 79 92 49 104 19 104-19 91-49 66-79 24-103z" horiz-adv-x="571.4" />
|
||||||
|
|
||||||
|
<glyph glyph-name="mail" unicode="" d="M929 11v428q-18-20-39-36-149-115-238-189-28-24-46-37t-48-28-57-13h-2q-26 0-57 13t-48 28-46 37q-88 74-238 189-21 16-39 36v-428q0-7 6-13t12-5h822q7 0 12 5t6 13z m0 586v14t-1 7-1 7-3 5-5 4-8 2h-822q-7 0-12-6t-6-12q0-94 83-159 107-84 223-176 4-3 20-17t25-21 25-17 28-16 24-5h2q11 0 24 5t28 16 25 17 25 21 20 17q116 92 224 176 30 24 56 65t26 73z m71 21v-607q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v607q0 37 26 63t63 26h822q37 0 63-26t26-63z" horiz-adv-x="1000" />
|
||||||
|
|
||||||
|
<glyph glyph-name="star" unicode="" d="M929 489q0-12-15-27l-202-197 48-279q0-4 0-12 0-11-6-19t-17-9q-10 0-22 7l-251 132-250-132q-12-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
|
||||||
|
|
||||||
|
<glyph glyph-name="star-empty" unicode="" d="M635 290l170 166-235 34-106 213-105-213-236-34 171-166-41-235 211 111 211-111z m294 199q0-12-15-27l-202-197 48-279q0-4 0-12 0-28-23-28-10 0-22 7l-251 132-250-132q-12-7-23-7-11 0-17 9t-6 19q0 4 1 12l48 279-203 197q-14 15-14 27 0 21 31 26l280 40 126 254q11 23 27 23t28-23l125-254 280-40q32-5 32-26z" horiz-adv-x="928.6" />
|
||||||
|
|
||||||
|
<glyph glyph-name="comment-empty" unicode="" d="M500 636q-114 0-213-39t-157-105-59-142q0-62 40-119t113-98l48-28-15-53q-13-51-39-97 85 36 154 96l24 21 32-3q38-5 72-5 114 0 213 39t157 105 59 142-59 142-157 105-213 39z m500-286q0-97-67-179t-182-130-251-48q-39 0-81 4-110-97-257-135-27-8-63-12h-3q-8 0-15 6t-9 15v1q-2 2 0 6t1 6 2 5l4 5t4 5 4 5q4 5 17 19t20 22 17 22 18 28 15 33 15 42q-88 50-138 123t-51 157q0 97 67 179t182 130 251 48 251-48 182-130 67-179z" horiz-adv-x="1000" />
|
||||||
|
|
||||||
|
<glyph glyph-name="print" unicode="" d="M214-7h500v143h-500v-143z m0 357h500v214h-89q-22 0-38 16t-16 38v89h-357v-357z m643-36q0 15-10 25t-26 11-25-11-10-25 10-25 25-10 26 10 10 25z m72 0v-232q0-7-6-12t-12-6h-125v-89q0-22-16-38t-38-16h-536q-22 0-37 16t-16 38v89h-125q-7 0-13 6t-5 12v232q0 44 32 76t75 31h36v304q0 22 16 38t37 16h375q23 0 50-12t42-26l85-85q15-16 27-43t11-49v-143h35q45 0 76-31t32-76z" horiz-adv-x="928.6" />
|
||||||
|
|
||||||
|
<glyph glyph-name="calendar-empty" unicode="" d="M71-79h786v572h-786v-572z m215 679v161q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h36q8 0 13 5t5 13z m428 0v161q0 8-5 13t-13 5h-35q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 37 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 37 27 63t63 26h35q37 0 64-26t26-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
|
||||||
|
</font>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 14 KiB |
BIN
public/fonts/Content.woff
Normal file
BIN
public/fonts/Immo-Sans/immoSans-Bold.eot
Normal file
BIN
public/fonts/Immo-Sans/immoSans-Regular.eot
Normal file
BIN
public/fonts/Immo-Sans/immoSans-Regular.woff
Normal file
BIN
public/fonts/Immo-Sans/immoSans-Regular.woff2
Normal file
3559
public/images/dashboard/AusweisHaken.svg
Normal file
|
After Width: | Height: | Size: 2.4 MiB |
3559
public/images/dashboard/AusweisKreuz.svg
Normal file
|
After Width: | Height: | Size: 2.4 MiB |
40599
public/images/dashboard/DatenblattHaken.svg
Normal file
|
After Width: | Height: | Size: 10 MiB |
40596
public/images/dashboard/DatenblattKreuz.svg
Normal file
|
After Width: | Height: | Size: 10 MiB |
3646
public/images/dashboard/GEGNachweisHaken.svg
Normal file
|
After Width: | Height: | Size: 3.1 MiB |
3646
public/images/dashboard/GEGNachweisKreuz.svg
Normal file
|
After Width: | Height: | Size: 3.1 MiB |
36850
public/images/dashboard/PlanunterlagenHaken.svg
Normal file
|
After Width: | Height: | Size: 5.2 MiB |
36850
public/images/dashboard/PlanunterlagenKreuz.svg
Normal file
|
After Width: | Height: | Size: 5.2 MiB |
864
public/images/dashboard/SanierungsfahrplanHaken.svg
Normal file
|
After Width: | Height: | Size: 582 KiB |