migrate.sql 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. DROP TABLE IF exists settings;
  2. -- Create the "settings" table
  3. CREATE TABLE settings (
  4. id UUID PRIMARY KEY DEFAULT gen_random_uuid() UNIQUE,
  5. user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
  6. field TEXT NOT NULL,
  7. value TEXT NOT NULL,
  8. updated_at TIMESTAMPTZ DEFAULT now() NOT NULL,
  9. created_at TIMESTAMPTZ DEFAULT now() NOT NULL
  10. );
  11. ALTER TABLE settings
  12. ADD CONSTRAINT unique_user_field UNIQUE (user_id, field);
  13. -- Enable Row-Level Security (RLS) on the "settings" table
  14. ALTER TABLE settings ENABLE ROW LEVEL SECURITY;
  15. -- Create a policy to allow each user to access only their data
  16. CREATE POLICY select_policy ON settings
  17. FOR SELECT
  18. USING (auth.uid() = user_id);
  19. -- Create a policy to allow each user to insert their data
  20. CREATE POLICY insert_policy ON settings
  21. FOR INSERT
  22. WITH CHECK (auth.uid() = user_id);
  23. -- Create a policy to allow each user to update only their data
  24. CREATE POLICY update_policy ON settings
  25. FOR UPDATE
  26. USING (auth.uid() = user_id);
  27. -- Create a policy to allow each user to delete only their data
  28. CREATE POLICY delete_policy ON settings
  29. FOR DELETE
  30. USING (auth.uid() = user_id);
  31. -- Add a rule to automatically update the "updated_at" column on update
  32. CREATE OR REPLACE FUNCTION update_updated_at_column()
  33. RETURNS TRIGGER AS $$
  34. BEGIN
  35. NEW.updated_at = now();
  36. RETURN NEW;
  37. END;
  38. $$ LANGUAGE plpgsql;
  39. CREATE TRIGGER update_updated_at
  40. BEFORE UPDATE ON settings
  41. FOR EACH ROW
  42. EXECUTE FUNCTION update_updated_at_column();
  43. -- csvhichupdate
  44. -- Create the csvhichupdates table
  45. CREATE TABLE csvhichupdates (
  46. id UUID PRIMARY KEY DEFAULT gen_random_uuid() UNIQUE,
  47. -- id SERIAL PRIMARY KEY, -- Auto-incrementing unique identifier
  48. filename TEXT NOT NULL, -- Filename as text
  49. updated_at TIMESTAMPTZ DEFAULT NOW() -- Timestamp with timezone, default to current time
  50. );
  51. -- Enable Realtime on the csvhichupdates table
  52. -- SELECT pg_create_logical_replication_slot('csvhichupdates_slot', 'pgoutput');
  53. -- Grant permissions for RLS
  54. ALTER TABLE csvhichupdates ENABLE ROW LEVEL SECURITY;
  55. -- Create policies to allow access for anon, service_key, and authenticated users
  56. CREATE POLICY select_policy ON csvhichupdates
  57. FOR SELECT
  58. USING (auth.role() IN ('anon', 'service_key', 'authenticated'));
  59. --create buckets
  60. INSERT INTO storage.buckets (id, name)
  61. VALUES ('csv', 'csv');
  62. INSERT INTO storage.buckets (id, name)
  63. VALUES ('csvhich', 'csvhich');
  64. INSERT INTO storage.buckets (id, name)
  65. VALUES ('csvhich_archive', 'csvhich_archive');
  66. --create bucket policies
  67. CREATE POLICY "read_csv 2492_0" ON "storage"."objects" USING (((bucket_id = 'csv'::text) OR (bucket_id = 'csvhich'::text) ));
  68. CREATE POLICY "insert_in_csv 2492_0" ON storage.objects FOR INSERT TO service_role, authenticated WITH CHECK (bucket_id = 'csv' OR bucket_id = 'csvhich' );
  69. CREATE POLICY "insert_in_csv 2492_1" ON storage.objects FOR UPDATE TO service_role, authenticated USING (bucket_id = 'csv' OR bucket_id = 'csvhich' );
  70. -- tables csv
  71. create table IF NOT EXISTS public.aclegs_csv (
  72. "leg_no" TEXT,
  73. "fn_carrier" TEXT,
  74. "fn_number" TEXT,
  75. "fn_suffix" TEXT,
  76. "day_of_origin" TEXT,
  77. "ac_owner" TEXT,
  78. "ac_subtype" TEXT,
  79. "ac_version" TEXT,
  80. "ac_registration" TEXT,
  81. "dep_ap_actual" TEXT,
  82. "dep_ap_sched" TEXT,
  83. "dep_dt_est" TEXT,
  84. "dep_sched_dt" TEXT,
  85. "arr_ap_actual" TEXT,
  86. "arr_ap_sched" TEXT,
  87. "arr_dt_est" TEXT,
  88. "arr_sched_dt" TEXT,
  89. "slot_time_actual" TEXT,
  90. "leg_type" TEXT,
  91. "status" TEXT,
  92. "employer_cockpit" TEXT,
  93. "employer_cabin" TEXT,
  94. "cycles" TEXT,
  95. "delay_code_01" TEXT,
  96. "delay_code_02" TEXT,
  97. "delay_code_03" TEXT,
  98. "delay_code_04" TEXT,
  99. "delay_time_01" TEXT,
  100. "delay_time_02" TEXT,
  101. "delay_time_03" TEXT,
  102. "delay_time_04" TEXT,
  103. "subdelay_code_01" TEXT,
  104. "subdelay_code_02" TEXT,
  105. "subdelay_code_03" TEXT,
  106. "subdelay_code_04" TEXT,
  107. "pax_booked_c" TEXT,
  108. "pax_booked_y" TEXT,
  109. "pax_booked_trs_c" TEXT,
  110. "pax_booked_trs_y" TEXT,
  111. "pad_booked_c" TEXT,
  112. "pad_booked_y" TEXT,
  113. "offblock_dt_a" TEXT,
  114. "airborne_dt_a" TEXT,
  115. "landing_dt_a" TEXT,
  116. "onblock_dt_a" TEXT,
  117. "offblock_dt_f" TEXT,
  118. "airborne_dt_f" TEXT,
  119. "landing_dt_f" TEXT,
  120. "onblock_dt_f" TEXT,
  121. "offblock_dt_m" TEXT,
  122. "airborne_dt_m" TEXT,
  123. "landing_dt_m" TEXT,
  124. "onblock_dt_m" TEXT,
  125. "eet" TEXT,
  126. id SERIAL PRIMARY KEY
  127. );
  128. create table IF NOT EXISTS public.pnlegs_csv (
  129. date TEXT,
  130. tlc TEXT,
  131. actype TEXT,
  132. al TEXT,
  133. fnum TEXT,
  134. ddep TEXT,
  135. hdep TEXT,
  136. ddes TEXT,
  137. hdes TEXT,
  138. dep TEXT,
  139. des TEXT,
  140. label TEXT,
  141. type TEXT,
  142. id SERIAL PRIMARY KEY
  143. );
  144. create table IF NOT EXISTS public.pnlegsmois_csv (
  145. date TEXT,
  146. tlc TEXT,
  147. actype TEXT,
  148. al TEXT,
  149. fnum TEXT,
  150. ddep TEXT,
  151. hdep TEXT,
  152. ddes TEXT,
  153. hdes TEXT,
  154. dep TEXT,
  155. des TEXT,
  156. label TEXT,
  157. type TEXT,
  158. id SERIAL PRIMARY KEY
  159. );
  160. create table IF NOT EXISTS public.licences_csv (
  161. tlc TEXT,
  162. fname TEXT,
  163. mname TEXT,
  164. lname TEXT,
  165. expire TEXT,
  166. ac TEXT,
  167. college TEXT,
  168. base TEXT,
  169. id SERIAL PRIMARY KEY
  170. );
  171. CREATE OR REPLACE VIEW pnlegs_csv_clean AS
  172. select TO_DATE(DATE,'DD/MM/YYYY') as date,
  173. tlc,
  174. actype,
  175. al,
  176. fnum,
  177. TO_TIMESTAMP(ddep || COALESCE(hdep, '0000'), 'DD/MM/YYYYHH24MI') AT TIME ZONE 'UTC' as hdep,
  178. TO_TIMESTAMP(ddes || COALESCE(hdes, '0000'), 'DD/MM/YYYYHH24MI') AT TIME ZONE 'UTC' as hdes,
  179. dep,
  180. des,
  181. label,
  182. TYPE
  183. FROM pnlegs_csv;
  184. CREATE OR REPLACE VIEW aclegs_csv_clean AS
  185. SELECT
  186. fn_carrier AS al ,
  187. fn_number AS fnum ,
  188. DATE(TO_TIMESTAMP(DAY_OF_ORIGIN,'YYYY-MM-DD HH24:MI:SS') AT TIME ZONE 'UTC' ) AS date ,
  189. json_build_object('owner',ac_owner,'subtype',ac_subtype,'version',ac_version) AS ac ,
  190. ac_registration AS reg,
  191. COALESCE(dep_ap_actual,dep_ap_sched,null) AS dep ,
  192. COALESCE(arr_ap_actual,arr_ap_sched,null) AS des ,
  193. TO_TIMESTAMP(dep_sched_dt,'YYYY-MM-DD HH24:MI:SS') AT TIME ZONE 'UTC' AS hdep_sched ,
  194. TO_TIMESTAMP(arr_sched_dt,'YYYY-MM-DD HH24:MI:SS') AT TIME ZONE 'UTC' AS hdes_sched ,
  195. COALESCE(COALESCE(offblock_dt_m,offblock_dt_a,offblock_dt_f,NULL),dep_dt_est,dep_sched_dt)::timestamp AS hdep ,
  196. COALESCE(
  197. COALESCE(onblock_dt_m,onblock_dt_a,onblock_dt_f,NULL)::timestamp,
  198. (CASE
  199. WHEN COALESCE(landing_dt_m,landing_dt_a,landing_dt_f,null) IS NOT NULL THEN
  200. COALESCE(landing_dt_m,landing_dt_a,landing_dt_f,NULL)::timestamp+taxi_in(arr_ap_actual)::INTERVAL
  201. WHEN COALESCE(airborne_dt_m,airborne_dt_a,airborne_dt_f,null) IS NOT NULL AND EET IS NOT NULL THEN
  202. COALESCE(airborne_dt_m,airborne_dt_a,airborne_dt_f,NULL)::TIMESTAMP+(EET||' minutes')::INTERVAL +taxi_in(arr_ap_actual)::INTERVAL
  203. WHEN COALESCE(offblock_dt_m,offblock_dt_a,offblock_dt_f,null) IS NOT NULL AND EET IS NOT NULL THEN
  204. COALESCE(offblock_dt_m,offblock_dt_a,offblock_dt_f,NULL)::timestamp+taxi_out(dep_ap_actual)::INTERVAL+(EET||' minutes')::INTERVAL +taxi_in(arr_ap_actual)::INTERVAL
  205. WHEN COALESCE(offblock_dt_m,offblock_dt_a,offblock_dt_f,null) IS NOT NULL AND EET IS NULL THEN
  206. COALESCE(offblock_dt_m,offblock_dt_a,offblock_dt_f,NULL)::timestamp+(arr_sched_dt::TIMESTAMP-dep_sched_dt::TIMESTAMP)
  207. WHEN ( (dep_dt_est IS NOT NULL) AND (EET IS NOT NULL) ) THEN
  208. dep_dt_est::TIMESTAMP + taxi_out(dep_ap_actual)::INTERVAL + (EET||' minutes')::INTERVAL + taxi_in(arr_ap_actual)::INTERVAL
  209. WHEN ( (dep_dt_est IS NOT NULL) AND (EET IS NULL) ) THEN
  210. dep_dt_est::TIMESTAMP + (arr_sched_dt::TIMESTAMP-dep_sched_dt::TIMESTAMP)
  211. WHEN ( (EET IS NOT NULL) ) THEN
  212. dep_sched_dt::TIMESTAMP + taxi_out(dep_ap_actual)::INTERVAL + (EET||' minutes')::INTERVAL + taxi_in(arr_ap_actual)::INTERVAL
  213. ELSE
  214. arr_sched_dt::timestamp
  215. END)::timestamp
  216. )::timestamp
  217. AS hdes ,
  218. nullif(array_remove(ARRAY [delay_code_01 || '|' || subdelay_code_01 || '|' || delay_time_01,delay_code_02 || '|' || subdelay_code_02 || '|' || delay_time_02,delay_code_03 || '|' || subdelay_code_03 || '|' || delay_time_03,delay_code_04 || '|' || subdelay_code_04 || '|' || delay_time_04],'||'),'{}') AS delay ,
  219. pax_booked_c AS pax_c ,
  220. pax_booked_y AS pax_y ,
  221. COALESCE(offblock_dt_m,offblock_dt_a,offblock_dt_f,NULL)::timestamp AS block_off ,
  222. COALESCE(airborne_dt_m,airborne_dt_a,airborne_dt_f,null)::timestamp AS block_air ,
  223. COALESCE(landing_dt_m,landing_dt_a,landing_dt_f,null)::timestamp AS block_ldg ,
  224. COALESCE(onblock_dt_m,onblock_dt_a,onblock_dt_f,null)::timestamp AS block_on ,
  225. slot_time_actual::timestamp AS ctot ,
  226. '1 minutes'::interval * eet::integer AS EET ,
  227. CASE
  228. WHEN COALESCE(onblock_dt_m,onblock_dt_a,onblock_dt_f,null) IS NOT NULL THEN 'ARRIVED'
  229. WHEN COALESCE(landing_dt_m,landing_dt_a,landing_dt_f,null) IS NOT NULL THEN 'LANDED'
  230. WHEN COALESCE(airborne_dt_m,airborne_dt_a,airborne_dt_f,null) IS NOT NULL THEN 'AIRBORN'
  231. WHEN COALESCE(offblock_dt_m,offblock_dt_a,offblock_dt_f,null) IS NOT NULL THEN 'DEPARTED'
  232. WHEN ( (dep_dt_est IS NOT NULL) AND (dep_sched_dt <> dep_dt_est) ) THEN 'DELAYED'
  233. else
  234. 'SCHED'
  235. END
  236. AS status ,
  237. json_build_object('FN_CARRIER',FN_CARRIER,'FN_NUMBER',FN_NUMBER,'DAY_OF_ORIGIN',DAY_OF_ORIGIN,'AC_OWNER',AC_OWNER,'AC_SUBTYPE',AC_SUBTYPE,'AC_VERSION',AC_VERSION,'AC_REGISTRATION',AC_REGISTRATION,'DEP_AP_ACTUAL',DEP_AP_ACTUAL,'DEP_AP_SCHED',DEP_AP_SCHED,'DEP_DT_EST',DEP_DT_EST,'DEP_SCHED_DT',DEP_SCHED_DT,'ARR_AP_ACTUAL',ARR_AP_ACTUAL,'ARR_AP_SCHED',ARR_AP_SCHED,'ARR_DT_EST',ARR_DT_EST,'ARR_SCHED_DT',ARR_SCHED_DT,'SLOT_TIME_ACTUAL',SLOT_TIME_ACTUAL,'LEG_TYPE',LEG_TYPE,'EMPLOYER_COCKPIT',EMPLOYER_COCKPIT,'EMPLOYER_CABIN',EMPLOYER_CABIN,'DELAY_CODE_01',DELAY_CODE_01,'DELAY_CODE_02',DELAY_CODE_02,'DELAY_CODE_03',DELAY_CODE_03,'DELAY_CODE_04',DELAY_CODE_04,'DELAY_TIME_01',DELAY_TIME_01,'DELAY_TIME_02',DELAY_TIME_02,'DELAY_TIME_03',DELAY_TIME_03,'DELAY_TIME_04',DELAY_TIME_04,'SUBDELAY_CODE_01',SUBDELAY_CODE_01,'SUBDELAY_CODE_02',SUBDELAY_CODE_02,'SUBDELAY_CODE_03',SUBDELAY_CODE_03,'SUBDELAY_CODE_04',SUBDELAY_CODE_04,'PAX_BOOKED_C',PAX_BOOKED_C,'PAX_BOOKED_Y',PAX_BOOKED_Y,'OFFBLOCK_DT_A',OFFBLOCK_DT_A,'AIRBORNE_DT_A',AIRBORNE_DT_A,'LANDING_DT_A',LANDING_DT_A,'ONBLOCK_DT_A',ONBLOCK_DT_A,'OFFBLOCK_DT_F',OFFBLOCK_DT_F,'AIRBORNE_DT_F',AIRBORNE_DT_F,'LANDING_DT_F',LANDING_DT_F,'ONBLOCK_DT_F',ONBLOCK_DT_F,'OFFBLOCK_DT_M',OFFBLOCK_DT_M,'AIRBORNE_DT_M',AIRBORNE_DT_M,'LANDING_DT_M',LANDING_DT_M,'ONBLOCK_DT_M',ONBLOCK_DT_M,'EET',EET) AS DATA
  238. FROM aclegs_csv;