Compare commits
3270 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
55e079b0e6 | ||
|
dfbc125e69 | ||
|
cc4a840732 | ||
|
c1c5bbe0e2 | ||
|
25c7c0a414 | ||
|
3052c5192b | ||
|
b842216033 | ||
|
273ba1f53f | ||
|
3f06fb0e09 | ||
|
245b12d69d | ||
|
663b831ec1 | ||
|
e4ee77abe9 | ||
|
6fdcd68726 | ||
|
b91ea42ab6 | ||
|
8e80bf7d4d | ||
|
c66f7435e3 | ||
|
c8cf9650a0 | ||
|
a2e25fa92d | ||
|
0a7d83a7a4 | ||
|
3965512ef2 | ||
|
4bc3f4db53 | ||
|
602e77aef9 | ||
|
3212aef056 | ||
|
53b38964cc | ||
|
db656bae90 | ||
|
8d2867be57 | ||
|
af60136caf | ||
|
4ddce1401a | ||
|
299031ac3f | ||
|
7a4c94af58 | ||
|
d65a73a151 | ||
|
fdde41fa4f | ||
|
29ddc7cff8 | ||
|
0a6cf855c3 | ||
|
779c555aa5 | ||
|
be8254584e | ||
|
6d515d303b | ||
|
03da869c44 | ||
|
94862aafbc | ||
|
a4aa2c5f07 | ||
|
7cd73a8c96 | ||
|
6db48bd2b5 | ||
|
22228b5bb2 | ||
|
7337cdf152 | ||
|
ab86be2ea0 | ||
|
9c13e34d99 | ||
|
3c8cb1b5f4 | ||
|
80d04d9ae1 | ||
|
8531bb1489 | ||
|
9cb514ca75 | ||
|
4889590b35 | ||
|
fdb8082095 | ||
|
42e2001160 | ||
|
f0bb6d4fe2 | ||
|
6585fecc6a | ||
|
20a84e4899 | ||
|
4eb435e1d1 | ||
|
6f1ced3bf8 | ||
|
209073d08a | ||
|
cbe4e8503d | ||
|
49a915a7a2 | ||
|
1bb2e190a2 | ||
|
205767efd5 | ||
|
fde34cd9b1 | ||
|
56c3ab71bc | ||
|
916c852a71 | ||
|
093864943e | ||
|
aa3aa3ce62 | ||
|
6092a1c3be | ||
|
9f4745b740 | ||
|
b72d1675e4 | ||
|
bf46f423c1 | ||
|
ab72563523 | ||
|
5d05c936c7 | ||
|
d21e004be7 | ||
|
afc26eb0a1 | ||
|
4cacf2c16d | ||
|
21f587ed55 | ||
|
e8a2778db0 | ||
|
01b16bba68 | ||
|
e21b0b337f | ||
|
43b45a5461 | ||
|
a179924253 | ||
|
48ac52037d | ||
|
2fd6c1459f | ||
|
d9bd54a002 | ||
|
2f631b9a9f | ||
|
689433001f | ||
|
eebdc0f384 | ||
|
5005bac4a5 | ||
|
747adc64ca | ||
|
eb06aca1ae | ||
|
c1fb491dea | ||
|
b9c611f235 | ||
|
b86b968e36 | ||
|
de89d8442c | ||
|
c9d0ab7e9a | ||
|
95b19c4522 | ||
|
ca91a6f3ce | ||
|
681ec8269c | ||
|
dbf39e3057 | ||
|
8c45de4d25 | ||
|
963940c367 | ||
|
fb2bcd87eb | ||
|
e164ced733 | ||
|
4c8955168f | ||
|
ce006803c1 | ||
|
c65b8f54a5 | ||
|
18d0c3d55c | ||
|
95d9c628d7 | ||
|
82db686b05 | ||
|
9ffd7226f9 | ||
|
47aefb5e00 | ||
|
f97d4d9c6d | ||
|
0e4fe65d27 | ||
|
9c97414597 | ||
|
b9b0ab98ee | ||
|
1a44a41c22 | ||
|
6a6871af49 | ||
|
d2560df18a | ||
|
ffc062ce6e | ||
|
39e56533ae | ||
|
c53b5e8f7b | ||
|
f9380df215 | ||
|
788822db37 | ||
|
24df252924 | ||
|
cfc1468307 | ||
|
eba030508f | ||
|
d986228964 | ||
|
34d6b01ce6 | ||
|
d3cb276293 | ||
|
22b8340a0d | ||
|
9e9d161137 | ||
|
7c8a8044c9 | ||
|
d0db3f4ef0 | ||
|
9b60897a2a | ||
|
f18e1760a2 | ||
|
ab472a32f6 | ||
|
982f5e1df9 | ||
|
f86c687bd8 | ||
|
53f63d8207 | ||
|
e813ec5575 | ||
|
57416fffea | ||
|
680201e43e | ||
|
53e20dfd63 | ||
|
0cca95db04 | ||
|
c123240588 | ||
|
dbcd2f4559 | ||
|
060c134679 | ||
|
42f31ed4cc | ||
|
38800470f2 | ||
|
f80cb3cc64 | ||
|
baba117865 | ||
|
2039414e2a | ||
|
64f3547858 | ||
|
9c0e2223d4 | ||
|
50b0938dd8 | ||
|
de05d258ef | ||
|
c6ad2dbe8e | ||
|
7b476f3e92 | ||
|
dd71063cdb | ||
|
4f814d7361 | ||
|
9f412fe108 | ||
|
a8d1f8e831 | ||
|
efe7e00821 | ||
|
24afaa8a91 | ||
|
86bf47ce61 | ||
|
ab153ea15b | ||
|
79faa6a377 | ||
|
e5a73420b6 | ||
|
67ac4b37a2 | ||
|
233987634c | ||
|
b46b707586 | ||
|
9cb54041cd | ||
|
ead94222b6 | ||
|
6ed88bb607 | ||
|
760d9928dc | ||
|
50e8a42e34 | ||
|
62e0c55939 | ||
|
1a9d4eca2e | ||
|
53a99c36b1 | ||
|
040016d88f | ||
|
3c6aadb253 | ||
|
67035477c1 | ||
|
4c919de552 | ||
|
d2619efa56 | ||
|
86114360bb | ||
|
d2ed9e9eeb | ||
|
be076197d2 | ||
|
ca1c10382a | ||
|
7ef4139f4e | ||
|
c1a164da7a | ||
|
5e1ba64e87 | ||
|
d074a56b83 | ||
|
787f33f555 | ||
|
ceefccb3b2 | ||
|
cbbc5e0ff1 | ||
|
3749f04e6a | ||
|
6d748f3dda | ||
|
7bdb1f3385 | ||
|
297dffcbc0 | ||
|
06b826769b | ||
|
f946f2926a | ||
|
f4cbb23aa0 | ||
|
ce1ea141d2 | ||
|
9ca89cf975 | ||
|
80a4e40748 | ||
|
a410a8f758 | ||
|
f9f5275694 | ||
|
e2552f50be | ||
|
111e450096 | ||
|
fea04f12d7 | ||
|
138b0d0c4e | ||
|
e806342959 | ||
|
7e522785ff | ||
|
7febe9dddc | ||
|
ca5f1c4040 | ||
|
be0a5a8e98 | ||
|
e7eeb9114c | ||
|
833f0ffcf5 | ||
|
2a5c6a4d9e | ||
|
5db55ed7af | ||
|
b3c4bedf4b | ||
|
a359975d51 | ||
|
65105982b2 | ||
|
8f6b9207d2 | ||
|
57fc586eb8 | ||
|
28f5fa1019 | ||
|
f7fd8dc29e | ||
|
959ec41656 | ||
|
ffa9b9d703 | ||
|
254b32eec4 | ||
|
0862a8e652 | ||
|
3996b3e1cb | ||
|
5b7aa513a2 | ||
|
3a51cc35ca | ||
|
4097d00f80 | ||
|
ceece7c8f6 | ||
|
4ae0a9d659 | ||
|
440f939725 | ||
|
4cda7f0d3c | ||
|
ee2b0b5b81 | ||
|
3900dffdbe | ||
|
648e200d87 | ||
|
86216a6456 | ||
|
71850d505e | ||
|
c232e52047 | ||
|
6f14668342 | ||
|
93924f1f3d | ||
|
ba551fb724 | ||
|
6e71132721 | ||
|
27d4166fae | ||
|
73ee2281b9 | ||
|
5f2f0c6eb7 | ||
|
58c21b1804 | ||
|
3cc3751d09 | ||
|
18b27b61ac | ||
|
6a7b9d295e | ||
|
3f2c872463 | ||
|
904de02083 | ||
|
a53242b8d3 | ||
|
0c4f7847fc | ||
|
a340da2359 | ||
|
0bec257730 | ||
|
62222bb781 | ||
|
cc1b2a657b | ||
|
4d7a2edeea | ||
|
e305da3feb | ||
|
e5c2813cc1 | ||
|
1a6386f7df | ||
|
b21a2beff8 | ||
|
48f63db5eb | ||
|
32152074a1 | ||
|
b0750bdafc | ||
|
804a7f656e | ||
|
a8cddf020f | ||
|
7d9f271b7c | ||
|
f8b8d98723 | ||
|
b045d44d14 | ||
|
2aae36dfca | ||
|
97d94919e4 | ||
|
aec7ea5c08 | ||
|
67ef0ae547 | ||
|
8ce1f61611 | ||
|
c7ca444fe7 | ||
|
6fb16aa12c | ||
|
def6990eba | ||
|
0ae230ddba | ||
|
7860b94a55 | ||
|
d4c7aad3ab | ||
|
d362c1d496 | ||
|
41e446e3a5 | ||
|
0fee793931 | ||
|
b4b9557fe9 | ||
|
607398f7ec | ||
|
51fd9a634e | ||
|
e28b32c76d | ||
|
29a45315a2 | ||
|
3919dae9fe | ||
|
e6b8124a72 | ||
|
c94f4d0ee7 | ||
|
4e53d11cbd | ||
|
33c5cc6b0b | ||
|
b9399f887b | ||
|
68e8a9a988 | ||
|
4a4df586c6 | ||
|
9fddc59c56 | ||
|
0d66003dee | ||
|
0aa7baee1e | ||
|
1a2c9a8f49 | ||
|
6d7a88ef29 | ||
|
d457c5391f | ||
|
da2cbb5c4a | ||
|
2fa8955aa4 | ||
|
01b6046d5a | ||
|
dd4c9ca1e0 | ||
|
1041caad23 | ||
|
6822c3d94c | ||
|
84f8323832 | ||
|
d89f2f38d3 | ||
|
4018826abe | ||
|
00be6206a9 | ||
|
99e7ce25de | ||
|
3ef91f9b93 | ||
|
1cc0cc8d72 | ||
|
4aef652b20 | ||
|
d64429f0bb | ||
|
65a055fcf9 | ||
|
9563cbab8d | ||
|
d471c1b43e | ||
|
79a6c3fa24 | ||
|
420829cec3 | ||
|
1cfc190b73 | ||
|
76e534ef0b | ||
|
cf06e4fc6a | ||
|
c19dbc1a41 | ||
|
8542091977 | ||
|
15671c02c3 | ||
|
561ce385a1 | ||
|
0f72151aa7 | ||
|
e4c8d033dc | ||
|
3bde233e8a | ||
|
b7e67a9000 | ||
|
f279c4edc9 | ||
|
eec742d48a | ||
|
c9385ab091 | ||
|
b45645edc3 | ||
|
14b70c809c | ||
|
8c09cf7635 | ||
|
7004812acf | ||
|
27c571e4a6 | ||
|
234f8399ab | ||
|
9a82b28377 | ||
|
b683cbea4f | ||
|
c29964a05b | ||
|
9c5f1848a6 | ||
|
36aa17bd1a | ||
|
c1d8d78a2e | ||
|
7c76066d04 | ||
|
9d2d569107 | ||
|
14ebccce5f | ||
|
41e650488d | ||
|
ad9d89a1bb | ||
|
e2f5fd359f | ||
|
81f3eb6675 | ||
|
ca6f0c51e5 | ||
|
e999672037 | ||
|
d6a25673bc | ||
|
360c19a8f5 | ||
|
5c1f33a8a8 | ||
|
286616c13a | ||
|
591278273f | ||
|
a405a89567 | ||
|
abb19cc493 | ||
|
892509b5db | ||
|
6b44eb780d | ||
|
90846eb673 | ||
|
5b8e5d41fe | ||
|
947f4c3f17 | ||
|
2578d6e4da | ||
|
daeea52d64 | ||
|
f5ab99ae25 | ||
|
d040adc9e8 | ||
|
1b77cb2ec2 | ||
|
3641a40a69 | ||
|
b11b78deab | ||
|
11096ad67f | ||
|
d42437d63b | ||
|
a59557bc85 | ||
|
cc2f1489f3 | ||
|
071526f7a7 | ||
|
c61043ad65 | ||
|
3429f61ebc | ||
|
39283bf55f | ||
|
05df11bd7f | ||
|
1c3db93ffd | ||
|
f36d490776 | ||
|
f6527e8c7d | ||
|
e101afccc6 | ||
|
6bfcc53073 | ||
|
241bed34c3 | ||
|
a875e13e55 | ||
|
e5480583d9 | ||
|
2e47d654be | ||
|
e791002e2e | ||
|
2b52fb23a2 | ||
|
83c92deda4 | ||
|
1ef3b816a7 | ||
|
e90af652ca | ||
|
139c289f1d | ||
|
4b8af75652 | ||
|
108167430d | ||
|
96d3a9111d | ||
|
25b774c905 | ||
|
07fcd4b7b7 | ||
|
2243208ae9 | ||
|
975469e190 | ||
|
be7823cfba | ||
|
b1cd37497c | ||
|
03af6aa70e | ||
|
71f7be0149 | ||
|
e5fbfd1a93 | ||
|
c3b75656a4 | ||
|
64ec884b88 | ||
|
92423be010 | ||
|
71c87b2993 | ||
|
83885990c0 | ||
|
21f62035cf | ||
|
ee06eef1d3 | ||
|
1965692f0f | ||
|
deed8bb14c | ||
|
8c175ad9cc | ||
|
fd86cccdf2 | ||
|
09fcd6c7ab | ||
|
1a9381a9a8 | ||
|
0bcebe80a0 | ||
|
ebb7354d23 | ||
|
005589007e | ||
|
961183d17b | ||
|
5a56ce7918 | ||
|
eca69bb085 | ||
|
f15f8a32be | ||
|
2971e34325 | ||
|
af9bf73313 | ||
|
9573286e7f | ||
|
859a835d5b | ||
|
c02ab392c4 | ||
|
0a45391f7c | ||
|
8b651e526f | ||
|
43e51b076f | ||
|
8759180068 | ||
|
911ca91800 | ||
|
e0169d98b7 | ||
|
11be388dcc | ||
|
5d343ad006 | ||
|
e434d11bd0 | ||
|
17d35418da | ||
|
b73ba40b8e | ||
|
6c00dca9ec | ||
|
9403b72ad6 | ||
|
3cd976976a | ||
|
d9e854ca45 | ||
|
6cea240822 | ||
|
5721bb31c8 | ||
|
e916b572c5 | ||
|
3366ed74f4 | ||
|
416b9d22d7 | ||
|
6da4856538 | ||
|
47bc4200a7 | ||
|
2e08e3db7b | ||
|
d15b483062 | ||
|
3af8cf9481 | ||
|
f167aad093 | ||
|
cf2a352f1e | ||
|
6dfdd667ad | ||
|
2d0ea47c7c | ||
|
ea859786da | ||
|
c8ff395fe4 | ||
|
8d49d4f164 | ||
|
855189b565 | ||
|
c8e63f4a57 | ||
|
5efe255a77 | ||
|
bc7037f1fa | ||
|
ba9cb470a6 | ||
|
ca24f9db30 | ||
|
afbf183b97 | ||
|
cd75ee795f | ||
|
7342c0d72a | ||
|
265489956c | ||
|
1bd606a89c | ||
|
496a56be5d | ||
|
24e4d0adf4 | ||
|
417126484b | ||
|
7417095e10 | ||
|
b868ef19ae | ||
|
f6f305f0f3 | ||
|
58423feac4 | ||
|
31ddad6dc1 | ||
|
08f222d777 | ||
|
b09925dd09 | ||
|
77066ec392 | ||
|
537de58afc | ||
|
1948a60c29 | ||
|
12795e2115 | ||
|
37055bbf0f | ||
|
60f6f58e69 | ||
|
347cfdeaef | ||
|
91b45e3595 | ||
|
a6a01dae3d | ||
|
b12a61b2f6 | ||
|
c387f5d17b | ||
|
042b23c647 | ||
|
42fae2b6fc | ||
|
8434bd1d95 | ||
|
21f06c6e39 | ||
|
528af06922 | ||
|
ac07b86971 | ||
|
ef53f59551 | ||
|
8c026be22d | ||
|
485319d4f8 | ||
|
4c4e1c1cc6 | ||
|
33f8742ad1 | ||
|
51f8b68b5b | ||
|
10497080c1 | ||
|
7f85a0adeb | ||
|
a347d89bfd | ||
|
fb16483c40 | ||
|
12b0be2f6d | ||
|
361a8eb580 | ||
|
bc87a3a114 | ||
|
9c027b59db | ||
|
5273ea7183 | ||
|
9fdba9c9cc | ||
|
0db8e026a3 | ||
|
aa4acd1bd2 | ||
|
2970f368bc | ||
|
fd53f078ae | ||
|
cd449c1c6e | ||
|
a9ba1e1e38 | ||
|
e34331817b | ||
|
2cedc71241 | ||
|
4fe9ee2d8d | ||
|
b3c1e21ccf | ||
|
8dcd2b531a | ||
|
6251fea936 | ||
|
6adbfef8e8 | ||
|
55f1be350b | ||
|
0c3e93bba6 | ||
|
a9bec4c4fd | ||
|
b4827419d0 | ||
|
2af7e4c4d4 | ||
|
6d0c17557b | ||
|
f02cf6fca2 | ||
|
9d8ae61a56 | ||
|
b4ffd1527a | ||
|
ce12e09972 | ||
|
729b83f195 | ||
|
ae6b4aa0d3 | ||
|
4bedece94e | ||
|
b1673687a8 | ||
|
f5779ba6c1 | ||
|
a0267481df | ||
|
619f0fde1a | ||
|
0895df9d5d | ||
|
6688e5f830 | ||
|
c51a034a9f | ||
|
50fd645a1f | ||
|
5773f159d2 | ||
|
4a3d12c926 | ||
|
cdbc82f689 | ||
|
459e2759b3 | ||
|
2594714709 | ||
|
a216dd11e3 | ||
|
4bb86f4790 | ||
|
c7ab3419b4 | ||
|
cd5990ca62 | ||
|
edd19afcf3 | ||
|
28076f2441 | ||
|
8d60b893c7 | ||
|
905300ec47 | ||
|
7530b6dfdc | ||
|
9bdaa75514 | ||
|
ed910df0b8 | ||
|
e9523e29e7 | ||
|
813e315ae3 | ||
|
ee9b3f3a22 | ||
|
b65618bd0c | ||
|
a1f87d86e3 | ||
|
c4e8c1d492 | ||
|
67165dcb47 | ||
|
344eeebecb | ||
|
5b4ea9995b | ||
|
ebd7c05523 | ||
|
058c6d6391 | ||
|
ba0d6b2525 | ||
|
d69f0e4d72 | ||
|
6e71fde6f5 | ||
|
3e018487c6 | ||
|
1f4efbb72b | ||
|
c26c3ea192 | ||
|
53675d2d60 | ||
|
ace57c52f4 | ||
|
6d8401d3e0 | ||
|
5f1fbe977d | ||
|
1a034d7e9b | ||
|
4bf7ac23db | ||
|
17c00236cf | ||
|
1e2ce0a18f | ||
|
850c8f0d39 | ||
|
c8f2f1346d | ||
|
e892768dc3 | ||
|
094423042e | ||
|
7cc39dfd3b | ||
|
c9b0abb525 | ||
|
893e21fd4d | ||
|
639e9f8d4a | ||
|
a6cdd880c8 | ||
|
f9ae25ace5 | ||
|
aef2ee18dd | ||
|
21196c62ee | ||
|
c272a9de77 | ||
|
78ce8c41bd | ||
|
43d5fe6692 | ||
|
898ead74d1 | ||
|
bb5fa34611 | ||
|
a240d9a3e3 | ||
|
bd07bf3264 | ||
|
ebd4d88f31 | ||
|
832b68752b | ||
|
99aa49ece5 | ||
|
e56588125b | ||
|
b9e35bba6c | ||
|
ffd3c95ade | ||
|
eaf5f86a19 | ||
|
87d3985a60 | ||
|
bd8615e9f2 | ||
|
425e53e445 | ||
|
76412c96ce | ||
|
aef76fb689 | ||
|
2c9609d0c3 | ||
|
075f89df49 | ||
|
62dd14a627 | ||
|
735098b2c7 | ||
|
6430c18d2a | ||
|
6b4617b6e7 | ||
|
9cb979d830 | ||
|
8dc98d4aca | ||
|
91f6970eb0 | ||
|
afc6088f70 | ||
|
16fc420030 | ||
|
90275a865c | ||
|
fb89b488d2 | ||
|
6901177f05 | ||
|
5855ba8dde | ||
|
12c9732fa8 | ||
|
5bf706e528 | ||
|
fe5ec165f2 | ||
|
a3197b7d55 | ||
|
ef06ecd774 | ||
|
56f4460995 | ||
|
e35ba06a97 | ||
|
ffd371d54c | ||
|
9f12f7035c | ||
|
5b92c3833b | ||
|
125ef2b179 | ||
|
c596831b0c | ||
|
1859a028aa | ||
|
a72c033e5b | ||
|
34cabe5f70 | ||
|
39d311c858 | ||
|
956cbde1bc | ||
|
28ad9528d2 | ||
|
d197771eb3 | ||
|
65f7e1bee4 | ||
|
6c341590ee | ||
|
6a9bfa0ef0 | ||
|
7e55d52874 | ||
|
615032a0a8 | ||
|
147298188b | ||
|
be16fdbfc2 | ||
|
396e2cc16f | ||
|
95fc072b0b | ||
|
73dec168ca | ||
|
aac869e435 | ||
|
396ef61206 | ||
|
215dc8d254 | ||
|
132312ea06 | ||
|
d34c5ed03b | ||
|
3795421f08 | ||
|
ea59eda5b1 | ||
|
441faaa104 | ||
|
1b7bad9479 | ||
|
5cddfc8a97 | ||
|
754db92a9a | ||
|
a56eed8563 | ||
|
723b50da53 | ||
|
8b21e567f2 | ||
|
962948afdb | ||
|
4c50131761 | ||
|
c523a5a7c6 | ||
|
a58cccfff6 | ||
|
ee33f2ba74 | ||
|
998c9d2645 | ||
|
c136231742 | ||
|
3b8773f4de | ||
|
db3f6d9774 | ||
|
d9d16753c0 | ||
|
48a63dad45 | ||
|
94a503f95d | ||
|
9b1db4740d | ||
|
24dd57d57d | ||
|
4973687e07 | ||
|
0b274c4755 | ||
|
82f1e3984f | ||
|
cd4ca1c1e0 | ||
|
4f07c86e7e | ||
|
6253acf53c | ||
|
4aaf1a1587 | ||
|
0c3fe73ce2 | ||
|
1a9f117530 | ||
|
f739f7bc0e | ||
|
ff1698a49c | ||
|
45682bbf99 | ||
|
fe01a42f82 | ||
|
f119bc44d9 | ||
|
dc959ec49b | ||
|
b81a3682c2 | ||
|
6c7ef6e92e | ||
|
ee37c10399 | ||
|
05ec312127 | ||
|
bbf5cb03ad | ||
|
cfd5dcd423 | ||
|
934071801d | ||
|
e809ed3423 | ||
|
ae4d8b7fb2 | ||
|
646a42150f | ||
|
ecd06fc837 | ||
|
bef22ffbcc | ||
|
30bedd0877 | ||
|
5a521c8a5f | ||
|
44bcaf131e | ||
|
6060ae264b | ||
|
292f2f1ca3 | ||
|
b26e79eb1b | ||
|
82ff819cf8 | ||
|
bf0f8b9a5d | ||
|
984134aaec | ||
|
6c94bc29c9 | ||
|
8da41cee3b | ||
|
22f9bf7165 | ||
|
6de13a61f7 | ||
|
379230dd39 | ||
|
79ce15a92a | ||
|
fbbf6b984f | ||
|
57e6b0227f | ||
|
4b7f920b5a | ||
|
90e0169eb7 | ||
|
a5b0cc0a65 | ||
|
e94917a9d2 | ||
|
4064cc8c2b | ||
|
56f17f1bd8 | ||
|
f0e50d3cd2 | ||
|
2ab8a4b213 | ||
|
5a173a491c | ||
|
bbf7c06bd4 | ||
|
616fc938cb | ||
|
86547b9267 | ||
|
c237fe6adc | ||
|
e14fd8b286 | ||
|
a0692df845 | ||
|
95df7ccd04 | ||
|
87d49e2c18 | ||
|
9b74c5e703 | ||
|
a8aeacfd96 | ||
|
732479d97b | ||
|
958624afde | ||
|
8d7ee20a28 | ||
|
571e9e6fac | ||
|
6a982689ef | ||
|
c35e1402c3 | ||
|
b53313811b | ||
|
5d05e68bbb | ||
|
bcf9dd8ab9 | ||
|
6ae2cce870 | ||
|
7a560eee63 | ||
|
ff810b8405 | ||
|
aa1ab9937a | ||
|
b90f56502d | ||
|
e00dc9f3cf | ||
|
68cf3a10d6 | ||
|
bfe0ee0652 | ||
|
c79a1aab49 | ||
|
0c5a5a466f | ||
|
e9255389e2 | ||
|
68a31236b3 | ||
|
ea1335607a | ||
|
a1e0c7c5f5 | ||
|
77caf2e631 | ||
|
0310a6bd21 | ||
|
333db69e4a | ||
|
65acd1ff86 | ||
|
b8f1997ed7 | ||
|
ab312efbb5 | ||
|
2780e311e1 | ||
|
35293e8404 | ||
|
49872fd620 | ||
|
d97fbfdebf | ||
|
7495d458e6 | ||
|
a0d619692f | ||
|
06303361e0 | ||
|
2aeff09639 | ||
|
3d67fbbb62 | ||
|
58978104bf | ||
|
95b7f1f859 | ||
|
f1afffd198 | ||
|
a1e6be40db | ||
|
8af873ac42 | ||
|
7f88233f28 | ||
|
669be27e0a | ||
|
57f3270af2 | ||
|
b95c2f90d5 | ||
|
ce413c494c | ||
|
2e421a2968 | ||
|
4a620d46d5 | ||
|
23b2eded5a | ||
|
dbffda69fd | ||
|
7b3a16353c | ||
|
2c8b8b1aac | ||
|
2a1ceded61 | ||
|
d1313fca0c | ||
|
22ee293bfb | ||
|
e2b174a58f | ||
|
f5744c8d09 | ||
|
882be02d07 | ||
|
0b6428cf34 | ||
|
d0e0d17b5d | ||
|
1625975814 | ||
|
96c866f1d4 | ||
|
88ea78d67b | ||
|
8a349399e1 | ||
|
cefe601046 | ||
|
edc50a15ec | ||
|
f65ff33e19 | ||
|
9dad383b03 | ||
|
7cc1addfe4 | ||
|
d93b009816 | ||
|
2e4be2800f | ||
|
afe8b26eee | ||
|
394f0c6e46 | ||
|
91c984db43 | ||
|
3d000cdc14 | ||
|
e77638b0e1 | ||
|
90277394fa | ||
|
c24ddb4af2 | ||
|
a138cdbd01 | ||
|
df1b599e51 | ||
|
aa31451210 | ||
|
1b48a50da3 | ||
|
8e11157c92 | ||
|
9b09a33f47 | ||
|
3bb31daaa1 | ||
|
c67a7664ec | ||
|
9627cc12bf | ||
|
2b084bfdc9 | ||
|
68c332f20e | ||
|
2d897d26d0 | ||
|
9bb5f1b2dd | ||
|
a6f0d49c6e | ||
|
eb81faad39 | ||
|
2f45b83ba3 | ||
|
58d44a38a6 | ||
|
c04231d6d7 | ||
|
5584bfc4da | ||
|
b86d6748b4 | ||
|
fff760253a | ||
|
c6fa875148 | ||
|
543099c8d7 | ||
|
350f06116e | ||
|
77cb259124 | ||
|
5b483dadb5 | ||
|
5b0b45b141 | ||
|
8f8419b8c1 | ||
|
10e794110f | ||
|
501c4643f4 | ||
|
7883056ded | ||
|
c8e6467e9a | ||
|
3a9de995b2 | ||
|
a1bed56d19 | ||
|
a401d1e4c9 | ||
|
a8df57808f | ||
|
97ae9e4d8e | ||
|
8cf76c7051 | ||
|
a0106e30cc | ||
|
9e71d9a60f | ||
|
5e9c1df5da | ||
|
ba40f63b42 | ||
|
fec42ad634 | ||
|
21475d7d52 | ||
|
14e909a9a6 | ||
|
984690c47a | ||
|
ce31946e53 | ||
|
056fed40f1 | ||
|
8f92776103 | ||
|
2dc5a2435f | ||
|
8593eb2dd3 | ||
|
3105c29071 | ||
|
6e8d47ae91 | ||
|
2068825ae1 | ||
|
3f0d8d017e | ||
|
019a717706 | ||
|
11ef2223d3 | ||
|
ae27baa79b | ||
|
73caa3cedd | ||
|
1cfbbe7283 | ||
|
cbb57c8c34 | ||
|
83ef491069 | ||
|
0ce7cf8f17 | ||
|
32cda95788 | ||
|
83585d1c37 | ||
|
142bdbdcb9 | ||
|
d054d1a9ba | ||
|
b4e98d5238 | ||
|
ff0960e2bb | ||
|
bdb093e7da | ||
|
41949bef72 | ||
|
d73d748436 | ||
|
16acfb7320 | ||
|
9fdc5b4dbf | ||
|
f42c8bd18c | ||
|
ba3e7ce31b | ||
|
12a6e95a11 | ||
|
e91bc83912 | ||
|
49877b4ef7 | ||
|
23b8e3cf3c | ||
|
7c065901c4 | ||
|
17dc892c07 | ||
|
634f1b9584 | ||
|
9faae14892 | ||
|
6bd9a0ab05 | ||
|
8d4901cdcd | ||
|
af35164fb2 | ||
|
1a3fbfb175 | ||
|
939ee8e0fe | ||
|
f5de417b99 | ||
|
4dce0d7087 | ||
|
d2f24772ca | ||
|
d69870c882 | ||
|
96b69fc8b9 | ||
|
066c911439 | ||
|
885aa081c6 | ||
|
d191bb3ca4 | ||
|
fdcd485f9f | ||
|
88f407edb9 | ||
|
6dc591283e | ||
|
ddfe91a42e | ||
|
8c69e4d2d3 | ||
|
296194e730 | ||
|
a59273fe5b | ||
|
385540937e | ||
|
d146fbb631 | ||
|
bdf0dd7605 | ||
|
cfea0cb09b | ||
|
23094b2427 | ||
|
7a2820e496 | ||
|
0f7d35ea00 | ||
|
243fd29a60 | ||
|
98967990e7 | ||
|
8bc1607f00 | ||
|
b93691a0bf | ||
|
bfeacad5f0 | ||
|
f8c8c634cb | ||
|
24304b0c85 | ||
|
32b8ceeb96 | ||
|
fa011a1670 | ||
|
0410685138 | ||
|
0fde3c8d91 | ||
|
cb4e15e54b | ||
|
f933fcac69 | ||
|
e87ece4071 | ||
|
1480298bd7 | ||
|
414a3f8507 | ||
|
3f78cfd824 | ||
|
ae2c41364f | ||
|
0350315354 | ||
|
6aa842e328 | ||
|
ced3ce8657 | ||
|
d4867a7089 | ||
|
e031f804f3 | ||
|
73a67aa21a | ||
|
e46ac8ff63 | ||
|
734c4e9102 | ||
|
f2226ff0e4 | ||
|
e9f6b6cc68 | ||
|
da162f859e | ||
|
586e02c842 | ||
|
0b0e08c377 | ||
|
679a0c660f | ||
|
7b124d95c1 | ||
|
ff086a8fa4 | ||
|
560bc9a7d2 | ||
|
f5620e397e | ||
|
807f1aa70e | ||
|
c57f2acafd | ||
|
66acaa6095 | ||
|
e042cf209d | ||
|
9cfdfdbc77 | ||
|
0b8fc0915b | ||
|
342d1f99ec | ||
|
7301463857 | ||
|
7fa7b868ca | ||
|
67fe103ac1 | ||
|
34b2aef763 | ||
|
9858300984 | ||
|
6cdb8b6e6b | ||
|
a8a7132a66 | ||
|
1f46911f51 | ||
|
b0203593bb | ||
|
f980520ba7 | ||
|
550ca5b7b9 | ||
|
9dbcf33cb9 | ||
|
7d3f614356 | ||
|
6a35779bd5 | ||
|
a9bb36d394 | ||
|
87dd183279 | ||
|
6743f4dff1 | ||
|
e6d4e84fd4 | ||
|
eb4fd9cff9 | ||
|
ce35498c7e | ||
|
fcb3dd13c6 | ||
|
2261421ba5 | ||
|
fdd6ac9b44 | ||
|
a10d41405b | ||
|
8870b389be | ||
|
df5414fc1d | ||
|
8d987c4c54 | ||
|
c2f61fc61a | ||
|
122d558765 | ||
|
d113ef1c6e | ||
|
aafcbfcf50 | ||
|
cf83bd068b | ||
|
cc6da9a648 | ||
|
7c0b1107f8 | ||
|
d7894fd5c8 | ||
|
3a51a5f297 | ||
|
821c2063c9 | ||
|
e991ee3966 | ||
|
642ca772e8 | ||
|
de751d5d68 | ||
|
f7d0a6422e | ||
|
649e635d17 | ||
|
989b2daacc | ||
|
db0c8a2532 | ||
|
316ebd9fca | ||
|
6072341a2b | ||
|
1f9123c0f4 | ||
|
91bc3310a1 | ||
|
d92c77766c | ||
|
4032255694 | ||
|
b7a41d39e3 | ||
|
7573f9ccf6 | ||
|
5ecb8537c2 | ||
|
cb378afb1f | ||
|
06ab4a596f | ||
|
ccc5a2dabc | ||
|
4cb921853e | ||
|
4a55844d73 | ||
|
fbeebabf27 | ||
|
8d9ff4fe10 | ||
|
f68032c8ea | ||
|
39efb7eefb | ||
|
fef541dfe5 | ||
|
8bce140dd2 | ||
|
60749646e2 | ||
|
13420cd400 | ||
|
50c5e28381 | ||
|
b6d0ef1c7c | ||
|
1dfa390557 | ||
|
142ada5b07 | ||
|
e917792988 | ||
|
b6d4d06c25 | ||
|
31b712784f | ||
|
0a8f3cd5ba | ||
|
89e8b4cff9 | ||
|
2f4f59d6ab | ||
|
43752954ae | ||
|
9e2526405f | ||
|
2ac507ef34 | ||
|
59114aa94a | ||
|
d5e5f7e6e2 | ||
|
02f2e08329 | ||
|
3dc822fcde | ||
|
d61e939685 | ||
|
fe57705286 | ||
|
b4f201eb98 | ||
|
943eba6f1a | ||
|
8654ab3ecd | ||
|
82ce9a5114 | ||
|
465bc5e62d | ||
|
788dbd325e | ||
|
53446bb606 | ||
|
945a8ec83c | ||
|
5fcd76e32e | ||
|
840f7c8675 | ||
|
4ea3487043 | ||
|
887bc555fa | ||
|
4e45e1e393 | ||
|
884ce87972 | ||
|
9de1099b12 | ||
|
899db716f1 | ||
|
2eadff7876 | ||
|
0967df9113 | ||
|
36ae64f3e7 | ||
|
ab916ac13d | ||
|
6eccd11386 | ||
|
f876971e50 | ||
|
e6bd26a775 | ||
|
6c53238457 | ||
|
032d089359 | ||
|
b9b7309edc | ||
|
d22be1d676 | ||
|
2d0b23e063 | ||
|
01b78a099a | ||
|
fcfea291e5 | ||
|
9c08acc97a | ||
|
1203c087d8 | ||
|
91c1c580f9 | ||
|
b571b1b31c | ||
|
62565fac4e | ||
|
54613f5be0 | ||
|
dd8b864a7f | ||
|
8d3fce919f | ||
|
c880cba0a3 | ||
|
194dc50eaa | ||
|
ee6e31473e | ||
|
0989faf35a | ||
|
93b0cadea9 | ||
|
f387e46977 | ||
|
c46d9d8fd9 | ||
|
ad01dbc0e5 | ||
|
26389bf4d6 | ||
|
15888a953b | ||
|
2c995e9512 | ||
|
44fd4f03e3 | ||
|
76f4a682ac | ||
|
9e6f919fa8 | ||
|
e2508cc347 | ||
|
d07350969f | ||
|
6e9f47ff85 | ||
|
42bd585fe9 | ||
|
f20b4fad3e | ||
|
871a7a278b | ||
|
83dc607ec4 | ||
|
fae365d59e | ||
|
821cbb8879 | ||
|
821e36281a | ||
|
ef522551e4 | ||
|
c7a2cf7d1c | ||
|
4dfeebeaed | ||
|
31debda97f | ||
|
a1d78b7a0c | ||
|
03cbe2894e | ||
|
82fc0f2b80 | ||
|
2747c9ddd9 | ||
|
d45a0eb680 | ||
|
4cd2e1ce65 | ||
|
00b3a974f9 | ||
|
f9595aad3f | ||
|
85cd2bff8d | ||
|
1e444ca616 | ||
|
1543e60301 | ||
|
600a6edd7b | ||
|
407ba29319 | ||
|
c42c37f65e | ||
|
cdeec5a4e1 | ||
|
94088b5aa4 | ||
|
e23ee6518d | ||
|
79120e1fd9 | ||
|
6a41be4f3a | ||
|
f7992279e2 | ||
|
01cc115a60 | ||
|
47a1ecfc79 | ||
|
55a4526536 | ||
|
7eab65be87 | ||
|
fc302ad1be | ||
|
87c2d7bf96 | ||
|
27f429cdec | ||
|
f615e4fe77 | ||
|
87ff25a2e6 | ||
|
a832a6fa81 | ||
|
0e282e741b | ||
|
d0323646c5 | ||
|
2331979b65 | ||
|
c12675698b | ||
|
abdf8a43e7 | ||
|
3bba720f67 | ||
|
46f3b2ff0e | ||
|
6c2fba2b3a | ||
|
916e050585 | ||
|
5b3e3f047e | ||
b03e2d020f | |||
|
cb9b8ed6fd | ||
|
7490a3b324 | ||
|
3f4b341c33 | ||
|
cef9dfa34d | ||
|
95cbaea69a | ||
|
17b98f83ff | ||
|
4261a5a97d | ||
|
91acf4d2bc | ||
|
f713124154 | ||
|
4bbe9aaaa3 | ||
|
07185fdb46 | ||
|
178cda5402 | ||
|
3c094cf201 | ||
|
66084f9e96 | ||
|
c1203e8989 | ||
|
5be1edfa71 | ||
|
6005f20c5e | ||
|
8fe6e8be74 | ||
|
f2a0c7608e | ||
|
29c7dc54e3 | ||
|
d8d91e9270 | ||
|
02b3788dc9 | ||
|
a7f21da8da | ||
|
287ee4db37 | ||
|
0a4368ba7f | ||
|
656d5038fe | ||
|
c34811df83 | ||
|
98bc6294e6 | ||
|
2054b9ec97 | ||
|
b398da58e1 | ||
|
7e400ed761 | ||
|
bea1fd230a | ||
|
a2b7bfb253 | ||
|
646c04eba9 | ||
|
1bd2b83bca | ||
|
d6134a7407 | ||
|
c3011e87eb | ||
|
e811bf3e4a | ||
|
b3ed5703a8 | ||
|
f6e073bb41 | ||
|
b6651c4bdc | ||
|
bfea40c643 | ||
|
c8a52321a5 | ||
|
129583d19a | ||
|
c2bb174574 | ||
|
551f9083e9 | ||
|
c36c8ab6f9 | ||
|
6fd3bc8a3b | ||
|
4005af2040 | ||
|
20150a81b5 | ||
|
e4c165cd18 | ||
|
366a441cf2 | ||
|
ec4fe76856 | ||
|
173fa23e80 | ||
|
b6e994844e | ||
|
9a4899558e | ||
|
b1675ae0bf | ||
|
8b81308bd2 | ||
|
cc7d7361d4 | ||
|
730491ffed | ||
|
9753920595 | ||
|
2fc914214c | ||
|
ddb4ec944d | ||
|
c2723861fa | ||
|
c82ae399b7 | ||
|
c163cfe234 | ||
|
72e75e7858 | ||
|
c9af4fb420 | ||
|
27ae48991c | ||
|
65a7d530cc | ||
|
7866a5a369 | ||
|
0dcaf2ce09 | ||
|
dd6b80ee71 | ||
|
4c944c8c72 | ||
|
e29e8d8049 | ||
|
e1094b9be6 | ||
|
fc50bf587f | ||
|
11cee190b0 | ||
|
21c4907e44 | ||
|
951635e7f8 | ||
|
2a849dde38 | ||
|
caf2f753a5 | ||
|
2d224c0d67 | ||
|
e925d8c684 | ||
|
a6a40a2ad5 | ||
|
baa0cc1644 | ||
|
db7d53532a | ||
|
6985b76e49 | ||
|
745cea9617 | ||
|
d00089c625 | ||
|
0f7514b5bd | ||
|
95cd86d103 | ||
|
85b391a4d2 | ||
|
e2db17c326 | ||
|
741963275e | ||
|
541627183b | ||
|
cd6a919145 | ||
|
bb645ce6f6 | ||
|
1040f21ca6 | ||
|
fead7c6ae9 | ||
|
15f589c09d | ||
c4b4b72947 | |||
99f785a7c3 | |||
c280a661a1 | |||
b37c2094ed | |||
e6470719bb | |||
6260d29dc7 | |||
7aa4a57257 | |||
7324aabbd6 | |||
0b8f6e69cf | |||
bd1b6ee23e | |||
58e2068170 | |||
45ef0b8bc9 | |||
ff011f6452 | |||
d3c96184b8 | |||
2aacbf1c3e | |||
|
aab8838ea5 | ||
|
bc4cf49b2d | ||
|
046c31c898 | ||
|
be786a4d4c | ||
|
edb1b0c0f2 | ||
|
822a2163a0 | ||
|
dc489b1ca3 | ||
|
f2fc0a35f6 | ||
|
3c4d50ed0a | ||
|
f227b55c3a | ||
|
e8546d615b | ||
|
26c008b4da | ||
|
a566f61f23 | ||
|
68bd764c6e | ||
|
f767af9a7f | ||
|
949feb431c | ||
|
584cb5d531 | ||
|
14f4f959d6 | ||
|
b110532a9a | ||
|
11cdcefa4c | ||
|
5db1f3f09d | ||
|
0885c645c3 | ||
|
e86a8072a5 | ||
|
8a908a4438 | ||
|
bcbcf0a4b2 | ||
|
f7c0d90ab3 | ||
|
b230d764e0 | ||
|
93a6941432 | ||
|
c06e5da01c | ||
|
82e5101948 | ||
|
15b278f782 | ||
|
e87dd4f800 | ||
|
3aceed8200 | ||
|
c54f804ebf | ||
|
b5cdaab24c | ||
|
6329c02b8e | ||
|
affd0dc9bb | ||
|
bdc5b6edb7 | ||
|
cca1ea711d | ||
|
f10e556a0a | ||
|
1605da27bf | ||
|
3b91e25501 | ||
|
eb2f4b5717 | ||
|
1d356a391c | ||
|
abb0f25350 | ||
|
3f92a04acd | ||
|
e01884cce6 | ||
|
30ae7eb814 | ||
|
1dac38e5c5 | ||
|
0d8360b226 | ||
|
e7a1a569f7 | ||
|
f0f9ae287d | ||
|
4fc9926cb9 | ||
|
7dbf909a9a | ||
|
c78f1bb238 | ||
|
5198ee0cda | ||
|
1f126b3817 | ||
|
7942910a39 | ||
|
37fc648025 | ||
|
4391b45024 | ||
|
009330a55e | ||
|
c4e4d1104f | ||
|
7ab3aa5dd0 | ||
|
43c667e6b0 | ||
|
e9f862e144 | ||
|
4700548002 | ||
|
4f61702e14 | ||
|
8806dbb034 | ||
|
b992a052ce | ||
|
8273ded750 | ||
|
d4b1d78201 | ||
|
137919a4d7 | ||
|
1144f78673 | ||
|
c6afb3cc2d | ||
|
bc3cc55693 | ||
|
82a8dfa953 | ||
|
7383d60bfe | ||
|
18aaef0e31 | ||
|
20932677ad | ||
|
29f1122120 | ||
|
6699a64169 | ||
|
e1364838da | ||
|
be80525878 | ||
|
4d3f1512ac | ||
|
71b6aaf014 | ||
|
f67f8be823 | ||
|
5042971472 | ||
|
591abd34e0 | ||
|
d59142e017 | ||
|
0df2ccdf1d | ||
|
b892e04d8a | ||
|
e8958599ac | ||
|
359e67e281 | ||
|
143421557f | ||
|
a5f5a83fe8 | ||
|
1bb6297dd7 | ||
|
6fd87890d0 | ||
|
572dfe1b96 | ||
|
ed5dce9ff0 | ||
|
f0afda0f26 | ||
|
7bebadc517 | ||
|
30fd11bb37 | ||
|
684c3b18e0 | ||
|
039137ce23 | ||
|
8768588a8f | ||
|
c004b927ad | ||
|
ca12242768 | ||
|
b45da2b637 | ||
|
9342ab8c24 | ||
|
f284702448 | ||
|
d8707e3a4a | ||
|
86c39263be | ||
|
78558bb74d | ||
|
f4f5a62270 | ||
|
fd4646ba11 | ||
|
d39633060b | ||
|
f5fd9188da | ||
|
6895ff2816 | ||
|
a897723a25 | ||
|
25903207dc | ||
|
4f37274438 | ||
|
cde43f16db | ||
|
75849f0ab8 | ||
|
3f4d808fda | ||
|
40e04c70b8 | ||
|
0dc1413988 | ||
|
8ba604b3b9 | ||
|
b41d6ffda5 | ||
|
aa9b972ded | ||
|
81305717f4 | ||
|
bcf5d9d6d7 | ||
|
ab5f908300 | ||
|
078b797c94 | ||
|
fb359cfba5 | ||
|
720a9ab78b | ||
|
9c8f37c43c | ||
|
55e1e5cb47 | ||
|
f7c3ccd01d | ||
|
640560acf6 | ||
|
25b7334c30 | ||
|
b19a16e5a0 | ||
|
12085dca8f | ||
|
dbb1591cbb | ||
|
7fd65d9ac7 | ||
|
a9f6a26c40 | ||
|
3c33a96037 | ||
|
17117191f0 | ||
|
c0b773634a | ||
|
b4672bbed7 | ||
|
d7f94f0da9 | ||
|
4e0a484e7f | ||
|
dc4f6dda50 | ||
|
88d06f68f6 | ||
|
93e95d1a15 | ||
|
19958a80de | ||
|
34befce2f3 | ||
|
498f4550f0 | ||
|
157f05e43d | ||
|
3de3d896e8 | ||
|
bdef106f09 | ||
|
389794500f | ||
|
573a199878 | ||
|
66f0f2dffa | ||
|
f82f8b0d24 | ||
|
3ff55f671e | ||
|
beaba9afa9 | ||
|
c12c24d03b | ||
|
49785df983 | ||
|
49cc50ff4e | ||
|
832440a58e | ||
|
d51721dc35 | ||
|
eb49aa9f3e | ||
|
8265140148 | ||
|
990c7d3359 | ||
|
ceec00c528 | ||
|
9476414e68 | ||
|
464218ad62 | ||
|
43f3942508 | ||
|
5e2760849c | ||
|
1a7ce5013e | ||
|
7c3984c4b6 | ||
|
b07473478b | ||
532b35b864 | |||
|
87347515d1 | ||
|
95b826d8a6 | ||
|
43c34159ce | ||
|
86450d3c9d | ||
|
ab6f3249a2 | ||
|
751232c32e | ||
|
ca7cf4c81e | ||
|
da8f88b3e6 | ||
|
668db55e6b | ||
|
c94e59c907 | ||
|
33055bbb4c | ||
|
246e03d792 | ||
|
6987f2c2d1 | ||
|
ee92468392 | ||
|
f72a0b9f7d | ||
|
fd16d6ac67 | ||
|
c1991351cf | ||
|
dd13dcbf0d | ||
|
e4343eb2d6 | ||
|
f3a29225e0 | ||
|
6e89f318fd | ||
|
5df0a0f184 | ||
|
6606173050 | ||
|
440dd1cefc | ||
|
9c178b2add | ||
|
0bb11f975d | ||
|
b71141807b | ||
|
dff1ebe013 | ||
|
e0a851ba25 | ||
|
0c3514d709 | ||
|
93795ed6d2 | ||
|
794c416267 | ||
|
46ee5a94bd | ||
|
13d5219e53 | ||
|
f56946fce9 | ||
|
b8edd41e69 | ||
|
fec2ea5789 | ||
|
a8b85fad02 | ||
|
0e4c37918a | ||
|
f08c51e5bc | ||
|
417228ce05 | ||
|
9e4703bd1f | ||
|
6ec89bc13a | ||
|
63669fe466 | ||
|
190ac0407e | ||
|
d34d72a5cc | ||
|
5c47a30347 | ||
|
411aeb2762 | ||
|
7e8f445169 | ||
|
06b1ad1678 | ||
|
921098650e | ||
|
0aef122f1b | ||
|
66f82a44ea | ||
|
df73e8d5ce | ||
|
6e42d9d218 | ||
|
3f8fed2dd6 | ||
|
59598fee13 | ||
|
3e0d97ffb3 | ||
|
c7f8bbfbcb | ||
|
77ba817569 | ||
|
dd123cc446 | ||
|
ef946ed0e8 | ||
|
4a09fc3955 | ||
|
ff656ba420 | ||
|
97947fed6c | ||
|
1699420c4a | ||
|
7c6f8c5594 | ||
|
983492f7b1 | ||
|
3e714a5db6 | ||
|
a495e4e459 | ||
|
8fc19e1fb2 | ||
|
0a7e56f726 | ||
|
7c3bc74186 | ||
|
0eaa357de5 | ||
|
0015ef7540 | ||
|
3fdf14c493 | ||
|
a63a473641 | ||
|
f9a53b9e36 | ||
|
e9a3b7b49c | ||
|
4eaf5b89d0 | ||
|
67c8c70feb | ||
|
899581ba63 | ||
|
90c95fce51 | ||
|
21f90f3dd1 | ||
|
74f25d23cf | ||
|
ffc555ca76 | ||
|
e4fb6ca4a7 | ||
|
f353ad524b | ||
|
85f7dcdffb | ||
|
1a6822da64 | ||
|
cc7fcb2133 | ||
|
2553c6c821 | ||
|
e6f2651704 | ||
|
ce394848fd | ||
|
ac11753274 | ||
a043823045 | |||
467cf3c5a3 | |||
65ccfcb84e | |||
71352cc5b9 | |||
5bedfc9237 | |||
14f0dd2b22 | |||
|
00be036e59 | ||
|
0d72ac98a0 | ||
|
b9069a8a16 | ||
|
48a6ae9888 | ||
|
bce88a3c27 | ||
|
c5c0479c72 | ||
|
692220b31b | ||
|
b85c7a019f | ||
|
f213f1c85a | ||
|
e6c0558679 | ||
|
eb7235281f | ||
|
1f28a64442 | ||
|
37e0d03de1 | ||
|
bf9c6c9386 | ||
|
7abcfadd93 | ||
|
2ae8cde2ce | ||
|
b329034cfc | ||
|
1442b0cf64 | ||
|
a5b5dff4d2 | ||
|
dfd3720068 | ||
|
c006cdc9b9 | ||
|
62256cdde9 | ||
|
b7882ef06f | ||
|
d6c43e3e94 | ||
|
ae020a8b78 | ||
|
c61c8a4933 | ||
|
7543f99f8b | ||
|
a4363d0a47 | ||
|
9ad045c8f4 | ||
|
6cc35e6198 | ||
|
ac6a81dedd | ||
|
ea58b2316d | ||
|
c874097804 | ||
|
bf35122c38 | ||
|
b61a6a48f7 | ||
|
172ec53785 | ||
|
cb682a7ac0 | ||
|
818eee78be | ||
|
b48417eee0 | ||
|
751e0e6e6b | ||
|
998975e413 | ||
|
35eb087b5a | ||
|
45d93b94b4 | ||
|
d49e966bf0 | ||
|
89b5111040 | ||
|
acf3b9bacc | ||
|
98851a41ea | ||
|
b8cf209d24 | ||
|
3bdc8f03d6 | ||
|
70bda7e02c | ||
|
7075dfb223 | ||
|
f64b6e8a43 | ||
|
cd108c6055 | ||
|
a1f170b1ff | ||
|
ba0f1e1ba2 | ||
|
ce223049c7 | ||
|
9462856ff9 | ||
|
6fe3c5148e | ||
|
bc3719065b | ||
|
e800b18325 | ||
|
c80cb7bc9b | ||
|
648a19cb8c | ||
|
aa0f5c2507 | ||
|
84ea0bd6f6 | ||
|
b3e51d31c3 | ||
|
48de2c7513 | ||
|
23d608b96b | ||
|
2a31906da4 | ||
|
78d878bc05 | ||
|
8d5a101826 | ||
|
d1d1b2ced0 | ||
|
88a8e73943 | ||
|
b7404a9529 | ||
|
6367907e79 | ||
|
1f075dfb4a | ||
|
1586848565 | ||
|
b4bc4ddcf7 | ||
|
6c7933794d | ||
|
f84a677050 | ||
|
aa69cb2f4f | ||
|
229084ce04 | ||
|
18afbae41f | ||
|
866d9179a9 | ||
|
b23e907871 | ||
|
7bcdea36ce | ||
|
dc7b590977 | ||
|
4399c2c02e | ||
|
6d20c95f0b | ||
|
60f74f2297 | ||
|
13d91699f0 | ||
|
310c3af9dc | ||
|
67230a58bf | ||
|
2cc275d702 | ||
|
9dc6581a8c | ||
|
6bbaac287b | ||
|
bd5fdbdbd3 | ||
|
cc0752b352 | ||
|
729f085ed0 | ||
|
3cdfe3c38a | ||
|
1b92bb12ea | ||
|
4895c4c417 | ||
|
c9207a892c | ||
|
6d45293207 | ||
|
982b9580a6 | ||
|
944c81687a | ||
|
5a9a23eb9c | ||
|
4d0081b19c | ||
|
a39076d739 | ||
|
ff0e9cf17d | ||
|
9110e2bb35 | ||
|
b9532ebe86 | ||
68f80e4ec9 | |||
60494f0533 | |||
8e84eb4d00 | |||
7bf4c238c2 | |||
|
33a3c22b69 | ||
|
d717e46d78 | ||
|
5671ada373 | ||
|
67bd956b6e | ||
|
996243553a | ||
|
8e95bfb987 | ||
|
9258d66372 | ||
|
d2bb801fb4 | ||
|
0a748dfab7 | ||
|
ee7d82e174 | ||
|
f7d6e82a5d | ||
|
019ead1059 | ||
|
e0f561c8b8 | ||
|
1d9b70aa18 | ||
|
4342e09699 | ||
|
ca6a10c373 | ||
|
3a6eeb316b | ||
|
358e33c6eb | ||
|
ed68e274e2 | ||
|
59d11b3d4e | ||
|
1e837a6a4b | ||
|
ff8d62399f | ||
|
f3d9852f98 | ||
|
262c8dc1b5 | ||
|
4fbbbb27df | ||
|
9547dcc891 | ||
|
9dc0aa5131 | ||
|
0d19c8b4d1 | ||
|
1e266c3a56 | ||
|
d9de812728 | ||
|
b3fcf0c77c | ||
|
f0d0b563b2 | ||
|
ebdbd91874 | ||
|
1c107ab960 | ||
|
63937ea358 | ||
|
2019bce30e | ||
|
b160b11a78 | ||
|
3533a96b56 | ||
|
fe270ed8e3 | ||
|
e5ddc9e3dc | ||
|
81ad6122a7 | ||
|
d9daae7829 | ||
|
34c8014c95 | ||
|
a3c1b12078 | ||
|
0d894a4269 | ||
|
fdb4abce3d | ||
|
afe85433fd | ||
|
bd2fc545c7 | ||
|
7cd48778e5 | ||
|
f6e70d0386 | ||
|
af81ea10f0 | ||
|
1ba6a0ed64 | ||
|
290859eaa2 | ||
|
038ac93db4 | ||
|
29c509f658 | ||
|
d8686abc34 | ||
|
0c1b15468c | ||
|
2f839ac85b | ||
|
10f401066b | ||
|
7d50379b3d | ||
|
c3674bb7da | ||
|
a395d1972e | ||
|
3f9672af6f | ||
|
2668c232b1 | ||
|
3984d68b70 | ||
|
af1f26b322 | ||
|
b77695305a | ||
|
10252aa8fe | ||
|
d1aab4ded8 | ||
|
baf5c887b4 | ||
|
04f0b0c01e | ||
|
4b7f0bceaf | ||
|
0a8c323be5 | ||
|
2e9b107375 | ||
|
a7db21cde8 | ||
|
bffcc7ea44 | ||
|
19b10262b1 | ||
|
03bd7cd5eb | ||
|
9861475aa1 | ||
|
2eb552e303 | ||
|
c65db5fe94 | ||
|
397dda8ebf | ||
|
dc21c51a0c | ||
|
5b88e97307 | ||
|
4c62b941a0 | ||
|
1da29bb715 | ||
|
f6e2edf3a8 | ||
|
d1b2b24fcf | ||
|
c518b5a68d | ||
|
030d9f8ab3 | ||
|
c062848a95 | ||
|
336e4708d1 | ||
|
b01fc28fa9 | ||
|
0eedcdb7c2 | ||
|
87ceda11c0 | ||
|
9a6fc2505a | ||
|
49a7261f24 | ||
|
1b091892a4 | ||
|
1724a78cd0 | ||
|
8a20bda390 | ||
|
1a1903c826 | ||
|
ae80cf12f3 | ||
|
88ae58c9d8 | ||
|
9c013ac494 | ||
9c89f0fe4a | |||
31f46b64b5 | |||
|
b4a80bcf98 | ||
|
7d9435ca29 | ||
|
38d963b9a5 | ||
|
624681838c | ||
|
1b14e69f58 | ||
|
8756acb3b1 | ||
|
1bd70a19e7 | ||
|
e8542369c7 | ||
|
8bdd90c055 | ||
|
0b4b7b718d | ||
|
4d6ca1d291 | ||
|
9b4895992d | ||
|
79ad0a8d11 | ||
|
4a2ce8b737 | ||
|
b4df337687 | ||
|
f3f47d0ead | ||
|
b155e571ff | ||
|
75a409f0ee | ||
|
81028ac52f | ||
|
dd44b7c696 | ||
|
749ff9e9f9 | ||
|
a6bd0cc6dd | ||
|
41f6f60f87 | ||
|
5df734c546 | ||
|
b64131dfe5 | ||
|
89d9bf123f | ||
|
a095de178f | ||
|
372b98bcee | ||
|
8bd52126fb | ||
|
7ad02deeb1 | ||
|
859a61fdc5 | ||
|
cf10effc10 | ||
|
3becece63c | ||
|
dca5011ec1 | ||
|
28366d263b | ||
|
d9ea10f541 | ||
|
94a2e8f129 | ||
|
8bd87c77e5 | ||
|
e8167e7a4c | ||
|
e73a262a6b | ||
|
c81b4c309a | ||
|
8cc21c1797 | ||
|
7c7bd49141 | ||
|
1003ccfe30 | ||
|
6245387899 | ||
|
8337900423 | ||
|
0855abae7f | ||
|
54ee174fbf | ||
|
4ddf97b475 | ||
|
4d443e9cc3 | ||
|
aa4a48b68a | ||
|
2d62681600 | ||
|
6381d258c0 | ||
|
41e935bc65 | ||
|
a289ea0b05 | ||
|
fc178ac8b4 | ||
|
4529e42876 | ||
|
046ecb0ffb | ||
|
60fa5df1de | ||
|
474cc4ddb7 | ||
|
7030846e37 | ||
|
8fbab52044 | ||
|
ad7a8858a2 | ||
|
eccd674bc5 | ||
|
0cabd3d284 | ||
|
22d00bd069 | ||
|
9ce997b51b | ||
|
e2d6182f62 | ||
|
a94aab855a | ||
|
0efa99665e | ||
|
3127be9b85 | ||
|
9a7bb842f7 | ||
|
cf3994d7de | ||
|
cd46a88eaa | ||
|
2853d8599f | ||
|
d299a2aa3a | ||
|
0a6192427f | ||
|
983686d96c | ||
|
b73816e687 | ||
|
0135a17ef8 | ||
|
6a6f135b61 | ||
|
4ac4f7ee9d | ||
|
a9b8df41f7 | ||
|
b8dbda6a4c | ||
|
6c36817750 | ||
|
2ce9776255 | ||
|
a4f8649de0 | ||
|
ad8588cb24 | ||
|
250ac8c593 | ||
|
1f14430052 | ||
|
2e790cd255 | ||
|
b2c68a9dc1 | ||
|
b727372bf2 | ||
|
da40278e26 | ||
|
37d824a7d9 | ||
|
4c45b2287a | ||
|
cdabc35606 | ||
|
cc929a27db | ||
|
13aa62c1a5 | ||
|
eab5f47203 | ||
|
88b0e834f5 | ||
|
01142adfcb | ||
|
09fb6c3a36 | ||
|
4457eba47f | ||
|
dda3da13cd | ||
|
13ca107963 | ||
|
fe6baf6e41 | ||
|
b493a2b149 | ||
|
0d07d3e988 | ||
|
898b783b1a | ||
|
15be521af9 | ||
|
89e714d7d8 | ||
|
f04330c85d | ||
|
e5e51fc6d5 | ||
|
f52224024e | ||
|
71109d964b | ||
|
ebb5846111 | ||
|
81e9ac861a | ||
|
9ecb04c98b | ||
|
ac834fa299 | ||
|
2372dab72b | ||
|
5a2d1953dc | ||
|
3ab7ed28d4 | ||
|
f137edbe46 | ||
|
5e6b5cbbbd | ||
|
1221baec10 | ||
|
58041cf838 | ||
|
802803d1e9 | ||
|
fc96d181b3 | ||
|
a24b110214 | ||
|
15692d6075 | ||
|
edfa22711e | ||
|
a560098b34 | ||
|
6e887d44cb | ||
|
42b169f3df | ||
|
c28888c121 | ||
|
7a2b66f5ab | ||
|
aeb8677239 | ||
|
f7f5d497d9 | ||
|
220e669eca | ||
|
64b25e4bce | ||
|
6ede8daee6 | ||
|
6edb2aafdb | ||
|
a89a4ba5d5 | ||
|
2782d06b2c | ||
|
1ddbc4867a | ||
|
b67a96f1ae | ||
|
e24b9ceac9 | ||
|
b118357d54 | ||
|
a8c44f7206 | ||
|
7bc05d393e | ||
|
20ebe02e4e | ||
|
631a87abf1 | ||
|
ff7bbe66a7 | ||
|
1ed2346303 | ||
|
7a845bb83f | ||
|
8776e485ed | ||
|
d6630f4335 | ||
|
5d32139e09 | ||
|
6784c02769 | ||
|
7f84cb5173 | ||
|
a83486bdf3 | ||
|
03988243bf | ||
|
df6e4a0899 | ||
|
7337895773 | ||
|
f2c4dc97e7 | ||
|
9a11599bc1 | ||
|
d721708615 | ||
|
d0acec05fa | ||
|
06e69fe2c8 | ||
|
6493e53ef5 | ||
|
88e68c3903 | ||
|
8ec3ec07f6 | ||
|
25d743d506 | ||
|
0977c8aed2 | ||
|
461772efc3 | ||
|
d884624aad | ||
|
f3b8d1e057 | ||
|
57d95e0ebe | ||
|
56e38355d3 | ||
|
53f9bbe0d5 | ||
|
60255b5c45 | ||
|
6e716e17f9 | ||
|
101e589fdd | ||
|
2789fad2f1 | ||
|
b9447dae4d | ||
|
122c850d2e | ||
|
6baf9cd19c | ||
|
db2c41f0ce | ||
|
31bb514b34 | ||
|
229fe8f2d8 | ||
|
d07b910e13 | ||
|
f8a89a7bc6 | ||
|
8908273af5 | ||
|
7559777df7 | ||
|
d0d1f6a0f1 | ||
|
75909fa9e4 | ||
|
3103d69bae | ||
|
e7496fcebb | ||
|
a40e3f2555 | ||
|
d241b8da6c | ||
|
8f2fdb1d5f | ||
|
cc6e2d1ce0 | ||
|
79b6277332 | ||
|
5bab5ff21f | ||
|
770e410116 | ||
|
ee6f74bfb5 | ||
|
74581a1a1a | ||
|
e3cab5859f | ||
|
ddf64ba5b9 | ||
|
c2680da930 | ||
|
71c60a8283 | ||
|
629030085c | ||
|
59161ddab5 | ||
|
368ce4a604 | ||
|
da4110ae8e | ||
|
458202ba6e | ||
|
72a26c07f2 | ||
|
312a3c0632 | ||
|
330eda9f9b | ||
|
5fcbd218a3 | ||
|
39b652ce58 | ||
|
3dc230495a | ||
|
55fa50f087 | ||
|
27c7b34555 | ||
|
83b724d301 | ||
|
bc057ed73d | ||
|
7c42d644fa | ||
|
a4fe298420 | ||
|
8c30648d3e | ||
|
f41bea0201 | ||
|
004f7e20cb | ||
|
13663f6c40 | ||
|
496c97eff1 | ||
|
02090f6401 | ||
|
22e62e1e05 | ||
|
bb8c80d7f7 | ||
|
b03f87c919 | ||
|
d4b6ef5d7c | ||
|
083781737a | ||
|
fed40e2aa8 | ||
|
7dc95e3cba | ||
|
2efc0af5e0 | ||
|
c3286e41fa | ||
|
3cf1295373 | ||
|
a3f8e0e250 | ||
|
04c1d2cf0e | ||
|
f9de30a838 | ||
|
7af3d2b2aa | ||
|
3698705975 | ||
|
9aa51c221c | ||
|
bde9e98f62 | ||
|
aa7af1f5c8 | ||
|
2830ea8724 | ||
|
aa5b90e0d4 | ||
|
d139ea2cee | ||
|
85fcbec0c2 | ||
|
d53a971fd6 | ||
|
30abb2bb06 | ||
|
6e03ee8c1b | ||
|
31153253e1 | ||
|
f2ce121aac | ||
|
1a45340882 | ||
|
1230eaf255 | ||
|
6f89ea9391 | ||
|
d0921a26b2 | ||
|
447f84ec6d | ||
|
48ddc3eb98 | ||
|
be72b745f3 | ||
|
9b6396dfae | ||
|
5c58ad5edf | ||
|
b8a6351e72 | ||
|
e0afbb209c | ||
|
d130f1390f | ||
1bb5d4518a | |||
|
5d2b7df900 | ||
|
e8295ceed6 | ||
|
1120dec011 | ||
|
5cba35bdc7 | ||
|
bb77d8f9aa | ||
|
7a02b3242e | ||
|
e780709629 | ||
|
fb071cf60b | ||
|
c793dad556 | ||
|
7234b06745 | ||
|
f91f9d3230 | ||
|
195ad7c37f | ||
|
5d926a287d | ||
|
a635a2f546 | ||
|
b5b3042226 | ||
|
826ba92b8e | ||
|
a68a060a06 | ||
|
a9d565aff9 | ||
|
25ee551ae8 | ||
|
c4f888a52f | ||
|
6dbb6391c1 | ||
|
66532c0d98 | ||
|
348f10413b | ||
|
413b7c6863 | ||
|
318e210086 | ||
|
24384f6a61 | ||
|
c9f9f40c6c | ||
|
e3aff09ede | ||
|
f807069c83 | ||
|
ed6326f07d | ||
|
e7de0c7842 | ||
|
12097036ba | ||
|
7985c677f4 | ||
|
4fb4def7d8 | ||
|
3cb5ccc937 | ||
|
ede181d6dd | ||
|
6919d61ef5 | ||
|
e5db342f2d | ||
|
31aab91654 | ||
|
04ffa3cf9c | ||
|
4a41cb77e9 | ||
|
190010a6fe | ||
|
991f3c5cd5 | ||
|
dcdc949a90 | ||
|
d003844efd | ||
|
dad56a677b | ||
|
6c3344b127 | ||
|
57c61e5921 | ||
|
dca54ee2b7 | ||
|
aa89a74c2b | ||
|
48fb3ec4aa | ||
|
58f49dfd76 | ||
|
db1e99dee2 | ||
|
648cf5cb20 | ||
|
98c50565e6 | ||
|
78ceb147c5 | ||
|
bcd79f828c | ||
|
d8ddad6fe9 | ||
|
2c41f59064 | ||
|
724b842167 | ||
|
6a45b1e1e7 | ||
|
002444ff82 | ||
|
db315accee | ||
|
6d707fa9df | ||
|
c92944f0dc | ||
|
810949c9d8 | ||
|
41909b7def | ||
|
6babc1c5cd | ||
|
d349fe3197 | ||
|
5443ad654c | ||
|
b2460bbc87 | ||
|
2cca06789a | ||
|
500611236e | ||
|
b68da2e68a | ||
|
d31e84c425 | ||
|
2321c5be77 | ||
|
a8457b7dad | ||
|
25bf157977 | ||
|
70544827cd | ||
|
e5093c4c5d | ||
|
47401c49bd | ||
|
2ae6c0cf85 | ||
|
3defd9a145 | ||
|
de52fd3ad2 | ||
|
b1a1979f79 | ||
|
dc7dc7e1b9 | ||
|
45a179fc16 | ||
|
ab5004885a | ||
|
038f5d84ed | ||
|
cda4c42b37 | ||
|
cf33f2f179 | ||
|
24db7eb68a | ||
|
dc0ea32662 | ||
|
3a2abde3b4 | ||
|
b91c8d75f0 | ||
|
be6b6a5076 | ||
|
0457da48c4 | ||
|
d93a9da8e6 | ||
|
eb3828a86a | ||
|
89d8a8963c | ||
|
a1fdbcc392 | ||
|
a72aa2feca | ||
|
41caa6db64 | ||
|
c942855683 | ||
|
bf36829760 | ||
|
1e25f79d4a | ||
|
8a715aac26 | ||
|
7f23905e76 | ||
|
9ccd84abdd | ||
|
9460504488 | ||
|
2ef3547724 | ||
|
3593d32fb3 | ||
|
d5f33433c3 | ||
|
79b06c6c7d | ||
|
d7ff6f24c2 | ||
|
0a635e5113 | ||
|
3e7b4e9c4b | ||
|
7682843f3e | ||
|
0fab87065b | ||
|
f3f1de9961 | ||
|
b373b7ed73 | ||
|
bc04dbe43e | ||
|
425ad8be2c | ||
|
0001ea89f2 | ||
|
dab3dd7d85 | ||
|
a073257723 | ||
|
6313c37ec0 | ||
|
c6eb43b513 | ||
|
09f1758ad5 | ||
|
4df65a3b55 | ||
|
e1cf3097f5 | ||
|
e86b26cc0b | ||
|
bfea775c0b | ||
|
98f9c4396d | ||
|
f5c9909d00 | ||
|
c45ac99810 | ||
|
9a2ab110db | ||
|
07cbe1c8c2 | ||
|
d09c648068 | ||
|
37c2144725 | ||
|
2dee02b6c5 | ||
|
4811b9e4c2 | ||
|
0fd64a27bd | ||
|
592690c531 | ||
|
adf934faa1 | ||
|
36c1773cdd | ||
|
462ac4915b | ||
|
0440bd02a4 | ||
|
80a9517a1f | ||
|
efe5f01bb5 | ||
|
bfa1d53b44 | ||
|
d35ffd793a | ||
|
5e00447da3 | ||
|
0857ecfd15 | ||
|
988f6c2537 | ||
|
f6d2cf3ee8 | ||
|
865bb55a86 | ||
|
6c798adc97 | ||
|
7cd2192135 | ||
|
6284fdad38 | ||
|
fd2ca28876 | ||
|
1dd0c78868 | ||
|
2ee1b53f22 | ||
|
4216f3906c | ||
|
a5dcc5e89c | ||
|
29dedd407d | ||
|
1c0a537a09 | ||
|
880ffc2a58 | ||
|
c2caccd8e2 | ||
|
e2e8f59fc5 | ||
|
1a230252c7 | ||
|
8a4c41d518 | ||
|
81566894f7 | ||
|
f929bff4c1 | ||
|
f8bb4dff17 | ||
|
7eda3cdd51 | ||
|
a23edd3e7b | ||
|
ebbcc2050c | ||
|
1b04ac57e5 | ||
|
abdd263c44 | ||
|
f60fe1db56 | ||
|
72f07745b6 | ||
|
71fa126480 | ||
|
787bc76868 | ||
|
1998b62ab9 | ||
|
373b71ddff | ||
|
ec96c10706 | ||
|
09780dad6c | ||
|
7e96383530 | ||
|
4523274443 | ||
|
c19f4ba6d2 | ||
|
5e251e9868 | ||
|
94d93bf390 | ||
|
23d68effd4 | ||
|
bd092f44c8 | ||
|
0e3ac4cb77 | ||
|
46ce6ded3c | ||
|
e2744a54f2 | ||
|
feae3ada33 | ||
|
0990644b4a | ||
|
346ffd1620 | ||
|
6a912a145e | ||
|
c47927d192 | ||
|
c62d5fd1d5 | ||
|
bc6959bc9a | ||
|
c701236f1d | ||
|
1b5e9623a0 | ||
|
65dc3bf6ab | ||
|
565b6909cf | ||
|
3f9c050ca5 | ||
|
65b2519f52 | ||
|
eb2012c5d1 | ||
|
e11d777f18 | ||
|
cefa83e1e2 | ||
|
ca645368aa | ||
|
e36f688c03 | ||
|
ccaca2ae07 | ||
|
5c7d1bb6b0 | ||
|
0f576cc3c2 | ||
|
588b07915b | ||
|
2e3a431474 | ||
|
fa97e20ae1 | ||
|
75aacbcc65 | ||
|
8da61f90e4 | ||
|
60e4713806 | ||
|
cba012a2b0 | ||
|
4f1bb51d8f | ||
|
1bde6e5d53 | ||
|
5af797eeae | ||
|
7807033c1a | ||
|
05137f3fe5 | ||
|
1309473d7b | ||
|
2d498a06a0 | ||
|
62afaeda07 | ||
|
b8ca7360b1 | ||
|
04982bae18 | ||
|
a19d526e72 | ||
|
4060b5775b | ||
|
868f9a4192 | ||
|
f8c86b1f03 | ||
|
1f36e62727 | ||
|
d0692bbf88 | ||
|
6036b23386 | ||
|
21db59c507 | ||
|
f519e27719 | ||
|
530d711f75 | ||
|
37d32a26ab | ||
|
430cd22dc3 | ||
|
d760f4e28c | ||
|
72e9156e32 | ||
|
f892a216d6 | ||
|
ff6167e713 | ||
|
68b125f5a6 | ||
|
a28fbd2aa6 | ||
|
7eea85e49d | ||
|
5ab2bb51e2 | ||
|
509e82db63 | ||
|
cda5c69f4f | ||
|
6dba8507a7 | ||
|
17556690ed | ||
|
1c2ab8c645 | ||
|
784d8f2624 | ||
|
5bde276c6d | ||
|
200680f85f | ||
|
3b757b0dab | ||
|
76fecbde7e | ||
|
6fdc784a9d | ||
|
666147cfe6 | ||
|
05f61fc8b2 | ||
|
ddfed4a2ef | ||
|
d012ef5f83 | ||
|
3f9ccaeea8 | ||
|
d59131af4b | ||
|
d2fbc5c29e | ||
|
c1fddf2a14 | ||
|
82c7fc96f5 | ||
|
8996424556 | ||
|
d2c8fa9020 | ||
|
98c5eae6ee | ||
|
c3cd57b7e5 | ||
|
5b4dd9f360 | ||
|
3ed2e0e06c | ||
|
a80a71255a | ||
|
69030d31de | ||
|
f84644b406 | ||
|
8de81859d2 | ||
|
be95ff9d05 | ||
|
748b7e5b66 | ||
|
757a7fb0b4 | ||
|
b222579633 | ||
|
07dbf5eb6d | ||
|
2714ffd0d8 | ||
|
1a0286a1cb | ||
|
7afb089f0d | ||
|
cb3e8d4db6 | ||
|
a422979748 | ||
|
d3220e2461 | ||
|
5bafc6cc43 | ||
|
886e765d4b | ||
|
c692d74442 | ||
|
7f9edcca2e | ||
|
4d215beabc | ||
|
9bcb95e540 | ||
|
1af3399a9d | ||
|
c8ff11b633 | ||
|
29b5d59b05 | ||
|
d0bd037d7b | ||
|
09f081c1ad | ||
|
4a8b245ffd | ||
|
c5dd4866b9 | ||
|
2b05154fc4 | ||
|
ca1faa7ace | ||
|
dc4c87b323 | ||
|
6e78e4f209 | ||
|
7d2c2ab025 | ||
|
7bdd1f00af | ||
|
37b5cc0f30 | ||
|
a022e5a8d9 | ||
|
b11e768550 | ||
|
6fe706e9e7 | ||
|
66de41adbb | ||
|
e565565627 | ||
|
ac1800bb26 | ||
|
68ed14b373 | ||
|
b4a06dc66f | ||
|
69f08415fc | ||
|
d603cacd0b | ||
|
6502f241ab | ||
|
12b1905f11 | ||
|
8d0a675dd9 | ||
|
318f92b869 | ||
|
cebd92becd | ||
|
35cb2ef1ce | ||
|
7542c35184 | ||
|
c4dc31493a | ||
|
bd8a74701e | ||
|
ee92561769 | ||
|
10b4b6656f | ||
|
c9dfec717c | ||
|
a3015e9fdd | ||
|
e8f7bda7b2 | ||
|
98b0765363 | ||
|
a58bd967e9 | ||
|
48cd4b2fea | ||
|
f4e3834d95 | ||
|
54568173af | ||
|
edf89ea301 | ||
|
3ce253b1e5 | ||
|
fa83f6c17f | ||
|
913b529fa1 | ||
|
76e0884c11 | ||
|
90229ca23e | ||
|
c5ef6cfa14 | ||
|
f65f5673f8 | ||
|
aa3525c7ce | ||
|
d1c6f5cdc5 | ||
|
f652a98c0e | ||
|
b9a95cecf6 | ||
|
05e3853134 | ||
|
24a5bf11a3 | ||
|
94a36bd98e | ||
|
63a7aa0a3d | ||
|
1c03e5bb01 | ||
|
50da55d7bb | ||
|
357f402031 | ||
|
13c6eea1a8 | ||
|
81bfb0dda8 | ||
|
b7849935a0 | ||
|
fde5ef8b25 | ||
|
57e635c26c | ||
|
bdd9a70a2d | ||
|
187cb48a41 | ||
|
117330ee16 | ||
|
6844142603 | ||
|
35b02302eb | ||
|
5bc6f411be | ||
|
06e32e6af9 | ||
|
aa895fda51 | ||
|
76b291c02a | ||
|
2bb1c73e4a | ||
|
cfc7b22090 | ||
|
538d9ff4cf | ||
|
f8792a9c2b | ||
|
48afd3105f | ||
|
ae07370214 | ||
|
9b0a18fcd8 | ||
|
a587a19dbf | ||
|
2368b79fa9 | ||
|
94e15c1c19 | ||
|
ed8904ca5e | ||
|
dbe6e99f2d | ||
|
0edcf1e65f | ||
|
1a35669b95 | ||
|
266ff9075f | ||
|
9664271474 | ||
|
c40cd1e180 | ||
|
84749f4d14 | ||
|
b0e534de8c | ||
|
df8772812a | ||
|
b085f3dbef | ||
|
c7cf72030a | ||
|
d101d241f4 | ||
|
34a055aa05 | ||
|
83b0b7f5ab | ||
|
53d63f2590 | ||
|
161ee4304b | ||
|
86024d69b3 | ||
|
4ec7bc6106 | ||
|
d85c39327c | ||
|
ea2fd732a2 | ||
|
0c4f33b486 | ||
|
42193df505 | ||
|
f047419fcb | ||
|
b9aa0e6d10 | ||
|
432db5aec5 | ||
|
f8df7b55b3 | ||
|
2a2b5af0ca | ||
|
8c07a5f5d7 | ||
|
d10f404206 | ||
|
74cadf6e5b | ||
|
5e0fc44855 | ||
|
6bb1acd7a2 | ||
|
2d9da17c58 | ||
|
22f34ec883 | ||
|
a2ee8327ac | ||
|
13ad52d095 | ||
|
979c5c9e14 | ||
|
6e38e0ac70 | ||
|
d91a7c0058 | ||
|
5f1a07f737 | ||
|
db5b576799 | ||
|
4fbc17d707 | ||
|
7f44f46336 | ||
|
870f39ffc5 | ||
|
63093c6953 | ||
|
07f389aff8 | ||
|
a5a15664c9 | ||
|
5f9888ca84 | ||
|
bd82008985 | ||
|
440f13bee8 | ||
|
3023c7d9dd | ||
|
0208110cbc | ||
|
2b5c8c9cd6 | ||
|
68488da99c | ||
|
104a9db7ea | ||
|
5470f22e77 | ||
|
0d0a0c3607 | ||
|
583592b7d3 | ||
|
ea0804ad63 | ||
|
c004b06602 | ||
|
3f73edae00 | ||
|
731cf006a6 | ||
|
28b9d1ac1f | ||
|
1913beb3f7 | ||
|
ca80a94f72 | ||
|
c51c9f228c | ||
|
64536beae6 | ||
|
84dc60be49 | ||
|
fcf7c909a3 | ||
|
2d0d410c40 | ||
|
29e42011a9 | ||
|
aa96a52a5b | ||
|
7b32eb9154 | ||
|
f92bf8bfee | ||
|
05e8def85a | ||
|
d5e5cdc8f0 | ||
|
2ed06a6df0 | ||
|
e185ae7458 | ||
|
b1abc92b16 | ||
|
d810b87c09 | ||
|
cdeb7be118 | ||
|
e11e321d86 | ||
|
056101121b | ||
|
cce3c7f2f2 | ||
|
a23983b57c | ||
|
a50a183b74 | ||
|
5faeacd472 | ||
|
2f1ef81263 | ||
|
584498f556 | ||
|
6d58e6bb22 | ||
|
d7345b577c | ||
|
399d3b9157 | ||
|
1887b6e7b6 | ||
|
3c0d1a8d7a | ||
|
0adaa00a4c | ||
|
8bea89754b | ||
|
9e5b08b9eb | ||
|
93191d3beb | ||
|
ff86cceb17 | ||
|
dcc3cc4a7d | ||
|
2cd24098df | ||
|
f87842deb4 | ||
|
31a3966e39 | ||
|
84ac7d92b2 | ||
|
2c27b85c33 | ||
|
74708d3b21 | ||
|
8b42c41bc5 | ||
|
e2e2880514 | ||
|
55d39ab303 | ||
|
ee2bc46b92 | ||
|
b13fb6d1e6 | ||
|
156ec586f0 | ||
|
956b18a72e | ||
|
48e1093469 | ||
|
e9c5e96c52 | ||
|
7510b363d6 | ||
|
0900329979 | ||
|
3d82709b7e | ||
|
31eb49efa3 | ||
|
00bbe2b4e9 | ||
|
315ad19dd4 | ||
|
869873deda | ||
|
39fe427f8e | ||
|
36efad44df | ||
|
8e4e1c1cfd | ||
|
a106082364 | ||
|
624b90260f | ||
|
d5a6f780a5 | ||
|
50ef8db377 | ||
|
8b88a78e4d | ||
|
c9d832ecde | ||
|
87ff8335bc | ||
|
8adf1d6360 | ||
|
56acf68393 | ||
|
e00c813e72 | ||
|
a9d646c180 | ||
|
2c427662a8 | ||
|
7966077838 | ||
|
87803a6e44 | ||
|
6158779a95 | ||
|
07dae70930 | ||
|
ae9bad0baa | ||
|
c49235b59d | ||
|
57af3338a2 | ||
|
9f01ecaf80 | ||
|
b40293fdd9 | ||
|
a864335c0e | ||
|
ddb93bae41 | ||
|
bf84286ebb | ||
|
39ffc78d6d | ||
|
1658238ff2 | ||
|
b73f846b7f | ||
|
464133be97 | ||
|
d06241b267 | ||
|
786fc59b0d | ||
|
1f8d9029eb | ||
|
4aaa5c169d | ||
|
9363ca68b6 | ||
|
c08c1e7eba | ||
|
3388b446fd | ||
|
d75bc8f2be | ||
|
dab5320444 | ||
|
a0ed98d2d1 | ||
|
4a2a7822b7 | ||
|
c75e55a5cf | ||
|
87bb0f34f0 | ||
|
c86a6bbe75 | ||
|
034f479408 | ||
|
f2109eee9b | ||
|
c7f3ca5ab4 | ||
|
5a713d4d9d | ||
fe51e85983 | |||
7fd48edef8 | |||
049aedf115 | |||
47ae46c46d | |||
12f85aecd7 | |||
|
1225a4efdc | ||
|
b8c77f1db1 | ||
|
297c65776b | ||
|
1fd7721e99 | ||
|
3a9c1fb8d9 | ||
|
fef9f8d390 | ||
|
5871da7b54 | ||
|
a33f39df5c | ||
|
8be93b9d5c | ||
|
b3f28c3cb8 | ||
|
a3e0f4b7d7 | ||
|
9c3d9c06b3 | ||
|
3e703cf85a | ||
|
f316a340c8 | ||
|
648ef75a2e | ||
|
719c41db00 | ||
|
11cc2547c9 | ||
|
66808fc735 | ||
|
ae717f932e | ||
|
335ecc1f41 | ||
|
334ea4aa3f | ||
|
8f5bcc76ec | ||
|
15b2a80f58 | ||
|
a158f562b6 | ||
|
aa39146cfb | ||
|
164c737dd3 | ||
|
64e7361d50 | ||
|
3be161a011 | ||
|
2c537bf823 | ||
|
18bbc6788f | ||
|
687c18641f | ||
|
64a284bd77 | ||
|
9f9f7d3fd6 | ||
|
cf30fc2b88 | ||
|
64c6c19918 | ||
|
42a965ab39 | ||
|
d635811b5f | ||
|
0ce35645b2 | ||
|
d843fff73d | ||
|
58c0580cad | ||
|
4eb37c3820 | ||
|
5532cd1a11 | ||
|
7297a1ef02 | ||
|
55a879ada8 | ||
|
c375d17c07 | ||
|
8469253131 | ||
|
2a06a28ad6 | ||
|
abc315a39b | ||
|
19ad6625e6 | ||
|
2cb4549f00 | ||
|
2b30911ec6 | ||
529a02ac75 | |||
|
72543d519f | ||
|
dbf500813c | ||
|
f609fa364d | ||
|
636bc0aee7 | ||
|
857a632cea | ||
|
9255a0073f | ||
|
32e954ccc8 | ||
|
265fd81b27 | ||
|
fdaddf9184 | ||
|
9a8bdcb5ba | ||
|
fcd20e7fc2 | ||
|
06e4f1f96e | ||
|
7280c38b16 | ||
|
0142e04ef5 | ||
|
be045b2615 | ||
|
3c5b0d7e42 | ||
|
d5ff15849d | ||
|
436ed9ae4f | ||
|
5a92db70eb | ||
|
3deda93e7e | ||
|
7dc9760d94 | ||
|
e25cc97ea0 | ||
|
88a59bbdea | ||
|
36aad6a088 | ||
|
a896d42bc1 | ||
|
e07d55efca | ||
|
34d5e62824 | ||
|
ae58ebe35a | ||
|
918b5903d7 | ||
|
e40a4d43f4 | ||
|
736f57c0c2 | ||
|
16feddfe3e | ||
|
01cc7da3b4 | ||
|
b9afdf1dda | ||
|
999dc36e76 | ||
|
e05fcd8248 | ||
|
95baad761a | ||
|
c7536d0fdb | ||
|
4c104b56ae | ||
|
c378c6d8da | ||
852c5e4a94 | |||
|
0657307265 | ||
|
38375ffdda | ||
|
59edb394fa | ||
|
3be83ed424 | ||
|
743ea96157 | ||
|
7200531c27 | ||
|
222b9ec155 | ||
|
932ee1a578 | ||
|
b0f598af68 | ||
|
d0fc91b61b | ||
|
17aac7ad66 | ||
|
9c72a8a4c9 | ||
|
a4164dbdf6 | ||
|
5fadf0697d | ||
|
a248c6cbeb | ||
|
03627b93e9 | ||
|
b43b5dbd59 | ||
|
25c3de6b99 | ||
|
05e5842992 | ||
|
b28fefdb0e | ||
|
148e0681ec | ||
|
fc59840235 | ||
|
fd9e30ea74 | ||
|
9d4bbbf80b | ||
|
a10e100364 | ||
|
7e22f47a0d | ||
|
7ec78d1c35 | ||
|
95e6491de5 | ||
|
f5cfed20d3 | ||
|
4c2f823178 | ||
|
5b4c43978e | ||
|
f792215c2f | ||
|
98ae3e2106 | ||
|
900d5bf24b | ||
|
b0c9c8d310 | ||
|
1e2f6d8b7f | ||
|
72a6412eed | ||
|
f4def7f8a0 | ||
|
3201f4d26d | ||
|
6b3ad339c6 | ||
|
a65efe5777 | ||
|
80a94de6df | ||
|
9400fcfaeb | ||
|
91131161c9 | ||
|
001716785d | ||
|
fef5d33f08 | ||
|
83fc1b30c7 | ||
|
133af63064 | ||
|
53a4df065c | ||
|
0b5270f3b7 | ||
|
efde0005f9 | ||
|
2825f8ae54 | ||
|
373d5dca45 | ||
|
0311bf82fc | ||
|
7e4708e8d8 | ||
|
50817d7ae2 | ||
|
eb25e5bfcc | ||
|
4e13550044 | ||
|
b36ad4bd25 | ||
|
985fc93d00 | ||
|
44a3666d68 | ||
|
bfa1872595 | ||
|
d7dc0406f6 | ||
|
3d678dc243 | ||
|
8a4f990214 | ||
|
4fbfd90c0d | ||
|
edd4104ce7 | ||
|
728aeb17e2 | ||
|
65d0663d28 | ||
|
532929a563 | ||
|
10aa0d14f0 | ||
|
0e752e31fd | ||
|
2f5ce8dd77 | ||
|
421b63846a | ||
|
0e72027ff3 | ||
|
fd1a56c11a | ||
|
7c2762065c | ||
|
8258dfa8c1 | ||
|
903891000a | ||
|
b93c2d4708 | ||
|
8a1209c6f0 | ||
|
5ef3b40dfe | ||
|
810f4fbee7 | ||
|
20e32ae078 | ||
|
92110e02a6 | ||
|
4a1655d6fa | ||
|
bf3d9f9631 | ||
|
06349aafa7 | ||
|
8c7884bcc3 | ||
|
9ff4468778 | ||
|
f2eec528ce | ||
|
52d47f78ac | ||
|
4a2230d90c | ||
|
fd93688d27 | ||
|
b8333ecaf8 | ||
|
3e1d4d2e4f | ||
|
6264440017 | ||
|
47e22e6891 | ||
|
3bd08c8c2b | ||
|
31132364ad | ||
|
3ef96dab13 | ||
|
37078d5772 | ||
|
99bd3592af | ||
|
d4c77b2a13 | ||
|
c49874fec7 | ||
|
7ebc7f8476 | ||
|
e24fc4825c | ||
|
20a7149eb6 | ||
|
a3151acb70 | ||
|
9647fe060a | ||
|
12bc736d49 | ||
|
db15103c93 | ||
|
bd127a7884 | ||
|
245122d049 | ||
|
f09220cf2d | ||
|
52d3767256 | ||
|
a62b8692f5 | ||
|
545192b8ac | ||
|
620257e0c5 | ||
|
ad60c63e2c | ||
|
d466364385 | ||
|
c6f445708d | ||
|
e3373bde65 | ||
|
c13225d2fa | ||
|
e4e9339071 | ||
|
125de6dde8 | ||
|
4d9f14eb30 | ||
|
9e7b3267aa | ||
|
e1bc5fbe51 | ||
|
eedce6c2d7 | ||
|
2eb8bf936f | ||
|
73ce1e6db3 | ||
|
fffdf448c4 | ||
|
ae1b3e1e64 | ||
|
46418f2338 | ||
|
46430a1ce6 | ||
|
e837c745b1 | ||
|
edd3d7353d | ||
|
0db42491ae | ||
|
3a6ab7a666 | ||
|
d122f9b0c0 | ||
|
86a2deacfb | ||
|
56a8b32d90 | ||
|
6d3a3b2dda | ||
|
52f65afe1a | ||
|
6cd5a6d0e8 | ||
|
e4925c2194 | ||
|
0f96eaac30 | ||
|
b9f8876fde | ||
|
16dbf3cb0d | ||
|
4dbb77b306 | ||
|
2fa77828b4 | ||
|
3c9fb417aa | ||
|
cf59a03129 | ||
|
55eabd5cae | ||
|
a4f429a528 | ||
|
e0de8bfcf2 | ||
|
d20a1b0354 | ||
|
3d60f7053e | ||
|
ccf1ae19b2 | ||
|
d2766d5bd3 | ||
|
98c5727c7e | ||
|
406d62a894 | ||
|
aabf8faca7 | ||
|
bb18b5effa | ||
|
8e207ef600 | ||
|
43e2e835eb | ||
|
fb06995b26 | ||
|
f0277f6a40 | ||
|
8c2cfcb37b | ||
|
dea09094b7 | ||
|
9bcb1d9377 | ||
|
22d0f6a5b1 | ||
|
5f3d6eb120 | ||
|
b06a8e8da2 | ||
|
f07e4a2084 | ||
|
f9bfbf28ae | ||
|
852fca2afa | ||
|
6b96a3ecbe | ||
|
fb4414fab6 | ||
|
8f95be2ba5 | ||
|
53175d539c | ||
|
e16222849c | ||
|
f5b3fedee3 | ||
|
2681c10b4c | ||
|
0db491bc01 | ||
|
d8b43a7f83 | ||
|
53c349413c | ||
|
00e2d4b16b | ||
|
27dfa0a2bf | ||
|
7818b88b70 | ||
|
975fe89eca | ||
|
70fd711fa5 | ||
|
3b462edc89 | ||
|
0a5da30062 | ||
|
d64eb320ed | ||
|
791121c574 | ||
|
2b1728aac5 | ||
|
1c74c0ea4b | ||
|
c1de53c098 | ||
|
83bfa8977c | ||
|
2af55fb898 | ||
|
c45028b914 | ||
|
f7ed913470 | ||
|
78c09f1b40 | ||
|
6337371cd1 | ||
|
c6005983f8 | ||
|
3614e90e99 | ||
|
31d22cda63 | ||
|
7e9cdbfb57 | ||
|
88bd7798b8 | ||
|
22b27141a4 | ||
|
5934017dbf | ||
|
07121d0294 | ||
|
9a840f420e | ||
|
c17ab5ae5c | ||
|
5ac62e7c55 | ||
|
7d386237fb | ||
|
9b56d7ba51 | ||
|
9f865eb1c5 | ||
|
81a64b2129 | ||
|
f09e1b8f93 | ||
|
543308ddbc | ||
|
519d9952e0 | ||
|
02c41a5069 | ||
|
c422f493f4 | ||
|
58d02d0d50 | ||
|
8ba8a67dfb | ||
|
d4e75b1efc | ||
|
d5b829c212 | ||
|
979df28ae2 | ||
|
6abca6b271 | ||
|
b012db8e4e | ||
|
5b9a814fbb | ||
|
19f41f6dbc | ||
|
0851c922ef | ||
|
13c5a45a5e | ||
|
84088a7a12 | ||
|
66ed487249 | ||
|
9050b4ab0e | ||
|
3a2fb3bc5d | ||
|
c5bcf9d676 | ||
|
116171dddd | ||
|
d336f757ed | ||
|
6d8bdcb2a6 | ||
|
00873a7654 | ||
|
17d1522655 | ||
|
6d842cfc64 | ||
|
a101764dcb | ||
|
d74d27ab2d | ||
|
42314b9807 | ||
|
f3eea7f664 | ||
|
7f71afd8b0 | ||
|
0afaed5089 | ||
|
150ae1df77 | ||
|
acc756f9cc | ||
|
4d4996c6f4 | ||
|
8fae3400d3 | ||
|
1a0156c686 | ||
|
96c43325c0 | ||
|
edda375a53 | ||
|
5116b06f2f | ||
|
15eb99d975 | ||
|
d876884397 | ||
|
002ec9d292 | ||
|
a5ea734eb0 | ||
|
6bfa46e990 | ||
|
305bf83d4e | ||
|
4d4381b196 | ||
|
81b315b12b | ||
|
cd8a578dfe | ||
|
1a48387e92 | ||
|
aceb4c926f | ||
|
efe02a0355 | ||
|
32d368816e | ||
|
8bd6f019ba | ||
|
d987601afd | ||
|
cac0161585 | ||
|
28cc8a19ba | ||
|
b27aaab6b6 | ||
|
29d5c91736 | ||
|
dfcceaea8e | ||
|
89dfd58e1c | ||
|
8857f84bf6 | ||
|
2c0cd12a15 | ||
|
619ca1fde0 | ||
|
41386fca3b | ||
|
152e18b0e5 | ||
|
4fb57e1c39 | ||
|
7fe53f749e | ||
|
db9c2f3cc7 | ||
|
389f12b8c5 | ||
|
edeb2bb5f1 | ||
|
b2062d6448 | ||
|
37f2326b21 | ||
|
e6971575f1 | ||
|
e50dac6b1c | ||
|
f6cee27c3f | ||
|
313e8a9457 | ||
|
d4d11db732 | ||
|
6c6066cea1 | ||
|
fe17a10eb8 | ||
|
7ef6f453dc | ||
|
d64998c16d | ||
|
c870ab773a | ||
|
2d3c394c73 | ||
|
4decb11321 | ||
|
73eef005ec | ||
|
0f4ae5164b | ||
|
8a4e122a0a | ||
|
58547706c7 | ||
|
fbe3b42153 | ||
|
e71fb08bd4 | ||
|
db954e88d4 | ||
|
db155a71a0 | ||
|
b9e00a72d0 | ||
|
640d3261e0 | ||
|
19984e2dba | ||
|
05363b1849 | ||
|
4e8d0f3ceb | ||
|
7a19292ae2 | ||
|
6a9650b9d1 | ||
|
bbb1a845ad | ||
|
56a3c05eae | ||
|
eef4bb35c9 | ||
|
19d325fb77 | ||
|
33c7d27b3b | ||
|
038d2d36a4 | ||
|
c5ecca3da2 | ||
|
de05b0a78b | ||
|
2399c2deeb | ||
|
de4ef54384 | ||
|
363bd12575 | ||
|
30ecb70cd7 | ||
|
350c6a5548 | ||
|
90871c1ab0 | ||
|
87c9246c34 | ||
|
8679ba1ba3 | ||
|
c6292a97dd | ||
|
175583ca51 | ||
|
47bf9580da | ||
|
68c431bda2 | ||
|
3d7eef18d0 | ||
|
56f8e16463 | ||
|
186a30d429 | ||
|
86d8e19a97 | ||
|
748e707dfa | ||
|
169c167d4a | ||
|
31111a5332 | ||
|
74474f6f16 | ||
|
9769698f22 | ||
|
78c886f057 | ||
|
1a0f2be95f | ||
|
0af68d5f32 | ||
|
4a5d84fb22 | ||
|
51a33052d9 | ||
|
dfc411b9c6 | ||
|
66c043534f | ||
|
ab4e5852c1 | ||
|
1f941b7c9d | ||
|
1be5b970d1 | ||
|
57dd04ea27 | ||
|
200e821c85 | ||
|
6a06a21c2a | ||
|
33600c48eb | ||
|
255c3c3c88 | ||
|
0de54ec30c | ||
|
f3be74e78c | ||
|
c55d837670 | ||
|
6a2cfb14e9 | ||
|
f2893cc336 | ||
|
a5c3463fa9 | ||
|
f7da17778e | ||
|
83e45f26b2 | ||
|
5b2eef4822 | ||
|
6f6da3f481 | ||
|
50bca808f1 | ||
|
f1d20d061c | ||
|
dc41f400a1 | ||
|
ea60e5c07c | ||
|
d523d62abd | ||
|
8b85f3b6ce | ||
|
d941402ef1 | ||
|
da347feac9 | ||
|
fda7596bc1 | ||
|
147af8ae29 | ||
|
311ad581cc | ||
|
be3279ba7e | ||
|
d455f3b256 | ||
|
8d190f0097 | ||
|
346023593d | ||
|
69e2fd4362 | ||
|
6e41658b7d | ||
|
fdcd8c46e0 | ||
|
2cc13de3e2 | ||
|
bdaa3bf48b | ||
|
b6095d67ad | ||
|
fc806b71c6 | ||
|
7f4f8dddad | ||
|
973df7a901 | ||
|
e0b0e2aff8 | ||
|
2ed11613a1 | ||
|
51bd2ee53c | ||
|
48657f02a6 | ||
|
718b8118bf | ||
|
0f31e298d4 | ||
|
3d323594db | ||
|
15e423fb4e | ||
|
9e62c87ea2 | ||
|
acc6f9c2b4 | ||
|
c71fa6fc12 | ||
|
f4873d1720 | ||
|
af984d9172 | ||
|
7f19e29bb3 | ||
|
b1393950f2 | ||
|
ff05e127bd | ||
|
427140f140 | ||
|
9d7022ec11 | ||
|
53a3490837 | ||
|
7d21c9ebc8 | ||
|
6919d7c02f | ||
|
52df088b8c | ||
|
7fd80315b2 | ||
|
417ee59b39 | ||
|
5e9bfeacb6 | ||
|
2a18f0c21a | ||
|
78e5b2cc59 | ||
|
f3e9916b37 | ||
|
427c7cc817 | ||
|
73e1fd09aa | ||
|
20987b5e1b | ||
|
48879a8b29 | ||
|
c5dfda6f54 | ||
|
58a4cc6fa0 | ||
|
8c3ce4e896 | ||
|
80f0abe037 | ||
|
47e9201d78 | ||
|
6f157dd921 | ||
|
a9e0f6b98e | ||
|
e790be8c1a | ||
|
859c101c51 | ||
|
64f4b468c7 | ||
|
0ea48b53c8 | ||
|
cef191a6e4 | ||
|
dc73ff1679 | ||
|
996874a253 | ||
|
9007cc8369 | ||
|
3d21e2491f | ||
|
51c7478b94 | ||
|
08b7a3aece | ||
|
50106e3c12 | ||
|
12fd21df01 | ||
|
f6ed43229d | ||
|
3d492ff720 | ||
|
ef50dbb6fe | ||
|
48be41f64b | ||
|
548d49271f | ||
|
c8444d71f6 | ||
|
0915e98700 | ||
|
21b22a3409 | ||
|
cf852c5a87 | ||
|
4312d978fb | ||
|
cad7bdb2ef | ||
|
9a2f74fe64 | ||
|
ab9df9bc42 | ||
|
b8790b7f79 | ||
|
50b7afd25a | ||
|
54cbe017b9 | ||
|
8ba0952cc5 | ||
|
29f6e2ddbf | ||
|
245155d10e | ||
|
d31f3a1e41 | ||
|
e8aabdb3cf | ||
|
045aa81899 | ||
|
cf3a02ae7e | ||
|
213665eb59 | ||
|
834a560451 | ||
|
25418e7be5 | ||
|
0ce9c3d8c2 | ||
|
3085ef46ed | ||
|
5aa656c502 | ||
|
a7977f9153 | ||
|
32cd46a14a | ||
|
b1dc8c7841 | ||
|
2ddc87ed59 | ||
|
ef46164dc3 | ||
|
e6c88d83aa | ||
|
52cc2a3d30 | ||
|
dfe171ea94 | ||
|
19f988eccd | ||
|
f7e7e2d85c | ||
|
a933f0d763 | ||
|
94212b1003 | ||
|
92b29d8006 | ||
|
6c717ce30e | ||
|
cf4e70b8d1 | ||
|
7edd5ea122 | ||
|
f7a20f3670 | ||
|
e93a872500 | ||
|
efd0f28d51 | ||
|
271432953d | ||
|
4df573bbc7 | ||
|
76573731c6 | ||
|
64b0e3eb3f | ||
|
2f01aa24c4 | ||
|
2d7ea2e302 | ||
|
08e6f00ff5 | ||
|
7ffbce7759 | ||
|
d26586c794 | ||
|
5446c4123a | ||
|
e1e0e5ef21 | ||
|
340c7966e0 | ||
|
f7d547de59 | ||
|
12986049ef | ||
|
134503bcd2 |
36
.gitignore
vendored
36
.gitignore
vendored
@ -4,7 +4,7 @@
|
||||
*.dll
|
||||
*.so
|
||||
*.dylib
|
||||
|
||||
bin/
|
||||
# Test binary, built with `go test -c`
|
||||
*.test
|
||||
|
||||
@ -13,3 +13,37 @@
|
||||
|
||||
# Dependency directories (remove the comment below to include it)
|
||||
# vendor/
|
||||
|
||||
#vscode
|
||||
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
!.vscode/*.code-snippets
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
|
||||
# Built Visual Studio Code Extensions
|
||||
*.vsix
|
||||
|
||||
__debug_bin
|
||||
__debug_bin*
|
||||
|
||||
.idea
|
||||
.vscode
|
||||
|
||||
screenlog.*
|
||||
*.txt
|
||||
|
||||
proxyserver/proxyserver
|
||||
|
||||
shared-state
|
||||
|
||||
*.zip
|
||||
|
||||
vendor
|
||||
|
||||
grpc_server/gen
|
44
README.md
44
README.md
@ -3,9 +3,36 @@
|
||||
#### 介绍
|
||||
新版fusenapi,golang语言,go-zero框架
|
||||
|
||||
#### 软件架构
|
||||
软件架构说明
|
||||
* 首页-登录-注册
|
||||
+ Home 首页
|
||||
+ Sign In 登录
|
||||
+ Sign Up 注册
|
||||
* 产品列表 - Products 产品列表
|
||||
* 产品详情 - Product Details 产品详情
|
||||
* 购物车-确认订单-支付成功:
|
||||
+ Cart 购物车
|
||||
+ Order Confirmation 确认订单
|
||||
+ Payment Success 支付成功
|
||||
* 设计存储 - saved designs 已保存设计
|
||||
* 我的订单 - My Orders 我的订单
|
||||
* 我的云仓 - My Cloud Storage 我的云仓
|
||||
* 个人中心 - Profile 个人中心
|
||||
* 关于我们 - About Us 关于我们
|
||||
* 联系我们 - Contact Us 联系我们
|
||||
* 常见问题 - FAQ 常见问题
|
||||
|
||||
#### 软件架构
|
||||
|
||||
* 首页-登录-注册: home-user-auth.api
|
||||
* 产品列表-产品详情: product.api
|
||||
* 购物车-确认订单-支付成功: shopping-cart-confirmation.api
|
||||
* 设计存储 - designs.api
|
||||
* 我的订单 - orders.api
|
||||
* 我的云仓 - cloud-storage.api
|
||||
* 个人中心 - profile.api
|
||||
* 关于我们 - about-us.api
|
||||
* 联系我们 - contact-us.api
|
||||
* 常见问题 - faq.api
|
||||
|
||||
#### 安装教程
|
||||
|
||||
@ -15,9 +42,16 @@
|
||||
|
||||
#### 使用说明
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
1. sh fs_gen_api.sh home-user-auth # 序列化api
|
||||
2. sh fs_gen_mysql_model.sh fs_canteen_type # 根据ddl序列化mysql model
|
||||
3. 生成后就是go-zero框架的实现. 主要在logic目录下实现代码.
|
||||
4. Response.Data的结构体 在api文件下定义. 方便rpc以后的接入. 参考现有的例子
|
||||
|
||||
#### 规范
|
||||
|
||||
sql 的值只能用 ?, 传入. 不能自己拼接. 涉及到sql安全和防注入.
|
||||
例子: QueryRow("SELECT * FROM userinfo WHERE username = ? AND password = ?", sename, partname).Scan(&uid, &username, &password)
|
||||
|
||||
|
||||
#### 参与贡献
|
||||
|
||||
|
23
about-us.api
23
about-us.api
@ -1,23 +0,0 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: // TODO: add title
|
||||
desc: // TODO: add description
|
||||
author: ""
|
||||
email: ""
|
||||
)
|
||||
|
||||
type request {
|
||||
// TODO: add members here and delete this comment
|
||||
Name string `path:"name,options=you|me"` // parameters are auto validated
|
||||
}
|
||||
|
||||
type response {
|
||||
// TODO: add members here and delete this comment
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
service user-auth {
|
||||
@handler GreetHandler
|
||||
get /greet/from/:name(request) returns (response);
|
||||
}
|
29
change_port.sh
Normal file
29
change_port.sh
Normal file
@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 定义一个函数来修改每个服务器的配置文件中的端口
|
||||
change_port() {
|
||||
server_name=$1
|
||||
port=$2
|
||||
config_file="server/${server_name}/etc/${server_name}.yaml"
|
||||
|
||||
echo "Changing port for $server_name to $port"
|
||||
|
||||
if [ -f "$config_file" ]; then
|
||||
# 使用 sed 将 Port 替换为新的端口
|
||||
sed -i "s/^Port: .*$/Port: $port/" "$config_file"
|
||||
else
|
||||
echo "Configuration file $config_file not found"
|
||||
fi
|
||||
}
|
||||
|
||||
# 列出所有服务器目录
|
||||
server_dirs=("backend" "canteen" "data-transfer" "home-user-auth" "inventory" "map-library" "orders" "product" "product-model" "product-template" "shopping-cart-confirmation" "upload" "webset")
|
||||
|
||||
# 初始化端口为 9901
|
||||
port=9901
|
||||
|
||||
# 遍历服务器目录,修改每个服务器的配置文件中的端口
|
||||
for server_dir in "${server_dirs[@]}"; do
|
||||
change_port $server_dir $port
|
||||
port=$((port + 1))
|
||||
done
|
@ -1,23 +0,0 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: // TODO: add title
|
||||
desc: // TODO: add description
|
||||
author: ""
|
||||
email: ""
|
||||
)
|
||||
|
||||
type request {
|
||||
// TODO: add members here and delete this comment
|
||||
Name string `path:"name,options=you|me"` // parameters are auto validated
|
||||
}
|
||||
|
||||
type response {
|
||||
// TODO: add members here and delete this comment
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
service user-auth {
|
||||
@handler GreetHandler
|
||||
get /greet/from/:name(request) returns (response);
|
||||
}
|
33
config_replica_id.sh
Executable file
33
config_replica_id.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
|
||||
replica_id=5
|
||||
|
||||
change_config(){
|
||||
|
||||
server_name=$1
|
||||
config_file="server/${server_name}/etc/${server_name}.yaml"
|
||||
|
||||
# 无论ReplicaId存在与否,都重置replica_id
|
||||
((replica_id+=5))
|
||||
|
||||
if ! grep -q "ReplicaId:" "$config_file"; then
|
||||
|
||||
sed -i "s/^Port:.*$/&\nReplicaId: $replica_id/" "$config_file"
|
||||
echo "Added ReplicaId: $replica_id to $config_file"
|
||||
|
||||
else
|
||||
|
||||
exist_id=$(grep -oP "ReplicaId:\s*\K[0-9]+" "$config_file")
|
||||
sed -i "s/^ReplicaId:.*$/ReplicaId: $replica_id/" "$config_file"
|
||||
echo "Updated ReplicaId to $replica_id in $config_file"
|
||||
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
# 读取server目录,忽略指定的三个目录
|
||||
server_dirs=($(cd server && ls | grep -vE "backend|product-model"))
|
||||
|
||||
for server_dir in "${server_dirs[@]}"; do
|
||||
change_config $server_dir
|
||||
done
|
13
constants/blm_service.go
Normal file
13
constants/blm_service.go
Normal file
@ -0,0 +1,13 @@
|
||||
package constants
|
||||
|
||||
const (
|
||||
BLMServiceUrlLogoCombine string = "/LogoCombine"
|
||||
BLMServiceUrlLogoRemovebg string = "/removebg"
|
||||
BLMServiceUrlLogoFeatureExtraction string = "/FeatureExtraction"
|
||||
)
|
||||
|
||||
type BLMServiceUrlResult struct {
|
||||
Code string `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data interface{} `json:"data"`
|
||||
}
|
3
constants/cart.go
Normal file
3
constants/cart.go
Normal file
@ -0,0 +1,3 @@
|
||||
package constants
|
||||
|
||||
const CART_EXPIRE_TIME = 60 //购物车过期时间
|
26
constants/cloud_order.go
Normal file
26
constants/cloud_order.go
Normal file
@ -0,0 +1,26 @@
|
||||
package constants
|
||||
|
||||
type cloud int64
|
||||
|
||||
// 已下单
|
||||
const STATUS_ORDERD cloud = 1
|
||||
|
||||
// 运输中
|
||||
const STATUS_SHIPPING cloud = 2
|
||||
|
||||
// ups待提货
|
||||
const STATUS_PICK_UP cloud = 3
|
||||
|
||||
// 已到达
|
||||
const STATUS_ARRIVAL cloud = 4
|
||||
|
||||
/**
|
||||
* 状态对应中文
|
||||
* @var string[]
|
||||
*/
|
||||
var CloudOrderMap = map[cloud]string{
|
||||
STATUS_ORDERD: "已下单",
|
||||
STATUS_SHIPPING: "运输中",
|
||||
STATUS_PICK_UP: "UPS已发货",
|
||||
STATUS_ARRIVAL: "已到达",
|
||||
}
|
6
constants/concact_service.go
Normal file
6
constants/concact_service.go
Normal file
@ -0,0 +1,6 @@
|
||||
package constants
|
||||
|
||||
type ConcactService string
|
||||
|
||||
const TYPE_DEFAULT ConcactService = "default"
|
||||
const TYPE_ORDER ConcactService = "order"
|
9
constants/delivery.go
Normal file
9
constants/delivery.go
Normal file
@ -0,0 +1,9 @@
|
||||
package constants
|
||||
|
||||
type DeliveryMethod int64
|
||||
|
||||
const (
|
||||
// 配送方式
|
||||
DELIVERY_METHOD_ADDRESS DeliveryMethod = 1 // 直接发货到收获地址
|
||||
DELIVERY_METHOD_CLOUD DeliveryMethod = 2 // 云仓
|
||||
)
|
19
constants/domain.go
Normal file
19
constants/domain.go
Normal file
@ -0,0 +1,19 @@
|
||||
package constants
|
||||
|
||||
// api域名
|
||||
const API_URL = "https://fusenapi.kayue.cn:8010"
|
||||
|
||||
// 后台域名
|
||||
const BACK_URL = "http://fusenadmin.kayue.cn:8009"
|
||||
|
||||
// h5域名
|
||||
const H5_URL = "https://fusenh5.kayue.cn:8011"
|
||||
|
||||
// vue域名
|
||||
const VUE_URL = "https://fusenh5.kayue.cn:8011"
|
||||
|
||||
// 后台v2域名
|
||||
const BACKEND_URL = "https://fusenv2admin.kayue.cn:8014/#/"
|
||||
|
||||
// 二维码域名
|
||||
const QRCODE_URL = "http://qrcode.fusenpack.com/site/go/"
|
14
constants/faq.go
Normal file
14
constants/faq.go
Normal file
@ -0,0 +1,14 @@
|
||||
package constants
|
||||
|
||||
type TypeFaq int64
|
||||
|
||||
const FAQ_STATUS_ON TypeFaq = 1
|
||||
const FAQ_STATUS_OFF TypeFaq = 0
|
||||
|
||||
/**
|
||||
* 定义类型
|
||||
*/
|
||||
const FAQ_TAG_ORDER TypeFaq = 1
|
||||
const FAQ_TAG_SHIPPING TypeFaq = 2
|
||||
const FAQ_TAG_PAYMENT TypeFaq = 3
|
||||
const FAQ_TAG_RETURN TypeFaq = 4
|
4
constants/image_cropping.go
Normal file
4
constants/image_cropping.go
Normal file
@ -0,0 +1,4 @@
|
||||
package constants
|
||||
|
||||
// 裁剪尺寸阶梯
|
||||
var IMAGE_CROPPING_STEP_SIZE = []int{200, 400, 600, 800}
|
301
constants/invoice_html.go
Normal file
301
constants/invoice_html.go
Normal file
@ -0,0 +1,301 @@
|
||||
package constants
|
||||
|
||||
const INVOICE_TEMPLATE_01 = `
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Invoice</title>
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: "Montserrat-SemiBold";
|
||||
src: url("https://s3.us-west-1.amazonaws.com/storage.fusenpack.com/b808164b4f7ecc19f560d235db5b1f5b99fe8ab218b606f15debab2b9c4230e2");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Montserrat-Medium";
|
||||
src: url("https://s3.us-west-1.amazonaws.com/storage.fusenpack.com/3d91bbd91ba6fac26b8460a078742b61bfd1e2976311c065f8ac9c5270be6901");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Montserrat-Light";
|
||||
src: url("https://s3.us-west-1.amazonaws.com/storage.fusenpack.com/24e580a4a5afebf94596ec7b6c8d9c8d57f75a5429ee757217da552d5f03e5d1");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Montserrat-Regular";
|
||||
src: url("https://s3.us-west-1.amazonaws.com/storage.fusenpack.com/78072d2cbce0a3f88c01ab2830ba3a453f0968b516388e45e9a6fb5e970450b8");
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.header_warp {
|
||||
background-color: #F8F8FA;
|
||||
padding: 40px 5% 40px 6%;
|
||||
}
|
||||
|
||||
.header_td {
|
||||
width: 50%;
|
||||
font-family: Montserrat-SemiBold;
|
||||
}
|
||||
|
||||
.header_td.logo {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.header_logo {
|
||||
max-height: 30px;
|
||||
max-width: 100%;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.header_td.title {
|
||||
color: #212121;
|
||||
font-weight: 600;
|
||||
font-size: 72px;
|
||||
}
|
||||
|
||||
.information_warp {
|
||||
padding: 60px 5% 60px 6%;
|
||||
}
|
||||
|
||||
.information_td {
|
||||
width: 50%;
|
||||
font-size: 26px;
|
||||
line-height: 39px;
|
||||
font-weight: 300;
|
||||
font-family: Montserrat-Light;
|
||||
}
|
||||
|
||||
.information_td.bill {
|
||||
color: #212121;
|
||||
font-weight: 500;
|
||||
font-family: Montserrat-Medium;
|
||||
}
|
||||
|
||||
.information_td.right {
|
||||
color: #212121;
|
||||
}
|
||||
|
||||
.information_td.info {
|
||||
color: #666666;
|
||||
line-height: 34px;
|
||||
}
|
||||
|
||||
.bill_warp {
|
||||
padding: 0 5% 0 6%;
|
||||
}
|
||||
|
||||
.bill_td {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.bill_td:first-child {
|
||||
width: 47.59%;
|
||||
}
|
||||
|
||||
.bill_td.title {
|
||||
border-top: 4px solid #333;
|
||||
padding: 26px 0 14px;
|
||||
font-weight: 500;
|
||||
color: #212121;
|
||||
font-family: Montserrat-Medium;
|
||||
}
|
||||
|
||||
.bill_td.info {
|
||||
color: #666;
|
||||
border-bottom: 2px solid #ccc;
|
||||
padding: 16px 0;
|
||||
font-weight: 400;
|
||||
font-family: Montserrat-Light;
|
||||
}
|
||||
|
||||
.bill_td.info:first-child {
|
||||
font-family: Montserrat-Regular;
|
||||
}
|
||||
|
||||
.bill_warp tr:last-child .bill_td.info {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.total_warp {
|
||||
padding: 28px 5% 48px 0;
|
||||
}
|
||||
|
||||
.total_td {
|
||||
color: #212121;
|
||||
padding: 16px 0 14px;
|
||||
font-size: 24px;
|
||||
font-weight: 500;
|
||||
font-family: Montserrat-Medium;
|
||||
}
|
||||
|
||||
.total_td.info {
|
||||
color: #666;
|
||||
font-weight: 400;
|
||||
font-family: Montserrat-Regular;
|
||||
}
|
||||
|
||||
.total_td.border-dashed {
|
||||
border-bottom: 2px dashed #ccc;
|
||||
}
|
||||
|
||||
.total_td.border-solid {
|
||||
border-bottom: 4px solid #333;
|
||||
padding-bottom: 24px;
|
||||
}
|
||||
|
||||
.total_td.total {
|
||||
padding-top: 24px;
|
||||
font-size: 26px;
|
||||
font-weight: 600;
|
||||
font-family: Montserrat-SemiBold;
|
||||
}
|
||||
|
||||
.notes_warp {
|
||||
padding: 0 5% 0 6%;
|
||||
}
|
||||
|
||||
.notes_td {
|
||||
font-size: 26px;
|
||||
color: #666;
|
||||
font-weight: 300;
|
||||
width: 50%;
|
||||
line-height: 42px;
|
||||
font-family: Montserrat-Light;
|
||||
}
|
||||
|
||||
.notes_td.title {
|
||||
color: #212121;
|
||||
font-weight: 500;
|
||||
font-family: Montserrat-Medium;
|
||||
}
|
||||
|
||||
.notes_td.notes {
|
||||
vertical-align: top;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!-- header -->
|
||||
<table class="header_warp" border="0" align="center" cellpadding="0" cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td class="header_td logo" align="left">
|
||||
<img class="header_logo" src="https://fusenapi.kayue.cn:8010/storage/email/logo.png" alt="logo">
|
||||
</td>
|
||||
<td class="header_td title" align="right">Invoice</td>
|
||||
</tr>
|
||||
</table>
|
||||
`
|
||||
|
||||
const INVOICE_TEMPLATE_02 = `
|
||||
<!-- information -->
|
||||
<table class="information_warp width100" border="0" align="center" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td class="information_td bill" align="left">Bill To:</td>
|
||||
<td class="information_td right" align="right">Invoice No. #%v</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="information_td info" align="left">%v</td>
|
||||
<td class="information_td right" align="right">Date: %v</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="information_td info" align="left">%v</td>
|
||||
<td class="information_td" align="right"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="information_td info" align="left">%v</td>
|
||||
<td class="information_td" align="right"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="information_td info" align="left">%v</td>
|
||||
<td class="information_td" align="right"></td>
|
||||
</tr>
|
||||
</table>
|
||||
`
|
||||
const INVOICE_TEMPLATE_03 = `
|
||||
<!-- bill -->
|
||||
<table class="bill_warp width100" border="0" align="center" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td class="bill_td title" align="left">Product Name</td>
|
||||
<td class="bill_td title" align="right">Price</td>
|
||||
<td class="bill_td title" align="right">Quantity</td>
|
||||
<td class="bill_td title" align="right">Total</td>
|
||||
</tr>
|
||||
%v
|
||||
</table>
|
||||
`
|
||||
|
||||
const INVOICE_TEMPLATE_0301 = `
|
||||
<tr>
|
||||
<td class="bill_td info" align="left">%v</td>
|
||||
<td class="bill_td info" align="right">%v</td>
|
||||
<td class="bill_td info" align="right">%v %v</td>
|
||||
<td class="bill_td info" align="right">%v</td>
|
||||
</tr>
|
||||
`
|
||||
const INVOICE_TEMPLATE_04 = `
|
||||
<!-- total -->
|
||||
<table class="total_warp width50" border="0" align="right" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td class="total_td" align="right">Subtotal</td>
|
||||
<td class="total_td info" align="right">%v</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="total_td" align="right">Shipping Fee</td>
|
||||
<td class="total_td info" align="right">Free</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="total_td border-dashed" align="right">Tax</td>
|
||||
<td class="total_td info border-dashed" align="right">%v</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="total_td" align="right">Total</td>
|
||||
<td class="total_td info" align="right">%v</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="total_td border-solid" align="right">%v</td>
|
||||
<td class="total_td info border-solid" align="right">%v</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="total_td total" align="right">%v</td>
|
||||
<td class="total_td total" align="right">%v</td>
|
||||
</tr>
|
||||
</table>
|
||||
`
|
||||
const INVOICE_TEMPLATE_05 = `
|
||||
<!-- notes -->
|
||||
<table class="notes_warp width100" border="0" align="center" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td class="notes_td title" align="left">Payment Method:</td>
|
||||
<td class="notes_td title" align="left">Notes:</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="notes_td" align="left">%v</td>
|
||||
<td class="notes_td notes" align="left" rowspan="2">Thank you for your business !</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="notes_td" align="left">Account No. :%v</td>
|
||||
</tr>
|
||||
</table>
|
||||
`
|
||||
const INVOICE_TEMPLATE_06 = `
|
||||
</body>
|
||||
<style>
|
||||
.width50 {
|
||||
width: 50%;
|
||||
}
|
||||
.width100 {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
</html>
|
||||
|
||||
|
||||
`
|
16
constants/material.go
Normal file
16
constants/material.go
Normal file
@ -0,0 +1,16 @@
|
||||
package constants
|
||||
|
||||
// 材料类型
|
||||
var MAP_MATERIAL = map[int64]string{
|
||||
1: "paper",
|
||||
2: "glass",
|
||||
3: "塑料",
|
||||
4: "牛皮纸",
|
||||
5: "单层牛皮纸",
|
||||
6: "双层牛皮纸",
|
||||
7: "PET",
|
||||
8: "瓦楞纸",
|
||||
9: "厚牛皮纸",
|
||||
10: "卡纸",
|
||||
11: "PP",
|
||||
}
|
6
constants/min_purchase_box.go
Normal file
6
constants/min_purchase_box.go
Normal file
@ -0,0 +1,6 @@
|
||||
package constants
|
||||
|
||||
type Purchase int64
|
||||
|
||||
// 最低购买箱数
|
||||
const MIN_PURCHASE_QUANTITY Purchase = 3
|
147
constants/order.go
Normal file
147
constants/order.go
Normal file
@ -0,0 +1,147 @@
|
||||
package constants
|
||||
|
||||
// 新版订单状态-后台所有
|
||||
// 未支付
|
||||
// const STATUS_NEW_NOT_PAY = 0
|
||||
|
||||
// // 首款已付,尾款待付
|
||||
// const STATUS_NEW_PART_PAY = 1
|
||||
|
||||
// // 全款已付
|
||||
// const STATUS_NEW_PAY_COMPLETED = 2
|
||||
|
||||
// // 订单已确认
|
||||
// const STATUS_NEW_SURE = 3
|
||||
|
||||
// // 订单生产中
|
||||
// const STATUS_NEW_PRODUTING = 4
|
||||
|
||||
// // 订单生产完成
|
||||
// const STATUS_NEW_PRODUT_COMPLETED = 5
|
||||
|
||||
// // 订单已到库
|
||||
// const STATUS_NEW_ARRIVAL = 6
|
||||
|
||||
// // 已发货
|
||||
// const STATUS_NEW_DELIVER = 7
|
||||
|
||||
// // UPS提货
|
||||
// const STATUS_NEW_UPS = 8
|
||||
|
||||
// // 已完成
|
||||
// const STATUS_NEW_COMPLETED = 9
|
||||
|
||||
// // 取消订单
|
||||
// const STATUS_NEW_CANCEL = 10
|
||||
|
||||
// // 退款中
|
||||
// const STATUS_NEW_REFUNDING = 11
|
||||
|
||||
// // 退款完成
|
||||
// const STATUS_NEW_REFUNDED = 12
|
||||
|
||||
// // 订单删除
|
||||
// const STATUS_NEW_DELETE = 13
|
||||
|
||||
// // 订单关闭
|
||||
// const STATUS_NEW_CLOSE = 14
|
||||
|
||||
// // 前台订单
|
||||
// // 已支付
|
||||
// const STATUS_FONT_PAID = 1
|
||||
|
||||
// // 生产中
|
||||
// const STATUS_FONT_PRODUCTION = 2
|
||||
|
||||
// // 运输中
|
||||
// const STATUS_FONT_SHIPPED = 3
|
||||
|
||||
// // 到达云仓
|
||||
// const STATUS_FONT_INVENTORY = 4
|
||||
|
||||
// // 订单完成
|
||||
// const STATUS_FONT_COMPLETED = 5
|
||||
|
||||
// // 订单关闭
|
||||
// const STATUS_FONT_CLOSED = 7
|
||||
|
||||
// // 云仓完成
|
||||
// const STATUS_FONT_COMPLETED_CLOUD = 8
|
||||
|
||||
type Order int64
|
||||
|
||||
// 订单状态
|
||||
const (
|
||||
// 未支付
|
||||
STATUS_NEW_NOT_PAY Order = 0
|
||||
// 首款已付,尾款待付
|
||||
STATUS_NEW_PART_PAY Order = 1
|
||||
// 全款已付
|
||||
STATUS_NEW_PAY_COMPLETED Order = 2
|
||||
// 订单已确认
|
||||
STATUS_NEW_SURE Order = 3
|
||||
// 订单生产中
|
||||
STATUS_NEW_PRODUTING Order = 4
|
||||
// 订单生产完成
|
||||
STATUS_NEW_PRODUT_COMPLETED Order = 5
|
||||
// 订单已到库
|
||||
STATUS_NEW_ARRIVAL Order = 6
|
||||
// 已发货
|
||||
STATUS_NEW_DELIVER Order = 7
|
||||
// UPS提货
|
||||
STATUS_NEW_UPS Order = 8
|
||||
// 已完成
|
||||
STATUS_NEW_COMPLETED Order = 9
|
||||
// 取消订单
|
||||
STATUS_NEW_CANCEL Order = 10
|
||||
// 退款中
|
||||
STATUS_NEW_REFUNDING Order = 11
|
||||
// 退款完成
|
||||
STATUS_NEW_REFUNDED Order = 12
|
||||
// 订单删除
|
||||
STATUS_NEW_DELETE Order = 13
|
||||
// 订单关闭
|
||||
STATUS_NEW_CLOSE Order = 14
|
||||
)
|
||||
|
||||
// 前台订单状态
|
||||
const (
|
||||
// 已支付
|
||||
STATUS_FONT_PAID Order = 1
|
||||
// 生产中
|
||||
STATUS_FONT_PRODUCTION Order = 2
|
||||
// 运输中
|
||||
STATUS_FONT_SHIPPED Order = 3
|
||||
// 到达云仓
|
||||
STATUS_FONT_INVENTORY Order = 4
|
||||
// 订单完成
|
||||
STATUS_FONT_COMPLETED Order = 5
|
||||
// 订单关闭
|
||||
STATUS_FONT_CLOSED Order = 7
|
||||
// 云仓完成
|
||||
STATUS_FONT_COMPLETED_CLOUD Order = 8
|
||||
)
|
||||
|
||||
type Day int64
|
||||
|
||||
// 订单取消时间
|
||||
const (
|
||||
CANCLE_ORDER_EXPIRE Day = 48 * 3600
|
||||
CANCLE_ORDER_EXPIRE_DAY Day = 2 // 2天
|
||||
)
|
||||
|
||||
// 订单时间配置
|
||||
const (
|
||||
ORDER_PRODUCT_DAY Day = 25 //产品制作周期(天)
|
||||
ORDER_FACTORY_DELIVER_DAY Day = 2 //厂家发货到货代周期(天)
|
||||
ORDER_DELIVER_UPS_DAY Day = 35 //货代发货至UPS周期(天)
|
||||
ORDER_UPS_TRANS_DAY Day = 5 //UPS运输周期(天)
|
||||
)
|
||||
|
||||
const (
|
||||
LOGISTICS_STATUS_DRAW Order = 1
|
||||
LOGISTICS_STATUS_SHIPPING Order = 2
|
||||
LOGISTICS_STATUS_UPS Order = 3
|
||||
LOGISTICS_STATUS_UPS_ARRIVAL Order = 4
|
||||
LOGISTICS_STATUS_ARRIVAL Order = 5
|
||||
)
|
149
constants/orders.go
Normal file
149
constants/orders.go
Normal file
@ -0,0 +1,149 @@
|
||||
package constants
|
||||
|
||||
// 订单类型
|
||||
const (
|
||||
DELIVERYMETHODDIRECTMAIL int64 = 1 // 直邮
|
||||
DELIVERYMETHODDSCLOUDSTORE int64 = 2 // 云仓
|
||||
)
|
||||
|
||||
// 货币
|
||||
type Currency string
|
||||
|
||||
const (
|
||||
CURRENCYUSD Currency = "usd" // 美金
|
||||
)
|
||||
|
||||
// 金额单位
|
||||
type AmountUnit interface{}
|
||||
|
||||
// 汇率单位
|
||||
type ExchangeRateUnit interface{}
|
||||
|
||||
// 交易方式
|
||||
type PayMethods string
|
||||
|
||||
const (
|
||||
PAY_METHOD_CARD PayMethods = "CARD" //card
|
||||
PAY_METHOD_VISA PayMethods = "VISA" //visa
|
||||
)
|
||||
|
||||
// 支付状态
|
||||
type PayStatusCode int64
|
||||
|
||||
const (
|
||||
PAY_STATUS_UNPAID PayStatusCode = 10 //10,未支付
|
||||
PAY_STATUS_PAID PayStatusCode = 20 //20,已支付
|
||||
PAY_STATUS_REFUNDED PayStatusCode = 30 //30,已退款
|
||||
)
|
||||
|
||||
// 订单支付状态
|
||||
type OrderPayStatusCode int64
|
||||
|
||||
// 0,未付首款
|
||||
// 10,已付首款
|
||||
// 20,已退首款
|
||||
// 30,已付尾款
|
||||
// 40,已退尾款
|
||||
const (
|
||||
ORDER_PAY_STATUS_UNPAIDDEPOSIT OrderPayStatusCode = 0 // 0,未付首款
|
||||
ORDER_PAY_STATUS_PAIDDEPOSIT OrderPayStatusCode = 10 // 10,已付首款
|
||||
ORDER_PAY_STATUS_REFUNDEDDEPOSIT OrderPayStatusCode = 20 // 20,已退首款
|
||||
ORDER_PAY_STATUS_PAIDDREMAINING OrderPayStatusCode = 30 // 30,已付尾款
|
||||
ORDER_PAY_STATUS_REFUNDEDREMAINING OrderPayStatusCode = 40 // 40,已退尾款
|
||||
)
|
||||
|
||||
// 订单状态
|
||||
type OrderStatusCode int64
|
||||
|
||||
const (
|
||||
ORDER_STATUS_UNPAIDDEPOSIT OrderStatusCode = 0 // 0,未支付定金
|
||||
ORDER_STATUS_CLOSE OrderStatusCode = 10 // 10,订单已关闭
|
||||
ORDER_STATUS_COMPLETE OrderStatusCode = 20 // 20,订单已完成
|
||||
ORDER_STATUS_DELETE OrderStatusCode = 30 // 20,订单已删除
|
||||
|
||||
ORDER_STATUS_DIRECTMAIL_ORDERED OrderStatusCode = 10100 // 10100,直邮单--已下单
|
||||
ORDER_STATUS_DIRECTMAIL_ORDEREDMAINING OrderStatusCode = 10100001 // 10100001,直邮单--已下单--尾款
|
||||
ORDER_STATUS_DIRECTMAIL_CANCEL OrderStatusCode = 10101 // 10101,直邮单--已取消
|
||||
ORDER_STATUS_DIRECTMAIL_STARTPRODUCTION OrderStatusCode = 10200 // 10200,直邮单--开始生产
|
||||
ORDER_STATUS_DIRECTMAIL_COMPLETEPRODUCTION OrderStatusCode = 10300 // 10300,直邮单--生产完成
|
||||
ORDER_STATUS_DIRECTMAIL_SHIPPED OrderStatusCode = 10400 // 10400,直邮单--已发货
|
||||
ORDER_STATUS_DIRECTMAIL_ARRIVED OrderStatusCode = 10500 // 10500,直邮单--已到达
|
||||
|
||||
ORDER_STATUS_CLOUDSTORE_ORDERED OrderStatusCode = 20100 // 20100,云仓单--已下单
|
||||
ORDER_STATUS_CLOUDSTORE_ORDEREDMAINING OrderStatusCode = 20100001 // 20100001,云仓单--已下单-尾款
|
||||
ORDER_STATUS_CLOUDSTORE_CANCEL OrderStatusCode = 20101 // 20101,云仓单--已取消
|
||||
ORDER_STATUS_CLOUDSTORE_STARTPRODUCTION OrderStatusCode = 20200 // 20200,云仓单--开始生产
|
||||
ORDER_STATUS_CLOUDSTORE_COMPLETEPRODUCTION OrderStatusCode = 20300 // 20300,云仓单--生产完成
|
||||
ORDER_STATUS_CLOUDSTORE_ARRIVEDWAREHOUSE OrderStatusCode = 20400 // 20400,云仓单--直达仓库
|
||||
)
|
||||
|
||||
// 订单状态名称
|
||||
var OrderStatusMessage map[OrderStatusCode]string
|
||||
|
||||
// 支付状态名称
|
||||
var PayStatusMessage map[PayStatusCode]string
|
||||
|
||||
// 支付状态名称
|
||||
var OrderPayStatusMessage map[OrderPayStatusCode]string
|
||||
|
||||
// 订单状态--用户可见--直邮
|
||||
var OrderStatusUserDIRECTMAIL []OrderStatusCode
|
||||
|
||||
// 订单状态--用户可见--云仓
|
||||
var OrderStatusUserCLOUDSTORE []OrderStatusCode
|
||||
|
||||
// 订单货币
|
||||
var OrderCurrencyMessage map[Currency]string
|
||||
|
||||
func init() {
|
||||
// 订单货币
|
||||
OrderCurrencyMessage = make(map[Currency]string, 1)
|
||||
OrderCurrencyMessage[CURRENCYUSD] = "$"
|
||||
|
||||
// 订单状态名称
|
||||
OrderPayStatusMessage = make(map[OrderPayStatusCode]string)
|
||||
OrderPayStatusMessage[ORDER_PAY_STATUS_UNPAIDDEPOSIT] = "Deposit Payment Unpaid" // 未支付首款
|
||||
OrderPayStatusMessage[ORDER_PAY_STATUS_PAIDDEPOSIT] = "Deposit Payment Paid" // 已支付首款
|
||||
OrderPayStatusMessage[ORDER_PAY_STATUS_REFUNDEDDEPOSIT] = "Deposit Payment Refunded" // 首款已回退
|
||||
OrderPayStatusMessage[ORDER_PAY_STATUS_PAIDDREMAINING] = "Final Payment Paid" // 尾款未支付
|
||||
OrderPayStatusMessage[ORDER_PAY_STATUS_REFUNDEDREMAINING] = "Final Payment Refunded" // 已退款
|
||||
|
||||
// 订单状态名称
|
||||
PayStatusMessage = make(map[PayStatusCode]string)
|
||||
PayStatusMessage[PAY_STATUS_UNPAID] = "Unpaid" // 未支付
|
||||
PayStatusMessage[PAY_STATUS_PAID] = "Paid" // 已支付
|
||||
PayStatusMessage[PAY_STATUS_REFUNDED] = "Refunded" // 已退款
|
||||
|
||||
// 订单状态名称
|
||||
OrderStatusMessage = make(map[OrderStatusCode]string)
|
||||
OrderStatusMessage[ORDER_STATUS_UNPAIDDEPOSIT] = "Deposit Payment Unpaid" // 首款未支付
|
||||
OrderStatusMessage[ORDER_STATUS_CLOSE] = "Closed" // 已关闭
|
||||
OrderStatusMessage[ORDER_STATUS_COMPLETE] = "Completed" // 已完成
|
||||
OrderStatusMessage[ORDER_STATUS_DELETE] = "Deleted" // 已删除
|
||||
|
||||
OrderStatusMessage[ORDER_STATUS_DIRECTMAIL_ORDERED] = "Ordered" // 直邮单--已下单
|
||||
OrderStatusMessage[ORDER_STATUS_DIRECTMAIL_ORDEREDMAINING] = "Final Payment Paid" // 直邮单--已下单--尾款
|
||||
OrderStatusMessage[ORDER_STATUS_DIRECTMAIL_STARTPRODUCTION] = "Start Production" // 直邮单--开始生产
|
||||
OrderStatusMessage[ORDER_STATUS_DIRECTMAIL_COMPLETEPRODUCTION] = "Production Complete" // 直邮单--生产完成
|
||||
OrderStatusMessage[ORDER_STATUS_DIRECTMAIL_SHIPPED] = "Shipped" // 直邮单--已发货
|
||||
OrderStatusMessage[ORDER_STATUS_DIRECTMAIL_ARRIVED] = "Delivered" // 直邮单--已到达
|
||||
|
||||
OrderStatusMessage[ORDER_STATUS_CLOUDSTORE_ORDERED] = "Ordered" // 云仓单--已下单
|
||||
OrderStatusMessage[ORDER_STATUS_CLOUDSTORE_ORDEREDMAINING] = "Final Payment Paid" // 云仓单--已下单-尾款
|
||||
OrderStatusMessage[ORDER_STATUS_CLOUDSTORE_STARTPRODUCTION] = "Start Production" // 云仓单--开始生产
|
||||
OrderStatusMessage[ORDER_STATUS_CLOUDSTORE_COMPLETEPRODUCTION] = "Production Complete" // 云仓单--生产完成
|
||||
OrderStatusMessage[ORDER_STATUS_CLOUDSTORE_ARRIVEDWAREHOUSE] = "Arrived Inventory" // 云仓单--直达仓库
|
||||
|
||||
// 订单状态--用户可见--直邮
|
||||
OrderStatusUserDIRECTMAIL = []OrderStatusCode{
|
||||
ORDER_STATUS_UNPAIDDEPOSIT,
|
||||
ORDER_STATUS_DIRECTMAIL_ORDERED, ORDER_STATUS_DIRECTMAIL_STARTPRODUCTION, ORDER_STATUS_DIRECTMAIL_COMPLETEPRODUCTION, ORDER_STATUS_DIRECTMAIL_SHIPPED, ORDER_STATUS_DIRECTMAIL_ARRIVED,
|
||||
ORDER_STATUS_COMPLETE, ORDER_STATUS_CLOSE,
|
||||
}
|
||||
// 订单状态--用户可见--云仓
|
||||
OrderStatusUserCLOUDSTORE = []OrderStatusCode{
|
||||
ORDER_STATUS_UNPAIDDEPOSIT,
|
||||
ORDER_STATUS_CLOUDSTORE_ORDERED, ORDER_STATUS_CLOUDSTORE_STARTPRODUCTION, ORDER_STATUS_CLOUDSTORE_COMPLETEPRODUCTION, ORDER_STATUS_CLOUDSTORE_ARRIVEDWAREHOUSE,
|
||||
ORDER_STATUS_COMPLETE, ORDER_STATUS_CLOSE,
|
||||
}
|
||||
}
|
13
constants/paging.go
Normal file
13
constants/paging.go
Normal file
@ -0,0 +1,13 @@
|
||||
package constants
|
||||
|
||||
// 分页默认当前页
|
||||
const DEFAULT_PAGE = 1
|
||||
|
||||
// 默认每页数量
|
||||
const DEFAULT_PAGE_SIZE = 20
|
||||
|
||||
// 最大每页显示数量
|
||||
const MAX_PAGE_SIZE = 300
|
||||
|
||||
// 最大分页
|
||||
const MAX_PAGE = 100
|
22
constants/pay.go
Normal file
22
constants/pay.go
Normal file
@ -0,0 +1,22 @@
|
||||
package constants
|
||||
|
||||
type PayMethod int64
|
||||
|
||||
const (
|
||||
PAYMETHOD_STRIPE PayMethod = 1
|
||||
PAYMETHOD_PAYPAL PayMethod = 2
|
||||
)
|
||||
|
||||
type PayStatus int64
|
||||
|
||||
const (
|
||||
PAYSTATUS_SUCCESS PayStatus = 1
|
||||
PAYSTATUS_UNSUCCESS PayStatus = 0
|
||||
)
|
||||
|
||||
type PayStage int64
|
||||
|
||||
const (
|
||||
PAYSTAGE_DEPOSIT PayStage = 1 // 首付
|
||||
PAYSTAGE_REMAINING PayStage = 2 // 尾款
|
||||
)
|
271
constants/product_list_demo.go
Normal file
271
constants/product_list_demo.go
Normal file
@ -0,0 +1,271 @@
|
||||
package constants
|
||||
|
||||
// 产品列表demo
|
||||
const PRODUCT_LIST_DEMO = `{
|
||||
"ob": {
|
||||
"items": [
|
||||
{
|
||||
"id": 25,
|
||||
"sn": "P1ELZGHU",
|
||||
"title": "Packing box",
|
||||
"cover": "/icon/icon_25_800.png",
|
||||
"intro": "打包盒卡纸",
|
||||
"cover_img": "/uploads/ognhdc6q_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 5,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"sn": "P9KVYAUS",
|
||||
"title": "Pizza box",
|
||||
"cover": "/icon/9dmom0g7_800.png",
|
||||
"intro": "披萨盒 瓦楞纸",
|
||||
"cover_img": "/uploads/9xf1olkl_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 1,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"sn": "PZWDSROX",
|
||||
"title": "Paper bag with handle",
|
||||
"cover": "/icon/iz44vraw_800.png",
|
||||
"intro": "有提手纸袋牛皮纸",
|
||||
"cover_img": "/uploads/rpwntxcq_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 4,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"sn": "PNACHNUK",
|
||||
"title": "Four cups of milk tea cup",
|
||||
"cover": "/icon/plz43wpo_800.png",
|
||||
"intro": "卡纸",
|
||||
"cover_img": "/uploads/9tqgsjqi_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 2,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"sn": "PHHVEXRW",
|
||||
"title": "Milk tea cup holder double cup",
|
||||
"cover": "/icon/ipohmmcj_800.png",
|
||||
"intro": "奶茶杯托奶茶杯托两杯袋",
|
||||
"cover_img": "/uploads/57ogzeq5_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 5,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"sn": "P7N4D0MK",
|
||||
"title": "Cup double layer",
|
||||
"cover": "/icon/nrmzz4du_800.png",
|
||||
"intro": "牛皮纸双层",
|
||||
"cover_img": "/uploads/oqjm5own_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 5,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"sn": "P0NFP19Y",
|
||||
"title": "High paper bowl",
|
||||
"cover": "/icon/cla4k6om_800.png",
|
||||
"intro": "牛皮纸",
|
||||
"cover_img": "/uploads/dt1qjkzg_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 4,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"sn": "PDZ3HIUL",
|
||||
"title": "Flat paper bowl",
|
||||
"cover": "/icon/jy14adqz_800.png",
|
||||
"intro": "牛皮纸",
|
||||
"cover_img": "/uploads/bzwbxduc_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 3,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"sn": "PEVSMU7I",
|
||||
"title": "Paper bag without handle",
|
||||
"cover": "/icon/osdsegor_800.png",
|
||||
"intro": "牛皮纸",
|
||||
"cover_img": "/uploads/ouvayny7_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 2,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"sn": "P58ZZOTI",
|
||||
"title": "plastic bag",
|
||||
"cover": "/icon/dvsvddks_800.png",
|
||||
"intro": "塑料袋",
|
||||
"cover_img": "/uploads/qvvuzkzx_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 1,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"sn": "PG7XIXII",
|
||||
"title": "Hamburger box",
|
||||
"cover": "/icon/icon_24_800.png",
|
||||
"intro": "汉堡盒 卡纸",
|
||||
"cover_img": "/uploads/fm1itgge_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 4,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"sn": "PIJ2OVUE",
|
||||
"title": "Milk tea ring portable double cup",
|
||||
"cover": "/icon/nxb6hjln_800.png",
|
||||
"intro": "卡纸",
|
||||
"cover_img": "/uploads/52fash1n_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 4,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"sn": "PMHXGUL6",
|
||||
"title": "Milk tea ring portable single cup",
|
||||
"cover": "/icon/qoaf5mtp_800.png",
|
||||
"intro": "卡纸",
|
||||
"cover_img": "/uploads/epvkzvyf_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 5,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"sn": "PFCM8KNF",
|
||||
"title": "Tableware set chopsticks",
|
||||
"cover": "/icon/tcspod4b_800.png",
|
||||
"intro": "餐具套装筷子厚牛皮纸包装",
|
||||
"cover_img": "/uploads/5jgrgzvh_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 3,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"sn": "PQKIQMIK",
|
||||
"title": "Tableware set four piece set",
|
||||
"cover": "/icon/mdo0vu1u_800.png",
|
||||
"intro": "牛皮纸包装",
|
||||
"cover_img": "/uploads/szsekvbw_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 4,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"sn": "PBFOIOFH",
|
||||
"title": "Tableware set four piece set",
|
||||
"cover": "/icon/dzrf59cp_800.png",
|
||||
"intro": "餐具套装",
|
||||
"cover_img": "/uploads/svfoebf1_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 1,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"sn": "P02V10AB",
|
||||
"title": " Hot drink cup holder",
|
||||
"cover": "/icon/icon_15_800.png",
|
||||
"intro": "杯托、瓦楞纸",
|
||||
"cover_img": "/uploads/4qbdid7i_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 5,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"sn": "PER6WLAV",
|
||||
"title": " Cup pet",
|
||||
"cover": "/icon/icon_13_800.png",
|
||||
"intro": "pet",
|
||||
"cover_img": "/uploads/kfxehwjd_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 1,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"sn": "PGFWRMAU",
|
||||
"title": " Cup PP",
|
||||
"cover": "/icon/icon_12_800.png",
|
||||
"intro": "pp",
|
||||
"cover_img": "/uploads/azp8uwhz_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 2,
|
||||
"miniPrice": 2
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"sn": "P4ZXDVHS",
|
||||
"title": "Cup monolayer",
|
||||
"cover": "/icon/icon_10_800.png",
|
||||
"intro": "牛皮纸单层",
|
||||
"cover_img": "/uploads/onuzax6l_800.png",
|
||||
"isEnv": 1,
|
||||
"isMicro": 1,
|
||||
"sizeNum": 1,
|
||||
"miniPrice": 2
|
||||
}
|
||||
],
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "https://fusenapi.kayue.cn:8010/product/list?cid=13&size=620&page=1&is_demo=1"
|
||||
},
|
||||
"first": {
|
||||
"href": "https://fusenapi.kayue.cn:8010/product/list?cid=13&size=620&page=1&is_demo=1"
|
||||
},
|
||||
"last": {
|
||||
"href": "https://fusenapi.kayue.cn:8010/product/list?cid=13&size=620&page=2&is_demo=1"
|
||||
},
|
||||
"next": {
|
||||
"href": "https://fusenapi.kayue.cn:8010/product/list?cid=13&size=620&page=2&is_demo=1"
|
||||
}
|
||||
},
|
||||
"_meta": {
|
||||
"totalCount": 21,
|
||||
"pageCount": 2,
|
||||
"currentPage": 1,
|
||||
"perPage": 20
|
||||
}
|
||||
},
|
||||
"typeName": "Boxes",
|
||||
"description": ""
|
||||
}`
|
5
constants/product_model3d.go
Normal file
5
constants/product_model3d.go
Normal file
@ -0,0 +1,5 @@
|
||||
package constants
|
||||
|
||||
const TAG_MODEL = 1 //模型
|
||||
const TAG_PARTS = 2 //配件
|
||||
const TAG_SCENE = 3 //场景
|
5
constants/queue.go
Normal file
5
constants/queue.go
Normal file
@ -0,0 +1,5 @@
|
||||
package constants
|
||||
|
||||
const (
|
||||
QUEUE_NAME_ORDER = "queue_order"
|
||||
)
|
19
constants/rabbitmq.go
Normal file
19
constants/rabbitmq.go
Normal file
@ -0,0 +1,19 @@
|
||||
package constants
|
||||
|
||||
type RABBIT_MQ string
|
||||
|
||||
// 消息队列队列名
|
||||
const (
|
||||
//组装渲染数据队列
|
||||
/*RABBIT_MQ_ASSEMBLE_RENDER_DATA RABBIT_MQ = "RABBIT_MQ_ASSEMBLE_RENDER_DATA"
|
||||
//渲染结果数据队列
|
||||
RABBIT_MQ_RENDER_RESULT_DATA RABBIT_MQ = "RABBIT_MQ_RENDER_RESULT_DATA"*/
|
||||
)
|
||||
|
||||
// 队列列表
|
||||
var MqQueueArr = []RABBIT_MQ{
|
||||
/*
|
||||
RABBIT_MQ_ASSEMBLE_RENDER_DATA,
|
||||
RABBIT_MQ_RENDER_RESULT_DATA,
|
||||
*/
|
||||
}
|
203
constants/render.go
Normal file
203
constants/render.go
Normal file
@ -0,0 +1,203 @@
|
||||
package constants
|
||||
|
||||
// 渲染要用到的面片模板(以前的模板)
|
||||
const RENDER_FACE_SLICE_TEMPLATE_JSON = `[
|
||||
{
|
||||
"id": "",
|
||||
"tag": "MainColor",
|
||||
"title": "",
|
||||
"type": "color",
|
||||
"text": "",
|
||||
"fill": "{{MainColorFill}}",
|
||||
"fontSize": 20,
|
||||
"fontFamily": "Aqum2SmallCaps3",
|
||||
"ifBr": false,
|
||||
"ifShow": true,
|
||||
"ifGroup": false,
|
||||
"maxNum": 50,
|
||||
"rotation": 0,
|
||||
"lineHeight": 1,
|
||||
"align": "center",
|
||||
"verticalAlign": "middle",
|
||||
"material": "",
|
||||
"materialTime": "",
|
||||
"materialName": "",
|
||||
"QRcodeType": "",
|
||||
"width": 1024,
|
||||
"height": 1024,
|
||||
"proportion": 60,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"opacity": 1,
|
||||
"optionalColor": [
|
||||
{
|
||||
"color": "#000000",
|
||||
"name": "Black",
|
||||
"default": true
|
||||
}
|
||||
],
|
||||
"zIndex": 1,
|
||||
"svgPath": "",
|
||||
"follow": {
|
||||
"fill": "",
|
||||
"ifShow": "",
|
||||
"content": ""
|
||||
},
|
||||
"group": [],
|
||||
"cameraStand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "",
|
||||
"tag": "SecondaryColor",
|
||||
"title": "贴图3",
|
||||
"type": "color",
|
||||
"text": "",
|
||||
"fill": "{{SecondaryColorFill}}",
|
||||
"fontSize": 20,
|
||||
"fontFamily": "Aqum2SmallCaps3",
|
||||
"ifBr": false,
|
||||
"ifShow": true,
|
||||
"ifGroup": false,
|
||||
"maxNum": 50,
|
||||
"rotation": 0,
|
||||
"lineHeight": 1,
|
||||
"align": "center",
|
||||
"verticalAlign": "middle",
|
||||
"material": "",
|
||||
"materialTime": "",
|
||||
"materialName": "",
|
||||
"QRcodeType": "",
|
||||
"width": 1024,
|
||||
"height": 1024,
|
||||
"proportion": 60,
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"opacity": 1,
|
||||
"optionalColor": [
|
||||
{
|
||||
"color": "#000000",
|
||||
"name": "Black",
|
||||
"default": true
|
||||
}
|
||||
],
|
||||
"zIndex": 2,
|
||||
"svgPath": "",
|
||||
"follow": {
|
||||
"fill": "",
|
||||
"ifShow": "",
|
||||
"content": ""
|
||||
},
|
||||
"group": [],
|
||||
"cameraStand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "569d7981-25c3-3c03-0e7e-800c14800362",
|
||||
"tag": "Slogan",
|
||||
"title": "贴图4",
|
||||
"type": "text",
|
||||
"text": "",
|
||||
"fill": "",
|
||||
"fontSize": 13,
|
||||
"fontFamily": "MontserratBold3",
|
||||
"ifBr": false,
|
||||
"ifShow": true,
|
||||
"ifGroup": false,
|
||||
"maxNum": 50,
|
||||
"rotation": 0,
|
||||
"lineHeight": 1,
|
||||
"align": "center",
|
||||
"verticalAlign": "middle",
|
||||
"material": "",
|
||||
"materialTime": "",
|
||||
"materialName": "",
|
||||
"QRcodeType": "",
|
||||
"width": 309.9999999999993,
|
||||
"height": 11.999265664648076,
|
||||
"proportion": 60,
|
||||
"x": 97.0015259021898,
|
||||
"y": 575.300725990631,
|
||||
"opacity": 1,
|
||||
"optionalColor": [
|
||||
{
|
||||
"color": "#000000",
|
||||
"name": "Black",
|
||||
"default": true
|
||||
}
|
||||
],
|
||||
"zIndex": 3,
|
||||
"svgPath": "",
|
||||
"follow": {
|
||||
"fill": "38c09538-937d-510c-bf32-bfb1ce90cafa",
|
||||
"ifShow": "",
|
||||
"content": ""
|
||||
},
|
||||
"group": [],
|
||||
"cameraStand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 45
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "c466e27c-d48f-db86-b85f-3c4c51114046",
|
||||
"tag": "Logo",
|
||||
"title": "贴图8",
|
||||
"type": "image",
|
||||
"text": "",
|
||||
"fill": "#0082ca",
|
||||
"fontSize": 20,
|
||||
"fontFamily": "Aqum2SmallCaps3",
|
||||
"ifBr": false,
|
||||
"ifShow": true,
|
||||
"ifGroup": false,
|
||||
"maxNum": 50,
|
||||
"rotation": 0,
|
||||
"lineHeight": 1,
|
||||
"align": "center",
|
||||
"verticalAlign": "middle",
|
||||
"material": "{{LogoMaterial}}",
|
||||
"materialTime": "",
|
||||
"materialName": "",
|
||||
"QRcodeType": "",
|
||||
"width": 282.9999999999999,
|
||||
"height": 95.99999999999933,
|
||||
"proportion": 60,
|
||||
"x": 110.99999999999982,
|
||||
"y": 438.7192999999991,
|
||||
"opacity": 1,
|
||||
"optionalColor": [
|
||||
{
|
||||
"color": "#000000",
|
||||
"name": "Black",
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"name": "MainColor",
|
||||
"color": "#0082ca",
|
||||
"default": true
|
||||
}
|
||||
],
|
||||
"zIndex": 7,
|
||||
"svgPath": "",
|
||||
"follow": {
|
||||
"fill": "",
|
||||
"ifShow": "",
|
||||
"content": ""
|
||||
},
|
||||
"group": [],
|
||||
"cameraStand": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
}
|
||||
}
|
||||
]
|
||||
`
|
14
constants/tag_level.go
Normal file
14
constants/tag_level.go
Normal file
@ -0,0 +1,14 @@
|
||||
package constants
|
||||
|
||||
// tag分类等级
|
||||
const (
|
||||
TYPE_QRCODE = iota + 1 //1
|
||||
TYPE_WEBSITE //2
|
||||
TYPE_DESIGN_TOOL //3
|
||||
)
|
||||
|
||||
var MAP_TAG_LEVEL = map[int]string{
|
||||
TYPE_QRCODE: "二维码分类",
|
||||
TYPE_WEBSITE: "网站目录",
|
||||
TYPE_DESIGN_TOOL: "设计工具",
|
||||
}
|
28
constants/webset.go
Normal file
28
constants/webset.go
Normal file
@ -0,0 +1,28 @@
|
||||
package constants
|
||||
|
||||
type TypeWebSet string
|
||||
|
||||
const (
|
||||
FONT_CONFIG TypeWebSet = "font_config" //字体
|
||||
POLICY_CONFIG TypeWebSet = "policy" //政策
|
||||
CLAUSE_CONFIG TypeWebSet = "clause" //条款
|
||||
FAQ_CONFIG TypeWebSet = "faq" //问答
|
||||
|
||||
RECOMMEND_DETAIL_PRODUCT TypeWebSet = "recommend_detail_" //详情页推荐-后街pid
|
||||
RENDER_DESIGN TypeWebSet = "render_design_" //云渲染 后接client_no
|
||||
LAST_DESIGN TypeWebSet = "last_design_" //最后设计 后接uid
|
||||
OTHER_LIST TypeWebSet = "other_list_" //列表页其他列表 后接type 分类id
|
||||
PRODUCT_INFO TypeWebSet = "product_info_" //详情数据 后接sn
|
||||
MODEL_DATA TypeWebSet = "model_data" //所有模型数据
|
||||
TEMPLATE_PRODUCT TypeWebSet = "product_template_" //模板数据 后接产品id
|
||||
CART_NUM TypeWebSet = "cart_num_" //购物车数量 后接uid
|
||||
USER_ORDERNO TypeWebSet = "order_no_" //用户最新订单编号
|
||||
|
||||
WEBSET_TIME_INFO TypeWebSet = "time_info" //配置时间
|
||||
|
||||
WEBSET_TIME_INFO_PRODUCT_DAY TypeWebSet = "product_day" //配置时间--产品制作周期(天)
|
||||
WEBSET_TIME_INFO_FACTORY_DELIVER_DAY TypeWebSet = "factory_deliver_day" //配置时间--厂家发货到货代周期(天)
|
||||
WEBSET_TIME_INFO_DELIVER_UPS_DAY TypeWebSet = "deliver_ups_day" //配置时间--货代发货至UPS周期(天)
|
||||
WEBSET_TIME_INFO_UPS_TRANS_DAY TypeWebSet = "ups_trans_day" //配置时间--UPS运输周期(天)
|
||||
|
||||
)
|
35
constants/websocket.go
Normal file
35
constants/websocket.go
Normal file
@ -0,0 +1,35 @@
|
||||
package constants
|
||||
|
||||
type Websocket string
|
||||
|
||||
// websocket消息类型(主类别)
|
||||
const (
|
||||
WEBSOCKET_UNAUTH Websocket = "WEBSOCKET_UNAUTH" //鉴权失败 (1级消息,单向通信)
|
||||
WEBSOCKET_CONNECT_ERR Websocket = "WEBSOCKET_CONNECT_ERR" //ws连接错误 (1级消息,单向通信)
|
||||
WEBSOCKET_CONNECT_SUCCESS Websocket = "WEBSOCKET_CONNECT_SUCCESS" //ws连接成功 (1级消息,单向通信)
|
||||
)
|
||||
|
||||
// websocket消息类型(通用通知类别)
|
||||
const (
|
||||
WEBSOCKET_COMMON_NOTIFY Websocket = "WEBSOCKET_COMMON_NOTIFY" //通用回调通知(1级消息,单向通信)
|
||||
)
|
||||
|
||||
// websocket消息类型(基本传输结构类别)
|
||||
const (
|
||||
WEBSOCKET_ERR_DATA_FORMAT Websocket = "WEBSOCKET_ERR_DATA_FORMAT" //传入数据格式错误(1级消息,单向通信)
|
||||
)
|
||||
|
||||
// websocket消息类型(云渲染类别)
|
||||
const (
|
||||
WEBSOCKET_RENDER_IMAGE Websocket = "WEBSOCKET_RENDER_IMAGE" //图片渲染消息(1级消息,双向通信)
|
||||
WEBSOCKET_RENDER_IMAGE_ERR Websocket = "WEBSOCKET_RENDER_IMAGE_ERR" //图片渲染失败消息(1级消息,单向通信)
|
||||
WEBSOCKET_COMBINE_IMAGE Websocket = "WEBSOCKET_COMBINE_IMAGE" //反回合成刀版图消息(2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程)
|
||||
WEBSOCKET_ASSEMBLE_RENDER_DATA Websocket = "WEBSOCKET_ASSEMBLE_RENDER_DATA" //组装unity需要的数据 (2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程)
|
||||
WEBSOCKET_SEND_DATA_TO_UNITY Websocket = "WEBSOCKET_SEND_DATA_TO_UNITY" //发送到unity进行渲染 (2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程)
|
||||
WEBSOCKET_REQUIRE_BROWSER_RESEND_RENDER Websocket = "WEBSOCKET_REQUIRE_BROWSER_RESEND_RENDER" //后端请求前端去重发渲染任务事件(2级消息,单向通信,属于 WEBSOCKET_RENDER_IMAGE 消息的子流程)
|
||||
)
|
||||
|
||||
// websocket消息类型(系统数据变更通知)
|
||||
const (
|
||||
WEBSOCKET_SYSTEM_DATA_UPDATE_NOTIFY Websocket = "WEBSOCKET_SYSTEM_DATA_UPDATE_NOTIFY" //系统数据更新(1级消息,单向通信)
|
||||
)
|
@ -1,23 +0,0 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: // TODO: add title
|
||||
desc: // TODO: add description
|
||||
author: ""
|
||||
email: ""
|
||||
)
|
||||
|
||||
type request {
|
||||
// TODO: add members here and delete this comment
|
||||
Name string `path:"name,options=you|me"` // parameters are auto validated
|
||||
}
|
||||
|
||||
type response {
|
||||
// TODO: add members here and delete this comment
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
service user-auth {
|
||||
@handler GreetHandler
|
||||
get /greet/from/:name(request) returns (response);
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: // 个人文件传输
|
||||
desc: // 图片,pdf,设计logo等
|
||||
author: ""
|
||||
email: ""
|
||||
)
|
||||
|
||||
type request {
|
||||
// TODO: add members here and delete this comment
|
||||
Name string `path:"name,options=you|me"` // parameters are auto validated
|
||||
}
|
||||
|
||||
type response {
|
||||
// TODO: add members here and delete this comment
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
service user-auth {
|
||||
@handler GreetHandler
|
||||
get /greet/from/:name(request) returns (response);
|
||||
}
|
23
designs.api
23
designs.api
@ -1,23 +0,0 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: // TODO: add title
|
||||
desc: // TODO: add description
|
||||
author: ""
|
||||
email: ""
|
||||
)
|
||||
|
||||
type request {
|
||||
// TODO: add members here and delete this comment
|
||||
Name string `path:"name,options=you|me"` // parameters are auto validated
|
||||
}
|
||||
|
||||
type response {
|
||||
// TODO: add members here and delete this comment
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
service user-auth {
|
||||
@handler GreetHandler
|
||||
get /greet/from/:name(request) returns (response);
|
||||
}
|
15
env.yaml
Normal file
15
env.yaml
Normal file
@ -0,0 +1,15 @@
|
||||
nacos:
|
||||
- server.fusen.3718.cn:8848
|
||||
- server.fusen.3718.cn:8849
|
||||
username: ...
|
||||
password: ...
|
||||
namespace: fs_server_api_dev
|
||||
group: FS-SERVER-API
|
||||
|
||||
proxyserver:
|
||||
key: /opt/server.dev.fusenpack.com.key
|
||||
pem: /opt/server.dev.fusenpack.com.pem
|
||||
|
||||
serverbackend:
|
||||
key: /opt/serverbackend.dev.fusenpack.com.key
|
||||
pem: /opt/serverbackend.dev.fusenpack.com.pem
|
23
faq.api
23
faq.api
@ -1,23 +0,0 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: // TODO: add title
|
||||
desc: // TODO: add description
|
||||
author: ""
|
||||
email: ""
|
||||
)
|
||||
|
||||
type request {
|
||||
// TODO: add members here and delete this comment
|
||||
Name string `path:"name,options=you|me"` // parameters are auto validated
|
||||
}
|
||||
|
||||
type response {
|
||||
// TODO: add members here and delete this comment
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
service user-auth {
|
||||
@handler GreetHandler
|
||||
get /greet/from/:name(request) returns (response);
|
||||
}
|
36
fs_gen_api.sh
Executable file
36
fs_gen_api.sh
Executable file
@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
name=${1%%\\*}
|
||||
|
||||
excluded_names=("backend" "product-template" "product-model" "basic")
|
||||
|
||||
for excluded_name in "${excluded_names[@]}"; do
|
||||
if [ "$name" = "$excluded_name" ]; then
|
||||
echo "不能在$name里使用"
|
||||
exit
|
||||
fi
|
||||
done
|
||||
|
||||
echo $name
|
||||
goctl api go -api server_api/$name.api -dir server/$name --home ./goctl_template/
|
||||
|
||||
# # List of API filenames without the '.api' extension
|
||||
# api_names=("backend" "canteen" "home-user-auth" "map-library" "product" "product-template" "shopping-cart-confirmation" "webset" "data-transfer" "inventory" "orders" "product-model" "render" "upload" "assistant")
|
||||
|
||||
# # Iterate over API filenames and generate Go code, excluding certain names
|
||||
# for api_name in "${api_names[@]}"; do
|
||||
# skip=false
|
||||
|
||||
# for excluded_name in "${excluded_names[@]}"; do
|
||||
# if [ "$api_name" = "$excluded_name" ]; then
|
||||
# skip=true
|
||||
# break
|
||||
# fi
|
||||
# done
|
||||
|
||||
# if [ "$skip" = true ]; then
|
||||
# continue
|
||||
# fi
|
||||
|
||||
# echo "Generating Go code for $api_name"
|
||||
# goctl api go -api server_api/"$api_name".api -dir server/"$api_name" --home ./goctl_template/
|
||||
# done
|
14
fs_gen_api_backend.sh
Executable file
14
fs_gen_api_backend.sh
Executable file
@ -0,0 +1,14 @@
|
||||
#! /bin/bash
|
||||
name=${1%%\\*}
|
||||
options=("backend" "product-template" "product-template-tag" "product-model")
|
||||
for option in "${options[@]}"; do
|
||||
if [ "$name" = "$option" ]; then
|
||||
echo $name
|
||||
goctl api go -api server_api/$name.api -dir server/$name --home ./goctl_template_backend/
|
||||
exit
|
||||
fi
|
||||
done
|
||||
|
||||
for option in "${options[@]}"; do
|
||||
echo "只支持 $option"
|
||||
done
|
9
fs_gen_mysql_model.sh
Executable file
9
fs_gen_mysql_model.sh
Executable file
@ -0,0 +1,9 @@
|
||||
#! /bin/bash
|
||||
# goctl model mysql ddl --src ./ddl/$1.sql --dir model/ --home ./goctl_template
|
||||
if [ $# -gt 0 ]
|
||||
then
|
||||
name=${1%%\\*}
|
||||
go run generator/main.go -name $name
|
||||
else
|
||||
echo "输入: - 表示所有表. 或者 单表名"
|
||||
fi
|
25
fs_nacos_etc_pack.sh
Executable file
25
fs_nacos_etc_pack.sh
Executable file
@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
CURRENT_DIR=`pwd`
|
||||
SOURCE_DIR="server"
|
||||
TEMP_DIR="/tmp"
|
||||
DEST_DIR="FS-SERVER-API"
|
||||
ZIP_FILE="FS-SERVER-API.zip"
|
||||
|
||||
mkdir -p $TEMP_DIR/$DEST_DIR
|
||||
|
||||
# 查找并复制文件
|
||||
find "$SOURCE_DIR" -type d -name "etc" -exec sh -c 'cp "$0"/*.yaml "$1"' {} "$TEMP_DIR/$DEST_DIR" \;
|
||||
|
||||
cd $TEMP_DIR
|
||||
# 打包目标文件夹
|
||||
zip -r "$ZIP_FILE" "$DEST_DIR"
|
||||
|
||||
#返回当前目录
|
||||
cd $CURRENT_DIR
|
||||
|
||||
# 移动到当前目录
|
||||
mv "$TEMP_DIR/$ZIP_FILE" .
|
||||
|
||||
# 清理临时文件夹
|
||||
rm "$TEMP_DIR/$DEST_DIR" -rf
|
23
fs_package_docker_image.sh
Executable file
23
fs_package_docker_image.sh
Executable file
@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
name=${1%%\\*}
|
||||
#进入对应服务目录
|
||||
cd server/$name
|
||||
#把https加密密钥对复制进来
|
||||
cp /opt/env.yaml ./
|
||||
cp /opt/server.fusen.3718.cn.pem ./
|
||||
cp /opt/server.fusen.3718.cn.key ./
|
||||
#构建二进制文件
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o ./bin/api-$name-srv ./$name.go
|
||||
#打包docker镜像
|
||||
docker build -t api-$name-srv:latest .
|
||||
#删除临时复制进来的文件
|
||||
rm ./env.yaml
|
||||
rm ./server.fusen.3718.cn.pem
|
||||
rm ./server.fusen.3718.cn.key
|
||||
#打tag(测试环境,正式把命名空间fusentest改成fusen)
|
||||
docker tag api-$name-srv:latest registry.cn-hangzhou.aliyuncs.com/fusen-test/$name:latest
|
||||
#推送到阿里云镜像库(测试环境,正式把命名空间fusentest改成fusen)
|
||||
docker push registry.cn-hangzhou.aliyuncs.com/fusen-test/$name:latest
|
||||
#上传了的镜像
|
||||
docker rmi -f api-$name-srv:latest
|
||||
docker rmi -f registry.cn-hangzhou.aliyuncs.com/fusen-test/$name:latest
|
29
fs_template/email_register.tpl
Normal file
29
fs_template/email_register.tpl
Normal file
@ -0,0 +1,29 @@
|
||||
Subject: Please confirm your {{ .CompanyName }} account;
|
||||
MIME-version: 1.0;
|
||||
Content-Type: text/html; charset="UTF-8";
|
||||
From: "Fusen Support";
|
||||
|
||||
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<p>Dear <span style="color: red;">{{.UserName}}</span>,</p>
|
||||
|
||||
<p>Thank you for registering an account with {{ .CompanyName }}. We are thrilled to have you join our community!</p>
|
||||
|
||||
<p>Please take a moment to confirm your email address by clicking the button below so we can activate your account:</p>
|
||||
|
||||
<a href="{{ .ConfirmationLink }}" target="_blank" style="background-color: #008CBA; color: #FFFFFF; text-decoration: none; padding: 10px 15px; border-radius: 3px; display:inline-block; font-weight: bold;">Confirm Account: {{ .UserName }}</a>
|
||||
|
||||
<p>Confirming your email ensures your account is properly secured. This also lets you access member-only tools and content.</p>
|
||||
|
||||
<p>If you did not register for {{ .CompanyName }}, please disregard this email. Let us know if you have any other questions!</p>
|
||||
|
||||
Regards,
|
||||
|
||||
<p><span>{{.SenderName}}</span><br>
|
||||
<span>{{.SenderTitle}}</span><br>
|
||||
<span>{{.CompanyName}}</span></p>
|
||||
|
||||
<body>
|
||||
<html>
|
27
fs_template/email_register_oauth2.tpl
Normal file
27
fs_template/email_register_oauth2.tpl
Normal file
@ -0,0 +1,27 @@
|
||||
Subject: Confirm Email Address for {{ .CompanyName }} Account
|
||||
MIME-version: 1.0
|
||||
Content-Type: text/html; charset="UTF-8"
|
||||
From: "Fusen Support"
|
||||
|
||||
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<p>Dear <span style="color: red;">{{.UserName}}</span>,</p>
|
||||
|
||||
<p>Thank you for choosing to associate your email address with your {{ .CompanyName }} account({{ .PlatformAndID }}). To complete the process, please click the button below to confirm your email:</p>
|
||||
|
||||
<a href="{{ .ConfirmationLink }}" target="_blank" style="background-color: #008CBA; color: #FFFFFF; text-decoration: none; padding: 10px 15px; border-radius: 3px; display:inline-block; font-weight: bold;">Confirm Email: {{ .Email }}</a>
|
||||
|
||||
<p>By confirming your email, you will be able to access additional features and receive important notifications related to your {{ .CompanyName }} account.</p>
|
||||
|
||||
<p>If you did not initiate this request or have any questions, please disregard this email. Your email address will not be associated with any account.</p>
|
||||
|
||||
Regards,
|
||||
|
||||
<p><span>{{.SenderName}}</span><br>
|
||||
<span>{{.SenderTitle}}</span><br>
|
||||
<span>{{.CompanyName}}</span></p>
|
||||
|
||||
</body>
|
||||
</html>
|
32
fs_template/get_reset_password_html.tpl
Normal file
32
fs_template/get_reset_password_html.tpl
Normal file
@ -0,0 +1,32 @@
|
||||
Subject: Password Reset Request for Your {{ .CompanyName }} Account
|
||||
MIME-version: 1.0;
|
||||
Content-Type: text/html; charset="UTF-8";
|
||||
From: "Fusen Support";
|
||||
|
||||
|
||||
<html>
|
||||
<body>
|
||||
|
||||
<p>Dear <span style="color: red;">{{.UserName}}</span>,</p>
|
||||
|
||||
<p>We have received your request to reset the password for your {{.CompanyName}} account.</p>
|
||||
|
||||
<p>To proceed with the password reset, please click the button below to open the Reset Password page:</p>
|
||||
|
||||
<div style="margin: 1em 0;">
|
||||
<a href="{{.ConfirmationLink}}" target="_blank"
|
||||
style="background-color: #008CBA; color: #FFFFFF; text-decoration: none; padding: 10px 15px; border-radius: 3px; display:inline-block;">
|
||||
Reset Password
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<p>Please note that this password reset confirmation link will expire in 60 minutes. If you have any further questions, feel free to reach out to us.</p>
|
||||
|
||||
<p>Regards,</p>
|
||||
|
||||
<p><span>{{.SenderName}}</span><br>
|
||||
<span>{{.SenderTitle}}</span><br>
|
||||
<span>{{.CompanyName}}</span></p>
|
||||
|
||||
</body>
|
||||
</html>
|
179
fs_template/reset_confirm.tpl
Normal file
179
fs_template/reset_confirm.tpl
Normal file
@ -0,0 +1,179 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style>
|
||||
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.container {
|
||||
margin: 0 auto;
|
||||
max-width: 400px;
|
||||
margin: 50px auto;
|
||||
background-color: #fff;
|
||||
padding: 20px;
|
||||
border-radius: 5px;
|
||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
h2 {
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 15px;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
input[type="password"] {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
label {
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
width: 9rem;
|
||||
}
|
||||
|
||||
input[type="password"] {
|
||||
padding: 1rem;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
button {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
background-color: #007bff;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
|
||||
/* Mobile */
|
||||
@media screen and (max-width: 767px) {
|
||||
.container {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
flex-direction: column;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
label {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Tablet */
|
||||
@media screen and (min-width: 768px) and (max-width: 1023px) {
|
||||
.container {
|
||||
padding: 30px;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
|
||||
/* Desktop */
|
||||
@media screen and (min-width: 1024px) {
|
||||
.container {
|
||||
max-width: 600px;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div class="container">
|
||||
<h2>Reset Password</h2>
|
||||
|
||||
<form id="resetForm">
|
||||
<div class="form-group">
|
||||
<label for="new_password">New Password</label>
|
||||
<input id="new_password" type="password" placeholder="New Password" required pattern="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$" title="The password must be at least 8 characters in length, and contain at least 1 number, 1 lowercase letter and 1 uppercase letter."/>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="confirm_password">Confirm Password</label>
|
||||
<input id="confirm_password" type="password" placeholder="Confirm Password" required pattern="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$" title="The password must be at least 8 characters in length, and contain at least 1 number, 1 lowercase letter and 1 uppercase letter."/>
|
||||
</div>
|
||||
<button type="button" onclick="resetPassword()">Reset Password</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
function resetPassword() {
|
||||
const new_password = document.getElementById("new_password").value;
|
||||
const confirm_password = document.getElementById("confirm_password").value;
|
||||
|
||||
if (!/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/.test(new_password)) {
|
||||
alert("The password must be at least 8 characters in length, and contain at least 1 number, 1 lowercase letter and 1 uppercase letter.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (new_password !== confirm_password) {
|
||||
alert("Passwords do not match");
|
||||
return;
|
||||
}
|
||||
sha256ToBase64(new_password).then((hash) => {
|
||||
const data = {
|
||||
new_password: hash,
|
||||
reset_token: "{{.ResetToken}}",
|
||||
};
|
||||
|
||||
fetch('{{.ResetPasswordLink}}', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(data)
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.code == 200 ) {
|
||||
alert("reset password success");
|
||||
window.location.href = "{{.HomePage}}";
|
||||
{{/* setTimeout(function() {
|
||||
window.location.href = "{{.HomePage}}";
|
||||
}, 1000); */}}
|
||||
} else {
|
||||
alert(data.msg);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error:', error);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function sha256ToBase64(message) {
|
||||
const msgBuffer = new TextEncoder().encode(message);
|
||||
return crypto.subtle.digest('SHA-256', msgBuffer).then((hashBuffer) => {
|
||||
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
||||
const hashBase64 = btoa(hashArray.reduce((str, byte) => str + String.fromCharCode(byte), ''));
|
||||
return hashBase64;
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
116
fs_template/test.tpl
Normal file
116
fs_template/test.tpl
Normal file
@ -0,0 +1,116 @@
|
||||
Subject: Please confirm your {{ .CompanyName }} account;
|
||||
MIME-version: 1.0;
|
||||
Content-Type: text/html; charset="UTF-8";
|
||||
From: "Fusen Support";
|
||||
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>订单状态流转</title>
|
||||
</head>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div style="
|
||||
width: 50%;
|
||||
max-width: 600px;
|
||||
min-width: 350px;
|
||||
margin: 0 auto;
|
||||
background-color: #FFFFFF;">
|
||||
<div>
|
||||
<h1><img style="
|
||||
width: 22%;
|
||||
height: 6%;
|
||||
padding: 50px 0 30px 8%;" src="https://fusenstorage.s3.us-east-2.amazonaws.com/2c3938702c52d46550fffae344f1619dd71c447f3b19882045205fcd8adbd6bf" alt=""></h1>
|
||||
</div>
|
||||
<div>
|
||||
<h2 style="
|
||||
width: 84%;
|
||||
font-size: 47px;
|
||||
font-family: Gotham-Bold, Gotham;
|
||||
font-weight: bold;
|
||||
color: #212121;
|
||||
line-height: 58px;
|
||||
padding-bottom: 24px;
|
||||
padding-left: 8%;">The status of your order has changed!</h2>
|
||||
<p style="
|
||||
width: 84%;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
color: #212121;
|
||||
line-height: 21px;
|
||||
padding-bottom: 40px;
|
||||
padding-left: 8%;">
|
||||
Your order has been changed from "原状态" to "现状态".</p>
|
||||
<a href="" style="
|
||||
display: block;
|
||||
text-align: center;
|
||||
width: 80%;
|
||||
height: 24px;
|
||||
font-size: 16px;
|
||||
font-family: Gotham-Bold, Gotham;
|
||||
font-weight: bold;
|
||||
color: #FFFFFF;
|
||||
line-height: 24px;
|
||||
margin: 0 auto;
|
||||
background-color: #FF7F00;
|
||||
padding: 15px 12px;
|
||||
margin-bottom: 60px;
|
||||
border-radius: 200px;
|
||||
text-decoration: none;">Check Your Order</a>
|
||||
</div>
|
||||
<div>
|
||||
<div style="
|
||||
width: 80%;
|
||||
background-color: #F8F8F8;
|
||||
padding: 20px 30px;
|
||||
margin: 0 auto;">
|
||||
<h3 style="
|
||||
height: 28px;
|
||||
font-size: 16px;
|
||||
font-family: Gotham-Bold, Gotham;
|
||||
font-weight: bold;
|
||||
color: #212121;
|
||||
line-height: 28px;">Search Logo, Get Design</h3>
|
||||
<p style=" height: 21px;
|
||||
font-size: 12px;
|
||||
font-family: Gotham-Medium, Gotham;
|
||||
font-weight: 500;
|
||||
color: #212121;
|
||||
line-height: 21px;">Our products</p>
|
||||
<p style=" height: 21px;
|
||||
font-size: 12px;
|
||||
font-family: Gotham-Medium, Gotham;
|
||||
font-weight: 500;
|
||||
color: #212121;
|
||||
line-height: 21px;">Try it out</p>
|
||||
<div style="
|
||||
width: 100%;
|
||||
padding: 17px 0 10px 0 ;
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
margin-bottom: 10px;">
|
||||
<img style="width: 14px;height: 14px;" src="https://fusenstorage.s3.us-east-2.amazonaws.com/7d6e04f8a90762210f8b8fc307198776b8dc42998adc90bab41e178053552b2c" alt="">
|
||||
<span> support@fusenpack.com</span>
|
||||
</div>
|
||||
<span style="
|
||||
width: 74px;
|
||||
height: 21px;
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
color: #999999;
|
||||
line-height: 21px;
|
||||
display: block;
|
||||
cursor: pointer;
|
||||
text-decoration: none;">Unsubscribe</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
39
generator/gen_test.go
Normal file
39
generator/gen_test.go
Normal file
@ -0,0 +1,39 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestA(t *testing.T) {
|
||||
main3()
|
||||
}
|
||||
func main3() {
|
||||
ddl := `CREATE TABLE fs_guest (
|
||||
guest_id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
auth_key varchar(512) NOT NULL DEFAULT '' COMMENT 'jwt token',
|
||||
status tinyint(3) unsigned DEFAULT '1' COMMENT '1正常 0不正常',
|
||||
is_del tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否删除 1删除',
|
||||
created_at int(11) NOT NULL DEFAULT '0' COMMENT '添加时间',
|
||||
updated_at int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
|
||||
is_open_render tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否打开个性化渲染(1:开启,0:关闭)',
|
||||
is_thousand_face tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已经存在千人千面(1:存在,0:不存在)',
|
||||
is_low_rendering tinyint(1) unsigned zerofill NOT NULL DEFAULT '0' COMMENT '是否开启低渲染模型渲染',
|
||||
is_remove_bg tinyint(1) NOT NULL DEFAULT '1' COMMENT '用户上传logo是否去除背景',
|
||||
guid decimal(10,2) NOT NULL,
|
||||
PRIMARY KEY (guest_id) USING BTREE,
|
||||
UNIQUE KEY fs_guest_guid_IDX (guid) USING BTREE,
|
||||
KEY fs_guest_is_del_IDX (is_del) USING BTREE,
|
||||
KEY fs_guest_status_IDX (status) USING BTREE,
|
||||
KEY fs_guest_created_at_IDX (created_at) USING BTREE
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='游客表'`
|
||||
|
||||
// 正则表达式匹配
|
||||
r, _ := regexp.Compile(`CREATE TABLE (\S+) \..*COMMENT='(.*)'`)
|
||||
matches := r.FindStringSubmatch(ddl)
|
||||
|
||||
// 输出结果
|
||||
fmt.Println("表名:", matches[1])
|
||||
fmt.Println("注释:", matches[2])
|
||||
}
|
25
generator/gorm_gen_test.go
Normal file
25
generator/gorm_gen_test.go
Normal file
@ -0,0 +1,25 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"regexp"
|
||||
"testing"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
func TestXMain(t *testing.T) {
|
||||
a := " FsAddress *FsAddressModel // fs_address 用户地址表"
|
||||
re := regexp.MustCompile(`([A-Za-z0-9_]+) [^/]+ // ([^ ]+) (.+)$`)
|
||||
for _, line := range re.FindStringSubmatch(a) {
|
||||
log.Println(line)
|
||||
}
|
||||
|
||||
log.Println(re.FindStringSubmatch(a))
|
||||
// testGenDir = "../" + testGenDir
|
||||
// GenAllModels(testGenDir, TableNameComment{
|
||||
// Name: "FsFont",
|
||||
// Comment: "测试",
|
||||
// })
|
||||
// Now you can use the generated GORM model to interact with the database
|
||||
}
|
571
generator/main.go
Normal file
571
generator/main.go
Normal file
@ -0,0 +1,571 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/text/cases"
|
||||
"golang.org/x/text/language"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
var testName = "fs_auth_item"
|
||||
var testGenDir = "model/gmodel"
|
||||
|
||||
func toPascalCase(s string) string {
|
||||
words := strings.Split(s, "_")
|
||||
for i, word := range words {
|
||||
words[i] = cases.Title(language.English).String(strings.ToLower(word))
|
||||
}
|
||||
return strings.Join(words, "")
|
||||
}
|
||||
|
||||
func GetAllTableNames(uri string) []string {
|
||||
db, err := sql.Open("mysql", uri)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
rows, err := db.Query("SHOW TABLES")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
var tableNames []string
|
||||
for rows.Next() {
|
||||
var tableName string
|
||||
if err := rows.Scan(&tableName); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
tableNames = append(tableNames, tableName)
|
||||
}
|
||||
|
||||
return tableNames
|
||||
}
|
||||
|
||||
// "fsreaderwriter:XErSYmLELKMnf3Dh@tcp(fusen.cdmigcvz3rle.us-east-2.rds.amazonaws.com:3306)/fusen"
|
||||
func GetColsFromTable(tname string, db *sql.DB) (result []Column, tableName, tableComment string) {
|
||||
|
||||
var a, ddl string
|
||||
err := db.QueryRow("SHOW CREATE TABLE "+tname).Scan(&a, &ddl)
|
||||
// log.Println(ddl)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return ParserDDL(ddl)
|
||||
}
|
||||
|
||||
var gmodelVarStr = `
|
||||
package gmodel
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
// AllModelsGen 所有Model集合,修改单行,只要不改字段名,不会根据新的内容修改,需要修改的话手动删除
|
||||
type AllModelsGen struct {
|
||||
}
|
||||
|
||||
func NewAllModels(gdb *gorm.DB) *AllModelsGen {
|
||||
models := &AllModelsGen{
|
||||
}
|
||||
return models
|
||||
}
|
||||
`
|
||||
|
||||
var gmodelVarStrFormat = `
|
||||
package gmodel
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
// AllModelsGen 所有Model集合,修改单行,只要不改字段名,不会根据新的内容修改,需要修改的话手动删除
|
||||
type AllModelsGen struct {
|
||||
%s
|
||||
}
|
||||
|
||||
func NewAllModels(gdb *gorm.DB) *AllModelsGen {
|
||||
models := &AllModelsGen{
|
||||
%s
|
||||
}
|
||||
return models
|
||||
}
|
||||
`
|
||||
|
||||
type TableNameComment struct {
|
||||
Name string
|
||||
GoName string
|
||||
Comment string
|
||||
}
|
||||
|
||||
type TMCS []TableNameComment
|
||||
|
||||
func (u TMCS) Len() int {
|
||||
return len(u)
|
||||
}
|
||||
|
||||
func (u TMCS) Less(i, j int) bool {
|
||||
return u[i].Name < u[j].Name
|
||||
}
|
||||
|
||||
func (u TMCS) Swap(i, j int) {
|
||||
u[i], u[j] = u[j], u[i]
|
||||
}
|
||||
|
||||
func GenAllModels(filedir string, tmcs ...TableNameComment) {
|
||||
fileName := filedir + "/var_gen.go"
|
||||
var dupMap map[string]TableNameComment = make(map[string]TableNameComment)
|
||||
for _, tmc := range tmcs {
|
||||
dupMap[tmc.Name] = tmc
|
||||
}
|
||||
|
||||
if _, err := os.Stat(fileName); err == nil {
|
||||
log.Printf("%s exists!", fileName)
|
||||
data, err := os.ReadFile(fileName)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
filestr := string(data)
|
||||
filelines := strings.Split(filestr, "\n")
|
||||
re := regexp.MustCompile(`([A-Za-z0-9_]+) [^/]+ // ([^ ]+) (.+)$`)
|
||||
for _, line := range filelines {
|
||||
result := re.FindStringSubmatch(line)
|
||||
if len(result) > 0 {
|
||||
// key := result[0]
|
||||
if len(result) != 4 {
|
||||
log.Println(result)
|
||||
}
|
||||
log.Println(result)
|
||||
|
||||
tmc := TableNameComment{
|
||||
Name: result[2],
|
||||
GoName: result[1],
|
||||
Comment: result[3],
|
||||
}
|
||||
|
||||
if newTmc, ok := dupMap[tmc.Name]; ok {
|
||||
log.Printf("not change: (old)%v -> (new)%v", tmc, newTmc)
|
||||
}
|
||||
|
||||
dupMap[tmc.Name] = tmc
|
||||
}
|
||||
}
|
||||
|
||||
tmcs = nil
|
||||
|
||||
for _, tmc := range dupMap {
|
||||
tmcs = append(tmcs, tmc)
|
||||
}
|
||||
|
||||
sort.Sort(TMCS(tmcs))
|
||||
|
||||
structStr := ""
|
||||
newModelsStr := ""
|
||||
for _, tmc := range tmcs {
|
||||
fsline := fmt.Sprintf("%s *%sModel // %s %s\n", tmc.GoName, tmc.GoName, tmc.Name, tmc.Comment)
|
||||
structStr += fsline
|
||||
nmline := fmt.Sprintf("%s: New%sModel(gdb),\n", tmc.GoName, tmc.GoName)
|
||||
newModelsStr += nmline
|
||||
}
|
||||
|
||||
content := fmt.Sprintf(gmodelVarStrFormat, structStr, newModelsStr)
|
||||
f, err := os.OpenFile(fileName, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
_, err = f.WriteString(content)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
} else if os.IsExist(err) {
|
||||
f, err := os.Create(fileName)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
_, err = f.WriteString(gmodelVarStr)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
} else {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err := exec.Command("gofmt", "-w", fileName).Run()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
var mysqluri string
|
||||
var name string // 需要序列化的单独文件名
|
||||
var mdir string // 需要修改的序列化路径 model
|
||||
|
||||
flag.StringVar(&mysqluri, "uri", "fsreaderwriter:XErSYmLELKMnf3Dh@tcp(fusen.cdmigcvz3rle.us-east-2.rds.amazonaws.com:3306)/fusen", "输入需要序列化的ddl文件名, 不需要后缀.ddl")
|
||||
flag.StringVar(&name, "name", "", "输入需要序列化的ddl文件名, 不需要后缀.ddl")
|
||||
flag.StringVar(&mdir, "mdir", "", "输入需要生成model的Go文件所在目录")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
if mdir != "" {
|
||||
testGenDir = mdir
|
||||
}
|
||||
|
||||
db, err := sql.Open("mysql", mysqluri)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer db.Close()
|
||||
var tmcs []TableNameComment
|
||||
if name == "-" {
|
||||
tablenames := GetAllTableNames(mysqluri)
|
||||
for _, testName := range tablenames {
|
||||
// if testName != "fs_user_info" {
|
||||
// continue
|
||||
// }
|
||||
|
||||
cols, tname, tcomment := GetColsFromTable(testName, db)
|
||||
GenFromPath(testGenDir, cols, tname, tcomment)
|
||||
|
||||
tmcs = append(tmcs, TableNameComment{
|
||||
Name: tname,
|
||||
GoName: toPascalCase(tname),
|
||||
Comment: tcomment,
|
||||
})
|
||||
}
|
||||
|
||||
} else {
|
||||
if name != "" {
|
||||
testName = name
|
||||
}
|
||||
|
||||
// log.Println(testName)
|
||||
cols, tname, tcomment := GetColsFromTable(testName, db)
|
||||
GenFromPath(testGenDir, cols, tname, tcomment)
|
||||
|
||||
tmcs = append(tmcs, TableNameComment{
|
||||
Name: tname,
|
||||
GoName: toPascalCase(tname),
|
||||
Comment: tcomment,
|
||||
})
|
||||
}
|
||||
|
||||
GenAllModels(testGenDir, tmcs...)
|
||||
|
||||
// tablenames := GetAllTableNames(mysqluri)
|
||||
// log.Println(tablenames)
|
||||
|
||||
// name
|
||||
|
||||
}
|
||||
|
||||
func GenFromPath(mdir string, cols []Column, tableName string, tableComment string) {
|
||||
|
||||
var importstr = "import (\"gorm.io/gorm\"\n"
|
||||
|
||||
// 匹配到主键定义
|
||||
|
||||
fcontent := "package gmodel\n"
|
||||
|
||||
structstr := "// %s %s\ntype %s struct {%s\n}\n"
|
||||
|
||||
pTableName := toPascalCase(tableName)
|
||||
|
||||
fieldstr := ""
|
||||
for _, col := range cols {
|
||||
fieldName := toPascalCase(col.Name)
|
||||
typeName := typeForMysqlToGo[col.GetType()]
|
||||
var defaultString string
|
||||
if col.DefaultValue != nil {
|
||||
switch typeName {
|
||||
case "*int64", "*uint64", "*float64", "*bool":
|
||||
defaultString = "default:" + strings.Trim(*col.DefaultValue, "'") + ";"
|
||||
default:
|
||||
defaultString = "default:" + *col.DefaultValue + ";"
|
||||
}
|
||||
} else {
|
||||
|
||||
switch typeName {
|
||||
case "*string":
|
||||
defaultString = "default:'';"
|
||||
case "*time.Time":
|
||||
defaultString = "default:'0000-00-00 00:00:00';"
|
||||
case "*[]byte":
|
||||
defaultString = "default:'';"
|
||||
case "*int64", "*uint64":
|
||||
defaultString = "default:0;"
|
||||
case "*float64":
|
||||
defaultString = "default: 0.0;"
|
||||
case "*bool":
|
||||
defaultString = "default:0;"
|
||||
default:
|
||||
// if fieldName == "Metadata" {
|
||||
// log.Println()
|
||||
// }
|
||||
fieldName = "// " + fieldName + " " + col.Type
|
||||
}
|
||||
}
|
||||
|
||||
if typeName == "*time.Time" {
|
||||
importstr += "\"time\"\n"
|
||||
}
|
||||
|
||||
if col.IndexType == "primary_key" {
|
||||
typeName = typeName[1:]
|
||||
}
|
||||
|
||||
tagstr := "`gorm:"
|
||||
|
||||
gormTag := ""
|
||||
if col.IndexType != "" {
|
||||
gormTag += col.IndexType + ";"
|
||||
}
|
||||
|
||||
gormTag += defaultString
|
||||
|
||||
if col.AutoIncrement {
|
||||
gormTag += "auto_increment;"
|
||||
}
|
||||
|
||||
tagstr += fmt.Sprintf("\"%s\"", gormTag)
|
||||
|
||||
tagstr += fmt.Sprintf(" json:\"%s\"`", col.Name)
|
||||
|
||||
fieldColStr := fmt.Sprintf("\n%s %s %s// %s", fieldName, typeName, tagstr, col.Comment)
|
||||
|
||||
fieldstr += fieldColStr
|
||||
|
||||
}
|
||||
|
||||
fcontent += importstr + ")\n"
|
||||
fcontent += fmt.Sprintf(structstr, tableName, tableComment, pTableName, fieldstr)
|
||||
modelstr := fmt.Sprintf(`type %sModel struct {db *gorm.DB
|
||||
name string}`, pTableName)
|
||||
fcontent += modelstr
|
||||
fcontent += "\n"
|
||||
|
||||
newfuncstr := fmt.Sprintf(`func New%sModel(db *gorm.DB) *%sModel {return &%sModel{db:db,name:"%s"}}`, pTableName, pTableName, pTableName, tableName)
|
||||
fcontent += newfuncstr
|
||||
fcontent += "\n"
|
||||
|
||||
genGoFileName := fmt.Sprintf("%s/%s_gen.go", mdir, tableName)
|
||||
f, err := os.OpenFile(genGoFileName, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
f.WriteString(fcontent)
|
||||
err = f.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
err = exec.Command("gofmt", "-w", genGoFileName).Run()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fcontent = "package gmodel\n// TODO: 使用model的属性做你想做的"
|
||||
genGoLogicFileName := fmt.Sprintf("%s/%s_logic.go", mdir, tableName)
|
||||
|
||||
// 使用 os.Stat 函数获取文件信息
|
||||
_, err = os.Stat(genGoLogicFileName)
|
||||
// 判断文件是否存在并输出结果
|
||||
if os.IsNotExist(err) {
|
||||
f2, err := os.OpenFile(genGoLogicFileName, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
f2.WriteString(fcontent)
|
||||
err = f2.Close()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(genGoLogicFileName, "create!")
|
||||
} else {
|
||||
fmt.Println(genGoLogicFileName, "exists")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
type Column struct {
|
||||
Name string
|
||||
Type string
|
||||
DefaultValue *string
|
||||
Length int
|
||||
Decimal int
|
||||
Unsigned bool
|
||||
NotNull bool
|
||||
AutoIncrement bool
|
||||
Comment string
|
||||
|
||||
IndexType string
|
||||
}
|
||||
|
||||
func (col *Column) GetType() string {
|
||||
content := col.Type
|
||||
if col.Unsigned {
|
||||
return content + " unsigned"
|
||||
}
|
||||
return content
|
||||
}
|
||||
|
||||
var typeForMysqlToGo = map[string]string{
|
||||
// 整数
|
||||
"int": "*int64",
|
||||
"integer": "*int64",
|
||||
"tinyint": "*int64",
|
||||
"smallint": "*int64",
|
||||
"mediumint": "*int64",
|
||||
"bigint": "*int64",
|
||||
"year": "*int64",
|
||||
|
||||
"int unsigned": "*int64",
|
||||
"integer unsigned": "*int64",
|
||||
"tinyint unsigned": "*int64",
|
||||
"smallint unsigned": "*int64",
|
||||
"mediumint unsigned": "*int64",
|
||||
"bigint unsigned": "*int64",
|
||||
"bit": "*int64",
|
||||
|
||||
// 布尔类型
|
||||
"bool": "*bool",
|
||||
|
||||
// 字符串
|
||||
"enum": "*string",
|
||||
"set": "*string",
|
||||
"varchar": "*string",
|
||||
"char": "*string",
|
||||
"tinytext": "*string",
|
||||
"mediumtext": "*string",
|
||||
"text": "*string",
|
||||
"longtext": "*string",
|
||||
|
||||
// 二进制
|
||||
"binary": "*[]byte",
|
||||
"varbinary": "*[]byte",
|
||||
"blob": "*[]byte",
|
||||
"tinyblob": "*[]byte",
|
||||
"mediumblob": "*[]byte",
|
||||
"longblob": "*[]byte",
|
||||
|
||||
// 日期时间
|
||||
"date": "*time.Time",
|
||||
"datetime": "*time.Time",
|
||||
"timestamp": "*time.Time",
|
||||
"time": "*time.Time",
|
||||
|
||||
// 浮点数
|
||||
"float": "*float64",
|
||||
"double": "*float64",
|
||||
"decimal": "*float64",
|
||||
}
|
||||
|
||||
func ParserDDL(ddl string) (result []Column, tableName, tableComment string) {
|
||||
|
||||
reTable := regexp.MustCompile(`CREATE TABLE +([^ ]+) +\(`)
|
||||
reTableComment := regexp.MustCompile(`.+COMMENT='(.+)'$`)
|
||||
reField := regexp.MustCompile("`([^`]+)` +([^ \n\\(\\,]+)(?:\\(([^)]+)\\))?( +unsigned| +UNSIGNED)?( +not +null| +NOT +NULL)?( +default +\\'[^\\']*'| +DEFAULT +\\'[^\\']*')?( +auto_increment| +AUTO_INCREMENT)?( comment '[^']*'| COMMENT '[^']*')?(,)?")
|
||||
reIndex := regexp.MustCompile(`(?i)(PRIMARY|UNIQUE)?\s*(INDEX|KEY)\s*(` + "`([^`]*)`" + `)?\s*\(([^)]+)\)`)
|
||||
reValue := regexp.MustCompile(` '(.+)'$`)
|
||||
reDefaultValue := regexp.MustCompile(` ('.+')$`)
|
||||
|
||||
var fieldmap map[string]string = make(map[string]string)
|
||||
indexMatches := reIndex.FindAllStringSubmatch(ddl, -1)
|
||||
for _, m := range indexMatches {
|
||||
idxAttr := strings.Trim(m[5], "`")
|
||||
PrefixName := strings.ToUpper(m[1])
|
||||
if PrefixName == "PRIMARY" {
|
||||
fieldmap[idxAttr] = "primary_key"
|
||||
} else if PrefixName == "UNIQUE" {
|
||||
fieldmap[idxAttr] = "unique_key"
|
||||
} else if PrefixName == "" {
|
||||
fieldmap[idxAttr] = "index"
|
||||
} else {
|
||||
log.Fatal(PrefixName)
|
||||
}
|
||||
}
|
||||
|
||||
tableMatches := reTable.FindStringSubmatch(ddl)
|
||||
tableName = strings.Trim(tableMatches[1], "`")
|
||||
|
||||
tableCommentMatches := reTableComment.FindStringSubmatch(ddl)
|
||||
if len(tableCommentMatches) > 0 {
|
||||
tableComment = strings.Trim(tableCommentMatches[1], "`")
|
||||
}
|
||||
|
||||
// log.Println(tableName, tableComment)
|
||||
fieldMatches := reField.FindAllStringSubmatch(ddl, -1)
|
||||
for _, m := range fieldMatches {
|
||||
if m[0] == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
col := Column{
|
||||
Name: m[1],
|
||||
Type: strings.ToLower(m[2]),
|
||||
}
|
||||
|
||||
if col.Type == "json" {
|
||||
col.Type = "blob"
|
||||
}
|
||||
|
||||
col.IndexType = fieldmap[col.Name]
|
||||
|
||||
if m[3] != "" {
|
||||
maylen := strings.Split(m[3], ",")
|
||||
if len(maylen) >= 1 {
|
||||
clen, err := strconv.ParseInt(maylen[0], 10, 64)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
col.Length = int(clen)
|
||||
}
|
||||
if len(maylen) >= 2 {
|
||||
clen, err := strconv.ParseInt(maylen[1], 10, 64)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
col.Decimal = int(clen)
|
||||
}
|
||||
}
|
||||
|
||||
if len(m[4]) > 0 {
|
||||
col.Unsigned = true
|
||||
}
|
||||
|
||||
if len(m[5]) > 0 {
|
||||
col.NotNull = true
|
||||
}
|
||||
|
||||
if len(m[6]) > 0 {
|
||||
v := reDefaultValue.FindStringSubmatch(m[6])
|
||||
if len(v) > 0 {
|
||||
dv := string(v[1])
|
||||
col.DefaultValue = &dv
|
||||
}
|
||||
}
|
||||
|
||||
if len(m[7]) > 0 {
|
||||
col.AutoIncrement = true
|
||||
}
|
||||
|
||||
if len(m[8]) > 0 {
|
||||
v := reValue.FindStringSubmatch(m[8])
|
||||
if len(v) > 0 {
|
||||
col.Comment = v[1]
|
||||
}
|
||||
}
|
||||
result = append(result, col)
|
||||
// fmt.Println(col)
|
||||
}
|
||||
return result, tableName, tableComment
|
||||
}
|
14
generator/main_test.go
Normal file
14
generator/main_test.go
Normal file
@ -0,0 +1,14 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestMain(t *testing.T) {
|
||||
// args := []string{"-name", "fs_guest"}
|
||||
|
||||
testGenDir = "../" + testGenDir
|
||||
os.Args = []string{"cmd", "-name=-"}
|
||||
main()
|
||||
}
|
145
go.mod
Normal file
145
go.mod
Normal file
@ -0,0 +1,145 @@
|
||||
module fusenapi
|
||||
|
||||
go 1.20
|
||||
|
||||
require (
|
||||
github.com/474420502/passer v0.0.1
|
||||
github.com/SebastiaanKlippert/go-wkhtmltopdf v1.9.0
|
||||
github.com/aliyun/aliyun-oss-go-sdk v3.0.1+incompatible
|
||||
github.com/aws/aws-sdk-go v1.44.295
|
||||
github.com/bwmarrin/snowflake v0.3.0
|
||||
github.com/disintegration/imaging v1.6.2
|
||||
github.com/go-ldap/ldap/v3 v3.4.6
|
||||
github.com/go-resty/resty/v2 v2.7.0
|
||||
github.com/golang-jwt/jwt v3.2.2+incompatible
|
||||
github.com/google/uuid v1.3.1
|
||||
github.com/gorilla/websocket v1.5.0
|
||||
github.com/hashicorp/raft v1.5.0
|
||||
github.com/lni/dragonboat/v4 v4.0.0-20230709075559-54497b9553be
|
||||
github.com/mozillazg/go-pinyin v0.19.0
|
||||
github.com/nacos-group/nacos-sdk-go/v2 v2.2.3
|
||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
|
||||
github.com/patrickmn/go-cache v2.1.0+incompatible
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
|
||||
github.com/streadway/amqp v1.1.0
|
||||
github.com/stripe/stripe-go/v75 v75.7.0
|
||||
github.com/zeromicro/go-zero v1.5.4
|
||||
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8
|
||||
golang.org/x/oauth2 v0.10.0
|
||||
gorm.io/driver/mysql v1.5.1
|
||||
gorm.io/gorm v1.25.1
|
||||
)
|
||||
|
||||
require (
|
||||
cloud.google.com/go/compute v1.20.1 // indirect
|
||||
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
||||
github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect
|
||||
github.com/BurntSushi/toml v1.1.0 // indirect
|
||||
github.com/DataDog/zstd v1.4.5 // indirect
|
||||
github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect
|
||||
github.com/VictoriaMetrics/metrics v1.18.1 // indirect
|
||||
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 // indirect
|
||||
github.com/andybalholm/brotli v1.0.5 // indirect
|
||||
github.com/armon/go-metrics v0.4.1 // indirect
|
||||
github.com/buger/jsonparser v1.1.1 // indirect
|
||||
github.com/cockroachdb/errors v1.9.0 // indirect
|
||||
github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f // indirect
|
||||
github.com/cockroachdb/pebble v0.0.0-20221207173255-0f086d933dac // indirect
|
||||
github.com/cockroachdb/redact v1.1.3 // indirect
|
||||
github.com/getsentry/sentry-go v0.12.0 // indirect
|
||||
github.com/go-asn1-ber/asn1-ber v1.5.5 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/golang/mock v1.6.0 // indirect
|
||||
github.com/golang/snappy v0.0.4 // indirect
|
||||
github.com/google/btree v1.0.0 // indirect
|
||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||
github.com/hashicorp/go-hclog v1.5.0 // indirect
|
||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||
github.com/hashicorp/go-msgpack v0.5.5 // indirect
|
||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||
github.com/hashicorp/go-sockaddr v1.0.0 // indirect
|
||||
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
||||
github.com/hashicorp/memberlist v0.3.1 // indirect
|
||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||
github.com/json-iterator/go v1.1.12 // indirect
|
||||
github.com/klauspost/compress v1.15.15 // indirect
|
||||
github.com/kr/pretty v0.3.1 // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/lni/goutils v1.3.1-0.20220604063047-388d67b4dbc4 // indirect
|
||||
github.com/lni/vfs v0.2.1-0.20220616104132-8852fd867376 // indirect
|
||||
github.com/miekg/dns v1.1.26 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/pierrec/lz4/v4 v4.1.17 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/rogpeppe/go-internal v1.9.0 // indirect
|
||||
github.com/schollz/progressbar v1.0.0 // indirect
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
|
||||
github.com/valyala/fastrand v1.1.0 // indirect
|
||||
github.com/valyala/histogram v1.2.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.14.0 // indirect
|
||||
go.uber.org/atomic v1.10.0 // indirect
|
||||
go.uber.org/multierr v1.9.0 // indirect
|
||||
go.uber.org/zap v1.24.0 // indirect
|
||||
golang.org/x/crypto v0.13.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230728194245-b0cb94b80691 // indirect
|
||||
golang.org/x/sync v0.2.0 // indirect
|
||||
golang.org/x/time v0.3.0 // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect
|
||||
gopkg.in/ini.v1 v1.66.4 // indirect
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/474420502/requests v1.42.0
|
||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||
github.com/jinzhu/now v1.1.5 // indirect
|
||||
github.com/tidwall/gjson v1.13.0
|
||||
github.com/tidwall/match v1.1.1 // indirect
|
||||
github.com/tidwall/pretty v1.2.0 // indirect
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.2.0 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||
github.com/fatih/color v1.15.0 // indirect
|
||||
github.com/go-logr/logr v1.2.3 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-sql-driver/mysql v1.7.1
|
||||
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
|
||||
github.com/golang/protobuf v1.5.3 // indirect
|
||||
github.com/gorilla/mux v1.8.0
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.15.0 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.17 // indirect
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
||||
github.com/openzipkin/zipkin-go v0.4.1 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.0.9 // indirect
|
||||
github.com/prometheus/client_golang v1.16.0 // indirect
|
||||
github.com/prometheus/client_model v0.3.0 // indirect
|
||||
github.com/prometheus/common v0.42.0 // indirect
|
||||
github.com/prometheus/procfs v0.10.1 // indirect
|
||||
github.com/rs/cors v1.9.0
|
||||
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
||||
go.opentelemetry.io/otel v1.14.0
|
||||
go.opentelemetry.io/otel/exporters/jaeger v1.14.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.14.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/zipkin v1.14.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.14.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.14.0
|
||||
go.opentelemetry.io/proto/otlp v0.19.0 // indirect
|
||||
go.uber.org/automaxprocs v1.5.2 // indirect
|
||||
golang.org/x/net v0.12.0 // indirect
|
||||
golang.org/x/sys v0.12.0 // indirect
|
||||
golang.org/x/text v0.13.0
|
||||
google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc // indirect
|
||||
google.golang.org/grpc v1.56.2 // indirect
|
||||
google.golang.org/protobuf v1.31.0 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
)
|
12
goctl_template/api/config.tpl
Normal file
12
goctl_template/api/config.tpl
Normal file
@ -0,0 +1,12 @@
|
||||
package config
|
||||
|
||||
import {{.authImport}}
|
||||
|
||||
type Config struct {
|
||||
rest.RestConf
|
||||
SourceMysql string
|
||||
Auth types.Auth
|
||||
SourceRabbitMq string
|
||||
{{.auth}}
|
||||
{{.jwtTrans}}
|
||||
}
|
38
goctl_template/api/context.tpl
Normal file
38
goctl_template/api/context.tpl
Normal file
@ -0,0 +1,38 @@
|
||||
package svc
|
||||
|
||||
import (
|
||||
{{.configImport}}
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"fusenapi/utils/autoconfig"
|
||||
"fusenapi/initalize"
|
||||
"fusenapi/model/gmodel"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"github.com/golang-jwt/jwt"
|
||||
)
|
||||
|
||||
type ServiceContext struct {
|
||||
Config {{.config}}
|
||||
{{.middleware}}
|
||||
|
||||
SharedState *fsm.StateCluster
|
||||
MysqlConn *gorm.DB
|
||||
AllModels *gmodel.AllModelsGen
|
||||
RabbitMq *initalize.RabbitMqHandle
|
||||
}
|
||||
|
||||
func NewServiceContext(c {{.config}}) *ServiceContext {
|
||||
conn := initalize.InitMysql(c.SourceMysql)
|
||||
|
||||
return &ServiceContext{
|
||||
Config: c,
|
||||
MysqlConn: conn,
|
||||
SharedState: nil,
|
||||
AllModels: gmodel.NewAllModels(initalize.InitMysql(c.SourceMysql)),
|
||||
RabbitMq:initalize.InitRabbitMq(c.SourceRabbitMq, nil),
|
||||
{{.middlewareAssignment}}
|
||||
}
|
||||
}
|
10
goctl_template/api/etc.tpl
Normal file
10
goctl_template/api/etc.tpl
Normal file
@ -0,0 +1,10 @@
|
||||
Name: {{.serviceName}}
|
||||
Host: {{.host}}
|
||||
Port: {{.port}}
|
||||
Timeout: 15000 #服务超时时间(毫秒)
|
||||
SourceMysql: fsreaderwriter:XErSYmLELKMnf3Dh@tcp(fusen.cdmigcvz3rle.us-east-2.rds.amazonaws.com:3306)/fusen
|
||||
SourceRabbitMq: ""
|
||||
Auth:
|
||||
AccessSecret: fusen2023
|
||||
AccessExpire: 2592000
|
||||
RefreshAfter: 1592000
|
33
goctl_template/api/handler.tpl
Normal file
33
goctl_template/api/handler.tpl
Normal file
@ -0,0 +1,33 @@
|
||||
package {{.PkgName}}
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"reflect"
|
||||
|
||||
"fusenapi/utils/basic"
|
||||
|
||||
{{.ImportPackages}}
|
||||
)
|
||||
|
||||
func {{.HandlerName}}(svcCtx *svc.ServiceContext) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
{{if .HasRequest}}var req types.{{.RequestType}}
|
||||
userinfo, err := basic.RequestParse(w, r, svcCtx, &req)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 创建一个业务逻辑层实例
|
||||
{{end}}l := {{.LogicName}}.New{{.LogicType}}(r.Context(), svcCtx)
|
||||
|
||||
rl := reflect.ValueOf(l)
|
||||
basic.BeforeLogic(w, r, rl)
|
||||
|
||||
{{if .HasResp}}resp{{end}} := l.{{.Call}}({{if .HasRequest}}&req, {{end}}userinfo)
|
||||
|
||||
if !basic.AfterLogic(w, r, rl, resp) {
|
||||
basic.NormalAfterLogic(w, r, resp)
|
||||
}
|
||||
}
|
||||
}
|
39
goctl_template/api/logic.tpl
Normal file
39
goctl_template/api/logic.tpl
Normal file
@ -0,0 +1,39 @@
|
||||
package {{.pkgName}}
|
||||
|
||||
import (
|
||||
"fusenapi/utils/auth"
|
||||
"fusenapi/utils/basic"
|
||||
|
||||
{{.imports}}
|
||||
)
|
||||
|
||||
type {{.logic}} struct {
|
||||
logx.Logger
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
}
|
||||
|
||||
func New{{.logic}}(ctx context.Context, svcCtx *svc.ServiceContext) *{{.logic}} {
|
||||
return &{{.logic}}{
|
||||
Logger: logx.WithContext(ctx),
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
}
|
||||
}
|
||||
|
||||
// 处理进入前逻辑w,r
|
||||
// func (l *{{.logic}}) BeforeLogic(w http.ResponseWriter, r *http.Request) {
|
||||
// }
|
||||
|
||||
func (l *{{.logic}}) {{.function}}({{.request}}, userinfo *auth.UserInfo) (resp *basic.Response) {
|
||||
// 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data)
|
||||
// userinfo 传入值时, 一定不为null
|
||||
|
||||
{{.returnString}} resp.SetStatus(basic.CodeOK)
|
||||
}
|
||||
|
||||
// 处理逻辑后 w,r 如:重定向, resp 必须重新处理
|
||||
// func (l *{{.logic}}) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) {
|
||||
// // httpx.OkJsonCtx(r.Context(), w, resp)
|
||||
// }
|
||||
|
36
goctl_template/api/main.tpl
Normal file
36
goctl_template/api/main.tpl
Normal file
@ -0,0 +1,36 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"fusenapi/utils/auth"
|
||||
"fusenapi/utils/fsconfig"
|
||||
|
||||
{{.importPackages}}
|
||||
)
|
||||
|
||||
var configFile = flag.String("f", "etc/{{.serviceName}}.yaml", "the config file")
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
var c config.Config
|
||||
fsconfig.StartNacosConfig(*configFile, &c, nil)
|
||||
|
||||
c.Timeout = int64(time.Second * 15)
|
||||
server := rest.MustNewServer(c.RestConf, rest.WithCustomCors(auth.FsCors, func(w http.ResponseWriter) {
|
||||
}))
|
||||
defer server.Stop()
|
||||
|
||||
ctx := svc.NewServiceContext(c)
|
||||
handler.RegisterHandlers(server, ctx)
|
||||
|
||||
fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
|
||||
server.Start()
|
||||
}
|
||||
|
||||
|
||||
|
19
goctl_template/api/middleware.tpl
Normal file
19
goctl_template/api/middleware.tpl
Normal file
@ -0,0 +1,19 @@
|
||||
package middleware
|
||||
|
||||
import "net/http"
|
||||
|
||||
type {{.name}} struct {
|
||||
}
|
||||
|
||||
func New{{.name}}() *{{.name}} {
|
||||
return &{{.name}}{}
|
||||
}
|
||||
|
||||
func (m *{{.name}})Handle(next http.HandlerFunc) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
// TODO generate middleware implement function, delete after code implementation
|
||||
|
||||
// Passthrough to next handler if need
|
||||
next(w, r)
|
||||
}
|
||||
}
|
4
goctl_template/api/route-addition.tpl
Normal file
4
goctl_template/api/route-addition.tpl
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
server.AddRoutes(
|
||||
{{.routes}} {{.jwt}}{{.signature}} {{.prefix}} {{.timeout}} {{.maxBytes}}
|
||||
)
|
13
goctl_template/api/routes.tpl
Normal file
13
goctl_template/api/routes.tpl
Normal file
@ -0,0 +1,13 @@
|
||||
// Code generated by goctl. DO NOT EDIT.
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"{{if .hasTimeout}}
|
||||
"time"{{end}}
|
||||
|
||||
{{.importPackages}}
|
||||
)
|
||||
|
||||
func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
|
||||
{{.routesAdditions}}
|
||||
}
|
24
goctl_template/api/template.tpl
Normal file
24
goctl_template/api/template.tpl
Normal file
@ -0,0 +1,24 @@
|
||||
syntax = "v1"
|
||||
|
||||
info (
|
||||
title: // TODO: add title
|
||||
desc: // TODO: add description
|
||||
author: "{{.gitUser}}"
|
||||
email: "{{.gitEmail}}"
|
||||
)
|
||||
|
||||
type request {
|
||||
// TODO: add members here and delete this comment
|
||||
}
|
||||
|
||||
type response {
|
||||
// TODO: add members here and delete this comment
|
||||
}
|
||||
|
||||
service {{.serviceName}} {
|
||||
@handler GetUser // TODO: set handler name and delete this comment
|
||||
get /users/id/:userId(request) returns(response)
|
||||
|
||||
@handler CreateUser // TODO: set handler name and delete this comment
|
||||
post /users/create(request)
|
||||
}
|
50
goctl_template/api/types.tpl
Normal file
50
goctl_template/api/types.tpl
Normal file
@ -0,0 +1,50 @@
|
||||
// Code generated by goctl. DO NOT EDIT.
|
||||
package types
|
||||
import (
|
||||
{{if .containsTime}}"time"{{end}}
|
||||
|
||||
"fusenapi/utils/basic"
|
||||
)
|
||||
{{.types}}
|
||||
|
||||
|
||||
// Set 设置Response的Code和Message值
|
||||
func (resp *Response) Set(Code int, Message string) *Response {
|
||||
return &Response{
|
||||
Code: Code,
|
||||
Message: Message,
|
||||
}
|
||||
}
|
||||
|
||||
// Set 设置整个Response
|
||||
func (resp *Response) SetWithData(Code int, Message string, Data interface{}) *Response {
|
||||
return &Response{
|
||||
Code: Code,
|
||||
Message: Message,
|
||||
Data: Data,
|
||||
}
|
||||
}
|
||||
|
||||
// SetStatus 设置默认StatusResponse(内部自定义) 默认msg, 可以带data, data只使用一个参数
|
||||
func (resp *Response) SetStatus(sr *basic.StatusResponse, data ...interface{}) *Response {
|
||||
newResp := &Response{
|
||||
Code: sr.Code,
|
||||
}
|
||||
if len(data) == 1 {
|
||||
newResp.Data = data[0]
|
||||
}
|
||||
return newResp
|
||||
}
|
||||
|
||||
// SetStatusWithMessage 设置默认StatusResponse(内部自定义) 非默认msg, 可以带data, data只使用一个参数
|
||||
func (resp *Response) SetStatusWithMessage(sr *basic.StatusResponse, msg string, data ...interface{}) *Response {
|
||||
newResp := &Response{
|
||||
Code: sr.Code,
|
||||
Message: msg,
|
||||
}
|
||||
if len(data) == 1 {
|
||||
newResp.Data = data[0]
|
||||
}
|
||||
return newResp
|
||||
}
|
||||
|
33
goctl_template/docker/docker.tpl
Normal file
33
goctl_template/docker/docker.tpl
Normal file
@ -0,0 +1,33 @@
|
||||
FROM golang:{{.Version}}alpine AS builder
|
||||
|
||||
LABEL stage=gobuilder
|
||||
|
||||
ENV CGO_ENABLED 0
|
||||
{{if .Chinese}}ENV GOPROXY https://goproxy.cn,direct
|
||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||
{{end}}{{if .HasTimezone}}
|
||||
RUN apk update --no-cache && apk add --no-cache tzdata
|
||||
{{end}}
|
||||
WORKDIR /build
|
||||
|
||||
ADD go.mod .
|
||||
ADD go.sum .
|
||||
RUN go mod download
|
||||
COPY . .
|
||||
{{if .Argument}}COPY {{.GoRelPath}}/etc /app/etc
|
||||
{{end}}RUN go build -ldflags="-s -w" -o /app/{{.ExeFile}} {{.GoMainFrom}}
|
||||
|
||||
|
||||
FROM {{.BaseImage}}
|
||||
|
||||
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
|
||||
{{if .HasTimezone}}COPY --from=builder /usr/share/zoneinfo/{{.Timezone}} /usr/share/zoneinfo/{{.Timezone}}
|
||||
ENV TZ {{.Timezone}}
|
||||
{{end}}
|
||||
WORKDIR /app
|
||||
COPY --from=builder /app/{{.ExeFile}} /app/{{.ExeFile}}{{if .Argument}}
|
||||
COPY --from=builder /app/etc /app/etc{{end}}
|
||||
{{if .HasPort}}
|
||||
EXPOSE {{.Port}}
|
||||
{{end}}
|
||||
CMD ["./{{.ExeFile}}"{{.Argument}}]
|
18
goctl_template/gateway/etc.tpl
Normal file
18
goctl_template/gateway/etc.tpl
Normal file
@ -0,0 +1,18 @@
|
||||
Name: gateway-example # gateway name
|
||||
Host: localhost # gateway host
|
||||
Port: 8888 # gateway port
|
||||
Upstreams: # upstreams
|
||||
- Grpc: # grpc upstream
|
||||
Target: 0.0.0.0:8080 # grpc target,the direct grpc server address,for only one node
|
||||
# Endpoints: [0.0.0.0:8080,192.168.120.1:8080] # grpc endpoints, the grpc server address list, for multiple nodes
|
||||
# Etcd: # etcd config, if you want to use etcd to discover the grpc server address
|
||||
# Hosts: [127.0.0.1:2378,127.0.0.1:2379] # etcd hosts
|
||||
# Key: greet.grpc # the discovery key
|
||||
# protoset mode
|
||||
ProtoSets:
|
||||
- hello.pb
|
||||
# Mappings can also be written in proto options
|
||||
# Mappings: # routes mapping
|
||||
# - Method: get
|
||||
# Path: /ping
|
||||
# RpcPath: hello.Hello/Ping
|
21
goctl_template/gateway/main.tpl
Normal file
21
goctl_template/gateway/main.tpl
Normal file
@ -0,0 +1,21 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/conf"
|
||||
"github.com/zeromicro/go-zero/gateway"
|
||||
)
|
||||
|
||||
var configFile = flag.String("f", "etc/gateway.yaml", "config file")
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
var c gateway.GatewayConf
|
||||
|
||||
c.Timeout = int64(time.Second * 15)
|
||||
gw := gateway.MustNewServer(c)
|
||||
defer gw.Stop()
|
||||
gw.Start()
|
||||
}
|
117
goctl_template/kube/deployment.tpl
Normal file
117
goctl_template/kube/deployment.tpl
Normal file
@ -0,0 +1,117 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{.Name}}
|
||||
namespace: {{.Namespace}}
|
||||
labels:
|
||||
app: {{.Name}}
|
||||
spec:
|
||||
replicas: {{.Replicas}}
|
||||
revisionHistoryLimit: {{.Revisions}}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: {{.Name}}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: {{.Name}}
|
||||
spec:{{if .ServiceAccount}}
|
||||
serviceAccountName: {{.ServiceAccount}}{{end}}
|
||||
containers:
|
||||
- name: {{.Name}}
|
||||
image: {{.Image}}
|
||||
{{if .ImagePullPolicy}}imagePullPolicy: {{.ImagePullPolicy}}
|
||||
{{end}}ports:
|
||||
- containerPort: {{.Port}}
|
||||
readinessProbe:
|
||||
tcpSocket:
|
||||
port: {{.Port}}
|
||||
initialDelaySeconds: 5
|
||||
periodSeconds: 10
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: {{.Port}}
|
||||
initialDelaySeconds: 15
|
||||
periodSeconds: 20
|
||||
resources:
|
||||
requests:
|
||||
cpu: {{.RequestCpu}}m
|
||||
memory: {{.RequestMem}}Mi
|
||||
limits:
|
||||
cpu: {{.LimitCpu}}m
|
||||
memory: {{.LimitMem}}Mi
|
||||
volumeMounts:
|
||||
- name: timezone
|
||||
mountPath: /etc/localtime
|
||||
{{if .Secret}}imagePullSecrets:
|
||||
- name: {{.Secret}}
|
||||
{{end}}volumes:
|
||||
- name: timezone
|
||||
hostPath:
|
||||
path: /usr/share/zoneinfo/Asia/Shanghai
|
||||
|
||||
---
|
||||
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{.Name}}-svc
|
||||
namespace: {{.Namespace}}
|
||||
spec:
|
||||
ports:
|
||||
{{if .UseNodePort}}- nodePort: {{.NodePort}}
|
||||
port: {{.Port}}
|
||||
protocol: TCP
|
||||
targetPort: {{.TargetPort}}
|
||||
type: NodePort{{else}}- port: {{.Port}}
|
||||
targetPort: {{.TargetPort}}{{end}}
|
||||
selector:
|
||||
app: {{.Name}}
|
||||
|
||||
---
|
||||
|
||||
apiVersion: autoscaling/v2beta2
|
||||
kind: HorizontalPodAutoscaler
|
||||
metadata:
|
||||
name: {{.Name}}-hpa-c
|
||||
namespace: {{.Namespace}}
|
||||
labels:
|
||||
app: {{.Name}}-hpa-c
|
||||
spec:
|
||||
scaleTargetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: {{.Name}}
|
||||
minReplicas: {{.MinReplicas}}
|
||||
maxReplicas: {{.MaxReplicas}}
|
||||
metrics:
|
||||
- type: Resource
|
||||
resource:
|
||||
name: cpu
|
||||
target:
|
||||
type: Utilization
|
||||
averageUtilization: 80
|
||||
|
||||
---
|
||||
|
||||
apiVersion: autoscaling/v2beta2
|
||||
kind: HorizontalPodAutoscaler
|
||||
metadata:
|
||||
name: {{.Name}}-hpa-m
|
||||
namespace: {{.Namespace}}
|
||||
labels:
|
||||
app: {{.Name}}-hpa-m
|
||||
spec:
|
||||
scaleTargetRef:
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
name: {{.Name}}
|
||||
minReplicas: {{.MinReplicas}}
|
||||
maxReplicas: {{.MaxReplicas}}
|
||||
metrics:
|
||||
- type: Resource
|
||||
resource:
|
||||
name: memory
|
||||
target:
|
||||
type: Utilization
|
||||
averageUtilization: 80
|
37
goctl_template/kube/job.tpl
Normal file
37
goctl_template/kube/job.tpl
Normal file
@ -0,0 +1,37 @@
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: {{.Name}}
|
||||
namespace: {{.Namespace}}
|
||||
spec:
|
||||
successfulJobsHistoryLimit: {{.SuccessfulJobsHistoryLimit}}
|
||||
schedule: "{{.Schedule}}"
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:{{if .ServiceAccount}}
|
||||
serviceAccountName: {{.ServiceAccount}}{{end}}
|
||||
{{end}}containers:
|
||||
- name: {{.Name}}
|
||||
image: # todo image url
|
||||
resources:
|
||||
requests:
|
||||
cpu: {{.RequestCpu}}m
|
||||
memory: {{.RequestMem}}Mi
|
||||
limits:
|
||||
cpu: {{.LimitCpu}}m
|
||||
memory: {{.LimitMem}}Mi
|
||||
command:
|
||||
- ./{{.ServiceName}}
|
||||
- -f
|
||||
- ./{{.Name}}.yaml
|
||||
volumeMounts:
|
||||
- name: timezone
|
||||
mountPath: /etc/localtime
|
||||
imagePullSecrets:
|
||||
- name: # registry secret, if no, remove this
|
||||
restartPolicy: OnFailure
|
||||
volumes:
|
||||
- name: timezone
|
||||
hostPath:
|
||||
path: /usr/share/zoneinfo/Asia/Shanghai
|
14
goctl_template/model/delete.tpl
Normal file
14
goctl_template/model/delete.tpl
Normal file
@ -0,0 +1,14 @@
|
||||
func (m *default{{.upperStartCamelObject}}Model) Delete(ctx context.Context, {{.lowerStartCamelPrimaryKey}} {{.dataType}}) error {
|
||||
{{if .withCache}}{{if .containsIndexCache}}data, err:=m.FindOne(ctx, {{.lowerStartCamelPrimaryKey}})
|
||||
if err!=nil{
|
||||
return err
|
||||
}
|
||||
|
||||
{{end}} {{.keys}}
|
||||
_, err {{if .containsIndexCache}}={{else}}:={{end}} m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
||||
query := fmt.Sprintf("delete from %s where {{.originalPrimaryKey}} = {{if .postgreSql}}$1{{else}}?{{end}}", m.table)
|
||||
return conn.ExecCtx(ctx, query, {{.lowerStartCamelPrimaryKey}})
|
||||
}, {{.keyValues}}){{else}}query := fmt.Sprintf("delete from %s where {{.originalPrimaryKey}} = {{if .postgreSql}}$1{{else}}?{{end}}", m.table)
|
||||
_,err:=m.conn.ExecCtx(ctx, query, {{.lowerStartCamelPrimaryKey}}){{end}}
|
||||
return err
|
||||
}
|
5
goctl_template/model/err.tpl
Normal file
5
goctl_template/model/err.tpl
Normal file
@ -0,0 +1,5 @@
|
||||
package {{.pkg}}
|
||||
|
||||
import "github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
|
||||
var ErrNotFound = sqlx.ErrNotFound
|
1
goctl_template/model/field.tpl
Normal file
1
goctl_template/model/field.tpl
Normal file
@ -0,0 +1 @@
|
||||
{{.name}} {{.type}} {{.tag}} {{if .hasComment}}// {{.comment}}{{end}}
|
8
goctl_template/model/find-one-by-field-extra-method.tpl
Normal file
8
goctl_template/model/find-one-by-field-extra-method.tpl
Normal file
@ -0,0 +1,8 @@
|
||||
func (m *default{{.upperStartCamelObject}}Model) formatPrimary(primary any) string {
|
||||
return fmt.Sprintf("%s%v", {{.primaryKeyLeft}}, primary)
|
||||
}
|
||||
|
||||
func (m *default{{.upperStartCamelObject}}Model) queryPrimary(ctx context.Context, conn sqlx.SqlConn, v, primary any) error {
|
||||
query := fmt.Sprintf("select %s from %s where {{.originalPrimaryField}} = {{if .postgreSql}}$1{{else}}?{{end}} limit 1", {{.lowerStartCamelObject}}Rows, m.table )
|
||||
return conn.QueryRowCtx(ctx, v, query, primary)
|
||||
}
|
30
goctl_template/model/find-one-by-field.tpl
Normal file
30
goctl_template/model/find-one-by-field.tpl
Normal file
@ -0,0 +1,30 @@
|
||||
func (m *default{{.upperStartCamelObject}}Model) FindOneBy{{.upperField}}(ctx context.Context, {{.in}}) (*{{.upperStartCamelObject}}, error) {
|
||||
{{if .withCache}}{{.cacheKey}}
|
||||
var resp {{.upperStartCamelObject}}
|
||||
err := m.QueryRowIndexCtx(ctx, &resp, {{.cacheKeyVariable}}, m.formatPrimary, func(ctx context.Context, conn sqlx.SqlConn, v any) (i any, e error) {
|
||||
query := fmt.Sprintf("select %s from %s where {{.originalField}} limit 1", {{.lowerStartCamelObject}}Rows, m.table)
|
||||
if err := conn.QueryRowCtx(ctx, &resp, query, {{.lowerStartCamelField}}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return resp.{{.upperStartCamelPrimaryKey}}, nil
|
||||
}, m.queryPrimary)
|
||||
switch err {
|
||||
case nil:
|
||||
return &resp, nil
|
||||
case sqlc.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}{{else}}var resp {{.upperStartCamelObject}}
|
||||
query := fmt.Sprintf("select %s from %s where {{.originalField}} limit 1", {{.lowerStartCamelObject}}Rows, m.table )
|
||||
err := m.conn.QueryRowCtx(ctx, &resp, query, {{.lowerStartCamelField}})
|
||||
switch err {
|
||||
case nil:
|
||||
return &resp, nil
|
||||
case sqlc.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}{{end}}
|
26
goctl_template/model/find-one.tpl
Normal file
26
goctl_template/model/find-one.tpl
Normal file
@ -0,0 +1,26 @@
|
||||
func (m *default{{.upperStartCamelObject}}Model) FindOne(ctx context.Context, {{.lowerStartCamelPrimaryKey}} {{.dataType}}) (*{{.upperStartCamelObject}}, error) {
|
||||
{{if .withCache}}{{.cacheKey}}
|
||||
var resp {{.upperStartCamelObject}}
|
||||
err := m.QueryRowCtx(ctx, &resp, {{.cacheKeyVariable}}, func(ctx context.Context, conn sqlx.SqlConn, v any) error {
|
||||
query := fmt.Sprintf("select %s from %s where {{.originalPrimaryKey}} = {{if .postgreSql}}$1{{else}}?{{end}} limit 1", {{.lowerStartCamelObject}}Rows, m.table)
|
||||
return conn.QueryRowCtx(ctx, v, query, {{.lowerStartCamelPrimaryKey}})
|
||||
})
|
||||
switch err {
|
||||
case nil:
|
||||
return &resp, nil
|
||||
case sqlc.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}{{else}}query := fmt.Sprintf("select %s from %s where {{.originalPrimaryKey}} = {{if .postgreSql}}$1{{else}}?{{end}} limit 1", {{.lowerStartCamelObject}}Rows, m.table)
|
||||
var resp {{.upperStartCamelObject}}
|
||||
err := m.conn.QueryRowCtx(ctx, &resp, query, {{.lowerStartCamelPrimaryKey}})
|
||||
switch err {
|
||||
case nil:
|
||||
return &resp, nil
|
||||
case sqlc.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}{{end}}
|
||||
}
|
13
goctl_template/model/import-no-cache.tpl
Normal file
13
goctl_template/model/import-no-cache.tpl
Normal file
@ -0,0 +1,13 @@
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strings"
|
||||
{{if .time}}"time"{{end}}
|
||||
|
||||
{{if .containsPQ}}"github.com/lib/pq"{{end}}
|
||||
"github.com/zeromicro/go-zero/core/stores/builder"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlc"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
"github.com/zeromicro/go-zero/core/stringx"
|
||||
)
|
14
goctl_template/model/import.tpl
Normal file
14
goctl_template/model/import.tpl
Normal file
@ -0,0 +1,14 @@
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strings"
|
||||
{{if .time}}"time"{{end}}
|
||||
|
||||
{{if .containsPQ}}"github.com/lib/pq"{{end}}
|
||||
"github.com/zeromicro/go-zero/core/stores/builder"
|
||||
"github.com/zeromicro/go-zero/core/stores/cache"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlc"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
"github.com/zeromicro/go-zero/core/stringx"
|
||||
)
|
9
goctl_template/model/insert.tpl
Normal file
9
goctl_template/model/insert.tpl
Normal file
@ -0,0 +1,9 @@
|
||||
func (m *default{{.upperStartCamelObject}}Model) Insert(ctx context.Context, data *{{.upperStartCamelObject}}) (sql.Result,error) {
|
||||
{{if .withCache}}{{.keys}}
|
||||
ret, err := m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
||||
query := fmt.Sprintf("insert into %s (%s) values ({{.expression}})", m.table, {{.lowerStartCamelObject}}RowsExpectAutoSet)
|
||||
return conn.ExecCtx(ctx, query, {{.expressionValues}})
|
||||
}, {{.keyValues}}){{else}}query := fmt.Sprintf("insert into %s (%s) values ({{.expression}})", m.table, {{.lowerStartCamelObject}}RowsExpectAutoSet)
|
||||
ret,err:=m.conn.ExecCtx(ctx, query, {{.expressionValues}}){{end}}
|
||||
return ret,err
|
||||
}
|
1
goctl_template/model/interface-delete.tpl
Normal file
1
goctl_template/model/interface-delete.tpl
Normal file
@ -0,0 +1 @@
|
||||
Delete(ctx context.Context, {{.lowerStartCamelPrimaryKey}} {{.dataType}}) error
|
1
goctl_template/model/interface-find-one-by-field.tpl
Normal file
1
goctl_template/model/interface-find-one-by-field.tpl
Normal file
@ -0,0 +1 @@
|
||||
FindOneBy{{.upperField}}(ctx context.Context, {{.in}}) (*{{.upperStartCamelObject}}, error)
|
1
goctl_template/model/interface-find-one.tpl
Normal file
1
goctl_template/model/interface-find-one.tpl
Normal file
@ -0,0 +1 @@
|
||||
FindOne(ctx context.Context, {{.lowerStartCamelPrimaryKey}} {{.dataType}}) (*{{.upperStartCamelObject}}, error)
|
1
goctl_template/model/interface-insert.tpl
Normal file
1
goctl_template/model/interface-insert.tpl
Normal file
@ -0,0 +1 @@
|
||||
Insert(ctx context.Context, data *{{.upperStartCamelObject}}) (sql.Result,error)
|
1
goctl_template/model/interface-update.tpl
Normal file
1
goctl_template/model/interface-update.tpl
Normal file
@ -0,0 +1 @@
|
||||
Update(ctx context.Context, {{if .containsIndexCache}}newData{{else}}data{{end}} *{{.upperStartCamelObject}}) error
|
13
goctl_template/model/model-gen.tpl
Normal file
13
goctl_template/model/model-gen.tpl
Normal file
@ -0,0 +1,13 @@
|
||||
// Code generated by goctl. DO NOT EDIT.
|
||||
|
||||
package {{.pkg}}
|
||||
{{.imports}}
|
||||
{{.vars}}
|
||||
{{.types}}
|
||||
{{.new}}
|
||||
{{.delete}}
|
||||
{{.find}}
|
||||
{{.insert}}
|
||||
{{.update}}
|
||||
{{.extraMethod}}
|
||||
{{.tableName}}
|
6
goctl_template/model/model-new.tpl
Normal file
6
goctl_template/model/model-new.tpl
Normal file
@ -0,0 +1,6 @@
|
||||
func new{{.upperStartCamelObject}}Model(conn sqlx.SqlConn{{if .withCache}}, c cache.CacheConf, opts ...cache.Option{{end}}) *default{{.upperStartCamelObject}}Model {
|
||||
return &default{{.upperStartCamelObject}}Model{
|
||||
{{if .withCache}}CachedConn: sqlc.NewConn(conn, c, opts...){{else}}conn:conn{{end}},
|
||||
table: {{.table}},
|
||||
}
|
||||
}
|
30
goctl_template/model/model.tpl
Normal file
30
goctl_template/model/model.tpl
Normal file
@ -0,0 +1,30 @@
|
||||
package {{.pkg}}
|
||||
{{if .withCache}}
|
||||
import (
|
||||
"github.com/zeromicro/go-zero/core/stores/cache"
|
||||
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
)
|
||||
{{else}}
|
||||
|
||||
import "github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||
{{end}}
|
||||
var _ {{.upperStartCamelObject}}Model = (*custom{{.upperStartCamelObject}}Model)(nil)
|
||||
|
||||
type (
|
||||
// {{.upperStartCamelObject}}Model is an interface to be customized, add more methods here,
|
||||
// and implement the added methods in custom{{.upperStartCamelObject}}Model.
|
||||
{{.upperStartCamelObject}}Model interface {
|
||||
{{.lowerStartCamelObject}}Model
|
||||
}
|
||||
|
||||
custom{{.upperStartCamelObject}}Model struct {
|
||||
*default{{.upperStartCamelObject}}Model
|
||||
}
|
||||
)
|
||||
|
||||
// New{{.upperStartCamelObject}}Model returns a model for the database table.
|
||||
func New{{.upperStartCamelObject}}Model(conn sqlx.SqlConn{{if .withCache}}, c cache.CacheConf, opts ...cache.Option{{end}}) {{.upperStartCamelObject}}Model {
|
||||
return &custom{{.upperStartCamelObject}}Model{
|
||||
default{{.upperStartCamelObject}}Model: new{{.upperStartCamelObject}}Model(conn{{if .withCache}}, c, opts...{{end}}),
|
||||
}
|
||||
}
|
3
goctl_template/model/table-name.tpl
Normal file
3
goctl_template/model/table-name.tpl
Normal file
@ -0,0 +1,3 @@
|
||||
func (m *default{{.upperStartCamelObject}}Model) tableName() string {
|
||||
return m.table
|
||||
}
|
1
goctl_template/model/tag.tpl
Normal file
1
goctl_template/model/tag.tpl
Normal file
@ -0,0 +1 @@
|
||||
`db:"{{.field}}"`
|
14
goctl_template/model/types.tpl
Normal file
14
goctl_template/model/types.tpl
Normal file
@ -0,0 +1,14 @@
|
||||
type (
|
||||
{{.lowerStartCamelObject}}Model interface{
|
||||
{{.method}}
|
||||
}
|
||||
|
||||
default{{.upperStartCamelObject}}Model struct {
|
||||
{{if .withCache}}sqlc.CachedConn{{else}}conn sqlx.SqlConn{{end}}
|
||||
table string
|
||||
}
|
||||
|
||||
{{.upperStartCamelObject}} struct {
|
||||
{{.fields}}
|
||||
}
|
||||
)
|
14
goctl_template/model/update.tpl
Normal file
14
goctl_template/model/update.tpl
Normal file
@ -0,0 +1,14 @@
|
||||
func (m *default{{.upperStartCamelObject}}Model) Update(ctx context.Context, {{if .containsIndexCache}}newData{{else}}data{{end}} *{{.upperStartCamelObject}}) error {
|
||||
{{if .withCache}}{{if .containsIndexCache}}data, err:=m.FindOne(ctx, newData.{{.upperStartCamelPrimaryKey}})
|
||||
if err!=nil{
|
||||
return err
|
||||
}
|
||||
|
||||
{{end}} {{.keys}}
|
||||
_, {{if .containsIndexCache}}err{{else}}err:{{end}}= m.ExecCtx(ctx, func(ctx context.Context, conn sqlx.SqlConn) (result sql.Result, err error) {
|
||||
query := fmt.Sprintf("update %s set %s where {{.originalPrimaryKey}} = {{if .postgreSql}}$1{{else}}?{{end}}", m.table, {{.lowerStartCamelObject}}RowsWithPlaceHolder)
|
||||
return conn.ExecCtx(ctx, query, {{.expressionValues}})
|
||||
}, {{.keyValues}}){{else}}query := fmt.Sprintf("update %s set %s where {{.originalPrimaryKey}} = {{if .postgreSql}}$1{{else}}?{{end}}", m.table, {{.lowerStartCamelObject}}RowsWithPlaceHolder)
|
||||
_,err:=m.conn.ExecCtx(ctx, query, {{.expressionValues}}){{end}}
|
||||
return err
|
||||
}
|
8
goctl_template/model/var.tpl
Normal file
8
goctl_template/model/var.tpl
Normal file
@ -0,0 +1,8 @@
|
||||
var (
|
||||
{{.lowerStartCamelObject}}FieldNames = builder.RawFieldNames(&{{.upperStartCamelObject}}{}{{if .postgreSql}}, true{{end}})
|
||||
{{.lowerStartCamelObject}}Rows = strings.Join({{.lowerStartCamelObject}}FieldNames, ",")
|
||||
{{.lowerStartCamelObject}}RowsExpectAutoSet = {{if .postgreSql}}strings.Join(stringx.Remove({{.lowerStartCamelObject}}FieldNames, {{if .autoIncrement}}"{{.originalPrimaryKey}}", {{end}} {{.ignoreColumns}}), ","){{else}}strings.Join(stringx.Remove({{.lowerStartCamelObject}}FieldNames, {{if .autoIncrement}}"{{.originalPrimaryKey}}", {{end}} {{.ignoreColumns}}), ","){{end}}
|
||||
{{.lowerStartCamelObject}}RowsWithPlaceHolder = {{if .postgreSql}}builder.PostgreSqlJoin(stringx.Remove({{.lowerStartCamelObject}}FieldNames, "{{.originalPrimaryKey}}", {{.ignoreColumns}})){{else}}strings.Join(stringx.Remove({{.lowerStartCamelObject}}FieldNames, "{{.originalPrimaryKey}}", {{.ignoreColumns}}), "=?,") + "=?"{{end}}
|
||||
|
||||
{{if .withCache}}{{.cacheKeys}}{{end}}
|
||||
)
|
12
goctl_template/mongo/err.tpl
Normal file
12
goctl_template/mongo/err.tpl
Normal file
@ -0,0 +1,12 @@
|
||||
package gmodel
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/stores/mon"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrNotFound = mon.ErrNotFound
|
||||
ErrInvalidObjectId = errors.New("invalid objectId")
|
||||
)
|
78
goctl_template/mongo/model.tpl
Normal file
78
goctl_template/mongo/model.tpl
Normal file
@ -0,0 +1,78 @@
|
||||
// Code generated by goctl. DO NOT EDIT.
|
||||
package gmodel
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
{{if .Cache}}"github.com/zeromicro/go-zero/core/stores/monc"{{else}}"github.com/zeromicro/go-zero/core/stores/mon"{{end}}
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
)
|
||||
|
||||
{{if .Cache}}var prefix{{.Type}}CacheKey = "cache:{{.lowerType}}:"{{end}}
|
||||
|
||||
type {{.lowerType}}Model interface{
|
||||
Insert(ctx context.Context,data *{{.Type}}) error
|
||||
FindOne(ctx context.Context,id string) (*{{.Type}}, error)
|
||||
Update(ctx context.Context,data *{{.Type}}) (*mongo.UpdateResult, error)
|
||||
Delete(ctx context.Context,id string) (int64, error)
|
||||
}
|
||||
|
||||
type default{{.Type}}Model struct {
|
||||
conn {{if .Cache}}*monc.Model{{else}}*mon.Model{{end}}
|
||||
}
|
||||
|
||||
func newDefault{{.Type}}Model(conn {{if .Cache}}*monc.Model{{else}}*mon.Model{{end}}) *default{{.Type}}Model {
|
||||
return &default{{.Type}}Model{conn: conn}
|
||||
}
|
||||
|
||||
|
||||
func (m *default{{.Type}}Model) Insert(ctx context.Context, data *{{.Type}}) error {
|
||||
if data.ID.IsZero() {
|
||||
data.ID = primitive.NewObjectID()
|
||||
data.CreateAt = time.Now()
|
||||
data.UpdateAt = time.Now()
|
||||
}
|
||||
|
||||
{{if .Cache}}key := prefix{{.Type}}CacheKey + data.ID.Hex(){{end}}
|
||||
_, err := m.conn.InsertOne(ctx, {{if .Cache}}key, {{end}} data)
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *default{{.Type}}Model) FindOne(ctx context.Context, id string) (*{{.Type}}, error) {
|
||||
oid, err := primitive.ObjectIDFromHex(id)
|
||||
if err != nil {
|
||||
return nil, ErrInvalidObjectId
|
||||
}
|
||||
|
||||
var data {{.Type}}
|
||||
{{if .Cache}}key := prefix{{.Type}}CacheKey + id{{end}}
|
||||
err = m.conn.FindOne(ctx, {{if .Cache}}key, {{end}}&data, bson.M{"_id": oid})
|
||||
switch err {
|
||||
case nil:
|
||||
return &data, nil
|
||||
case {{if .Cache}}monc{{else}}mon{{end}}.ErrNotFound:
|
||||
return nil, ErrNotFound
|
||||
default:
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
func (m *default{{.Type}}Model) Update(ctx context.Context, data *{{.Type}}) (*mongo.UpdateResult, error) {
|
||||
data.UpdateAt = time.Now()
|
||||
{{if .Cache}}key := prefix{{.Type}}CacheKey + data.ID.Hex(){{end}}
|
||||
res, err := m.conn.UpdateOne(ctx, {{if .Cache}}key, {{end}}bson.M{"_id": data.ID}, bson.M{"$set": data})
|
||||
return res, err
|
||||
}
|
||||
|
||||
func (m *default{{.Type}}Model) Delete(ctx context.Context, id string) (int64, error) {
|
||||
oid, err := primitive.ObjectIDFromHex(id)
|
||||
if err != nil {
|
||||
return 0, ErrInvalidObjectId
|
||||
}
|
||||
{{if .Cache}}key := prefix{{.Type}}CacheKey +id{{end}}
|
||||
res, err := m.conn.DeleteOne(ctx, {{if .Cache}}key, {{end}}bson.M{"_id": oid})
|
||||
return res, err
|
||||
}
|
38
goctl_template/mongo/model_custom.tpl
Normal file
38
goctl_template/mongo/model_custom.tpl
Normal file
@ -0,0 +1,38 @@
|
||||
package gmodel
|
||||
|
||||
{{if .Cache}}import (
|
||||
"github.com/zeromicro/go-zero/core/stores/cache"
|
||||
"github.com/zeromicro/go-zero/core/stores/monc"
|
||||
){{else}}import "github.com/zeromicro/go-zero/core/stores/mon"{{end}}
|
||||
|
||||
{{if .Easy}}
|
||||
const {{.Type}}CollectionName = "{{.snakeType}}"
|
||||
{{end}}
|
||||
|
||||
var _ {{.Type}}Model = (*custom{{.Type}}Model)(nil)
|
||||
|
||||
type (
|
||||
// {{.Type}}Model is an interface to be customized, add more methods here,
|
||||
// and implement the added methods in custom{{.Type}}Model.
|
||||
{{.Type}}Model interface {
|
||||
{{.lowerType}}Model
|
||||
}
|
||||
|
||||
custom{{.Type}}Model struct {
|
||||
*default{{.Type}}Model
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
// New{{.Type}}Model returns a model for the mongo.
|
||||
{{if .Easy}}func New{{.Type}}Model(url, db string{{if .Cache}}, c cache.CacheConf{{end}}) {{.Type}}Model {
|
||||
conn := {{if .Cache}}monc{{else}}mon{{end}}.MustNewModel(url, db, {{.Type}}CollectionName{{if .Cache}}, c{{end}})
|
||||
return &custom{{.Type}}Model{
|
||||
default{{.Type}}Model: newDefault{{.Type}}Model(conn),
|
||||
}
|
||||
}{{else}}func New{{.Type}}Model(url, db, collection string{{if .Cache}}, c cache.CacheConf{{end}}) {{.Type}}Model {
|
||||
conn := {{if .Cache}}monc{{else}}mon{{end}}.MustNewModel(url, db, collection{{if .Cache}}, c{{end}})
|
||||
return &custom{{.Type}}Model{
|
||||
default{{.Type}}Model: newDefault{{.Type}}Model(conn),
|
||||
}
|
||||
}{{end}}
|
14
goctl_template/mongo/model_types.tpl
Normal file
14
goctl_template/mongo/model_types.tpl
Normal file
@ -0,0 +1,14 @@
|
||||
package gmodel
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
type {{.Type}} struct {
|
||||
ID primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"`
|
||||
// TODO: Fill your own fields
|
||||
UpdateAt time.Time `bson:"updateAt,omitempty" json:"updateAt,omitempty"`
|
||||
CreateAt time.Time `bson:"createAt,omitempty" json:"createAt,omitempty"`
|
||||
}
|
12
goctl_template/newapi/newtemplate.tpl
Normal file
12
goctl_template/newapi/newtemplate.tpl
Normal file
@ -0,0 +1,12 @@
|
||||
type Request {
|
||||
Name string `path:"name,options=you|me"`
|
||||
}
|
||||
|
||||
type Response {
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
service {{.name}}-api {
|
||||
@handler {{.handler}}Handler
|
||||
get /from/:name(Request) returns (Response)
|
||||
}
|
33
goctl_template/rpc/call.tpl
Normal file
33
goctl_template/rpc/call.tpl
Normal file
@ -0,0 +1,33 @@
|
||||
{{.head}}
|
||||
|
||||
package {{.filePackage}}
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
{{.pbPackage}}
|
||||
{{if ne .pbPackage .protoGoPackage}}{{.protoGoPackage}}{{end}}
|
||||
|
||||
"github.com/zeromicro/go-zero/zrpc"
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
type (
|
||||
{{.alias}}
|
||||
|
||||
{{.serviceName}} interface {
|
||||
{{.interface}}
|
||||
}
|
||||
|
||||
default{{.serviceName}} struct {
|
||||
cli zrpc.Client
|
||||
}
|
||||
)
|
||||
|
||||
func New{{.serviceName}}(cli zrpc.Client) {{.serviceName}} {
|
||||
return &default{{.serviceName}}{
|
||||
cli: cli,
|
||||
}
|
||||
}
|
||||
|
||||
{{.functions}}
|
7
goctl_template/rpc/config.tpl
Normal file
7
goctl_template/rpc/config.tpl
Normal file
@ -0,0 +1,7 @@
|
||||
package config
|
||||
|
||||
import "github.com/zeromicro/go-zero/zrpc"
|
||||
|
||||
type Config struct {
|
||||
zrpc.RpcServerConf
|
||||
}
|
6
goctl_template/rpc/etc.tpl
Normal file
6
goctl_template/rpc/etc.tpl
Normal file
@ -0,0 +1,6 @@
|
||||
Name: {{.serviceName}}.rpc
|
||||
ListenOn: 0.0.0.0:8080
|
||||
Etcd:
|
||||
Hosts:
|
||||
- 127.0.0.1:2379
|
||||
Key: {{.serviceName}}.rpc
|
6
goctl_template/rpc/logic-func.tpl
Normal file
6
goctl_template/rpc/logic-func.tpl
Normal file
@ -0,0 +1,6 @@
|
||||
{{if .hasComment}}{{.comment}}{{end}}
|
||||
func (l *{{.logicName}}) {{.method}} ({{if .hasReq}}in {{.request}}{{if .stream}},stream {{.streamBody}}{{end}}{{else}}stream {{.streamBody}}{{end}}) ({{if .hasReply}}{{.response}},{{end}} error) {
|
||||
// todo: add your logic here and delete this line
|
||||
|
||||
return {{if .hasReply}}&{{.responseType}}{},{{end}} nil
|
||||
}
|
24
goctl_template/rpc/logic.tpl
Normal file
24
goctl_template/rpc/logic.tpl
Normal file
@ -0,0 +1,24 @@
|
||||
package {{.packageName}}
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
{{.imports}}
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
)
|
||||
|
||||
type {{.logicName}} struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func New{{.logicName}}(ctx context.Context,svcCtx *svc.ServiceContext) *{{.logicName}} {
|
||||
return &{{.logicName}}{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
{{.functions}}
|
38
goctl_template/rpc/main.tpl
Normal file
38
goctl_template/rpc/main.tpl
Normal file
@ -0,0 +1,38 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
|
||||
{{.imports}}
|
||||
|
||||
"github.com/zeromicro/go-zero/core/conf"
|
||||
"github.com/zeromicro/go-zero/core/service"
|
||||
"github.com/zeromicro/go-zero/zrpc"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/reflection"
|
||||
)
|
||||
|
||||
var configFile = flag.String("f", "etc/{{.serviceName}}.yaml", "the config file")
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
var c config.Config
|
||||
fsconfig.StartNacosConfig(*configFile, &c, nil)
|
||||
|
||||
c.Timeout = int64(time.Second * 15)
|
||||
ctx := svc.NewServiceContext(c)
|
||||
|
||||
s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
|
||||
{{range .serviceNames}} {{.Pkg}}.Register{{.Service}}Server(grpcServer, {{.ServerPkg}}.New{{.Service}}Server(ctx))
|
||||
{{end}}
|
||||
if c.Mode == service.DevMode || c.Mode == service.TestMode {
|
||||
reflection.Register(grpcServer)
|
||||
}
|
||||
})
|
||||
defer s.Stop()
|
||||
|
||||
fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
|
||||
s.Start()
|
||||
}
|
6
goctl_template/rpc/server-func.tpl
Normal file
6
goctl_template/rpc/server-func.tpl
Normal file
@ -0,0 +1,6 @@
|
||||
|
||||
{{if .hasComment}}{{.comment}}{{end}}
|
||||
func (s *{{.server}}Server) {{.method}} ({{if .notStream}}ctx context.Context,{{if .hasReq}} in {{.request}}{{end}}{{else}}{{if .hasReq}} in {{.request}},{{end}}stream {{.streamBody}}{{end}}) ({{if .notStream}}{{.response}},{{end}}error) {
|
||||
l := {{.logicPkg}}.New{{.logicName}}({{if .notStream}}ctx,{{else}}stream.Context(),{{end}}s.svcCtx)
|
||||
return l.{{.method}}({{if .hasReq}}in{{if .stream}} ,stream{{end}}{{else}}{{if .stream}}stream{{end}}{{end}})
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user