diff --git a/dbrepo-ui/api/container.mapper.js b/dbrepo-ui/api/container.mapper.js deleted file mode 100644 index 828a5fbc931ef11047aeb82c5f2d7b2efdaa8722..0000000000000000000000000000000000000000 --- a/dbrepo-ui/api/container.mapper.js +++ /dev/null @@ -1,16 +0,0 @@ -import UserMapper from '@/api/user.mapper' -import DatabaseMapper from '@/api/database.mapper' - -class ContainerMapper { - containerToCreator (container) { - if (!container) { - return null - } - if (container.database) { - return DatabaseMapper.databaseToOwner(container.database) - } - return UserMapper.userToFullName(container.creator) - } -} - -export default new ContainerMapper() diff --git a/dbrepo-ui/api/container.service.js b/dbrepo-ui/api/container.service.js index c24ffbd9d57aebc5d31f872d982e81b60e169727..97d0fc7164efb1c783a52b60614547f17171dfe5 100644 --- a/dbrepo-ui/api/container.service.js +++ b/dbrepo-ui/api/container.service.js @@ -19,23 +19,6 @@ class ContainerService { }) } - findAllImages () { - return new Promise((resolve, reject) => { - api.get('/api/image', { headers: { Accept: 'application/json' } }) - .then((response) => { - const images = response.data - console.debug('response images', images) - resolve(images) - }) - .catch((error) => { - const { code, message } = error - console.error('Failed to load images', error) - Vue.$toast.error(`[${code}] Failed to load images: ${message}`) - reject(error) - }) - }) - } - findOne (id) { return new Promise((resolve, reject) => { api.get(`/api/container/${id}`, { headers: { Accept: 'application/json' } }) @@ -69,46 +52,6 @@ class ContainerService { }) }) } - - create (data) { - return new Promise((resolve, reject) => { - api.post('/api/container', data, { headers: { Accept: 'application/json' } }) - .then((response) => { - const container = response.data - console.debug('response container', container) - resolve(container) - }) - .catch((error) => { - const { code, message } = error - console.error('Failed to create container', error) - Vue.$toast.error(`[${code}] Failed to create container: ${message}`) - reject(error) - }) - }) - } - - modify (id, action) { - return new Promise((resolve, reject) => { - api.put(`/api/container/${id}`, { action }, { headers: { Accept: 'application/json' } }) - .then((response) => { - const container = response.data - console.debug('response container', container) - resolve(container) - }) - .catch((error) => { - const { code, message, response } = error - const { status } = response - if (status === 409) { - console.warn('Failed to modify container', error) - reject(error) - } else { - console.error('Failed to modify container', error) - Vue.$toast.error(`[${code}] Failed to modify container: ${message}`) - reject(error) - } - }) - }) - } } export default new ContainerService() diff --git a/dbrepo-ui/api/database.service.js b/dbrepo-ui/api/database.service.js index db440028953514abb7b97869dc1c21dac64a7109..241f7400317026877c7975ae77c5bfabe4927436 100644 --- a/dbrepo-ui/api/database.service.js +++ b/dbrepo-ui/api/database.service.js @@ -2,9 +2,9 @@ import Vue from 'vue' import api from '@/api' class DatabaseService { - findAll (id) { + findAll () { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database`, { headers: { Accept: 'application/json' } }) + api.get('/api/database', { headers: { Accept: 'application/json' } }) .then((response) => { const databases = response.data console.debug('response databases', databases) @@ -19,9 +19,9 @@ class DatabaseService { }) } - findOne (id, databaseId) { + findOne (databaseId) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}`, { headers: { Accept: 'application/json' } }) .then((response) => { const database = response.data console.debug('response database', database) @@ -35,9 +35,9 @@ class DatabaseService { }) } - create (id, data) { + create (data) { return new Promise((resolve, reject) => { - api.post(`/api/container/${id}/database`, data, { headers: { Accept: 'application/json' } }) + api.post('/api/database', data, { headers: { Accept: 'application/json' } }) .then((response) => { const database = response.data console.debug('response database', database) @@ -51,9 +51,9 @@ class DatabaseService { }) } - delete (id, databaseId) { + delete (databaseId) { return new Promise((resolve, reject) => { - api.delete(`/api/container/${id}/database/${databaseId}`, { headers: { Accept: 'application/json' } }) + api.delete(`/api/database/${databaseId}`, { headers: { Accept: 'application/json' } }) .then(() => resolve()) .catch((error) => { const { code, message } = error @@ -64,9 +64,9 @@ class DatabaseService { }) } - modifyVisibility (id, databaseId, isPublic) { + modifyVisibility (databaseId, isPublic) { return new Promise((resolve, reject) => { - api.put(`/api/container/${id}/database/${databaseId}/visibility`, { is_public: isPublic }, { headers: { Accept: 'application/json' } }) + api.put(`/api/database/${databaseId}/visibility`, { is_public: isPublic }, { headers: { Accept: 'application/json' } }) .then((response) => { const database = response.data console.debug('response database', database) @@ -80,9 +80,9 @@ class DatabaseService { }) } - modifyOwner (id, databaseId, username) { + modifyOwner (databaseId, username) { return new Promise((resolve, reject) => { - api.put(`/api/container/${id}/database/${databaseId}/transfer`, { username }, { headers: { Accept: 'application/json' } }) + api.put(`/api/database/${databaseId}/transfer`, { username }, { headers: { Accept: 'application/json' } }) .then((response) => { const database = response.data console.debug('response database', database) @@ -96,9 +96,9 @@ class DatabaseService { }) } - checkAccess (id, databaseId) { + checkAccess (databaseId) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/access`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/access`, { headers: { Accept: 'application/json' } }) .then((response) => { const databases = response.data console.debug('response databases', databases) @@ -116,9 +116,9 @@ class DatabaseService { }) } - modifyAccess (id, databaseId, username, type) { + modifyAccess (databaseId, username, type) { return new Promise((resolve, reject) => { - api.put(`/api/container/${id}/database/${databaseId}/access/${username}`, { type }, { headers: { Accept: 'application/json' } }) + api.put(`/api/database/${databaseId}/access/${username}`, { type }, { headers: { Accept: 'application/json' } }) .then((response) => { const database = response.data console.debug('response database', database) @@ -133,9 +133,9 @@ class DatabaseService { }) } - revokeAccess (id, databaseId, username) { + revokeAccess (databaseId, username) { return new Promise((resolve, reject) => { - api.delete(`/api/container/${id}/database/${databaseId}/access/${username}`, { headers: { Accept: 'application/json' } }) + api.delete(`/api/database/${databaseId}/access/${username}`, { headers: { Accept: 'application/json' } }) .then(() => resolve()) .catch((error) => { const { code, message } = error @@ -146,9 +146,9 @@ class DatabaseService { }) } - giveAccess (id, databaseId, username, type) { + giveAccess (databaseId, username, type) { return new Promise((resolve, reject) => { - api.post(`/api/container/${id}/database/${databaseId}/access`, { username, type }, { headers: { Accept: 'application/json' } }) + api.post(`/api/database/${databaseId}/access`, { username, type }, { headers: { Accept: 'application/json' } }) .then(() => resolve()) .catch((error) => { const { code, message } = error @@ -159,9 +159,9 @@ class DatabaseService { }) } - findAllLicenses (id) { + findAllLicenses () { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/license`, { headers: { Accept: 'application/json' } }) + api.get('/api/database/license', { headers: { Accept: 'application/json' } }) .then((response) => { const licenses = response.data console.debug('response licenses', licenses) @@ -176,9 +176,9 @@ class DatabaseService { }) } - findView (id, databaseId, viewId) { + findView (databaseId, viewId) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/view/${viewId}`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/view/${viewId}`, { headers: { Accept: 'application/json' } }) .then((response) => { const view = response.data console.debug('response view', view) @@ -193,9 +193,9 @@ class DatabaseService { }) } - createView (id, databaseId, data) { + createView (databaseId, data) { return new Promise((resolve, reject) => { - api.post(`/api/container/${id}/database/${databaseId}/view`, data, { headers: { Accept: 'application/json' } }) + api.post(`/api/database/${databaseId}/view`, data, { headers: { Accept: 'application/json' } }) .then((response) => { const view = response.data console.debug('response view', view) @@ -210,9 +210,9 @@ class DatabaseService { }) } - deleteView (id, databaseId, viewId) { + deleteView (databaseId, viewId) { return new Promise((resolve, reject) => { - api.delete(`/api/container/${id}/database/${databaseId}/view/${viewId}`, { headers: { Accept: 'application/json' } }) + api.delete(`/api/database/${databaseId}/view/${viewId}`, { headers: { Accept: 'application/json' } }) .then(() => resolve()) .catch((error) => { const { code, message } = error diff --git a/dbrepo-ui/api/query.service.js b/dbrepo-ui/api/query.service.js index db1bc16f3a4c9fd21b125a56182a0e1cc048595a..bfb9be785b24b571a9c2fb3ef9b5bb69e3a10c32 100644 --- a/dbrepo-ui/api/query.service.js +++ b/dbrepo-ui/api/query.service.js @@ -2,9 +2,9 @@ import Vue from 'vue' import api from '@/api' class QueryService { - findAll (id, databaseId, persisted) { + findAll (databaseId, persisted) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/query${persisted === null ? '' : `?persisted=${persisted}`}`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/query${persisted === null ? '' : `?persisted=${persisted}`}`, { headers: { Accept: 'application/json' } }) .then((response) => { const queries = response.data console.debug('response queries', queries) @@ -19,9 +19,9 @@ class QueryService { }) } - findOne (id, databaseId, queryId) { + findOne (databaseId, queryId) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/query/${queryId}`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/query/${queryId}`, { headers: { Accept: 'application/json' } }) .then((response) => { const query = response.data console.debug('response query', query) @@ -35,9 +35,9 @@ class QueryService { }) } - persist (id, databaseId, queryId) { + persist (databaseId, queryId) { return new Promise((resolve, reject) => { - api.put(`/api/container/${id}/database/${databaseId}/query/${queryId}`, {}, { headers: { Accept: 'application/json' } }) + api.put(`/api/database/${databaseId}/query/${queryId}`, {}, { headers: { Accept: 'application/json' } }) .then((response) => { const query = response.data console.debug('response query', query) @@ -52,9 +52,9 @@ class QueryService { }) } - importCsv (id, databaseId, tableId, data) { + importCsv (databaseId, tableId, data) { return new Promise((resolve, reject) => { - api.post(`/api/container/${id}/database/${databaseId}/table/${tableId}/data/import`, data, { headers: { Accept: 'application/json' } }) + api.post(`/api/database/${databaseId}/table/${tableId}/data/import`, data, { headers: { Accept: 'application/json' } }) .then((response) => { const table = response.data console.debug('response table', table) @@ -69,9 +69,9 @@ class QueryService { }) } - insertTuple (id, databaseId, tableId, data) { + insertTuple (databaseId, tableId, data) { return new Promise((resolve, reject) => { - api.post(`/api/container/${id}/database/${databaseId}/table/${tableId}/data`, data, { headers: { Accept: 'text/csv' } }) + api.post(`/api/database/${databaseId}/table/${tableId}/data`, data, { headers: { Accept: 'text/csv' } }) .then((response) => { const tuple = response.data console.debug('response insert tuple', tuple) @@ -92,9 +92,9 @@ class QueryService { }) } - updateTuple (id, databaseId, tableId, data) { + updateTuple (databaseId, tableId, data) { return new Promise((resolve, reject) => { - api.put(`/api/container/${id}/database/${databaseId}/table/${tableId}/data`, data, { headers: { Accept: 'text/csv' } }) + api.put(`/api/database/${databaseId}/table/${tableId}/data`, data, { headers: { Accept: 'text/csv' } }) .then((response) => { const tuple = response.data console.debug('response update tuple', tuple) @@ -115,9 +115,9 @@ class QueryService { }) } - exportSubset (id, databaseId, queryId) { + exportSubset (databaseId, queryId) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/query/${queryId}/export`, { headers: { Accept: 'text/csv' } }) + api.get(`/api/database/${databaseId}/query/${queryId}/export`, { headers: { Accept: 'text/csv' } }) .then((response) => { const subset = response.data console.debug('response subset', subset) @@ -132,9 +132,9 @@ class QueryService { }) } - exportMetadata (id, mime) { + exportMetadata (pid, mime) { return new Promise((resolve, reject) => { - api.get(`/api/pid/${id}`, { headers: { Accept: mime } }) + api.get(`/api/pid/${pid}`, { headers: { Accept: mime } }) .then((response) => { const metadata = response.data console.debug('response metadata', metadata) @@ -149,9 +149,9 @@ class QueryService { }) } - execute (id, databaseId, data, page, size) { + execute (databaseId, data, page, size) { return new Promise((resolve, reject) => { - api.post(`/api/container/${id}/database/${databaseId}/query?page=${page}&size=${size}`, data, { headers: { Accept: 'application/json' } }) + api.post(`/api/database/${databaseId}/query?page=${page}&size=${size}`, data, { headers: { Accept: 'application/json' } }) .then((response) => { const result = response.data console.debug('response result', result) @@ -166,9 +166,9 @@ class QueryService { }) } - reExecuteQuery (id, databaseId, queryId, page, size) { + reExecuteQuery (databaseId, queryId, page, size) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/query/${queryId}/data?page=${page}&size=${size}`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/query/${queryId}/data?page=${page}&size=${size}`, { headers: { Accept: 'application/json' } }) .then((response) => { const result = response.data console.debug('response result', result) @@ -183,9 +183,9 @@ class QueryService { }) } - reExecuteQueryCount (id, databaseId, queryId) { + reExecuteQueryCount (databaseId, queryId) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/query/${queryId}/data/count`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/query/${queryId}/data/count`, { headers: { Accept: 'application/json' } }) .then((response) => { const count = response.data console.debug('response count', count) @@ -200,9 +200,9 @@ class QueryService { }) } - reExecuteView (id, databaseId, viewId, page, size) { + reExecuteView (databaseId, viewId, page, size) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/view/${viewId}/data?page=${page}&size=${size}`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/view/${viewId}/data?page=${page}&size=${size}`, { headers: { Accept: 'application/json' } }) .then((response) => { const result = response.data console.debug('response result', result) @@ -217,9 +217,9 @@ class QueryService { }) } - reExecuteViewCount (id, databaseId, viewId) { + reExecuteViewCount (databaseId, viewId) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/view/${viewId}/data/count`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/view/${viewId}/data/count`, { headers: { Accept: 'application/json' } }) .then((response) => { const count = response.data console.debug('response count', count) diff --git a/dbrepo-ui/api/table.service.js b/dbrepo-ui/api/table.service.js index 4ec9769323546338efc608303750468b90232d56..457b014ab676324eb8eafa5e1eb215468628f08f 100644 --- a/dbrepo-ui/api/table.service.js +++ b/dbrepo-ui/api/table.service.js @@ -7,9 +7,9 @@ import api from '@/api' * @author Martin Weise */ class TableService { - findAll (id, databaseId) { + findAll (databaseId) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/table`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/table`, { headers: { Accept: 'application/json' } }) .then((response) => { const tables = response.data console.debug('response tables', tables) @@ -24,9 +24,9 @@ class TableService { }) } - findOne (id, databaseId, tableId) { + findOne (databaseId, tableId) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/table/${tableId}`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/table/${tableId}`, { headers: { Accept: 'application/json' } }) .then((response) => { const table = response.data console.debug('response table', table) @@ -41,9 +41,9 @@ class TableService { }) } - updateColumn (id, databaseId, tableId, columnId, data) { + updateColumn (databaseId, tableId, columnId, data) { return new Promise((resolve, reject) => { - api.put(`/api/container/${id}/database/${databaseId}/table/${tableId}/column/${columnId}`, data, { headers: { Accept: 'application/json' } }) + api.put(`/api/database/${databaseId}/table/${tableId}/column/${columnId}`, data, { headers: { Accept: 'application/json' } }) .then((response) => { const column = response.data console.debug('response column', column) @@ -58,9 +58,9 @@ class TableService { }) } - importCsv (id, databaseId, tableId, data) { + importCsv (databaseId, tableId, data) { return new Promise((resolve, reject) => { - api.post(`/api/container/${id}/database/${databaseId}/table/${tableId}/data/import`, data, { headers: { Accept: 'application/json' } }) + api.post(`/api/database/${databaseId}/table/${tableId}/data/import`, data, { headers: { Accept: 'application/json' } }) .then(() => resolve()) .catch((error) => { const { code, message } = error @@ -71,9 +71,9 @@ class TableService { }) } - data (id, databaseId, tableId, page, size, timestamp) { + data (databaseId, tableId, page, size, timestamp) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/table/${tableId}/data?page=${page}&size=${size}×tamp=${timestamp}`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/table/${tableId}/data?page=${page}&size=${size}×tamp=${timestamp}`, { headers: { Accept: 'application/json' } }) .then((response) => { const data = response.data console.debug('response data', data) @@ -88,9 +88,9 @@ class TableService { }) } - dataCount (id, databaseId, tableId, timestamp) { + dataCount (databaseId, tableId, timestamp) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/table/${tableId}/data/count?timestamp=${timestamp}`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/table/${tableId}/data/count?timestamp=${timestamp}`, { headers: { Accept: 'application/json' } }) .then((response) => { const count = response.data console.debug('response count', count) @@ -105,9 +105,9 @@ class TableService { }) } - findHistory (id, databaseId, tableId) { + findHistory (databaseId, tableId) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/table/${tableId}/history`, { headers: { Accept: 'application/json' } }) + api.get(`/api/database/${databaseId}/table/${tableId}/history`, { headers: { Accept: 'application/json' } }) .then((response) => { const history = response.data console.debug('response history', history) @@ -122,13 +122,13 @@ class TableService { }) } - exportData (id, databaseId, tableId) { - return this.exportDataTimestamp(id, databaseId, tableId, null) + exportData (databaseId, tableId) { + return this.exportDataTimestamp(databaseId, tableId, null) } - exportDataTimestamp (id, databaseId, tableId, timestamp) { + exportDataTimestamp (databaseId, tableId, timestamp) { return new Promise((resolve, reject) => { - api.get(`/api/container/${id}/database/${databaseId}/table/${tableId}/export?timestamp=${timestamp}`, { responseType: 'text' }) + api.get(`/api/database/${databaseId}/table/${tableId}/export?timestamp=${timestamp}`, { responseType: 'text' }) .then((response) => { const data = response.data console.debug('response data', data) @@ -143,10 +143,10 @@ class TableService { }) } - create (id, databaseId, data) { + create (databaseId, data) { return new Promise((resolve, reject) => { console.debug('====>', data) - api.post(`/api/container/${id}/database/${databaseId}/table`, data, { headers: { Accept: 'application/json' } }) + api.post(`/api/database/${databaseId}/table`, data, { headers: { Accept: 'application/json' } }) .then((response) => { const table = response.data console.debug('response table', table) @@ -161,9 +161,9 @@ class TableService { }) } - deleteTuple (id, databaseId, tableId, data) { + deleteTuple (databaseId, tableId, data) { return new Promise((resolve, reject) => { - api.delete(`/api/container/${id}/database/${databaseId}/table/${tableId}/data`, { headers: { Accept: 'application/json' }, data }) + api.delete(`/api/database/${databaseId}/table/${tableId}/data`, { headers: { Accept: 'application/json' }, data }) .then(() => resolve()) .catch((error) => { const { code, message } = error diff --git a/dbrepo-ui/components/DBToolbar.vue b/dbrepo-ui/components/DBToolbar.vue index c899ab03eb0afde4713b7b5b77a6a2b70727c021..b815c6850a875627e4e896b5f6edd07fa4056059 100644 --- a/dbrepo-ui/components/DBToolbar.vue +++ b/dbrepo-ui/components/DBToolbar.vue @@ -28,7 +28,7 @@ </v-toolbar-title> <v-spacer /> <v-toolbar-title> - <v-btn v-if="canImportCsv" class="mr-2 mb-1" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/import`"> + <v-btn v-if="canImportCsv" class="mr-2 mb-1" :to="`/database/${$route.params.database_id}/table/import`"> <v-icon left>mdi-cloud-upload</v-icon> Import .csv </v-btn> <DownloadButton @@ -37,31 +37,31 @@ class="mr-2 mb-1"> <v-icon left>mdi-code-tags</v-icon> Identifier .xml </DownloadButton> - <v-btn v-if="canCreateSubset" color="secondary" class="mb-1 white--text" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/query/create`"> + <v-btn v-if="canCreateSubset" color="secondary" class="mb-1 white--text" :to="`/database/${$route.params.database_id}/query/create`"> <v-icon left>mdi-wrench</v-icon> Create Subset </v-btn> - <v-btn v-if="canCreateView" color="secondary" class="ml-2 mr-2 mb-1 white--text" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/view/create`"> + <v-btn v-if="canCreateView" color="secondary" class="ml-2 mr-2 mb-1 white--text" :to="`/database/${$route.params.database_id}/view/create`"> <v-icon left>mdi-view-carousel-outline</v-icon> Create View </v-btn> - <v-btn v-if="canCreateTable" color="primary" class="mb-1" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/create`"> + <v-btn v-if="canCreateTable" color="primary" class="mb-1" :to="`/database/${$route.params.database_id}/table/create`"> <v-icon left>mdi-table-large-plus</v-icon> Create Table </v-btn> </v-toolbar-title> <template v-slot:extension> <v-tabs v-model="tab" color="primary"> - <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/info`"> + <v-tab :to="`/database/${$route.params.database_id}/info`"> {{ $t('databases.toolbar.info', { name: 'vue-i18n' }) }} </v-tab> - <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`"> + <v-tab :to="`/database/${$route.params.database_id}/table`"> {{ $t('databases.toolbar.tables', { name: 'vue-i18n' }) }} </v-tab> - <v-tab v-if="canViewQueries" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/query`"> + <v-tab v-if="canViewQueries" :to="`/database/${$route.params.database_id}/query`"> {{ $t('databases.toolbar.subsets', { name: 'vue-i18n' }) }} </v-tab> - <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/view`"> + <v-tab :to="`/database/${$route.params.database_id}/view`"> {{ $t('databases.toolbar.views', { name: 'vue-i18n' }) }} </v-tab> - <v-tab v-if="isOwner" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/settings`"> + <v-tab v-if="isOwner" :to="`/database/${$route.params.database_id}/settings`"> {{ $t('databases.toolbar.settings', { name: 'vue-i18n' }) }} </v-tab> </v-tabs> diff --git a/dbrepo-ui/components/DatabaseList.vue b/dbrepo-ui/components/DatabaseList.vue index aefcbfb70d12897469d4ceaf9b596fe3ed0c5308..1fd05770e5d11a275df7b56813271965a1ebeead 100644 --- a/dbrepo-ui/components/DatabaseList.vue +++ b/dbrepo-ui/components/DatabaseList.vue @@ -1,45 +1,36 @@ <template> <div> - <v-progress-linear v-if="loadingContainers || loadingDatabases" :indeterminate="!error" /> + <v-progress-linear v-if="loadingDatabases" :indeterminate="!error" /> <v-card v-if="!$vuetify.theme.dark && containers.length> 0" flat tile> <v-divider class="mx-4" /> </v-card> <v-card - v-for="(container, idx) in containers" + v-for="(database, idx) in databases" :key="idx" - :to="link(container)" + :to="link(database)" flat tile> <v-divider v-if="idx !== 0" class="mx-4" /> - <v-card-title v-if="!hasDatabase(container)" v-text="container.name" /> - <v-card-title v-if="hasDatabase(container)"> - <a :href="`/container/${container.id}/database/${container.database.id}`">{{ container.name }}</a> + <v-card-title> + <a :href="`/database/${database.id}`">{{ database.name }}</a> </v-card-title> - <v-card-subtitle class="db-subtitle" v-text="formatCreators(container)" /> - <v-card-text v-if="hasDatabase(container)" class="db-description"> + <v-card-subtitle class="db-subtitle" v-text="formatCreators(database)" /> + <v-card-text class="db-description"> <div class="db-tags"> - <v-chip v-if="hasDatabase(container) && container.database.is_public" small color="green" outlined>Public</v-chip> - <v-chip v-if="hasDatabase(container) && !container.database.is_public" small color="red" outlined>Private</v-chip> + <v-chip v-if="database.is_public" small color="green" outlined>Public</v-chip> + <v-chip v-if="!database.is_public" small color="red" outlined>Private</v-chip> <v-chip - v-if="identifierYear(container)" + v-if="identifierYear(database)" small outlined - v-text="identifierYear(container)" /> + v-text="identifierYear(database)" /> <v-chip - v-if="hasIdentifier(container)" + v-if="hasIdentifier(database)" small outlined - v-text="container.database.identifier.publisher" /> + v-text="database.identifier.publisher" /> </div> - <div v-text="identifierDescription(container)" /> - <v-btn - v-if="needsDatabase(container)" - small - secondary - :loading="container?.loading" - @click.stop="createDatabase(container)"> - Create Database - </v-btn> + <div v-text="identifierDescription(database)" /> </v-card-text> </v-card> <v-toolbar v-if="false" flat> @@ -56,23 +47,20 @@ <script> import DatabaseService from '@/api/database.service' -import ContainerService from '@/api/container.service' -import ContainerMapper from '@/api/container.mapper' +import DatabaseMapper from '@/api/database.mapper' export default { data () { return { - loadingContainers: false, + loadingDatabases: false, loadingCreate: false, createDbDialog: false, databases: [], - containers: [], searchQuery: null, limit: 100, items: [ - { text: 'Databases', to: '/container', activeClass: '' } + { text: 'Databases', to: '/database', activeClass: '' } ], - loadingDatabases: false, error: false } }, @@ -85,64 +73,42 @@ export default { } }, mounted () { - this.loadContainers() + this.loadDatabases() }, methods: { - formatCreators (container) { - return ContainerMapper.containerToCreator(container) - }, - needsDatabase (container) { - if (!this.user) { - return false - } - if (container.creator.username !== this.user.username) { - return false - } - return !container.database - }, - hasDatabase (container) { - return container.database + formatCreators (database) { + return DatabaseMapper.databaseToOwner(database) }, - hasIdentifier (container) { - return container.database && container.database.identifier + hasIdentifier (database) { + return database && database.identifier }, - identifierYear (container) { - if (!container || !container.database || !container.database.identifier || !container.database.identifier.publication_year) { + identifierYear (database) { + if (!database || !database.identifier || !database.identifier.publication_year) { return null } - return container.database.identifier.publication_year + return database.identifier.publication_year }, - identifierDescription (container) { - if (!container || !container.database || !container.database.identifier) { + identifierDescription (database) { + if (!database || !database.identifier) { return null } - return container.database.identifier.description + return database.identifier.description }, - loadContainers () { + loadDatabases () { this.createDbDialog = false - this.loadingContainers = true - ContainerService.findAll(this.limit) - .then((containers) => { - this.containers = containers - console.info('Found', this.containers.length, 'container(s)') - }) - .finally(() => { - this.loadingContainers = false - }) - }, - createDatabase (container) { - container.loading = true - DatabaseService.create(container.id, { name: container.name, is_public: true }) - .then((database) => { - container.loading = false - this.$router.push(`/container/${container.id}/database/${database.id}`) + this.loadingDatabases = true + DatabaseService.findAll() // TODO: write a findAllDatabases method + .then((databases) => { + this.databases = databases + console.info('Found', this.databases.length, 'container(s)') }) + this.loadingDatabases = false }, - link (container) { - if (!container.database || !container.database.id) { + link (database) { + if (!database || !database.container) { return null } - return `/container/${container.id}/database/${container.database.id}` + return `/database/${database.id}` } } } diff --git a/dbrepo-ui/components/QueryList.vue b/dbrepo-ui/components/QueryList.vue index 4485e3494518a7b1e0f23b4053025358d8edbcd1..2a7e2a9f9fdc7066e30e79301affc3faddbe38b2 100644 --- a/dbrepo-ui/components/QueryList.vue +++ b/dbrepo-ui/components/QueryList.vue @@ -147,7 +147,7 @@ export default { }, loadQueries () { this.loadingQueries = true - QueryService.findAll(this.$route.params.container_id, this.$route.params.database_id, true) + QueryService.findAll(this.$route.params.database_id, true) .then((queries) => { this.queries = queries }) @@ -166,7 +166,7 @@ export default { }, link (queryOrIdentifier) { if (queryOrIdentifier.identifier === null) { - return `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query/${queryOrIdentifier.id}` + return `/database/${this.$route.params.database_id}/query/${queryOrIdentifier.id}` } if ('query_id' in queryOrIdentifier) { return null diff --git a/dbrepo-ui/components/TableList.vue b/dbrepo-ui/components/TableList.vue index f627f9387e4e329e73c7ff922e55fe2387c26c0a..790e98a2093b516643ac321578d9e736f8f6d57f 100644 --- a/dbrepo-ui/components/TableList.vue +++ b/dbrepo-ui/components/TableList.vue @@ -11,7 +11,7 @@ <v-list-item-group> <v-list-item two-line - :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${item.id}`"> + :to="`/database/${$route.params.database_id}/table/${item.id}`"> <v-list-item-content> <v-list-item-title v-text="item.name" /> <v-list-item-subtitle class="mt-2" v-text="item.description" /> diff --git a/dbrepo-ui/components/TableSchema.vue b/dbrepo-ui/components/TableSchema.vue index a70d6c7563534f8b6361b7cf00d9cf63201edfae..2db4e4821344e8b39bba92b4ad2f5aaa0a76fe65 100644 --- a/dbrepo-ui/components/TableSchema.vue +++ b/dbrepo-ui/components/TableSchema.vue @@ -99,7 +99,7 @@ </template> <script> -import ContainerService from '@/api/container.service' +import DatabaseService from '@/api/database.service' export default { props: { columns: { @@ -134,11 +134,6 @@ export default { valid: true, finished: false, tableColumns: [], - container: { - image: { - id: null - } - }, columnTypes: [ // { value: 'ENUM', text: 'Enumeration' }, // Disabled for now, not implemented, #145 { value: 'boolean', text: 'Boolean' }, @@ -165,7 +160,7 @@ export default { }, mounted () { this.localLoading = this.loading - this.loadContainer() + this.loadDateFormats() }, methods: { needsShift (column) { @@ -174,19 +169,13 @@ export default { } return this.columns.filter(c => c.type === 'date' || c.type === 'timestamp').length > 0 }, - loadContainer () { - this.localLoading = true - ContainerService.findOne(this.$route.params.container_id) - .then((container) => { - this.container = container - ContainerService.findImage(container.image.id) - .then((image) => { - this.dateFormats = image.date_formats - }) - }) - .finally(() => { - this.localLoading = false - }) + async loadDateFormats () { + try { + const database = await DatabaseService.findOne(this.$route.params.database_id) + this.dateFormats = database.container.image.date_formats + } finally { + this.localLoading = false + } }, submit () { this.finished = true diff --git a/dbrepo-ui/components/TableToolbar.vue b/dbrepo-ui/components/TableToolbar.vue index 69351b3121ea40023089d48934d99fa77ad74d9e..0db2e9f3c8922361fda12c6d04ff05c6cd382501 100644 --- a/dbrepo-ui/components/TableToolbar.vue +++ b/dbrepo-ui/components/TableToolbar.vue @@ -2,7 +2,7 @@ <div v-if="table"> <v-toolbar flat> <v-toolbar-title> - <v-btn id="back-btn" plain class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`"> + <v-btn id="back-btn" plain class="mr-2" :to="`/database/${$route.params.database_id}/table`"> <v-icon left>mdi-arrow-left</v-icon> </v-btn> </v-toolbar-title> @@ -20,25 +20,25 @@ <v-btn v-if="canDeleteTuple" color="error" class="mr-2 mb-1" :loading="loadingDelete" @click="deleteItems"> <v-icon left>mdi-delete</v-icon> Delete <span v-if="selection.length > 1"> {{ selection.length }}</span> </v-btn> - <v-btn v-if="canExecuteQuery" class="mb-1" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/query/create?tid=${$route.params.table_id}`" color="secondary"> + <v-btn v-if="canExecuteQuery" class="mb-1" :to="`/database/${$route.params.database_id}/query/create?tid=${$route.params.table_id}`" color="secondary"> <v-icon left>mdi-wrench</v-icon> Create Subset </v-btn> - <v-btn v-if="canCreateView" class="ml-2 mb-1" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/view/create?tid=${$route.params.table_id}`" color="secondary"> + <v-btn v-if="canCreateView" class="ml-2 mb-1" :to="`/database/${$route.params.database_id}/view/create?tid=${$route.params.table_id}`" color="secondary"> <v-icon left>mdi-view-carousel</v-icon> Create View </v-btn> - <v-btn v-if="canImportCsv" class="ml-2 mb-1" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${$route.params.table_id}/import`"> + <v-btn v-if="canImportCsv" class="ml-2 mb-1" :to="`/database/${$route.params.database_id}/table/${$route.params.table_id}/import`"> <v-icon left>mdi-cloud-upload</v-icon> Import .csv </v-btn> </v-toolbar-title> </v-toolbar> <v-tabs v-model="tab" color="primary"> - <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${$route.params.table_id}/info`"> + <v-tab :to="`/database/${$route.params.database_id}/table/${$route.params.table_id}/info`"> Info </v-tab> - <v-tab v-if="canViewTableData" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${$route.params.table_id}/data`"> + <v-tab v-if="canViewTableData" :to="`/database/${$route.params.database_id}/table/${$route.params.table_id}/data`"> Data </v-tab> - <v-tab :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${$route.params.table_id}/schema`"> + <v-tab :to="`/database/${$route.params.database_id}/table/${$route.params.table_id}/schema`"> Schema </v-tab> </v-tabs> @@ -203,7 +203,7 @@ export default { .forEach((c) => { constraints[c.internal_name] = select[c.internal_name] }) - TableService.deleteTuple(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, { keys: constraints }) + TableService.deleteTuple(this.$route.params.database_id, this.$route.params.table_id, { keys: constraints }) .then(() => { this.$toast.success(`Deleted ${this.selection.length} row${this.selection.length !== 1 ? 's' : ''}`) this.$emit('modified', { success: true, action: 'delete' }) diff --git a/dbrepo-ui/components/ViewList.vue b/dbrepo-ui/components/ViewList.vue index 340a624c57a952d7884e8d4940bae1d45249840b..4f28e1a718af0f5fa356fe3c4faa665f531658c4 100644 --- a/dbrepo-ui/components/ViewList.vue +++ b/dbrepo-ui/components/ViewList.vue @@ -9,7 +9,7 @@ <div v-for="(item,i) in views" :key="i"> <v-divider v-if="i !== 0" class="mx-4" /> <v-list-item-group> - <v-list-item two-line :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/view/${item.id}`"> + <v-list-item two-line :to="`/database/${$route.params.database_id}/view/${item.id}`"> <v-list-item-content> <v-list-item-title v-text="item.name" /> <v-list-item-subtitle class="mt-2"> @@ -91,7 +91,7 @@ export default { methods: { deleteView (view) { this.loading = true - DatabaseService.deleteView(this.$route.params.container_id, this.$route.params.database_id, view.id) + DatabaseService.deleteView(this.$route.params.database_id, view.id) .then(() => { this.$toast.success(`Successfully deleted view with id ${view.id}`) }) diff --git a/dbrepo-ui/components/dialogs/CreateDB.vue b/dbrepo-ui/components/dialogs/CreateDB.vue index 0259ba127e6470ca28562c0c97536d3ba7cfc263..19d5bbef1c9d9dfca4368bfd5e5b07bd45dd18fe 100644 --- a/dbrepo-ui/components/dialogs/CreateDB.vue +++ b/dbrepo-ui/components/dialogs/CreateDB.vue @@ -9,7 +9,7 @@ <v-col> <v-text-field id="database" - v-model="createContainerDto.name" + v-model="createDatabaseDto.name" name="database" label="Name *" autofocus @@ -25,7 +25,7 @@ name="engine" label="Engine *" :items="engines" - :item-text="item => `${item.repository}:${item.tag}`" + :item-text="item => `${item.name}`" :rules="[v => !!v || $t('Required')]" return-object required /> @@ -70,19 +70,10 @@ export default { tag: null }, engines: [], - createContainerDto: { - name: null, - repository: null, - tag: null - }, createDatabaseDto: { name: null, is_public: true }, - container: { - id: null, - name: null - }, database: { id: null } @@ -108,9 +99,9 @@ export default { }, getImages () { this.loading = true - ContainerService.findAllImages() - .then((images) => { - this.engines = images + ContainerService.findAll() + .then((containers) => { + this.engines = containers if (this.engines.length > 0) { this.engine = this.engines[0] } @@ -120,45 +111,17 @@ export default { }) }, async create () { - await this.createContainer() - .then(() => this.startContainer(this.container) - .then(() => this.createDatabase(this.container))) - }, - createContainer () { - this.createContainerDto.repository = this.engine.repository - this.createContainerDto.tag = this.engine.tag - this.loading = true - return new Promise((resolve, reject) => { - ContainerService.create(this.createContainerDto) - .then((container) => { - this.container = container - this.loading = false - resolve(container) - }) - .catch(error => reject(error)) - }) + await this.createDatabase(this.engine) }, - startContainer (container) { + async createDatabase (container) { this.loading = true - return new Promise((resolve, reject) => { - ContainerService.modify(container.id, 'start') - .then(() => { - this.loading = false - resolve() - }) - .catch(error => reject(error)) - }) - }, - createDatabase (container) { - this.loading = true - DatabaseService.create(container.id, { name: container.name, is_public: true }) - .then((database) => { - container.database = database - this.$emit('close', { success: true }) - }) - .finally(() => { - this.loading = false - }) + try { + this.database = await DatabaseService.create({ container_id: this.engine.id, name: this.createDatabaseDto.name, is_public: true }) + this.$emit('close', { success: true }) + return this.database + } finally { + this.loading = false + } }, notEmpty } diff --git a/dbrepo-ui/components/dialogs/EditAccess.vue b/dbrepo-ui/components/dialogs/EditAccess.vue index 6048006744ea2c0b19a1ffa55e8669fedf7cfa87..d6c761f0299e094737ed5a8b4c01e283abe64b8f 100644 --- a/dbrepo-ui/components/dialogs/EditAccess.vue +++ b/dbrepo-ui/components/dialogs/EditAccess.vue @@ -201,7 +201,7 @@ export default { }, revokeAccess () { this.loading = true - DatabaseService.revokeAccess(this.$route.params.container_id, this.$route.params.database_id, this.modify.username) + DatabaseService.revokeAccess(this.$route.params.database_id, this.modify.username) .then(() => { this.$toast.success(`Successfully revoked access of ${this.modify.username}`) this.$emit('close-dialog', { success: true }) @@ -212,7 +212,7 @@ export default { }, modifyAccess () { this.loading = true - DatabaseService.modifyAccess(this.$route.params.container_id, this.$route.params.database_id, this.modify.username, this.modify.type) + DatabaseService.modifyAccess(this.$route.params.database_id, this.modify.username, this.modify.type) .then(() => { this.$toast.success(`Successfully modified access of ${this.modify.username}`) this.$emit('close-dialog', { success: true }) @@ -223,7 +223,7 @@ export default { }, giveAccess () { this.loading = true - DatabaseService.giveAccess(this.$route.params.container_id, this.$route.params.database_id, this.modify.username, this.modify.type) + DatabaseService.giveAccess(this.$route.params.database_id, this.modify.username, this.modify.type) .then(() => { this.$toast.success(`Successfully gave ${this.modify.username} access`) this.$emit('close-dialog', { success: true }) diff --git a/dbrepo-ui/components/dialogs/EditTuple.vue b/dbrepo-ui/components/dialogs/EditTuple.vue index 8527fa95b5136e09c7264bfea10146a62fb8dc5f..da01223f23fb4da55df0263544eaf926aa04df26 100644 --- a/dbrepo-ui/components/dialogs/EditTuple.vue +++ b/dbrepo-ui/components/dialogs/EditTuple.vue @@ -198,7 +198,7 @@ export default { data: this.localTuple, keys: constraints } - QueryService.updateTuple(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, data) + QueryService.updateTuple(this.$route.params.database_id, this.$route.params.table_id, data) .then(() => { this.$toast.success('Successfully updated tuple!') this.$emit('close', { success: true }) @@ -216,7 +216,7 @@ export default { this.localTuple[column.internal_name] = null } }) - QueryService.insertTuple(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, { data: this.localTuple }) + QueryService.insertTuple(this.$route.params.database_id, this.$route.params.table_id, { data: this.localTuple }) .then(() => { this.$toast.success('Successfully added tuple!') this.$emit('close', { success: true }) diff --git a/dbrepo-ui/components/dialogs/Persist.vue b/dbrepo-ui/components/dialogs/Persist.vue index bcc3068d66cdf52477d57b2ff0360a06c6ee42e4..90946d8164ab24a2ca791d36c4c6bfde8cd5f2b7 100644 --- a/dbrepo-ui/components/dialogs/Persist.vue +++ b/dbrepo-ui/components/dialogs/Persist.vue @@ -238,7 +238,6 @@ export default { { name: 'Private', value: 'self' } ], identifier: { - cid: parseInt(this.$route.params.container_id), dbid: parseInt(this.$route.params.database_id), qid: parseInt(this.$route.params.query_id), title: null, @@ -420,7 +419,6 @@ export default { update () { this.loading = true const payload = { - cid: parseInt(this.$route.params.container_id), dbid: parseInt(this.$route.params.database_id), qid: parseInt(this.$route.params.query_id), title: this.identifier.title, @@ -448,7 +446,7 @@ export default { return } this.loading = true - DatabaseService.findAllLicenses(this.$route.params.container_id) + DatabaseService.findAllLicenses() .then((licenses) => { this.licenses = licenses }) diff --git a/dbrepo-ui/components/dialogs/TimeTravel.vue b/dbrepo-ui/components/dialogs/TimeTravel.vue index 1007db8b50784920d627063bc05db023c86b9d4f..6dece28569b74550474c882e2424f4625f01da39 100644 --- a/dbrepo-ui/components/dialogs/TimeTravel.vue +++ b/dbrepo-ui/components/dialogs/TimeTravel.vue @@ -115,7 +115,7 @@ export default { }, loadHistory () { this.loading = true - TableService.findHistory(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id) + TableService.findHistory(this.$route.params.database_id, this.$route.params.table_id) .then((history) => { this.chartData.labels = history.map(function (d, idx) { if (idx === 0) { diff --git a/dbrepo-ui/components/query/Builder.vue b/dbrepo-ui/components/query/Builder.vue index 9acae34636ade73f1e78f7ec69b443bad2386197..3a15a3aceab29c10ae90b294cae7462757a3ae1c 100644 --- a/dbrepo-ui/components/query/Builder.vue +++ b/dbrepo-ui/components/query/Builder.vue @@ -234,7 +234,7 @@ export default { return this.$store.state.database }, viewLink () { - return `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}` + (this.isView ? '/view' : '/query') + `/${this.resultId}` + return `/database/${this.$route.params.database_id}` + (this.isView ? '/view' : '/query') + `/${this.resultId}` }, token () { return this.$store.state.token @@ -261,7 +261,7 @@ export default { return !(!this.sql || this.sql.length === 0) }, backTo () { - return `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/` + (this.isView ? 'view' : 'query') + return `/database/${this.$route.params.database_id}/` + (this.isView ? 'view' : 'query') }, isView () { return this.mode === 'view' @@ -322,7 +322,7 @@ export default { createView () { this.loadingQuery = true this.view.query = this.sql - DatabaseService.createView(this.$route.params.container_id, this.$route.params.database_id, this.view) + DatabaseService.createView(this.$route.params.database_id, this.view) .then(async (view) => { this.resultId = view.id await this.$store.dispatch('reloadDatabase') diff --git a/dbrepo-ui/components/query/Results.vue b/dbrepo-ui/components/query/Results.vue index 74a06f23e8b17e70409aac780278adcc3c100425..26bb001c9640f0340cfb7b33353f4f194019994c 100644 --- a/dbrepo-ui/components/query/Results.vue +++ b/dbrepo-ui/components/query/Results.vue @@ -48,7 +48,7 @@ export default { statement: sql, timestamp } - QueryService.execute(this.$route.params.container_id, this.$route.params.database_id, payload, 0, this.options.itemsPerPage) + QueryService.execute(this.$route.params.database_id, payload, 0, this.options.itemsPerPage) .then((result) => { this.mapResults(result) parent.resultId = result.id @@ -70,7 +70,7 @@ export default { } this.loading++ if (this.type === 'query') { - QueryService.reExecuteQuery(this.$route.params.container_id, this.$route.params.database_id, id, 0, this.options.itemsPerPage) + QueryService.reExecuteQuery(this.$route.params.database_id, id, 0, this.options.itemsPerPage) .then((result) => { this.mapResults(result) this.id = id @@ -79,7 +79,7 @@ export default { this.loading-- }) } else { - QueryService.reExecuteView(this.$route.params.container_id, this.$route.params.database_id, id, 0, this.options.itemsPerPage) + QueryService.reExecuteView(this.$route.params.database_id, id, 0, this.options.itemsPerPage) .then((result) => { this.mapResults(result) this.id = id @@ -95,7 +95,7 @@ export default { } this.loading++ if (this.type === 'query') { - QueryService.reExecuteQueryCount(this.$route.params.container_id, this.$route.params.database_id, id) + QueryService.reExecuteQueryCount(this.$route.params.database_id, id) .then((count) => { this.total = count }) @@ -103,7 +103,7 @@ export default { this.loading-- }) } else { - QueryService.reExecuteViewCount(this.$route.params.container_id, this.$route.params.database_id, id) + QueryService.reExecuteViewCount(this.$route.params.database_id, id) .then((count) => { this.total = count }) diff --git a/dbrepo-ui/layouts/default.vue b/dbrepo-ui/layouts/default.vue index bbc3bdc862de2bc7999460e717243736750625d7..dc4fe88be2533bac050eb9ca2c516550c34fac9d 100644 --- a/dbrepo-ui/layouts/default.vue +++ b/dbrepo-ui/layouts/default.vue @@ -29,7 +29,7 @@ </v-list-item-content> </v-list-item> <v-list-item - to="/container" + to="/database" router> <v-list-item-action> <v-icon>mdi-database</v-icon> @@ -105,12 +105,14 @@ </v-btn> </template> <v-list> + <!-- <v-list-item v-for="locale in []" :key="locale.code" :to="switchLocalePath(locale.code)"> <v-list-item-title>{{ locale.name }}</v-list-item-title> </v-list-item> + --> <v-list-item v-if="user" @click="logout"> @@ -162,9 +164,6 @@ export default { user () { return this.$store.state.user }, - container () { - return this.$store.state.container - }, locale () { return this.$store.state.locale }, @@ -257,15 +256,15 @@ export default { this.$store.commit('SET_USER', null) this.$store.commit('SET_ACCESS', null) this.$vuetify.theme.dark = false - this.$router.push('/container') + this.$router.push('/database') }, loadDatabase () { - if (!this.$route.params.container_id || !this.$route.params.database_id) { + if (!this.$route.params.database_id) { this.$store.commit('SET_DATABASE', null) return } this.loading = true - DatabaseService.findOne(this.$route.params.container_id, this.$route.params.database_id) + DatabaseService.findOne(this.$route.params.database_id) .then((database) => { this.$store.commit('SET_DATABASE', database) this.loading = false @@ -276,11 +275,11 @@ export default { }) }, loadTable () { - if (!this.$route.params.container_id || !this.$route.params.database_id || !this.$route.params.table_id) { + if (!this.$route.params.database_id || !this.$route.params.table_id) { return } this.loading = true - TableService.findOne(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id) + TableService.findOne(this.$route.params.database_id, this.$route.params.table_id) .then((table) => { this.$store.commit('SET_TABLE', table) }) @@ -289,14 +288,14 @@ export default { }) }, loadAccess () { - if (!this.$route.params.container_id || !this.$route.params.database_id) { + if (!this.$route.params.database_id) { return } if (!this.token) { return } this.loading = true - DatabaseService.checkAccess(this.$route.params.container_id, this.$route.params.database_id) + DatabaseService.checkAccess(this.$route.params.database_id) .then((access) => { this.$store.commit('SET_ACCESS', access) this.loading = false diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/index.vue b/dbrepo-ui/pages/container/_container_id/database/_database_id/index.vue deleted file mode 100644 index e39d3d7b62049773de5edcbde3dabf7d92e6c7c6..0000000000000000000000000000000000000000 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/index.vue +++ /dev/null @@ -1,13 +0,0 @@ -<template> - <div /> -</template> - -<script> -export default { - mounted () { - this.$router.push(`/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`) - } -} -</script> -<style> -</style> diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue b/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue deleted file mode 100644 index 6d0e9b5002cb424a1ee5861deaf678b87966018e..0000000000000000000000000000000000000000 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/index.vue +++ /dev/null @@ -1,10 +0,0 @@ -<template> - <div /> -</template> -<script> -export default { - mounted () { - this.$router.push(`/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}/info`) - } -} -</script> diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/admin.vue b/dbrepo-ui/pages/database/_database_id/admin.vue similarity index 86% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/admin.vue rename to dbrepo-ui/pages/database/_database_id/admin.vue index c3d1f0f47fedc994be074e05d0d3d6c5fa3f88c8..6cd364777737544fd36ae6989a2d8c8a4d47dd9b 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/admin.vue +++ b/dbrepo-ui/pages/database/_database_id/admin.vue @@ -37,7 +37,7 @@ </template> <script> -import DBToolbar from '@/components/DBToolbar' +import DBToolbar from '@/components/DBToolbar.vue' import DatabaseService from '@/api/database.service' export default { @@ -49,10 +49,10 @@ export default { dialogDelete: false, confirm: null, items: [ - { text: 'Databases', to: '/container', activeClass: '' }, + { text: 'Databases', to: '/database', activeClass: '' }, { text: `${this.$route.params.database_id}`, - to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, + to: `/database/${this.$route.params.database_id}/info`, activeClass: '' } ] @@ -74,7 +74,7 @@ export default { }, methods: { deleteDatabase () { - DatabaseService.delete(this.$route.params.container_id, this.$route.params.database_id) + DatabaseService.delete(this.$route.params.database_id) .then(async () => { this.$toast.success(`Database "${this.db.name}" deleted.`) await this.$router.push({ path: '/databases' }) diff --git a/dbrepo-ui/pages/database/_database_id/index.vue b/dbrepo-ui/pages/database/_database_id/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..185b5d49613f45ba45e137fba7ba9a42a49c55cc --- /dev/null +++ b/dbrepo-ui/pages/database/_database_id/index.vue @@ -0,0 +1,13 @@ +<template> + <div /> +</template> + +<script> +export default { + mounted () { + this.$router.push(`/database/${this.$route.params.database_id}/info`) + } +} +</script> +<style> +</style> diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/info.vue b/dbrepo-ui/pages/database/_database_id/info.vue similarity index 97% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/info.vue rename to dbrepo-ui/pages/database/_database_id/info.vue index 3abeb30d7c7cc34d070b973cddabe068e015a335..543b0c8d57785ff8d783cbbcf3bfd9a4593b52be 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/info.vue +++ b/dbrepo-ui/pages/database/_database_id/info.vue @@ -271,12 +271,12 @@ </template> <script> -import DBToolbar from '@/components/DBToolbar' -import Persist from '@/components/dialogs/Persist' -import OrcidIcon from '@/components/icons/OrcidIcon' -import Citation from '@/components/identifier/Citation' +import DBToolbar from '@/components/DBToolbar.vue' +import Persist from '@/components/dialogs/Persist.vue' +import OrcidIcon from '@/components/icons/OrcidIcon.vue' +import Citation from '@/components/identifier/Citation.vue' import { formatTimestampUTCLabel } from '@/utils' -import Banner from '@/components/identifier/Banner' +import Banner from '@/components/identifier/Banner.vue' import DatabaseMapper from '@/api/database.mapper' import DeleteIdentifier from '@/components/dialogs/DeleteIdentifier.vue' import ContainerService from '@/api/container.service' @@ -300,10 +300,10 @@ export default { deleteDialog: false, persistDialog: false, items: [ - { text: 'Databases', to: '/container', activeClass: '' }, + { text: 'Databases', to: '/database', activeClass: '' }, { text: `${this.$route.params.database_id}`, - to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, + to: `/database/${this.$route.params.database_id}/info`, activeClass: '' } ] diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/_query_id/index.vue b/dbrepo-ui/pages/database/_database_id/query/_query_id/index.vue similarity index 92% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/query/_query_id/index.vue rename to dbrepo-ui/pages/database/_database_id/query/_query_id/index.vue index b2a84bcc320c3b181e217bdc6fbcbb6802f9c126..21b02e5a05f3e747e93ad0f2febf1dd2cc7ffe30 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/_query_id/index.vue +++ b/dbrepo-ui/pages/database/_database_id/query/_query_id/index.vue @@ -219,10 +219,10 @@ </div> </template> <script> -import Persist from '@/components/dialogs/Persist' -import Citation from '@/components/identifier/Citation' -import Banner from '@/components/identifier/Banner' -import DownloadButton from '@/components/identifier/DownloadButton' +import Persist from '@/components/dialogs/Persist.vue' +import Citation from '@/components/identifier/Citation.vue' +import Banner from '@/components/identifier/Banner.vue' +import DownloadButton from '@/components/identifier/DownloadButton.vue' import { formatTimestampUTCLabel, formatDateUTC } from '@/utils' import QueryService from '@/api/query.service' import UserUtils from '@/api/user.utils' @@ -238,10 +238,10 @@ export default { data () { return { items: [ - { text: 'Databases', to: '/container', activeClass: '' }, - { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}`, activeClass: '' }, - { text: 'Queries', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query`, activeClass: '' }, - { text: `${this.$route.params.query_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query/${this.$route.params.query_id}`, activeClass: '' } + { text: 'Databases', to: '/database', activeClass: '' }, + { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}`, activeClass: '' }, + { text: 'Queries', to: `/database/${this.$route.params.database_id}/query`, activeClass: '' }, + { text: `${this.$route.params.query_id}`, to: `/database/${this.$route.params.database_id}/query/${this.$route.params.query_id}`, activeClass: '' } ], query: { id: parseInt(this.$route.params.query_id), @@ -318,7 +318,7 @@ export default { return this.database.publisher }, backTo () { - return `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query` + return `/database/${this.$route.params.database_id}/query` }, result_visibility () { if (!this.database || this.database.is_public === null) { @@ -365,7 +365,7 @@ export default { }, downloadSubset () { this.downloadLoading = true - QueryService.exportSubset(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.query_id) + QueryService.exportSubset(this.$route.params.database_id, this.$route.params.query_id) .then((data) => { const url = window.URL.createObjectURL(new Blob([data])) const link = document.createElement('a') @@ -381,7 +381,7 @@ export default { loadQuery () { this.loadingQuery = true return new Promise((resolve, reject) => { - QueryService.findOne(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.query_id) + QueryService.findOne(this.$route.params.database_id, this.$route.params.query_id) .then((query) => { this.query = query resolve(query) @@ -394,7 +394,7 @@ export default { }, save () { this.loadingSave = true - QueryService.persist(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.query_id) + QueryService.persist(this.$route.params.database_id, this.$route.params.query_id) .then((query) => { this.query = query }) diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/create.vue b/dbrepo-ui/pages/database/_database_id/query/create.vue similarity index 74% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/query/create.vue rename to dbrepo-ui/pages/database/_database_id/query/create.vue index f6864c8b031ed621d25b20b6b83cc6e6fc295680..5b24d2f136e51211f7ab8016b3118025c4e292ec 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/create.vue +++ b/dbrepo-ui/pages/database/_database_id/query/create.vue @@ -12,15 +12,15 @@ export default { data () { return { items: [ - { text: 'Databases', to: '/container', activeClass: '' }, + { text: 'Databases', to: '/database', activeClass: '' }, { text: `${this.$route.params.database_id}`, - to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, + to: `/database/${this.$route.params.database_id}/info`, activeClass: '' }, { text: 'Queries', - to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query`, + to: `/database/${this.$route.params.database_id}/query`, activeClass: '' } ] diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/index.vue b/dbrepo-ui/pages/database/_database_id/query/index.vue similarity index 70% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/query/index.vue rename to dbrepo-ui/pages/database/_database_id/query/index.vue index 0a8bb9111fc310c3f0322ec13b5231f4aa6b9f36..8b2f7103ad08fa27fe9ed8b7f4c87c0d78a01310 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/query/index.vue +++ b/dbrepo-ui/pages/database/_database_id/query/index.vue @@ -12,10 +12,10 @@ export default { data () { return { items: [ - { text: 'Databases', to: '/container', activeClass: '' }, + { text: 'Databases', to: '/database', activeClass: '' }, { text: `${this.$route.params.database_id}`, - to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/query`, + to: `/database/${this.$route.params.database_id}/query`, activeClass: '' } ] diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/settings.vue b/dbrepo-ui/pages/database/_database_id/settings.vue similarity index 93% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/settings.vue rename to dbrepo-ui/pages/database/_database_id/settings.vue index 28cf44a2158a2bbf6cc6c25691ce528d2e5728a4..c53b66b17da339c0fcb03e52b68d59b329bcf1d2 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/settings.vue +++ b/dbrepo-ui/pages/database/_database_id/settings.vue @@ -94,8 +94,8 @@ </template> <script> -import DBToolbar from '@/components/DBToolbar' -import EditAccess from '@/components/dialogs/EditAccess' +import DBToolbar from '@/components/DBToolbar.vue' +import EditAccess from '@/components/dialogs/EditAccess.vue' import DatabaseService from '@/api/database.service' import UserService from '@/api/user.service' @@ -135,7 +135,7 @@ export default { { text: 'Databases', to: '/container', activeClass: '' }, { text: `${this.$route.params.database_id}`, - to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, + to: `/database/${this.$route.params.database_id}/info`, activeClass: '' } ] @@ -226,7 +226,7 @@ export default { }, updateDatabaseVisibility () { this.loading = true - DatabaseService.modifyVisibility(this.$route.params.container_id, this.$route.params.database_id, this.modifyVisibility.is_public) + DatabaseService.modifyVisibility(this.$route.params.database_id, this.modifyVisibility.is_public) .then(() => { this.$toast.success('Successfully updated the database visibility') location.reload() @@ -237,7 +237,7 @@ export default { }, updateDatabaseOwner () { this.loading = true - DatabaseService.modifyOwner(this.$route.params.container_id, this.$route.params.database_id, this.modifyOwner.username) + DatabaseService.modifyOwner(this.$route.params.database_id, this.modifyOwner.username) .then(() => { this.$toast.success('Successfully updated the database owner') location.reload() diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/data.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/data.vue similarity index 86% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/data.vue rename to dbrepo-ui/pages/database/_database_id/table/_table_id/data.vue index 925403b70d519a406a8353fc407225bc663a9f40..a628cd17866759fa3979f4bc3d57c5a554915870 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/data.vue +++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/data.vue @@ -45,8 +45,8 @@ </div> </template> <script> -import TimeTravel from '@/components/dialogs/TimeTravel' -import TableToolbar from '@/components/TableToolbar' +import TimeTravel from '@/components/dialogs/TimeTravel.vue' +import TableToolbar from '@/components/TableToolbar.vue' import TableService from '@/api/table.service' import { formatTimestampUTC, formatDateUTC, formatTimestamp } from '@/utils' @@ -80,10 +80,10 @@ export default { }, dateColumns: [], items: [ - { text: 'Databases', to: '/container', activeClass: '' }, - { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, activeClass: '' }, - { text: 'Tables', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' }, - { text: `${this.$route.params.table_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' } + { text: 'Databases', to: '/database', activeClass: '' }, + { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}/info`, activeClass: '' }, + { text: 'Tables', to: `/database/${this.$route.params.database_id}/table`, activeClass: '' }, + { text: `${this.$route.params.table_id}`, to: `/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' } ], headers: [], rows: [] @@ -180,7 +180,7 @@ export default { download () { this.downloadLoading = true if (!this.version) { - TableService.exportData(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id) + TableService.exportData(this.$route.params.database_id, this.$route.params.table_id) .then((data) => { const url = window.URL.createObjectURL(new Blob([data])) const link = document.createElement('a') @@ -193,7 +193,7 @@ export default { this.downloadLoading = false }) } else { - TableService.exportData(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, this.versionISO) + TableService.exportData(this.$route.params.database_id, this.$route.params.table_id, this.versionISO) .then((data) => { const url = window.URL.createObjectURL(new Blob([data])) const link = document.createElement('a') @@ -266,7 +266,7 @@ export default { }, loadData () { this.loadingData++ - TableService.data(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, (this.options.page - 1), this.options.itemsPerPage, (this.versionISO || this.lastReload.toISOString())) + TableService.data(this.$route.params.database_id, this.$route.params.table_id, (this.options.page - 1), this.options.itemsPerPage, (this.versionISO || this.lastReload.toISOString())) .then((data) => { this.rows = data.result.map((row) => { for (const col in row) { @@ -291,7 +291,7 @@ export default { }, loadCount () { this.loadingData++ - TableService.dataCount(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, (this.versionISO || this.lastReload.toISOString())) + TableService.dataCount(this.$route.params.database_id, this.$route.params.table_id, (this.versionISO || this.lastReload.toISOString())) .then((count) => { this.total = count }) diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/import.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/import.vue similarity index 89% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/import.vue rename to dbrepo-ui/pages/database/_database_id/table/_table_id/import.vue index d2caacbd0d4240577285a4f82f76e9db4e88e703..2a1a53d73c657c54bba05144aca290c4f8360b94 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/import.vue +++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/import.vue @@ -2,7 +2,7 @@ <div v-if="canInsertTableData"> <v-toolbar flat> <v-toolbar-title> - <v-btn id="back-btn" class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`"> + <v-btn id="back-btn" class="mr-2" :to="`/database/${$route.params.database_id}/table`"> <v-icon left>mdi-arrow-left</v-icon> </v-btn> </v-toolbar-title> @@ -144,10 +144,10 @@ export default { }, fileModel: null, items: [ - { text: 'Databases', to: '/container', activeClass: '' }, + { text: 'Databases', to: '/database', activeClass: '' }, { text: `${this.$route.params.database_id}`, - to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, + to: `/database/${this.$route.params.database_id}/info`, activeClass: '' } ] @@ -189,10 +189,10 @@ export default { .then((file) => { this.file = file this.tableImport.location = `/tmp/${this.file.filename}` - QueryService.importCsv(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id, this.tableImport) + QueryService.importCsv(this.$route.params.database_id, this.$route.params.table_id, this.tableImport) .then(() => { this.$toast.success('Successfully imported data') - this.$router.push(`/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`) + this.$router.push(`/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`) }) .finally(() => { this.loading = false @@ -207,7 +207,7 @@ export default { }, loadTableMetadata () { this.loading = true - TableService.findOne(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id) + TableService.findOne(this.$route.params.database_id, this.$route.params.table_id) .then((table) => { this.table = table }) diff --git a/dbrepo-ui/pages/database/_database_id/table/_table_id/index.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..21e09b79c055c97599484c4f1ad02cc71f789480 --- /dev/null +++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/index.vue @@ -0,0 +1,10 @@ +<template> + <div /> +</template> +<script> +export default { + mounted () { + this.$router.push(`/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}/info`) + } +} +</script> diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/info.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue similarity index 91% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/info.vue rename to dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue index 13fd4569163b0a6d08979ba84c2e660c654c80bd..4f57d6130a78d8b80572dfb6e501656a14b768f4 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/info.vue +++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/info.vue @@ -93,7 +93,7 @@ </div> </template> <script> -import TableToolbar from '@/components/TableToolbar' +import TableToolbar from '@/components/TableToolbar.vue' import { formatTimestampUTCLabel } from '@/utils' import BrokerService from '@/api/broker.service' import UserMapper from '@/api/user.mapper' @@ -107,10 +107,10 @@ export default { selection: [], consumers: [], items: [ - { text: 'Databases', to: '/container', activeClass: '' }, - { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, activeClass: '' }, - { text: 'Tables', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' }, - { text: `${this.$route.params.table_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' } + { text: 'Databases', to: '/database', activeClass: '' }, + { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}/info`, activeClass: '' }, + { text: 'Tables', to: `/database/${this.$route.params.database_id}/table`, activeClass: '' }, + { text: `${this.$route.params.table_id}`, to: `/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' } ], headers: [], dateColumns: [] diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/schema.vue b/dbrepo-ui/pages/database/_database_id/table/_table_id/schema.vue similarity index 88% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/schema.vue rename to dbrepo-ui/pages/database/_database_id/table/_table_id/schema.vue index 54d91815591affdff3feea672bc6a1d478725dbb..9c2551938da01952a6cb92648c50d46880c5ebcf 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/_table_id/schema.vue +++ b/dbrepo-ui/pages/database/_database_id/table/_table_id/schema.vue @@ -76,7 +76,7 @@ </div> </template> <script> -import TableToolbar from '@/components/TableToolbar' +import TableToolbar from '@/components/TableToolbar.vue' import TableService from '@/api/table.service' export default { @@ -90,10 +90,10 @@ export default { mode: null, dialogSemantic: false, items: [ - { text: 'Databases', to: '/container', activeClass: '' }, - { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, activeClass: '' }, - { text: 'Tables', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' }, - { text: `${this.$route.params.table_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' } + { text: 'Databases', to: '/database', activeClass: '' }, + { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}/info`, activeClass: '' }, + { text: 'Tables', to: `/database/${this.$route.params.database_id}/table`, activeClass: '' }, + { text: `${this.$route.params.table_id}`, to: `/database/${this.$route.params.database_id}/table/${this.$route.params.table_id}`, activeClass: '' } ], headers: [ { value: 'internal_name', text: 'Column Name' }, @@ -207,11 +207,11 @@ export default { this.dialogSemantic = false }, loadTable () { - if (!this.$route.params.container_id || !this.$route.params.database_id || !this.$route.params.table_id) { + if (!this.$route.params.database_id || !this.$route.params.table_id) { return } this.loading = true - TableService.findOne(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.table_id) + TableService.findOne(this.$route.params.database_id, this.$route.params.table_id) .then((table) => { this.$store.commit('SET_TABLE', table) }) diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/create.vue b/dbrepo-ui/pages/database/_database_id/table/create.vue similarity index 88% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/create.vue rename to dbrepo-ui/pages/database/_database_id/table/create.vue index 728b71f7da98533038eacc60818a209c104cbda4..9ae7e955cd2547f34ddc9c4d73a9990eb20d2cda 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/create.vue +++ b/dbrepo-ui/pages/database/_database_id/table/create.vue @@ -2,7 +2,7 @@ <div v-if="canCreateTable"> <v-toolbar flat> <v-toolbar-title> - <v-btn id="back-btn" class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`"> + <v-btn id="back-btn" class="mr-2" :to="`/database/${$route.params.database_id}/table`"> <v-icon left>mdi-arrow-left</v-icon> </v-btn> </v-toolbar-title> @@ -59,7 +59,7 @@ </template> <script> -import TableSchema from '@/components/TableSchema' +import TableSchema from '@/components/TableSchema.vue' import { notEmpty } from '@/utils' import TableService from '@/api/table.service' @@ -82,13 +82,13 @@ export default { columns: [] }, items: [ - { text: 'Databases', to: '/container', activeClass: '' }, + { text: 'Databases', to: '/database', activeClass: '' }, { text: `${this.$route.params.database_id}`, - to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, + to: `/database/${this.$route.params.database_id}/info`, activeClass: '' }, - { text: 'Tables', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' } + { text: 'Tables', to: `/database/${this.$route.params.database_id}/table`, activeClass: '' } ] } }, @@ -186,11 +186,11 @@ export default { checks: [] } }) - TableService.create(this.$route.params.container_id, this.$route.params.database_id, table) + TableService.create(this.$route.params.database_id, table) .then(async (table) => { this.$toast.success('Table created') await this.$store.dispatch('reloadDatabase') - await this.$router.push(`/container/${this.$route.params.container_id}/database/${this.databaseId}/table/${table.id}`) + await this.$router.push(`/database/${this.databaseId}/table/${table.id}`) }) }, schemaClose (event) { diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue b/dbrepo-ui/pages/database/_database_id/table/import.vue similarity index 90% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue rename to dbrepo-ui/pages/database/_database_id/table/import.vue index d3358405f24c508851ee038966de1f6260329d9f..ce7e0951b4ab6690acad620501122343fc410785 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/import.vue +++ b/dbrepo-ui/pages/database/_database_id/table/import.vue @@ -2,7 +2,7 @@ <div v-if="canInsertTableData"> <v-toolbar flat> <v-toolbar-title> - <v-btn id="back-btn" class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table`"> + <v-btn id="back-btn" class="mr-2" :to="`/database/${$route.params.database_id}/table`"> <v-icon left>mdi-arrow-left</v-icon> </v-btn> </v-toolbar-title> @@ -183,7 +183,7 @@ </v-stepper-step> <v-stepper-content step="5"> <div class="mt-2"> - <v-btn class="mb-1" color="primary" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/table/${newTableId}`"> + <v-btn class="mb-1" color="primary" :to="`/database/${$route.params.database_id}/table/${newTableId}`"> View Table </v-btn> </div> @@ -194,11 +194,11 @@ </template> <script> import { notEmpty, isNonNegativeInteger } from '@/utils' -import TableSchema from '@/components/TableSchema' -import ContainerService from '@/api/container.service' +import TableSchema from '@/components/TableSchema.vue' import TableService from '@/api/table.service' import MiddlewareService from '@/api/middleware.service' import AnalyseService from '@/api/analyse.service' +import DatabaseService from '@/api/database.service' export default { name: 'TableFromCSV', @@ -228,13 +228,13 @@ export default { { key: 'Single \'', value: '\'' } ], items: [ - { text: 'Databases', to: '/container', activeClass: '' }, + { text: 'Databases', to: '/database', activeClass: '' }, { text: `${this.$route.params.database_id}`, - to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, + to: `/database/${this.$route.params.database_id}/info`, activeClass: '' }, - { text: 'Tables', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' } + { text: 'Tables', to: `/database/${this.$route.params.database_id}/table`, activeClass: '' } ], rules: { required: value => !!value || 'Required' @@ -358,7 +358,7 @@ export default { }, listTables () { this.loading = true - TableService.findAll(this.$route.params.container_id, this.$route.params.database_id) + TableService.findAll(this.$route.params.database_id) .then((tables) => { this.tableNames = tables.map(t => t.internal_name) }) @@ -375,18 +375,14 @@ export default { this.validStep4 = true this.createTable() }, - loadDateFormats () { + async loadDateFormats () { this.loadingImage = true - ContainerService.findOne(this.$route.params.container_id) - .then((container) => { - ContainerService.findImage(container.image.id) - .then((image) => { - this.dateFormats = image.date_formats - }) - }) - .finally(() => { - this.loadingImage = true - }) + try { + const database = await DatabaseService.findOne(this.$route.params.database_id) + this.dateFormats = database.container.image.date_formats + } finally { + this.localLoading = false + } }, createTable () { /* make enum values to array */ @@ -441,10 +437,10 @@ export default { checks: [] } }) - TableService.create(this.$route.params.container_id, this.$route.params.database_id, table) + TableService.create(this.$route.params.database_id, table) .then((table) => { this.newTableId = table.id - TableService.importCsv(this.$route.params.container_id, this.$route.params.database_id, table.id, this.tableImport) + TableService.importCsv(this.$route.params.database_id, table.id, this.tableImport) .then(async () => { this.$toast.success('Successfully created table from import!') await this.$store.dispatch('reloadDatabase') diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/index.vue b/dbrepo-ui/pages/database/_database_id/table/index.vue similarity index 61% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/table/index.vue rename to dbrepo-ui/pages/database/_database_id/table/index.vue index 04026449a9340b394bc3f7e37e2210b2e9db71da..eefef940365e7ab8793d9964716d968de8676633 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/table/index.vue +++ b/dbrepo-ui/pages/database/_database_id/table/index.vue @@ -8,8 +8,8 @@ </div> </template> <script> -import TableList from '@/components/TableList' -import DBToolbar from '@/components/DBToolbar' +import TableList from '@/components/TableList.vue' +import DBToolbar from '@/components/DBToolbar.vue' export default { name: 'Tables', @@ -21,8 +21,8 @@ export default { return { db: null, items: [ - { text: 'Databases', to: '/container', activeClass: '' }, - { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' } + { text: 'Databases', to: '/database', activeClass: '' }, + { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}/table`, activeClass: '' } ] } }, diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/_view_id/index.vue b/dbrepo-ui/pages/database/_database_id/view/_view_id/index.vue similarity index 88% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/view/_view_id/index.vue rename to dbrepo-ui/pages/database/_database_id/view/_view_id/index.vue index 9d95d70e3df1c8fdf6bbdd1d11e97379f4cd8ae8..8cd7fbee4321f507e5216870a3b9023aef70b0cd 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/_view_id/index.vue +++ b/dbrepo-ui/pages/database/_database_id/view/_view_id/index.vue @@ -2,7 +2,7 @@ <div> <v-toolbar flat> <v-toolbar-title> - <v-btn id="back-btn" class="mr-2" :to="`/container/${$route.params.container_id}/database/${$route.params.database_id}/view`"> + <v-btn id="back-btn" class="mr-2" :to="`/database/${$route.params.database_id}/view`"> <v-icon left>mdi-arrow-left</v-icon> </v-btn> </v-toolbar-title> @@ -111,10 +111,10 @@ export default { data () { return { items: [ - { text: 'Databases', to: '/container', activeClass: '' }, - { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}`, activeClass: '' }, - { text: 'Views', to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/view`, activeClass: '' }, - { text: `${this.$route.params.view_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/view/${this.$route.params.view_id}`, activeClass: '' } + { text: 'Databases', to: '/database', activeClass: '' }, + { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}`, activeClass: '' }, + { text: 'Views', to: `/database/${this.$route.params.database_id}/view`, activeClass: '' }, + { text: `${this.$route.params.view_id}`, to: `/database/${this.$route.params.database_id}/view/${this.$route.params.view_id}`, activeClass: '' } ], view: { id: null /* only loaded if user has access to view */ @@ -175,7 +175,7 @@ export default { methods: { loadView () { this.loadingView = true - DatabaseService.findView(this.$route.params.container_id, this.$route.params.database_id, this.$route.params.view_id) + DatabaseService.findView(this.$route.params.database_id, this.$route.params.view_id) .then((view) => { this.view = view }) diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/create.vue b/dbrepo-ui/pages/database/_database_id/view/create.vue similarity index 70% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/view/create.vue rename to dbrepo-ui/pages/database/_database_id/view/create.vue index 7c06ccead7615ab69747ccfed5d5c9def86514b0..18da418db83a36c58c0e8811470b77538c4840e8 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/create.vue +++ b/dbrepo-ui/pages/database/_database_id/view/create.vue @@ -10,15 +10,15 @@ export default { data () { return { items: [ - { text: 'Databases', to: '/container', activeClass: '' }, + { text: 'Databases', to: '/database', activeClass: '' }, { text: `${this.$route.params.database_id}`, - to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/info`, + to: `/database/${this.$route.params.database_id}/info`, activeClass: '' }, { text: 'Views', - to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/view`, + to: `/database/${this.$route.params.database_id}/view`, activeClass: '' } ] diff --git a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/index.vue b/dbrepo-ui/pages/database/_database_id/view/index.vue similarity index 59% rename from dbrepo-ui/pages/container/_container_id/database/_database_id/view/index.vue rename to dbrepo-ui/pages/database/_database_id/view/index.vue index 3001dc4adc2649aed8718cd56f2904eb51571a79..9c53dd3fe2c6b91f981ed209e67f0a76feb2f847 100644 --- a/dbrepo-ui/pages/container/_container_id/database/_database_id/view/index.vue +++ b/dbrepo-ui/pages/database/_database_id/view/index.vue @@ -8,8 +8,8 @@ </div> </template> <script> -import DBToolbar from '@/components/DBToolbar' -import ViewList from '@/components/ViewList' +import DBToolbar from '@/components/DBToolbar.vue' +import ViewList from '@/components/ViewList.vue' export default { name: 'Views', @@ -21,8 +21,8 @@ export default { return { db: null, items: [ - { text: 'Databases', to: '/container', activeClass: '' }, - { text: `${this.$route.params.database_id}`, to: `/container/${this.$route.params.container_id}/database/${this.$route.params.database_id}/table`, activeClass: '' } + { text: 'Databases', to: '/database', activeClass: '' }, + { text: `${this.$route.params.database_id}`, to: `/database/${this.$route.params.database_id}/table`, activeClass: '' } ] } }, diff --git a/dbrepo-ui/pages/container/index.vue b/dbrepo-ui/pages/database/index.vue similarity index 88% rename from dbrepo-ui/pages/container/index.vue rename to dbrepo-ui/pages/database/index.vue index 1c1735c6818bdbe5addb6556e483ba36a9e9e9f2..b8287a1821831da3c2511f92d3a83124912171a9 100644 --- a/dbrepo-ui/pages/container/index.vue +++ b/dbrepo-ui/pages/database/index.vue @@ -23,8 +23,8 @@ </template> <script> import { mdiDatabaseArrowRightOutline } from '@mdi/js' -import CreateDB from '@/components/dialogs/CreateDB' -import DatabaseList from '@/components/DatabaseList' +import CreateDB from '@/components/dialogs/CreateDB.vue' +import DatabaseList from '@/components/DatabaseList.vue' export default { components: { @@ -41,7 +41,7 @@ export default { is_public: true }, items: [ - { text: 'Databases', to: '/container', activeClass: '' } + { text: 'Databases', to: '/database', activeClass: '' } ], loadingDatabases: false, error: false, @@ -77,7 +77,7 @@ export default { closed (event) { this.createDbDialog = false if (event.success) { - this.$refs.databases.loadContainers() + this.$refs.databases.loadDatabases() } } } diff --git a/dbrepo-ui/pages/index.vue b/dbrepo-ui/pages/index.vue index bbe24a3a338e1dd36ce6155b7b37a4c668ab3930..46d3e3626b0547a6f95fdd3e08707f81921848fb 100644 --- a/dbrepo-ui/pages/index.vue +++ b/dbrepo-ui/pages/index.vue @@ -28,7 +28,7 @@ <v-btn class="ml-2 mb-2" color="primary" - to="/container"> + to="/database"> Get Started </v-btn> </v-card-actions> diff --git a/dbrepo-ui/pages/login.vue b/dbrepo-ui/pages/login.vue index 23944a38039347ecd81d7cb6834750c4785c6a7c..1da06f2f51cf96803ff8e5c498e054fd49eac708 100644 --- a/dbrepo-ui/pages/login.vue +++ b/dbrepo-ui/pages/login.vue @@ -83,7 +83,7 @@ export default { }, mounted () { if (this.token) { - this.$router.push('/container') + this.$router.push('/database') } }, methods: { @@ -99,7 +99,7 @@ export default { .then(async (user) => { this.$store.commit('SET_USER', user) this.$vuetify.theme.dark = user.attributes.theme_dark - await this.$router.push('/container') + await this.$router.push('/database') }) }) .catch(() => { diff --git a/dbrepo-ui/pages/search/index.vue b/dbrepo-ui/pages/search/index.vue index b812900945a5d81897cddc251086bebdc311db9c..4ba9babe4872bd6bb56af7703831d14f8124b98b 100644 --- a/dbrepo-ui/pages/search/index.vue +++ b/dbrepo-ui/pages/search/index.vue @@ -179,16 +179,16 @@ export default { }, link (item) { if (this.isDatabase(item)) { - return `/container/${item.id}/database/${item.id}` + return `/database/${item.id}` } if (this.isTable(item)) { - return `/container/${item.containerId}/database/${item.databaseId}/table/${item.id}` + return `/database/${item.databaseId}/table/${item.id}` } if (this.isView(item)) { - return `/container/${item.vdbid}/database/${item.vdbid}/view/${item.id}` + return `/database/${item.vdbid}/view/${item.id}` } if (this.isColumn(item)) { - return `/container/${item.cdbid}/database/${item.cdbid}/table/${item.tid}` + return `/database/${item.cdbid}/table/${item.tid}` } if (this.isIdentifier(item)) { return `/pid/${item.id}` diff --git a/dbrepo-ui/store/index.js b/dbrepo-ui/store/index.js index b1d9ebfa36c83b2c94b91b2466b054f9cfdc7c6e..cd3b41bdda5f2e77cabbfd109efe8787f28d04b5 100644 --- a/dbrepo-ui/store/index.js +++ b/dbrepo-ui/store/index.js @@ -74,19 +74,19 @@ const store = new Store({ }) }, reloadAccess ({ state, commit }) { - DatabaseService.checkAccess(state.container.id, state.database.id) + DatabaseService.checkAccess(state.database.id) .then((access) => { commit('SET_ACCESS', access) }) }, reloadDatabase ({ state, commit }) { - DatabaseService.findOne(state.database.container.id, state.database.id) + DatabaseService.findOne(state.database.id) .then((database) => { commit('SET_DATABASE', database) }) }, reloadTable ({ state, commit }) { - TableService.findOne(state.database.container.id, state.database.id, state.table.id) + TableService.findOne(state.database.id, state.table.id) .then((table) => { commit('SET_TABLE', table) })