From 0c4c35ce1d3e41bfb80e5d1c44c8b15edc861124 Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Wed, 5 Feb 2025 17:35:24 +0100 Subject: [PATCH] Fixed the view create bug Signed-off-by: Martin Weise <martin.weise@tuwien.ac.at> --- .../target/create-event-listener.jar | Bin 10140 -> 10139 bytes dbrepo-ui/components/TimeDrift.vue | 44 ------------------ dbrepo-ui/components/subset/Builder.vue | 31 +++++++----- dbrepo-ui/components/subset/Results.vue | 17 ------- dbrepo-ui/composables/database-service.ts | 21 --------- dbrepo-ui/composables/query-service.ts | 6 +-- dbrepo-ui/nuxt.config.ts | 6 +++ .../[database_id]/view/[view_id]/data.vue | 5 +- 8 files changed, 29 insertions(+), 101 deletions(-) delete mode 100644 dbrepo-ui/components/TimeDrift.vue diff --git a/dbrepo-auth-service/listeners/target/create-event-listener.jar b/dbrepo-auth-service/listeners/target/create-event-listener.jar index 76b1ad02357c308cc312c99ea8bf0e3c3b2e8b62..26cb91c37666c966f6382d35feaaf9f5da5c7f8c 100644 GIT binary patch delta 970 zcmbQ^Kigk8z?+#xgn@yBgP|bYHA*%wO}c2Juwwn`yu%6td!j$te_(c)Y*F?oda~TD z75tjDcdl>93&@c<cq{YYz9X5jrmJqrHMGi>wMD)=FiXhxqj<?Z6SH*XLP2-$c83)| zA5GY7{o=wV@8xF8oR6z1St^OGU1<{kQn&ujLaytZEUes?nQ&=@Jo0bTIx|yG=A9Iu zZtf2E>yoX{>rXUR-<fXbA9Z)foV8-T-`7}dFwH9C6>&HJy6%va?%%WJY=7M}mf1h~ zfAZ&^eP?gBWjrs|{Qi5d!BX)n?|7pay%;=`z1io*tX@(2;;HAnp2Z0zQqx3B3_ipr zCLZ8xpD)XK&90*Ejl;PG*D^1?f4`9L{9e;-wXeT3+lel0ubK0)p8w6_RX;av6chbg zx&GCks{!^)cs?)FZOO{od9-<z)D6By4$qap_8-{DJ?rq{%2b<$uH{;Lj-8v6VVd$% z<n)?3=Z-Dj*=FK6M}6|iJu{{X^KQ=RIq9Qbu<QGqRr=5CE-Rc=JY`kU@y^>@Uxnk> z1)-jv#pR%g;9_9lU;stL<V}n!O!?uHZ!qdH6@*XbV3G$>noMdSDv(JVMAb2wf~c)b z-XN7s%;!MVCFUNcg7D1=EOVJa^nbQb93c8L|1?36;%>#+AWB1N3MV|eCm&U^WGV=s zq%6a@WU{QXgnWLuYZL<#5Q4J>7~VRbo*bgAXbjQ~7iM5!V1{!*YJM{^FeH}f2Y53w zi7>-FHF<@yjEoEuSf-@3JTo;9UBLro873E|$%#zDJSZAvRb&_oCpW6dXrr2l>P&qU zC#;y<sA2~Sk%KBSj9(|;Q!xko%jY-CDm?}U1|0?l1}C@%28Jb#M<<)81}cF3_5V}z zZhs~QhHI=03`Qtwf>|aPu$WA~smcRZ7%=hHj{_VG41EF&3}Pq>Ke0{bXP1~PtHuKg zZf!Lgrf2+<3s}@A7pNI9&Y8SW%@rj6LQRILPH}P{ll0^VOk$JIDDpu)h{%w_9wFzF Z85kHgGB7X*qgWw5xj<cwZM_mm5CHh2L9PG* delta 1017 zcmbR3KgVA<z?+#xgn@yBgW-m;YZM1_=Z4~m!ix0=gPIKl_8K3yf5JYgL1FEk9NUcL zuY9)No4(<Ok7CKB)?53{mv$u|59IeWyE(m9KfjpYE&N5t{spDGOf9=zMc9hF9U?y6 zR80SVVR7R1u-uaVX{t)LN@;V~dGFKM{wK5jRQ&9ggNB!;hB@pLs=pSJeD2htN9&$m zxY%aBWp7wTU%kvu{kBWbJ%hKIrFTcZmeJ<RX;t0L%GJC(Ej+oo?cX!&<~n7O>Gn_l zpWGRzTf9y2*3Otyf9v#1p0boy_qsI*IRwo<)uen|^OcTO<s|jP2c+lzOl7p~sWFep zFnIhh-F?s2{yur@3C0<xbY#ErU-<D{Z|lo@ZGSt?x4c)}KjT9^|C`BKKlYfiiSkx1 zpY<p7vcZxspO<O3WJ&Kl+Po_IMqlFx&y{Wa4{ZEC>+j*pwXzExtF`tVikqKdxb_s+ zri@ufJf)6C3aWaV?Cn~-#-Wt+vc+6A;i)dmtFxo)Ex*rZ^Arm-yXU+mK8j5-?n1j* zeu~5%W>8FUF)(m2Fx)Vnyn#`b>ALac>x_C#H;gB<Gs%M}4JI`Z6~LqoqH38;LDUu| zZ;(nx=5rwGB6APZ4dc!6EOVJa^gp&w93c7=|1?36;x5J6AWB_n3MV|eCm&I=1PT6E zl3`prSw>kx;kvPF6ax|vg0lq}-a4LPocxekWO9ZwPd3O5xEuom12dchQuv3Ffg!O( zKfs%jNrV~ZGgOngP&CLgfi;wrmS?8sq3N4^Us;CHb@Cr&IgndrRAd;7CO4?aXyY?o zAI0>QlN(g*Kw)%1MTY4c(_}$rt;rm!JYe7Y{AO9D$H2g#!@$7c1lPsDu%z)A^W=xj zE|V)%c@#jt{r{<Xw?7jD!!=e01|t-OAuN;gSxhG1fGP}_c<aXj4hDuk0R{#!6osGJ zCiAgNOqNmO0r^BrO@`??|KxlY^~w2a28?qjFHmy@+q8S#gCvksK-d<=fO^Hr3)M^~ mpI799`W}&gg*`&fB{MKEY-C_y5Ju4?GdW*fjctPxNDu(oN==ji diff --git a/dbrepo-ui/components/TimeDrift.vue b/dbrepo-ui/components/TimeDrift.vue deleted file mode 100644 index 2f2555f9f8..0000000000 --- a/dbrepo-ui/components/TimeDrift.vue +++ /dev/null @@ -1,44 +0,0 @@ -<template> - <v-alert - v-cloak - v-if="timestamp && offSeconds > 3" - class="banner" - border="start" - type="warning"> - {{ $t('error.data.drift') + ' ' + offSeconds + 's' }} - </v-alert> -</template> - -<script> -import { formatTimestamp, timestampsToHumanDifference } from '@/utils' - -export default { - data () { - return { - timestamp: null - } - }, - computed: { - drift () { - return this.timestampsToHumanDifference(Date.now(), this.timestamp) - }, - offSeconds () { - if (!this.timestamp) { - return null - } - return (Date.now().valueOf() - Date.parse(this.timestamp)) / 1000 - } - }, - mounted() { - const databaseService = useDatabaseService() - databaseService.getServerTime() - .then((timestamp) => { - this.timestamp = timestamp - }) - }, - methods: { - formatTimestamp, - timestampsToHumanDifference - } -} -</script> diff --git a/dbrepo-ui/components/subset/Builder.vue b/dbrepo-ui/components/subset/Builder.vue index f19c595aad..f670700f2f 100644 --- a/dbrepo-ui/components/subset/Builder.vue +++ b/dbrepo-ui/components/subset/Builder.vue @@ -31,14 +31,12 @@ :text="$t('pages.subset.subpages.create.expert.text')" /> </v-tabs> </v-toolbar> - <TimeDrift /> <v-card rounded="0" variant="flat"> <v-card-text> <v-form ref="form" - v-model="valid" @submit.prevent> <v-row v-if="isView" @@ -304,7 +302,6 @@ </template> <script> -import TimeDrift from '@/components/TimeDrift.vue' import Raw from '@/components/subset/Raw.vue' import Results from '@/components/subset/Results.vue' import { useCacheStore } from '@/stores/cache.js' @@ -314,7 +311,6 @@ export default { components: { Raw, Results, - TimeDrift }, props: { mode: { @@ -468,7 +464,7 @@ export default { if (!this.table) { return } - this.fetchTableColumns(this.table.id) + this.fetchTableColumns(this.table?.id) } }, mounted () { @@ -545,13 +541,24 @@ export default { this.view.query = this.sql const viewService = useViewService() viewService.create(this.$route.params.database_id, this.view) - .then(async (view) => { - this.resultId = view.id - this.cacheStore.reloadDatabase() - const toast = useToastInstance() - toast.success(this.$t('success.view.create')) - await this.$router.push(`/database/${this.$route.params.database_id}/view/${view.id}/data`) - this.loadingQuery = false + .then((simpleView) => { + this.resultId = simpleView.id + viewService.findOne(this.$route.params.database_id, simpleView.id) + .then(async (view) => { + this.cacheStore.setView(view) + const toast = useToastInstance() + toast.success(this.$t('success.view.create')) + await this.$router.push(`/database/${this.$route.params.database_id}/view/${view.id}/data`) + this.loadingQuery = false + }) + .catch(({code}) => { + this.loadingQuery = false + const toast = useToastInstance() + if (typeof code !== 'string') { + return + } + toast.error(this.$t(code)) + }) }) .catch(({code}) => { this.loadingQuery = false diff --git a/dbrepo-ui/components/subset/Results.vue b/dbrepo-ui/components/subset/Results.vue index 3948667518..661c7d1a3d 100644 --- a/dbrepo-ui/components/subset/Results.vue +++ b/dbrepo-ui/components/subset/Results.vue @@ -80,23 +80,6 @@ export default { } }, methods: { - executeFirstTime (parent, sql, timestamp) { - this.loading++ - const payload = { - statement: sql, - timestamp - } - const queryService = useQueryService() - queryService.execute(this.$route.params.database_id, payload, this.options.page - 1, this.options.itemsPerPage) - .then((result) => { - this.mapResults(result) - parent.resultId = result.id - this.id = result.id - }) - .finally(() => { - this.loading-- - }) - }, reExecute (id) { if (id === null) { return diff --git a/dbrepo-ui/composables/database-service.ts b/dbrepo-ui/composables/database-service.ts index 7956f7b4df..f318e07305 100644 --- a/dbrepo-ui/composables/database-service.ts +++ b/dbrepo-ui/composables/database-service.ts @@ -66,23 +66,6 @@ export const useDatabaseService = (): any => { }); } - async function getServerTime(): Promise<Date> { - const axios = useAxiosInstance(); - console.debug('find server time'); - return new Promise<Date>((resolve, reject) => { - axios.head<Date>('/api/database') - .then((response) => { - const date: Date = new Date(response.headers['Date']) - console.info(`Found ${date} server time`); - resolve(date); - }) - .catch((error) => { - console.error('Failed to find server time', error); - reject(axiosErrorToApiError(error)); - }); - }); - } - async function findOne(id: number, rawError: boolean = false): Promise<DatabaseDto | null> { const axios = useAxiosInstance(); console.debug('find database with id', id); @@ -239,16 +222,12 @@ export const useDatabaseService = (): any => { refreshTablesMetadata, refreshViewsMetadata, findOne, - findPreviewImage, - findCount, - getServerTime, updateVisibility, updateImage, updateOwner, create, databaseToOwner, databaseToContact, - databaseToJsonLd, isOwner } } diff --git a/dbrepo-ui/composables/query-service.ts b/dbrepo-ui/composables/query-service.ts index 119915de27..e314993ecd 100644 --- a/dbrepo-ui/composables/query-service.ts +++ b/dbrepo-ui/composables/query-service.ts @@ -161,12 +161,12 @@ export const useQueryService = (): any => { } } sql += ` \`${clause.params[0]}\` ${clause.params[1]} ` - const filteredType = types.filter(t => t.value === filteredColumn[0].column_type) + const filteredType = types.filter(t => t.value === filteredColumn[0].type) if (filteredType.length === 0) { return { error: true, reason: 'exists', - column: filteredColumn[0].column_type, + column: filteredColumn[0].type, raw: null, formatted: null } @@ -175,7 +175,7 @@ export const useQueryService = (): any => { return { error: true, reason: 'build', - column: filteredColumn[0].column_type, + column: filteredColumn[0].type, raw: null, formatted: null } diff --git a/dbrepo-ui/nuxt.config.ts b/dbrepo-ui/nuxt.config.ts index 31e20b310d..b3da7bd98c 100644 --- a/dbrepo-ui/nuxt.config.ts +++ b/dbrepo-ui/nuxt.config.ts @@ -16,6 +16,12 @@ if (process.env.NODE_ENV === 'development') { } process.env.VERSION = 'bun-dev' process.env.NUXT_PUBLIC_API_SERVER = api + process.env.NUXT_OIDC_PROVIDERS_KEYCLOAK_AUTHORIZATION_URL = api + '/realms/dbrepo/protocol/openid-connect/auth' + process.env.NUXT_OIDC_PROVIDERS_KEYCLOAK_LOGOUT_REDIRECT_URI = api + ':3001' + process.env.NUXT_OIDC_PROVIDERS_KEYCLOAK_LOGOUT_URL = api + '/realms/dbrepo/protocol/openid-connect/logout' + process.env.NUXT_OIDC_PROVIDERS_KEYCLOAK_REDIRECT_URI = api + ':3001/auth/keycloak/callback' + process.env.NUXT_OIDC_PROVIDERS_KEYCLOAK_TOKEN_URL = api + '/realms/dbrepo/protocol/openid-connect/token' + process.env.NUXT_OIDC_PROVIDERS_KEYCLOAK_USER_INFO_URL = api + '/realms/dbrepo/protocol/openid-connect/userinfo' } /** diff --git a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/data.vue b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/data.vue index 2b0936cba5..f732661f36 100644 --- a/dbrepo-ui/pages/database/[database_id]/view/[view_id]/data.vue +++ b/dbrepo-ui/pages/database/[database_id]/view/[view_id]/data.vue @@ -22,7 +22,6 @@ :loading="loadingData" @click="reload" /> </v-toolbar> - <TimeDrift /> <v-card tile> <QueryResults id="query-results" @@ -35,13 +34,11 @@ </template> <script> -import TimeDrift from '@/components/TimeDrift.vue' import QueryResults from '@/components/subset/Results.vue' export default { components: { - QueryResults, - TimeDrift + QueryResults }, data () { return { -- GitLab