stationsHistory.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. import { Elysia } from 'elysia'
  2. import { Eta } from "eta"
  3. const eta = new Eta({ views: "./templates" })
  4. import Auth from '../../../utils/auth';
  5. import Meteostanice from '../../../utils/meteostanice'
  6. export default (langName, lang) => new Elysia({ prefix: "/:station/history" })
  7. .get('/', async ({ cookie, redirect, set, params: { station } }) => {
  8. const token = cookie.session.value
  9. const session = await Auth.getSession(token)
  10. if (!session) {
  11. return redirect(`/${langName === "sk" ? `` : `${langName}/`}auth?error=loginNeeded`)
  12. }
  13. const user = Auth.getUser(session.email)
  14. if (!station) {
  15. set.headers['content-type'] = 'text/html; charset=utf8'
  16. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  17. }
  18. const meteostanica = Meteostanice.get(session.email, station)
  19. if (!meteostanica) {
  20. set.headers['content-type'] = 'text/html; charset=utf8'
  21. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  22. }
  23. set.headers['content-type'] = 'text/html; charset=utf8'
  24. return eta.render(`${langName}/panel/stations/history/index`, { lang, meteostanica, user })
  25. })
  26. .get(`/:property`, async ({ cookie, redirect, set, params: { station, property }, query: { day, month, year } }) => {
  27. const token = cookie.session.value
  28. const session = await Auth.getSession(token)
  29. if (!session) {
  30. return redirect(`/${langName === "sk" ? `` : `${langName}/`}auth?error=loginNeeded`)
  31. }
  32. const user = Auth.getUser(session.email)
  33. if (!station) {
  34. set.headers['content-type'] = 'text/html; charset=utf8'
  35. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  36. }
  37. const meteostanica = Meteostanice.get(session.email, station)
  38. if (!meteostanica) {
  39. set.headers['content-type'] = 'text/html; charset=utf8'
  40. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  41. }
  42. const dateMap = Meteostanice.getDateMap(station)
  43. const years = Object.keys(dateMap)
  44. const selectedYear = years.find(i => i === year) ?? years[years.length - 1]
  45. const months = Object.keys(dateMap[selectedYear])
  46. const selectedMonth = months.find(i => i === month) ?? months[months.length - 1]
  47. const days = dateMap[selectedYear][selectedMonth]
  48. const selectedDay = days.find(i => i === day) ?? days[days.length - 1]
  49. const data = Meteostanice.getDataPropertyDaily(station, property, `${selectedYear}-${selectedMonth}-${selectedDay}`)
  50. if (!data) {
  51. set.headers['content-type'] = 'text/html; charset=utf8'
  52. return eta.render(`${langName}/panel/stations/history/notFound`, { lang, user, property })
  53. }
  54. set.headers['content-type'] = 'text/html; charset=utf8'
  55. return eta.render(`${langName}/panel/stations/history/property`, { lang, user, selected: { day: selectedDay, month: selectedMonth, year: selectedYear }, dateMap: { years, months, days, raw: dateMap }, type: `daily`, property, meteostanica, data })
  56. })
  57. .get(`/:property/daily`, async ({ cookie, redirect, set, params: { station, property }, query: { day, month, year } }) => {
  58. const token = cookie.session.value
  59. const session = await Auth.getSession(token)
  60. if (!session) {
  61. return redirect(`/${langName === "sk" ? `` : `${langName}/`}auth?error=loginNeeded`)
  62. }
  63. const user = Auth.getUser(session.email)
  64. if (!station) {
  65. set.headers['content-type'] = 'text/html; charset=utf8'
  66. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  67. }
  68. const meteostanica = Meteostanice.get(session.email, station)
  69. if (!meteostanica) {
  70. set.headers['content-type'] = 'text/html; charset=utf8'
  71. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  72. }
  73. const dateMap = Meteostanice.getDateMap(station)
  74. const years = Object.keys(dateMap)
  75. const selectedYear = years.find(i => i === year) ?? years[years.length - 1]
  76. const months = Object.keys(dateMap[selectedYear])
  77. const selectedMonth = months.find(i => i === month) ?? months[months.length - 1]
  78. const days = dateMap[selectedYear][selectedMonth]
  79. const selectedDay = days.find(i => i === day) ?? days[days.length - 1]
  80. const data = Meteostanice.getDataPropertyDaily(station, property, `${selectedYear}-${selectedMonth}-${selectedDay}`)
  81. if (!data) {
  82. set.headers['content-type'] = 'text/html; charset=utf8'
  83. return eta.render(`${langName}/panel/stations/history/notFound`, { lang, user, property })
  84. }
  85. set.headers['content-type'] = 'text/html; charset=utf8'
  86. return eta.render(`${langName}/panel/stations/history/property`, { lang, user, selected: { day: selectedDay, month: selectedMonth, year: selectedYear }, dateMap: { years, months, days, raw: dateMap }, type: `daily`, property, meteostanica, data })
  87. })
  88. .get(`/:property/monthly`, async ({ cookie, redirect, set, params: { station, property }, query: { month, year } }) => {
  89. const token = cookie.session.value
  90. const session = await Auth.getSession(token)
  91. if (!session) {
  92. return redirect(`/${langName === "sk" ? `` : `${langName}/`}auth?error=loginNeeded`)
  93. }
  94. const user = Auth.getUser(session.email)
  95. if (!station) {
  96. set.headers['content-type'] = 'text/html; charset=utf8'
  97. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  98. }
  99. const meteostanica = Meteostanice.get(session.email, station)
  100. if (!meteostanica) {
  101. set.headers['content-type'] = 'text/html; charset=utf8'
  102. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  103. }
  104. const dateMap = Meteostanice.getDateMap(station)
  105. const years = Object.keys(dateMap)
  106. const selectedYear = years.find(i => i === year) ?? years[years.length - 1]
  107. const months = Object.keys(dateMap[selectedYear])
  108. const selectedMonth = months.find(i => i === month) ?? months[months.length - 1]
  109. const data = Meteostanice.getDataPropertyMonthly(station, property, `${selectedYear}-${selectedMonth}`)
  110. if (!data) {
  111. set.headers['content-type'] = 'text/html; charset=utf8'
  112. return eta.render(`${langName}/panel/stations/history/notFound`, { lang, user, property })
  113. }
  114. set.headers['content-type'] = 'text/html; charset=utf8'
  115. return eta.render(`${langName}/panel/stations/history/property`, { lang, user, selected: { month: selectedMonth, year: selectedYear }, dateMap: { years, months, raw: dateMap }, type: `monthly`, property, meteostanica, data })
  116. })
  117. .get(`/:property/yearly`, async ({ cookie, redirect, set, params: { station, property }, query: { year } }) => {
  118. const token = cookie.session.value
  119. const session = await Auth.getSession(token)
  120. if (!session) {
  121. return redirect(`/${langName === "sk" ? `` : `${langName}/`}auth?error=loginNeeded`)
  122. }
  123. const user = Auth.getUser(session.email)
  124. if (!station) {
  125. set.headers['content-type'] = 'text/html; charset=utf8'
  126. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  127. }
  128. const meteostanica = Meteostanice.get(session.email, station)
  129. if (!meteostanica) {
  130. set.headers['content-type'] = 'text/html; charset=utf8'
  131. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  132. }
  133. const dateMap = Meteostanice.getDateMap(station)
  134. const years = Object.keys(dateMap)
  135. const selectedYear = years.find(i => i === year) ?? years[years.length - 1]
  136. const data = Meteostanice.getDataPropertyYearly(station, property, selectedYear)
  137. if (!data) {
  138. set.headers['content-type'] = 'text/html; charset=utf8'
  139. return eta.render(`${langName}/panel/stations/history/notFound`, { lang, user, property })
  140. }
  141. set.headers['content-type'] = 'text/html; charset=utf8'
  142. return eta.render(`${langName}/panel/stations/history/property`, { lang, user, selected: { year: selectedYear }, dateMap: { years, raw: dateMap }, type: `yearly`, property, meteostanica, data })
  143. })
  144. .get(`/:property/allTime`, async ({ cookie, redirect, set, params: { station, property } }) => {
  145. const token = cookie.session.value
  146. const session = await Auth.getSession(token)
  147. if (!session) {
  148. return redirect(`/${langName === "sk" ? `` : `${langName}/`}auth?error=loginNeeded`)
  149. }
  150. const user = Auth.getUser(session.email)
  151. if (!station) {
  152. set.headers['content-type'] = 'text/html; charset=utf8'
  153. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  154. }
  155. const meteostanica = Meteostanice.get(session.email, station)
  156. if (!meteostanica) {
  157. set.headers['content-type'] = 'text/html; charset=utf8'
  158. return eta.render(`${langName}/panel/stations/notFound`, { lang, user })
  159. }
  160. const dateMap = Meteostanice.getDateMap(station)
  161. const data = Meteostanice.getDataPropertyAllTime(station, property)
  162. if (!data) {
  163. set.headers['content-type'] = 'text/html; charset=utf8'
  164. return eta.render(`${langName}/panel/stations/history/notFound`, { lang, user, property })
  165. }
  166. set.headers['content-type'] = 'text/html; charset=utf8'
  167. return eta.render(`${langName}/panel/stations/history/property`, { lang, user, dateMap: { raw: dateMap }, type: `allTime`, property, meteostanica, data })
  168. })