diff --git a/.docs/.swagger/api-container.yaml b/.docs/.swagger/api-container.yaml new file mode 100644 index 0000000000000000000000000000000000000000..2102e2f63cab2048d1c546149d233b3c141faf6d --- /dev/null +++ b/.docs/.swagger/api-container.yaml @@ -0,0 +1,2410 @@ +openapi: 3.0.1 +info: + title: Database Repository Container Service API + description: Service that manages the containers + contact: + name: Prof. Andreas Rauber + email: andreas.rauber@tuwien.ac.at + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0 + version: 1.2.0 +externalDocs: + description: Sourcecode Documentation + url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services +servers: +- url: http://localhost:9092 + description: Generated server url +- url: https://dbrepo2.tuwien.ac.at + description: Sandbox +paths: + /api/image/{id}: + get: + tags: + - image-endpoint + summary: Find some image + operationId: findById + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "200": + description: Found image + content: + application/json: + schema: + $ref: '#/components/schemas/ImageDto' + "404": + description: Image could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + put: + tags: + - image-endpoint + summary: Update some image + operationId: update + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ImageChangeDto' + required: true + responses: + "202": + description: Updated image successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ImageDto' + "404": + description: Image could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + delete: + tags: + - image-endpoint + summary: Delete some image + operationId: delete + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "202": + description: Deleted image successfully + "404": + description: Image could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container/{id}: + get: + tags: + - container-endpoint + summary: Find some container + operationId: findById_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "502": + description: Docker client failed to connect + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Found container + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerDto' + "404": + description: Container image could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + put: + tags: + - container-endpoint + summary: Modify some container + operationId: modify + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerChangeDto' + required: true + responses: + "409": + description: Container is already started/stopped + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Container or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Modification of container state is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Modified state of container successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerBriefDto' + security: + - bearerAuth: [] + delete: + tags: + - container-endpoint + summary: Delete some container + operationId: delete_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "410": + description: Container is already removed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Container is still running + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Deleted container successfully + security: + - bearerAuth: [] + /api/image: + get: + tags: + - image-endpoint + summary: Find all images + operationId: findAll + responses: + "200": + description: List images + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ContainerImage' + post: + tags: + - image-endpoint + summary: Create image + operationId: create + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ImageCreateDto' + required: true + responses: + "201": + description: Created image + content: + application/json: + schema: + $ref: '#/components/schemas/ImageDto' + "404": + description: User could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Image specification is invalid + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "502": + description: Docker client failed to connect + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Image already exists + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container: + get: + tags: + - container-endpoint + summary: Find all containers + operationId: findAll_1 + parameters: + - name: limit + in: query + required: false + schema: + type: integer + format: int32 + responses: + "200": + description: List containers + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ContainerBriefDto' + post: + tags: + - container-endpoint + summary: Create container + operationId: create_1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerCreateRequestDto' + required: true + responses: + "201": + description: Created a new container + content: + application/json: + schema: + $ref: '#/components/schemas/ContainerBriefDto' + "404": + description: Container image or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Container name already exists + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "502": + description: Docker client failed to connect + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] +components: + schemas: + ImageChangeDto: + required: + - dialect + - driver_class + - jdbc_method + - registry + type: object + properties: + registry: + type: string + example: docker.io/library + defaultPort: + maximum: 65535 + minimum: 1024 + type: integer + format: int32 + example: 5432 + environment: + type: array + items: + $ref: '#/components/schemas/ImageEnvItemDto' + dialect: + type: string + example: Postgres + driver_class: + type: string + example: org.postgresql.Driver + jdbc_method: + type: string + example: postgresql + ImageEnvItemDto: + required: + - iid + - key + - type + type: object + properties: + iid: + type: integer + format: int64 + key: + type: string + example: MARIADB_ROOT_PASSWORD + type: + type: string + example: PRIVILEGED_PASSWORD + enum: + - username + - password + - privileged_username + - privileged_password + ImageDateDto: + required: + - database_format + - example + - has_time + - id + - unix_format + type: object + properties: + id: + type: integer + format: int64 + example: + type: string + example: 30.01.2022 + database_format: + type: string + example: '%d.%c.%Y' + unix_format: + type: string + example: dd.MM.YYYY + has_time: + type: boolean + example: false + created_at: + type: string + format: date-time + ImageDto: + required: + - default_port + - dialect + - driver_class + - id + - jdbc_method + - registry + - repository + - tag + type: object + properties: + id: + type: integer + format: int64 + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + dialect: + type: string + example: org.hibernate.dialect.MariaDBDialect + hash: + type: string + example: sha256:c5ec7353d87dfc35067e7bffeb25d6a0d52dad41e8b7357213e3b12d6e7ff78e + compiled: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + size: + type: integer + example: 314295447 + driver_class: + type: string + example: org.mariadb.jdbc.Driver + date_formats: + type: array + items: + $ref: '#/components/schemas/ImageDateDto' + jdbc_method: + type: string + example: mariadb + default_port: + type: integer + format: int32 + example: 3306 + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code + ContainerChangeDto: + required: + - action + type: object + properties: + action: + type: string + enum: + - start + - stop + ContainerBriefDto: + required: + - creator + - hash + - id + - internal_name + - name + - running + type: object + properties: + id: + type: integer + format: int64 + hash: + type: string + example: f829dd8a884182d0da846f365dee1221fd16610a14c81b8f9f295ff162749e50 + name: + type: string + example: Air Quality + creator: + $ref: '#/components/schemas/UserBriefDto' + running: + type: boolean + example: true + database: + $ref: '#/components/schemas/DatabaseBriefDto' + created: + type: string + format: date-time + internal_name: + type: string + example: air-quality + CreatorBriefDto: + required: + - firstname + - lastname + type: object + properties: + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + DatabaseBriefDto: + required: + - id + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + description: + type: string + example: Air Quality in Austria + identifier: + $ref: '#/components/schemas/IdentifierBriefDto' + engine: + type: string + example: mariadb:10.5 + owner: + $ref: '#/components/schemas/UserBriefDto' + container: + $ref: '#/components/schemas/ContainerBriefDto' + creator: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + is_public: + type: boolean + example: true + IdentifierBriefDto: + required: + - container id + - creators + - database id + - id + - publication_year + - title + - type + type: object + properties: + id: + type: integer + format: int64 + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + type: + type: string + enum: + - database + - subset + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + creators: + type: array + items: + $ref: '#/components/schemas/CreatorBriefDto' + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + publication_year: + type: integer + format: int32 + example: 2022 + UserBriefDto: + required: + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + ImageCreateDto: + required: + - default_port + - dialect + - driver_class + - jdbc_method + - registry + - repository + - tag + type: object + properties: + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + dialect: + type: string + environment: + type: array + items: + $ref: '#/components/schemas/ImageEnvItemDto' + driver_class: + type: string + jdbc_method: + type: string + default_port: + maximum: 65535 + minimum: 1024 + type: integer + format: int32 + ContainerCreateRequestDto: + required: + - name + - repository + - tag + type: object + properties: + name: + type: string + example: Air Quality + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + Constraints: + type: object + properties: + uniques: + type: array + items: + $ref: '#/components/schemas/Unique' + foreignKeys: + type: array + items: + $ref: '#/components/schemas/ForeignKey' + checks: + uniqueItems: true + type: array + items: + type: string + Container: + type: object + properties: + id: + type: integer + format: int64 + createdBy: + type: string + format: uuid + creator: + $ref: '#/components/schemas/User' + ownedBy: + type: string + format: uuid + owner: + $ref: '#/components/schemas/User' + name: + type: string + internalName: + type: string + hash: + type: string + imageId: + type: integer + format: int64 + port: + type: integer + format: int32 + database: + $ref: '#/components/schemas/Database' + image: + $ref: '#/components/schemas/ContainerImage' + ipAddress: + type: string + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + ContainerImage: + type: object + properties: + id: + type: integer + format: int64 + repository: + type: string + registry: + type: string + tag: + type: string + driverClass: + type: string + dialect: + type: string + jdbcMethod: + type: string + hash: + type: string + compiled: + type: string + format: date-time + size: + type: integer + format: int64 + defaultPort: + type: integer + format: int32 + environment: + type: array + items: + $ref: '#/components/schemas/ContainerImageEnvironmentItem' + dateFormats: + type: array + items: + $ref: '#/components/schemas/ContainerImageDate' + containers: + type: array + items: + $ref: '#/components/schemas/Container' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + ContainerImageDate: + type: object + properties: + id: + type: integer + format: int64 + iid: + type: integer + format: int64 + image: + $ref: '#/components/schemas/ContainerImage' + example: + type: string + hasTime: + type: boolean + databaseFormat: + type: string + unixFormat: + type: string + createdAt: + type: string + format: date-time + ContainerImageEnvironmentItem: + type: object + properties: + id: + type: integer + format: int64 + iid: + type: integer + format: int64 + key: + type: string + value: + type: string + type: + type: string + enum: + - USERNAME + - PASSWORD + - PRIVILEGED_USERNAME + - PRIVILEGED_PASSWORD + image: + $ref: '#/components/schemas/ContainerImage' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + Creator: + type: object + properties: + id: + type: integer + format: int64 + pid: + type: integer + format: int64 + firstname: + type: string + lastname: + type: string + affiliation: + type: string + orcid: + type: string + identifier: + $ref: '#/components/schemas/Identifier' + created: + type: string + format: date-time + creator: + $ref: '#/components/schemas/User' + lastModified: + type: string + format: date-time + Credential: + type: object + properties: + id: + type: string + format: uuid + type: + type: string + userId: + type: string + format: uuid + createdDate: + type: integer + format: int64 + secretData: + type: string + credentialData: + type: string + priority: + type: integer + format: int32 + user: + $ref: '#/components/schemas/User' + Database: + type: object + properties: + id: + type: integer + format: int64 + createdBy: + type: string + format: uuid + creator: + $ref: '#/components/schemas/User' + ownedBy: + type: string + format: uuid + owner: + $ref: '#/components/schemas/User' + container: + $ref: '#/components/schemas/Container' + name: + type: string + internalName: + type: string + exchangeName: + type: string + description: + type: string + contactPerson: + type: string + format: uuid + contact: + $ref: '#/components/schemas/User' + identifier: + $ref: '#/components/schemas/Identifier' + tables: + type: array + items: + $ref: '#/components/schemas/Table' + views: + type: array + items: + $ref: '#/components/schemas/View' + isPublic: + type: boolean + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + ForeignKey: + type: object + properties: + fkid: + type: integer + format: int64 + tid: + type: integer + format: int64 + tdbid: + type: integer + format: int64 + table: + $ref: '#/components/schemas/Table' + rtid: + type: integer + format: int64 + rtdbid: + type: integer + format: int64 + referencedTable: + $ref: '#/components/schemas/Table' + references: + type: array + items: + $ref: '#/components/schemas/ForeignKeyReference' + onUpdate: + type: string + enum: + - ReferenceType.RESTRICT + - ReferenceType.CASCADE + - ReferenceType.SET_NULL + - ReferenceType.NO_ACTION + - ReferenceType.SET_DEFAULT + onDelete: + type: string + enum: + - ReferenceType.RESTRICT + - ReferenceType.CASCADE + - ReferenceType.SET_NULL + - ReferenceType.NO_ACTION + - ReferenceType.SET_DEFAULT + ForeignKeyReference: + type: object + properties: + id: + type: integer + format: int64 + foreignKey: + $ref: '#/components/schemas/ForeignKey' + column: + $ref: '#/components/schemas/TableColumn' + referencedColumn: + $ref: '#/components/schemas/TableColumn' + Identifier: + required: + - publisher + type: object + properties: + id: + type: integer + format: int64 + containerId: + type: integer + format: int64 + databaseId: + type: integer + format: int64 + queryId: + type: integer + format: int64 + creator: + $ref: '#/components/schemas/User' + title: + type: string + description: + type: string + publisher: + type: string + language: + type: string + enum: + - LanguageType.AB + - LanguageType.AA + - LanguageType.AF + - LanguageType.AK + - LanguageType.SQ + - LanguageType.AM + - LanguageType.AR + - LanguageType.AN + - LanguageType.HY + - LanguageType.AS + - LanguageType.AV + - LanguageType.AE + - LanguageType.AY + - LanguageType.AZ + - LanguageType.BM + - LanguageType.BA + - LanguageType.EU + - LanguageType.BE + - LanguageType.BN + - LanguageType.BH + - LanguageType.BI + - LanguageType.BS + - LanguageType.BR + - LanguageType.BG + - LanguageType.MY + - LanguageType.CA + - LanguageType.KM + - LanguageType.CH + - LanguageType.CE + - LanguageType.NY + - LanguageType.ZH + - LanguageType.CU + - LanguageType.CV + - LanguageType.KW + - LanguageType.CO + - LanguageType.CR + - LanguageType.HR + - LanguageType.CS + - LanguageType.DA + - LanguageType.DV + - LanguageType.NL + - LanguageType.DZ + - LanguageType.EN + - LanguageType.EO + - LanguageType.ET + - LanguageType.EE + - LanguageType.FO + - LanguageType.FJ + - LanguageType.FI + - LanguageType.FR + - LanguageType.FF + - LanguageType.GD + - LanguageType.GL + - LanguageType.LG + - LanguageType.KA + - LanguageType.DE + - LanguageType.KI + - LanguageType.EL + - LanguageType.KL + - LanguageType.GN + - LanguageType.GU + - LanguageType.HT + - LanguageType.HA + - LanguageType.HE + - LanguageType.HZ + - LanguageType.HI + - LanguageType.HO + - LanguageType.HU + - LanguageType.IS + - LanguageType.IO + - LanguageType.IG + - LanguageType.ID + - LanguageType.IA + - LanguageType.IE + - LanguageType.IU + - LanguageType.IK + - LanguageType.GA + - LanguageType.IT + - LanguageType.JA + - LanguageType.JV + - LanguageType.KN + - LanguageType.KR + - LanguageType.KS + - LanguageType.KK + - LanguageType.RW + - LanguageType.KV + - LanguageType.KG + - LanguageType.KO + - LanguageType.KJ + - LanguageType.KU + - LanguageType.KY + - LanguageType.LO + - LanguageType.LA + - LanguageType.LV + - LanguageType.LB + - LanguageType.LI + - LanguageType.LN + - LanguageType.LT + - LanguageType.LU + - LanguageType.MK + - LanguageType.MG + - LanguageType.MS + - LanguageType.ML + - LanguageType.MT + - LanguageType.GV + - LanguageType.MI + - LanguageType.MR + - LanguageType.MH + - LanguageType.RO + - LanguageType.MN + - LanguageType.NA + - LanguageType.NV + - LanguageType.ND + - LanguageType.NG + - LanguageType.NE + - LanguageType.SE + - LanguageType.NO + - LanguageType.NB + - LanguageType.NN + - LanguageType.II + - LanguageType.OC + - LanguageType.OJ + - LanguageType.OR + - LanguageType.OM + - LanguageType.OS + - LanguageType.PI + - LanguageType.PA + - LanguageType.PS + - LanguageType.FA + - LanguageType.PL + - LanguageType.PT + - LanguageType.QU + - LanguageType.RM + - LanguageType.RN + - LanguageType.RU + - LanguageType.SM + - LanguageType.SG + - LanguageType.SA + - LanguageType.SC + - LanguageType.SR + - LanguageType.SN + - LanguageType.SD + - LanguageType.SI + - LanguageType.SK + - LanguageType.SL + - LanguageType.SO + - LanguageType.ST + - LanguageType.NR + - LanguageType.ES + - LanguageType.SU + - LanguageType.SW + - LanguageType.SS + - LanguageType.SV + - LanguageType.TL + - LanguageType.TY + - LanguageType.TG + - LanguageType.TA + - LanguageType.TT + - LanguageType.TE + - LanguageType.TH + - LanguageType.BO + - LanguageType.TI + - LanguageType.TO + - LanguageType.TS + - LanguageType.TN + - LanguageType.TR + - LanguageType.TK + - LanguageType.TW + - LanguageType.UG + - LanguageType.UK + - LanguageType.UR + - LanguageType.UZ + - LanguageType.VE + - LanguageType.VI + - LanguageType.VO + - LanguageType.WA + - LanguageType.CY + - LanguageType.FY + - LanguageType.WO + - LanguageType.XH + - LanguageType.YI + - LanguageType.YO + - LanguageType.ZA + - LanguageType.ZU + license: + $ref: '#/components/schemas/License' + type: + type: string + enum: + - DATABASE + - SUBSET + query: + type: string + queryNormalized: + type: string + queryHash: + type: string + resultHash: + type: string + execution: + type: string + format: date-time + resultNumber: + type: integer + format: int64 + publicationYear: + type: integer + format: int32 + publicationMonth: + type: integer + format: int32 + publicationDay: + type: integer + format: int32 + visibility: + type: string + enum: + - VisibilityType.EVERYONE + - VisibilityType.SELF + database: + $ref: '#/components/schemas/Database' + related: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifier' + doi: + type: string + creators: + type: array + items: + $ref: '#/components/schemas/Creator' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + License: + type: object + properties: + identifier: + type: string + uri: + type: string + RelatedIdentifier: + type: object + properties: + id: + type: integer + format: int64 + iid: + type: integer + format: int64 + value: + type: string + type: + type: string + enum: + - DOI + - URL + - URN + - ARK + - arXiv + - bibcode + - EAN13 + - EISSN + - Handle + - IGSN + - ISBN + - ISTC + - LISSN + - LSID + - PMID + - PURL + - UPC + - w3id + relation: + type: string + enum: + - IsCitedBy + - Cites + - IsSupplementTo + - IsSupplementedBy + - IsContinuedBy + - Continues + - IsDescribedBy + - Describes + - HasMetadata + - IsMetadataFor + - HasVersion + - IsVersionOf + - IsNewVersionOf + - IsPreviousVersionOf + - IsPartOf + - HasPart + - IsPublishedIn + - IsReferencedBy + - References + - IsDocumentedBy + - Documents + - IsCompiledBy + - Compiles + - IsVariantFormOf + - IsOriginalFormOf + - IsIdenticalTo + - IsReviewedBy + - Reviews + - IsDerivedFrom + - IsSourceOf + - IsRequiredBy + - Requires + - IsObsoletedBy + - Obsoletes + creator: + $ref: '#/components/schemas/User' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + Role: + type: object + properties: + id: + type: string + format: uuid + name: + type: string + realmId: + type: string + format: uuid + users: + type: array + items: + $ref: '#/components/schemas/User' + Table: + type: object + properties: + id: + type: integer + format: int64 + tdbid: + type: integer + format: int64 + creator: + $ref: '#/components/schemas/User' + owner: + $ref: '#/components/schemas/User' + name: + type: string + internalName: + type: string + queueName: + type: string + routingKey: + type: string + description: + type: string + database: + $ref: '#/components/schemas/Database' + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + constraints: + $ref: '#/components/schemas/Constraints' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + TableColumn: + type: object + properties: + id: + type: integer + format: int64 + tid: + type: integer + format: int64 + cdbid: + type: integer + format: int64 + dfid: + type: integer + format: int64 + dateFormat: + $ref: '#/components/schemas/ContainerImageDate' + table: + $ref: '#/components/schemas/Table' + view: + $ref: '#/components/schemas/View' + creator: + $ref: '#/components/schemas/User' + name: + type: string + autoGenerated: + type: boolean + internalName: + type: string + isPrimaryKey: + type: boolean + indexLength: + type: integer + format: int32 + alias: + type: string + columnType: + type: string + enum: + - TableColumnType.ENUM + - TableColumnType.NUMBER + - TableColumnType.DECIMAL + - TableColumnType.STRING + - TableColumnType.TEXT + - TableColumnType.BOOLEAN + - TableColumnType.DATE + - TableColumnType.TIMESTAMP + - TableColumnType.BLOB + length: + type: integer + format: int32 + isNullAllowed: + type: boolean + enumValues: + type: array + items: + type: string + ordinalPosition: + type: integer + format: int32 + created: + type: string + format: date-time + concept: + $ref: '#/components/schemas/TableColumnConcept' + unit: + $ref: '#/components/schemas/TableColumnUnit' + lastModified: + type: string + format: date-time + TableColumnConcept: + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + TableColumnUnit: + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + Unique: + type: object + properties: + uid: + type: integer + format: int64 + tid: + type: integer + format: int64 + tdbid: + type: integer + format: int64 + table: + $ref: '#/components/schemas/Table' + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + User: + type: object + properties: + id: + type: string + format: uuid + username: + type: string + firstname: + type: string + lastname: + type: string + realmId: + type: string + format: uuid + email: + type: string + emailVerified: + type: boolean + enabled: + type: boolean + createdTimestamp: + type: integer + format: int64 + databasePassword: + type: string + attributes: + type: array + items: + $ref: '#/components/schemas/UserAttribute' + credentials: + type: array + items: + $ref: '#/components/schemas/Credential' + containers: + type: array + items: + $ref: '#/components/schemas/Container' + databases: + type: array + items: + $ref: '#/components/schemas/Database' + identifiers: + type: array + items: + $ref: '#/components/schemas/Identifier' + roles: + type: array + items: + $ref: '#/components/schemas/Role' + tables: + type: array + items: + $ref: '#/components/schemas/Table' + UserAttribute: + type: object + properties: + id: + type: string + format: uuid + userId: + type: string + format: uuid + name: + type: string + value: + type: string + user: + $ref: '#/components/schemas/User' + View: + type: object + properties: + id: + type: integer + format: int64 + vcid: + type: integer + format: int64 + vdbid: + type: integer + format: int64 + createdBy: + type: string + format: uuid + creator: + $ref: '#/components/schemas/User' + database: + $ref: '#/components/schemas/Database' + name: + type: string + internalName: + type: string + isPublic: + type: boolean + isInitialView: + type: boolean + query: + type: string + columns: + type: array + items: + $ref: '#/components/schemas/TableColumn' + created: + type: string + format: date-time + lastModified: + type: string + format: date-time + ColumnBriefDto: + required: + - column_type + - database_id + - id + - internal_name + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: + type: string + example: mdb_date + column_type: + type: string + example: date + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob + ContainerDto: + required: + - created + - hash + - id + - internal_name + - name + - running + type: object + properties: + id: + type: integer + format: int64 + hash: + type: string + example: f829dd8a884182d0da846f365dee1221fd16610a14c81b8f9f295ff162749e50 + name: + type: string + example: Air Quality + state: + type: string + example: running + enum: + - created + - restarting + - running + - paused + - exited + - dead + database: + $ref: '#/components/schemas/DatabaseDto' + running: + type: boolean + example: true + image: + $ref: '#/components/schemas/ImageBriefDto' + port: + type: integer + format: int32 + owner: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + internal_name: + type: string + example: air-quality + ip_address: + type: string + CreatorDto: + required: + - firstname + - id + - lastname + type: object + properties: + id: + type: integer + format: int64 + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + orcid: + type: string + example: 0000-0002-1825-0097 + DatabaseAccessDto: + required: + - type + - user + type: object + properties: + user: + $ref: '#/components/schemas/UserDto' + type: + type: string + enum: + - read + - write_own + - write_all + created: + type: string + format: date-time + DatabaseDto: + required: + - creator + - exchange_name + - id + - internal_name + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + identifier: + $ref: '#/components/schemas/IdentifierDto' + description: + type: string + example: Weather Australia 2009-2021 + tables: + type: array + items: + $ref: '#/components/schemas/TableBriefDto' + views: + type: array + items: + $ref: '#/components/schemas/ViewBriefDto' + image: + $ref: '#/components/schemas/ImageDto' + container: + $ref: '#/components/schemas/ContainerDto' + accesses: + type: array + items: + $ref: '#/components/schemas/DatabaseAccessDto' + creator: + $ref: '#/components/schemas/UserBriefDto' + owner: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + exchange_name: + type: string + example: dbrepo/air_quality + internal_name: + type: string + example: weather_australia + is_public: + type: boolean + example: true + IdentifierDto: + required: + - container id + - creators + - database id + - execution + - publication_year + - query + - query_hash + - query_normalized + - result_hash + - result_number + - title + - type + - visibility + type: object + properties: + id: + type: integer + format: int64 + type: + type: string + enum: + - database + - subset + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + description: + type: string + example: "Air quality reports at Stephansplatz, Vienna" + query: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + execution: + type: string + format: date-time + visibility: + type: string + example: everyone + enum: + - everyone + - self + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + language: + type: string + enum: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu + license: + $ref: '#/components/schemas/LicenseDto' + creators: + type: array + items: + $ref: '#/components/schemas/CreatorDto' + created: + type: string + format: date-time + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + query_normalized: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + related: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierDto' + query_hash: + type: string + description: query hash in sha512 + result_hash: + type: string + result_number: + type: integer + format: int64 + example: 1 + publication_day: + type: integer + format: int32 + example: 15 + publication_month: + type: integer + format: int32 + example: 12 + publication_year: + type: integer + format: int32 + example: 2022 + last_modified: + type: string + format: date-time + ImageBriefDto: + required: + - id + - registry + - repository + - tag + type: object + properties: + id: + type: integer + format: int64 + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + LicenseDto: + required: + - identifier + - uri + type: object + properties: + identifier: + type: string + example: MIT + uri: + type: string + example: https://opensource.org/licenses/MIT + RelatedIdentifierDto: + required: + - created + - id + - value + type: object + properties: + id: + type: integer + format: int64 + value: + type: string + example: 10.70124/dc4zh-9ce78 + type: + type: string + example: DOI + enum: + - DOI + - URL + - URN + - ARK + - arXiv + - bibcode + - EAN13 + - EISSN + - Handle + - IGSN + - ISBN + - ISTC + - LISSN + - LSID + - PMID + - PURL + - UPC + - w3id + relation: + type: string + example: Cites + enum: + - IsCitedBy + - Cites + - IsSupplementTo + - IsSupplementedBy + - IsContinuedBy + - Continues + - IsDescribedBy + - Describes + - HasMetadata + - IsMetadataFor + - HasVersion + - IsVersionOf + - IsNewVersionOf + - IsPreviousVersionOf + - IsPartOf + - HasPart + - IsPublishedIn + - IsReferencedBy + - References + - IsDocumentedBy + - Documents + - IsCompiledBy + - Compiles + - IsVariantFormOf + - IsOriginalFormOf + - IsIdenticalTo + - IsReviewedBy + - Reviews + - IsDerivedFrom + - IsSourceOf + - IsRequiredBy + - Requires + - IsObsoletedBy + - Obsoletes + created: + type: string + format: date-time + last_modified: + type: string + format: date-time + TableBriefDto: + required: + - columns + - description + - id + - internal_name + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + description: + type: string + example: Air Quality in Austria + owner: + $ref: '#/components/schemas/UserBriefDto' + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + internal_name: + type: string + example: air_quality + UserAttributeDto: + type: object + properties: + name: + type: string + example: theme_dark + value: + type: string + example: "true" + UserDto: + required: + - email + - email_verified + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + attributes: + type: array + items: + $ref: '#/components/schemas/UserAttributeDto' + containers: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + databases: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + identifiers: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + email: + type: string + example: jcarberry@brown.edu + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + ViewBriefDto: + required: + - created + - creator + - id + - internal_name + - name + - query + - vdbid + type: object + properties: + id: + type: integer + format: int64 + vdbid: + type: integer + format: int64 + name: + type: string + example: Air Quality + query: + type: string + example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC + created: + type: string + format: date-time + creator: + $ref: '#/components/schemas/UserDto' + internal_name: + type: string + example: air_quality + is_public: + type: boolean + example: true + initial_view: + type: boolean + description: True if it is the default view for the database + example: true + last_modified: + type: string + format: date-time + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT diff --git a/.docs/.swagger/api-database.yaml b/.docs/.swagger/api-database.yaml new file mode 100644 index 0000000000000000000000000000000000000000..40b76995cc7f1fb0776ba1cd9e7dabb012ca377f --- /dev/null +++ b/.docs/.swagger/api-database.yaml @@ -0,0 +1,1626 @@ +openapi: 3.0.1 +info: + title: Database Repository Database Service API + description: Service that manages the databases + contact: + name: Prof. Andreas Rauber + email: andreas.rauber@tuwien.ac.at + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0 + version: 1.2.0 +externalDocs: + description: Sourcecode Documentation + url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services +servers: +- url: http://localhost:9092 + description: Generated server url +- url: https://dbrepo2.tuwien.ac.at + description: Sandbox +paths: + /api/container/{id}/database/{databaseId}/visibility: + put: + tags: + - database-endpoint + summary: Update database + operationId: visibility + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseModifyVisibilityDto' + required: true + responses: + "404": + description: Database or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Visibility modified successfully + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseDto' + "405": + description: Visibility modification is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/transfer: + put: + tags: + - database-endpoint + summary: Transfer database + operationId: transfer + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseTransferDto' + required: true + responses: + "202": + description: Transfer of ownership was successful + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseDto' + "404": + description: Database or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Transfer of ownership is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/access/{username}: + put: + tags: + - access-endpoint + summary: Modify access to some database + operationId: update + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: username + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseModifyAccessDto' + required: true + responses: + "404": + description: Database or user not found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Modify access query or database connection is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Modify access succeeded + "403": + description: Modify access not permitted when no access is granted in the + first place + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + delete: + tags: + - access-endpoint + summary: Revoke access to some database + operationId: revoke + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: username + in: path + required: true + schema: + type: string + responses: + "404": + description: User with access was not found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Modify access query or database connection is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Revoke of access not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "403": + description: Revoke of access not permitted as no access was found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Revoked access successfully + security: + - bearerAuth: [] + /api/container/{id}/database: + get: + tags: + - database-endpoint + summary: List databases + operationId: list + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "200": + description: List of databases + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DatabaseBriefDto' + post: + tags: + - database-endpoint + summary: Create database + operationId: create + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseCreateDto' + required: true + responses: + "201": + description: Created a new database + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseBriefDto' + "404": + description: "Container, user or database could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "406": + description: Failed to create user at broker service or virtual host could + not be reached at broker service + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Database create permission is missing or grant permissions + at broker service failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "501": + description: Container image is not supported + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "502": + description: Connection to the container failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Database create query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Database name already exist or query store could not be created + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/access: + get: + tags: + - access-endpoint + summary: Check access to some database + operationId: find + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "403": + description: No access to this database + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Found database access + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseAccessDto' + "405": + description: Check access is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + post: + tags: + - access-endpoint + summary: Give access to some database + operationId: create_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseGiveAccessDto' + required: true + responses: + "202": + description: Granting access succeeded + "405": + description: Granting access not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Granting access query or database connection is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Database or user not found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}: + get: + tags: + - database-endpoint + summary: Find some database + operationId: findById + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "405": + description: Database information is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Database or container could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Database found successfully + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseDto' + security: + - bearerAuth: [] + delete: + tags: + - database-endpoint + summary: Delete some database + operationId: delete + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "400": + description: Database delete query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Container or database could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Database delete permission is missing or revoke permissions + at broker service failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "501": + description: Container image is not supported + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "406": + description: Failed to delete user at broker service or virtual host could + not be reached at broker service + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "502": + description: Connection to the container failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "201": + description: Deleted a database + content: + application/json: + schema: + $ref: '#/components/schemas/DatabaseBriefDto' + security: + - bearerAuth: [] + /api/container/{id}/database/license: + get: + tags: + - license-endpoint + summary: Get all licenses + operationId: list_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "200": + description: List of licenses + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/LicenseDto' +components: + schemas: + DatabaseModifyVisibilityDto: + required: + - is_public + type: object + properties: + is_public: + type: boolean + example: true + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code + ColumnBriefDto: + required: + - column_type + - database_id + - id + - internal_name + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: + type: string + example: mdb_date + column_type: + type: string + example: date + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob + ContainerDto: + required: + - created + - hash + - id + - internal_name + - name + - running + type: object + properties: + id: + type: integer + format: int64 + hash: + type: string + example: f829dd8a884182d0da846f365dee1221fd16610a14c81b8f9f295ff162749e50 + name: + type: string + example: Air Quality + state: + type: string + example: running + enum: + - created + - restarting + - running + - paused + - exited + - dead + database: + $ref: '#/components/schemas/DatabaseDto' + running: + type: boolean + example: true + image: + $ref: '#/components/schemas/ImageBriefDto' + port: + type: integer + format: int32 + owner: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + internal_name: + type: string + example: air-quality + ip_address: + type: string + CreatorDto: + required: + - firstname + - id + - lastname + type: object + properties: + id: + type: integer + format: int64 + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + orcid: + type: string + example: 0000-0002-1825-0097 + DatabaseAccessDto: + required: + - type + - user + type: object + properties: + user: + $ref: '#/components/schemas/UserDto' + type: + type: string + enum: + - read + - write_own + - write_all + created: + type: string + format: date-time + DatabaseDto: + required: + - creator + - exchange_name + - id + - internal_name + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + identifier: + $ref: '#/components/schemas/IdentifierDto' + description: + type: string + example: Weather Australia 2009-2021 + tables: + type: array + items: + $ref: '#/components/schemas/TableBriefDto' + views: + type: array + items: + $ref: '#/components/schemas/ViewBriefDto' + image: + $ref: '#/components/schemas/ImageDto' + container: + $ref: '#/components/schemas/ContainerDto' + accesses: + type: array + items: + $ref: '#/components/schemas/DatabaseAccessDto' + creator: + $ref: '#/components/schemas/UserBriefDto' + owner: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + exchange_name: + type: string + example: dbrepo/air_quality + internal_name: + type: string + example: weather_australia + is_public: + type: boolean + example: true + IdentifierDto: + required: + - container id + - creators + - database id + - execution + - publication_year + - query + - query_hash + - query_normalized + - result_hash + - result_number + - title + - type + - visibility + type: object + properties: + id: + type: integer + format: int64 + type: + type: string + enum: + - database + - subset + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + description: + type: string + example: "Air quality reports at Stephansplatz, Vienna" + query: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + execution: + type: string + format: date-time + visibility: + type: string + example: everyone + enum: + - everyone + - self + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + language: + type: string + enum: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu + license: + $ref: '#/components/schemas/LicenseDto' + creators: + type: array + items: + $ref: '#/components/schemas/CreatorDto' + created: + type: string + format: date-time + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + query_normalized: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + related: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierDto' + query_hash: + type: string + description: query hash in sha512 + result_hash: + type: string + result_number: + type: integer + format: int64 + example: 1 + publication_day: + type: integer + format: int32 + example: 15 + publication_month: + type: integer + format: int32 + example: 12 + publication_year: + type: integer + format: int32 + example: 2022 + last_modified: + type: string + format: date-time + ImageBriefDto: + required: + - id + - registry + - repository + - tag + type: object + properties: + id: + type: integer + format: int64 + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + ImageDateDto: + required: + - database_format + - example + - has_time + - id + - unix_format + type: object + properties: + id: + type: integer + format: int64 + example: + type: string + example: 30.01.2022 + database_format: + type: string + example: '%d.%c.%Y' + unix_format: + type: string + example: dd.MM.YYYY + has_time: + type: boolean + example: false + created_at: + type: string + format: date-time + ImageDto: + required: + - default_port + - dialect + - driver_class + - id + - jdbc_method + - registry + - repository + - tag + type: object + properties: + id: + type: integer + format: int64 + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + dialect: + type: string + example: org.hibernate.dialect.MariaDBDialect + hash: + type: string + example: sha256:c5ec7353d87dfc35067e7bffeb25d6a0d52dad41e8b7357213e3b12d6e7ff78e + compiled: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + size: + type: integer + example: 314295447 + driver_class: + type: string + example: org.mariadb.jdbc.Driver + date_formats: + type: array + items: + $ref: '#/components/schemas/ImageDateDto' + jdbc_method: + type: string + example: mariadb + default_port: + type: integer + format: int32 + example: 3306 + LicenseDto: + required: + - identifier + - uri + type: object + properties: + identifier: + type: string + example: MIT + uri: + type: string + example: https://opensource.org/licenses/MIT + RelatedIdentifierDto: + required: + - created + - id + - value + type: object + properties: + id: + type: integer + format: int64 + value: + type: string + example: 10.70124/dc4zh-9ce78 + type: + type: string + example: DOI + enum: + - DOI + - URL + - URN + - ARK + - arXiv + - bibcode + - EAN13 + - EISSN + - Handle + - IGSN + - ISBN + - ISTC + - LISSN + - LSID + - PMID + - PURL + - UPC + - w3id + relation: + type: string + example: Cites + enum: + - IsCitedBy + - Cites + - IsSupplementTo + - IsSupplementedBy + - IsContinuedBy + - Continues + - IsDescribedBy + - Describes + - HasMetadata + - IsMetadataFor + - HasVersion + - IsVersionOf + - IsNewVersionOf + - IsPreviousVersionOf + - IsPartOf + - HasPart + - IsPublishedIn + - IsReferencedBy + - References + - IsDocumentedBy + - Documents + - IsCompiledBy + - Compiles + - IsVariantFormOf + - IsOriginalFormOf + - IsIdenticalTo + - IsReviewedBy + - Reviews + - IsDerivedFrom + - IsSourceOf + - IsRequiredBy + - Requires + - IsObsoletedBy + - Obsoletes + created: + type: string + format: date-time + last_modified: + type: string + format: date-time + TableBriefDto: + required: + - columns + - description + - id + - internal_name + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + description: + type: string + example: Air Quality in Austria + owner: + $ref: '#/components/schemas/UserBriefDto' + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + internal_name: + type: string + example: air_quality + UserAttributeDto: + type: object + properties: + name: + type: string + example: theme_dark + value: + type: string + example: "true" + UserBriefDto: + required: + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + UserDto: + required: + - email + - email_verified + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + attributes: + type: array + items: + $ref: '#/components/schemas/UserAttributeDto' + containers: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + databases: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + identifiers: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + email: + type: string + example: jcarberry@brown.edu + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + ViewBriefDto: + required: + - created + - creator + - id + - internal_name + - name + - query + - vdbid + type: object + properties: + id: + type: integer + format: int64 + vdbid: + type: integer + format: int64 + name: + type: string + example: Air Quality + query: + type: string + example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC + created: + type: string + format: date-time + creator: + $ref: '#/components/schemas/UserDto' + internal_name: + type: string + example: air_quality + is_public: + type: boolean + example: true + initial_view: + type: boolean + description: True if it is the default view for the database + example: true + last_modified: + type: string + format: date-time + DatabaseTransferDto: + required: + - username + type: object + properties: + username: + type: string + DatabaseModifyAccessDto: + required: + - type + type: object + properties: + type: + type: string + enum: + - read + - write_own + - write_all + DatabaseCreateDto: + required: + - is_public + - name + type: object + properties: + name: + type: string + example: Air Quality + is_public: + type: boolean + example: true + ContainerBriefDto: + required: + - creator + - hash + - id + - internal_name + - name + - running + type: object + properties: + id: + type: integer + format: int64 + hash: + type: string + example: f829dd8a884182d0da846f365dee1221fd16610a14c81b8f9f295ff162749e50 + name: + type: string + example: Air Quality + creator: + $ref: '#/components/schemas/UserBriefDto' + running: + type: boolean + example: true + database: + $ref: '#/components/schemas/DatabaseBriefDto' + created: + type: string + format: date-time + internal_name: + type: string + example: air-quality + CreatorBriefDto: + required: + - firstname + - lastname + type: object + properties: + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + DatabaseBriefDto: + required: + - id + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + description: + type: string + example: Air Quality in Austria + identifier: + $ref: '#/components/schemas/IdentifierBriefDto' + engine: + type: string + example: mariadb:10.5 + owner: + $ref: '#/components/schemas/UserBriefDto' + container: + $ref: '#/components/schemas/ContainerBriefDto' + creator: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + is_public: + type: boolean + example: true + IdentifierBriefDto: + required: + - container id + - creators + - database id + - id + - publication_year + - title + - type + type: object + properties: + id: + type: integer + format: int64 + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + type: + type: string + enum: + - database + - subset + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + creators: + type: array + items: + $ref: '#/components/schemas/CreatorBriefDto' + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + publication_year: + type: integer + format: int32 + example: 2022 + DatabaseGiveAccessDto: + required: + - type + - username + type: object + properties: + username: + type: string + type: + type: string + enum: + - read + - write_own + - write_all + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT diff --git a/.docs/.swagger/api-identifier.yaml b/.docs/.swagger/api-identifier.yaml new file mode 100644 index 0000000000000000000000000000000000000000..002b392bb6df32db0e8153596b5d397297ffb6af --- /dev/null +++ b/.docs/.swagger/api-identifier.yaml @@ -0,0 +1,1333 @@ +openapi: 3.0.1 +info: + title: Database Repository Identifier Service API + description: Service that manages the identifiers + contact: + name: Prof. Andreas Rauber + email: andreas.rauber@tuwien.ac.at + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0 + version: 1.2.0 +externalDocs: + description: Sourcecode Documentation + url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services +servers: +- url: http://localhost:9096 + description: Generated server url +- url: https://dbrepo2.tuwien.ac.at + description: Sandbox +paths: + /api/pid/{id}: + put: + tags: + - persistence-endpoint + summary: Update some identifier + operationId: update + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IdentifierUpdateDto' + required: true + responses: + "405": + description: Updating identifier not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Updated identifier + content: + application/json: + schema: + $ref: '#/components/schemas/IdentifierDto' + "404": + description: Identifier or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Identifier data is not valid to the form + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "406": + description: Updating identifier not allowed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + delete: + tags: + - persistence-endpoint + summary: Delete some identifier + operationId: delete + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "404": + description: Identifier could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Deleting identifier not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Deleted identifier + security: + - bearerAuth: [] + /api/identifier: + get: + tags: + - identifier-endpoint + summary: Find identifiers + operationId: list + parameters: + - name: dbid + in: query + required: false + schema: + type: integer + format: int64 + - name: qid + in: query + required: false + schema: + type: integer + format: int64 + - name: type + in: query + required: false + schema: + type: string + enum: + - database + - subset + responses: + "200": + description: List identifiers + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/IdentifierDto' + post: + tags: + - identifier-endpoint + summary: Create identifier + operationId: create + parameters: + - name: Authorization + in: header + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/IdentifierCreateDto' + required: true + responses: + "406": + description: Creating identifier not allowed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Identifier form contains invalid request data + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "502": + description: Query information could not be retrieved + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "201": + description: Created identifier + content: + application/json: + schema: + $ref: '#/components/schemas/IdentifierDto' + "403": + description: Insufficient access rights or authorities + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Creating identifier not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Identifier for this resource already exists + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/pid/{pid}: + get: + tags: + - persistence-endpoint + summary: Find some identifier + operationId: find + parameters: + - name: pid + in: path + required: true + schema: + type: integer + format: int64 + - name: Accept + in: header + required: true + schema: + type: string + responses: + "200": + description: Found identifier successfully + content: + application/json: + schema: + $ref: '#/components/schemas/IdentifierDto' + text/csv: {} + text/xml: {} + text/bibliography: {} + text/bibliography; style=apa: {} + text/bibliography; style=ieee: {} + text/bibliography; style=bibtex: {} + "404": + description: Identifier could not be exported from database as the resource + was not found + content: + text/csv: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: "Identifier could not be exported, the requested style is not\ + \ known" + content: + text/bibliography: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "502": + description: Identifier could not exported from database as it is not reachable + content: + text/csv: + schema: + $ref: '#/components/schemas/ApiErrorDto' +components: + schemas: + CreatorDto: + required: + - firstname + - id + - lastname + type: object + properties: + id: + type: integer + format: int64 + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + orcid: + type: string + example: 0000-0002-1825-0097 + IdentifierUpdateDto: + required: + - cid + - creators + - dbid + - publication_year + - title + - type + - visibility + type: object + properties: + cid: + type: integer + format: int64 + dbid: + type: integer + format: int64 + qid: + type: integer + format: int64 + doi: + type: string + example: 10.1038/nphys1170 + type: + type: string + enum: + - database + - subset + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + description: + type: string + example: "Air quality reports at Stephansplatz, Vienna" + visibility: + type: string + example: everyone + enum: + - everyone + - self + publisher: + type: string + example: TU Wien + language: + type: string + enum: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu + license: + $ref: '#/components/schemas/LicenseDto' + creators: + type: array + items: + $ref: '#/components/schemas/CreatorDto' + publication_day: + type: integer + format: int32 + example: 15 + publication_month: + type: integer + format: int32 + example: 12 + publication_year: + type: integer + format: int32 + example: 2022 + related_identifiers: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierCreateDto' + LicenseDto: + required: + - identifier + - uri + type: object + properties: + identifier: + type: string + example: MIT + uri: + type: string + example: https://opensource.org/licenses/MIT + RelatedIdentifierCreateDto: + required: + - value + type: object + properties: + value: + type: string + example: 10.70124/dc4zh-9ce78 + type: + type: string + example: DOI + enum: + - DOI + - URL + - URN + - ARK + - arXiv + - bibcode + - EAN13 + - EISSN + - Handle + - IGSN + - ISBN + - ISTC + - LISSN + - LSID + - PMID + - PURL + - UPC + - w3id + relation: + type: string + example: Cites + enum: + - IsCitedBy + - Cites + - IsSupplementTo + - IsSupplementedBy + - IsContinuedBy + - Continues + - IsDescribedBy + - Describes + - HasMetadata + - IsMetadataFor + - HasVersion + - IsVersionOf + - IsNewVersionOf + - IsPreviousVersionOf + - IsPartOf + - HasPart + - IsPublishedIn + - IsReferencedBy + - References + - IsDocumentedBy + - Documents + - IsCompiledBy + - Compiles + - IsVariantFormOf + - IsOriginalFormOf + - IsIdenticalTo + - IsReviewedBy + - Reviews + - IsDerivedFrom + - IsSourceOf + - IsRequiredBy + - Requires + - IsObsoletedBy + - Obsoletes + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code + IdentifierDto: + required: + - container id + - creators + - database id + - execution + - publication_year + - query + - query_hash + - query_normalized + - result_hash + - result_number + - title + - type + - visibility + type: object + properties: + id: + type: integer + format: int64 + type: + type: string + enum: + - database + - subset + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + description: + type: string + example: "Air quality reports at Stephansplatz, Vienna" + query: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + execution: + type: string + format: date-time + visibility: + type: string + example: everyone + enum: + - everyone + - self + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + language: + type: string + enum: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu + license: + $ref: '#/components/schemas/LicenseDto' + creators: + type: array + items: + $ref: '#/components/schemas/CreatorDto' + created: + type: string + format: date-time + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + query_normalized: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + related: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierDto' + query_hash: + type: string + description: query hash in sha512 + result_hash: + type: string + result_number: + type: integer + format: int64 + example: 1 + publication_day: + type: integer + format: int32 + example: 15 + publication_month: + type: integer + format: int32 + example: 12 + publication_year: + type: integer + format: int32 + example: 2022 + last_modified: + type: string + format: date-time + RelatedIdentifierDto: + required: + - created + - id + - value + type: object + properties: + id: + type: integer + format: int64 + value: + type: string + example: 10.70124/dc4zh-9ce78 + type: + type: string + example: DOI + enum: + - DOI + - URL + - URN + - ARK + - arXiv + - bibcode + - EAN13 + - EISSN + - Handle + - IGSN + - ISBN + - ISTC + - LISSN + - LSID + - PMID + - PURL + - UPC + - w3id + relation: + type: string + example: Cites + enum: + - IsCitedBy + - Cites + - IsSupplementTo + - IsSupplementedBy + - IsContinuedBy + - Continues + - IsDescribedBy + - Describes + - HasMetadata + - IsMetadataFor + - HasVersion + - IsVersionOf + - IsNewVersionOf + - IsPreviousVersionOf + - IsPartOf + - HasPart + - IsPublishedIn + - IsReferencedBy + - References + - IsDocumentedBy + - Documents + - IsCompiledBy + - Compiles + - IsVariantFormOf + - IsOriginalFormOf + - IsIdenticalTo + - IsReviewedBy + - Reviews + - IsDerivedFrom + - IsSourceOf + - IsRequiredBy + - Requires + - IsObsoletedBy + - Obsoletes + created: + type: string + format: date-time + last_modified: + type: string + format: date-time + CreatorCreateDto: + required: + - firstname + - lastname + type: object + properties: + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + orcid: + type: string + example: 0000-0002-1825-0097 + IdentifierCreateDto: + required: + - cid + - creators + - dbid + - publication_year + - title + - type + - visibility + type: object + properties: + cid: + type: integer + format: int64 + dbid: + type: integer + format: int64 + qid: + type: integer + format: int64 + type: + type: string + enum: + - database + - subset + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + description: + type: string + example: "Air quality reports at Stephansplatz, Vienna" + visibility: + type: string + example: everyone + enum: + - everyone + - self + publisher: + type: string + example: TU Wien + language: + type: string + enum: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu + license: + $ref: '#/components/schemas/LicenseDto' + creators: + type: array + items: + $ref: '#/components/schemas/CreatorCreateDto' + publication_day: + type: integer + format: int32 + example: 15 + publication_month: + type: integer + format: int32 + example: 12 + publication_year: + type: integer + format: int32 + example: 2022 + related_identifiers: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierCreateDto' + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT diff --git a/.docs/.swagger/api-query.yaml b/.docs/.swagger/api-query.yaml new file mode 100644 index 0000000000000000000000000000000000000000..16168d93b08fc5f2d3b79131526ad2c8a027b0eb --- /dev/null +++ b/.docs/.swagger/api-query.yaml @@ -0,0 +1,2520 @@ +openapi: 3.0.1 +info: + title: Database Repository Query Service API + description: Service that manages the queries + contact: + name: Prof. Andreas Rauber + email: andreas.rauber@tuwien.ac.at + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0 + version: 1.2.0 +externalDocs: + description: Sourcecode Documentation + url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services +servers: +- url: http://localhost:9093 + description: Generated server url +- url: https://dbrepo2.tuwien.ac.at + description: Sandbox +paths: + /api/container/{id}/database/{databaseId}/table/{tableId}/history: + get: + tags: + - table-history-endpoint + summary: Find all history + operationId: getAll + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "405": + description: Find table history is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Find table history successfully + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TableHistoryDto' + "404": + description: "Table, database or user could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "504": + description: Query store failed to query table history + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Table history query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + head: + tags: + - table-history-endpoint + summary: Find all history + operationId: getAll_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "405": + description: Find table history is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Find table history successfully + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TableHistoryDto' + "404": + description: "Table, database or user could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "504": + description: Query store failed to query table history + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Table history query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/table/{tableId}/data: + get: + tags: + - table-data-endpoint + summary: Find data + operationId: getAll_2 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + - name: timestamp + in: query + required: false + schema: + type: string + format: date-time + - name: page + in: query + required: false + schema: + type: integer + format: int64 + - name: size + in: query + required: false + schema: + type: integer + format: int64 + - name: sortDirection + in: query + required: false + schema: + type: string + enum: + - asc + - desc + - name: sortColumn + in: query + required: false + schema: + type: string + responses: + "200": + description: OK + content: + '*/*': + schema: + $ref: '#/components/schemas/QueryResultDto' + security: + - bearerAuth: [] + put: + tags: + - table-data-endpoint + summary: Update data + operationId: update + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TableCsvUpdateDto' + required: true + responses: + "200": + description: OK + deprecated: true + security: + - bearerAuth: [] + post: + tags: + - table-data-endpoint + summary: Insert data + operationId: insert + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TableCsvDto' + required: true + responses: + "200": + description: OK + security: + - bearerAuth: [] + delete: + tags: + - table-data-endpoint + summary: Delete data + operationId: delete_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TableCsvDeleteDto' + required: true + responses: + "200": + description: OK + security: + - bearerAuth: [] + head: + tags: + - table-data-endpoint + summary: Find data + operationId: getAll_3 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + - name: timestamp + in: query + required: false + schema: + type: string + format: date-time + - name: page + in: query + required: false + schema: + type: integer + format: int64 + - name: size + in: query + required: false + schema: + type: integer + format: int64 + - name: sortDirection + in: query + required: false + schema: + type: string + enum: + - asc + - desc + - name: sortColumn + in: query + required: false + schema: + type: string + responses: + "200": + description: OK + content: + '*/*': + schema: + $ref: '#/components/schemas/QueryResultDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/query/{queryId}: + get: + tags: + - store-endpoint + summary: Find some query + operationId: find_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: queryId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "200": + description: List queries + content: + application/json: + schema: + $ref: '#/components/schemas/QueryDto' + "404": + description: "Database, query or user could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Find query is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "501": + description: Image is not supported + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "504": + description: Query store failed to select query + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + put: + tags: + - store-endpoint + summary: Persist some query + operationId: persist + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: queryId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "404": + description: "Database, query or user could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "501": + description: Image is not supported + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Persist query successful + content: + application/json: + schema: + $ref: '#/components/schemas/QueryDto' + "405": + description: Persist query is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "504": + description: Query store failed to persist query + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Query is already persisted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/view: + get: + tags: + - view-endpoint + summary: Find all views + operationId: findAll + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "404": + description: Database or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Find views is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Find views successfully + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ViewBriefDto' + security: + - bearerAuth: [] + post: + tags: + - view-endpoint + summary: Create a view + operationId: create + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ViewCreateDto' + required: true + responses: + "401": + description: Credentials missing + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Database or user could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Create view is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "403": + description: Credentials missing + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "201": + description: Create view successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ViewBriefDto' + "423": + description: Create view resulted in an invalid query statement + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Create view query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/table/{tableId}/data/import: + post: + tags: + - table-data-endpoint + summary: Insert data from csv + operationId: importCsv + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ImportDto' + required: true + responses: + "200": + description: OK + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/query: + get: + tags: + - store-endpoint + summary: Find queries + operationId: findAll_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: persisted + in: query + required: false + schema: + type: boolean + responses: + "405": + description: Find all queries is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "501": + description: Image is not supported + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "504": + description: Query store failed to select query + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: "Database, container or user could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "423": + description: Selection of time-versioned query resulted in an invalid query + statement + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: List queries + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/QueryBriefDto' + security: + - bearerAuth: [] + post: + tags: + - query-endpoint + summary: Execute query + operationId: execute + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: page + in: query + required: false + schema: + type: integer + format: int64 + - name: size + in: query + required: false + schema: + type: integer + format: int64 + - name: sortDirection + in: query + required: false + schema: + type: string + enum: + - asc + - desc + - name: sortColumn + in: query + required: false + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ExecuteStatementDto' + required: true + responses: + "200": + description: OK + content: + '*/*': + schema: + $ref: '#/components/schemas/QueryResultDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/view/{viewId}: + get: + tags: + - view-endpoint + summary: Find one view + operationId: find + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: viewId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "200": + description: Find view successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ViewDto' + "404": + description: "Database, view or user could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Find view is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + delete: + tags: + - view-endpoint + summary: Delete one view + operationId: delete + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: viewId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "401": + description: Credentials missing + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "403": + description: Credentials missing + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: "Database, view or user could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Delete view query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Delete view successfully + "423": + description: Delete view resulted in an invalid query statement + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Delete view is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/view/{viewId}/data: + get: + tags: + - view-endpoint + summary: Find view data + operationId: data + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: viewId + in: path + required: true + schema: + type: integer + format: int64 + - name: page + in: query + required: false + schema: + type: integer + format: int64 + - name: size + in: query + required: false + schema: + type: integer + format: int64 + responses: + "200": + description: Find data successfully + content: + application/json: + schema: + $ref: '#/components/schemas/QueryResultDto' + "401": + description: Credentials missing + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "423": + description: Find data resulted in an invalid query statement + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "403": + description: Credentials missing + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "417": + description: Parsing of resulting columns failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "504": + description: Query store failed to query view data + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: "Database, view, container or user could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Pagination not in valid range or find data query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "501": + description: Image is not supported + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Find data is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "503": + description: Connection to the database failed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/view/{viewId}/data/count: + get: + tags: + - view-endpoint + summary: Find view data count + operationId: count + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: viewId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "200": + description: OK + content: + '*/*': + schema: + type: integer + format: int64 + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/table/{tableId}/export: + get: + tags: + - export-endpoint + summary: Export table + operationId: export + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + - name: timestamp + in: query + required: false + schema: + type: string + format: date-time + responses: + "200": + description: OK + content: + '*/*': + schema: + type: string + format: binary + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/table/{tableId}/data/count: + get: + tags: + - table-data-endpoint + summary: Find data + operationId: getCount + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + - name: timestamp + in: query + required: false + schema: + type: string + format: date-time + responses: + "200": + description: OK + content: + '*/*': + schema: + type: integer + format: int64 + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/query/{queryId}/export: + get: + tags: + - query-endpoint + summary: Exports some query + operationId: export_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: queryId + in: path + required: true + schema: + type: integer + format: int64 + - name: Accept + in: header + required: true + schema: + type: string + responses: + "200": + description: OK + content: + '*/*': + schema: + type: object + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/query/{queryId}/data: + get: + tags: + - query-endpoint + summary: Re-execute some query + operationId: reExecute + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: queryId + in: path + required: true + schema: + type: integer + format: int64 + - name: page + in: query + required: false + schema: + type: integer + format: int64 + - name: size + in: query + required: false + schema: + type: integer + format: int64 + - name: sortDirection + in: query + required: false + schema: + type: string + enum: + - asc + - desc + - name: sortColumn + in: query + required: false + schema: + type: string + responses: + "200": + description: OK + content: + '*/*': + schema: + $ref: '#/components/schemas/QueryResultDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/query/{queryId}/data/count: + get: + tags: + - query-endpoint + summary: Re-execute some query + operationId: reExecuteCount + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: queryId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "200": + description: OK + content: + '*/*': + schema: + type: integer + format: int64 + security: + - bearerAuth: [] +components: + schemas: + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code + TableHistoryDto: + required: + - event + - timestamp + - total + type: object + properties: + timestamp: + type: string + format: date-time + event: + type: string + total: + type: integer + format: int64 + example: 1 + QueryResultDto: + required: + - id + - result + type: object + properties: + result: + type: array + items: + type: object + additionalProperties: + type: object + id: + type: integer + format: int64 + result_number: + type: integer + format: int64 + example: 1 + TableCsvUpdateDto: + required: + - data + - keys + type: object + properties: + data: + type: object + additionalProperties: + type: object + keys: + type: object + additionalProperties: + type: object + ColumnBriefDto: + required: + - column_type + - database_id + - id + - internal_name + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: + type: string + example: mdb_date + column_type: + type: string + example: date + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob + ContainerDto: + required: + - created + - hash + - id + - internal_name + - name + - running + type: object + properties: + id: + type: integer + format: int64 + hash: + type: string + example: f829dd8a884182d0da846f365dee1221fd16610a14c81b8f9f295ff162749e50 + name: + type: string + example: Air Quality + state: + type: string + example: running + enum: + - created + - restarting + - running + - paused + - exited + - dead + database: + $ref: '#/components/schemas/DatabaseDto' + running: + type: boolean + example: true + image: + $ref: '#/components/schemas/ImageBriefDto' + port: + type: integer + format: int32 + owner: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + internal_name: + type: string + example: air-quality + ip_address: + type: string + CreatorDto: + required: + - firstname + - id + - lastname + type: object + properties: + id: + type: integer + format: int64 + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + orcid: + type: string + example: 0000-0002-1825-0097 + DatabaseAccessDto: + required: + - type + - user + type: object + properties: + user: + $ref: '#/components/schemas/UserDto' + type: + type: string + enum: + - read + - write_own + - write_all + created: + type: string + format: date-time + DatabaseDto: + required: + - creator + - exchange_name + - id + - internal_name + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + identifier: + $ref: '#/components/schemas/IdentifierDto' + description: + type: string + example: Weather Australia 2009-2021 + tables: + type: array + items: + $ref: '#/components/schemas/TableBriefDto' + views: + type: array + items: + $ref: '#/components/schemas/ViewBriefDto' + image: + $ref: '#/components/schemas/ImageDto' + container: + $ref: '#/components/schemas/ContainerDto' + accesses: + type: array + items: + $ref: '#/components/schemas/DatabaseAccessDto' + creator: + $ref: '#/components/schemas/UserBriefDto' + owner: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + exchange_name: + type: string + example: dbrepo/air_quality + internal_name: + type: string + example: weather_australia + is_public: + type: boolean + example: true + IdentifierDto: + required: + - container id + - creators + - database id + - execution + - publication_year + - query + - query_hash + - query_normalized + - result_hash + - result_number + - title + - type + - visibility + type: object + properties: + id: + type: integer + format: int64 + type: + type: string + enum: + - database + - subset + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + description: + type: string + example: "Air quality reports at Stephansplatz, Vienna" + query: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + execution: + type: string + format: date-time + visibility: + type: string + example: everyone + enum: + - everyone + - self + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + language: + type: string + enum: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu + license: + $ref: '#/components/schemas/LicenseDto' + creators: + type: array + items: + $ref: '#/components/schemas/CreatorDto' + created: + type: string + format: date-time + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + query_normalized: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + related: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierDto' + query_hash: + type: string + description: query hash in sha512 + result_hash: + type: string + result_number: + type: integer + format: int64 + example: 1 + publication_day: + type: integer + format: int32 + example: 15 + publication_month: + type: integer + format: int32 + example: 12 + publication_year: + type: integer + format: int32 + example: 2022 + last_modified: + type: string + format: date-time + ImageBriefDto: + required: + - id + - registry + - repository + - tag + type: object + properties: + id: + type: integer + format: int64 + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + ImageDateDto: + required: + - database_format + - example + - has_time + - id + - unix_format + type: object + properties: + id: + type: integer + format: int64 + example: + type: string + example: 30.01.2022 + database_format: + type: string + example: '%d.%c.%Y' + unix_format: + type: string + example: dd.MM.YYYY + has_time: + type: boolean + example: false + created_at: + type: string + format: date-time + ImageDto: + required: + - default_port + - dialect + - driver_class + - id + - jdbc_method + - registry + - repository + - tag + type: object + properties: + id: + type: integer + format: int64 + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + dialect: + type: string + example: org.hibernate.dialect.MariaDBDialect + hash: + type: string + example: sha256:c5ec7353d87dfc35067e7bffeb25d6a0d52dad41e8b7357213e3b12d6e7ff78e + compiled: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + size: + type: integer + example: 314295447 + driver_class: + type: string + example: org.mariadb.jdbc.Driver + date_formats: + type: array + items: + $ref: '#/components/schemas/ImageDateDto' + jdbc_method: + type: string + example: mariadb + default_port: + type: integer + format: int32 + example: 3306 + LicenseDto: + required: + - identifier + - uri + type: object + properties: + identifier: + type: string + example: MIT + uri: + type: string + example: https://opensource.org/licenses/MIT + QueryDto: + required: + - cid + - created + - creator + - dbid + - id + - is_persisted + - query + - query_hash + type: object + properties: + id: + type: integer + format: int64 + cid: + type: integer + format: int64 + dbid: + type: integer + format: int64 + creator: + $ref: '#/components/schemas/UserDto' + execution: + type: string + format: date-time + query: + type: string + example: SELECT `id` FROM `air_quality` + type: + type: string + example: query + enum: + - query + - view + identifier: + $ref: '#/components/schemas/IdentifierDto' + created: + type: string + format: date-time + query_normalized: + type: string + example: SELECT `id` FROM `air_quality` + query_hash: + type: string + example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 + is_persisted: + type: boolean + example: true + result_hash: + type: string + example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 + result_number: + type: integer + format: int64 + example: 1 + last_modified: + type: string + format: date-time + RelatedIdentifierDto: + required: + - created + - id + - value + type: object + properties: + id: + type: integer + format: int64 + value: + type: string + example: 10.70124/dc4zh-9ce78 + type: + type: string + example: DOI + enum: + - DOI + - URL + - URN + - ARK + - arXiv + - bibcode + - EAN13 + - EISSN + - Handle + - IGSN + - ISBN + - ISTC + - LISSN + - LSID + - PMID + - PURL + - UPC + - w3id + relation: + type: string + example: Cites + enum: + - IsCitedBy + - Cites + - IsSupplementTo + - IsSupplementedBy + - IsContinuedBy + - Continues + - IsDescribedBy + - Describes + - HasMetadata + - IsMetadataFor + - HasVersion + - IsVersionOf + - IsNewVersionOf + - IsPreviousVersionOf + - IsPartOf + - HasPart + - IsPublishedIn + - IsReferencedBy + - References + - IsDocumentedBy + - Documents + - IsCompiledBy + - Compiles + - IsVariantFormOf + - IsOriginalFormOf + - IsIdenticalTo + - IsReviewedBy + - Reviews + - IsDerivedFrom + - IsSourceOf + - IsRequiredBy + - Requires + - IsObsoletedBy + - Obsoletes + created: + type: string + format: date-time + last_modified: + type: string + format: date-time + TableBriefDto: + required: + - columns + - description + - id + - internal_name + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + description: + type: string + example: Air Quality in Austria + owner: + $ref: '#/components/schemas/UserBriefDto' + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + internal_name: + type: string + example: air_quality + UserAttributeDto: + type: object + properties: + name: + type: string + example: theme_dark + value: + type: string + example: "true" + UserBriefDto: + required: + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + UserDto: + required: + - email + - email_verified + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + attributes: + type: array + items: + $ref: '#/components/schemas/UserAttributeDto' + containers: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + databases: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + identifiers: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + email: + type: string + example: jcarberry@brown.edu + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + ViewBriefDto: + required: + - created + - creator + - id + - internal_name + - name + - query + - vdbid + type: object + properties: + id: + type: integer + format: int64 + vdbid: + type: integer + format: int64 + name: + type: string + example: Air Quality + query: + type: string + example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC + created: + type: string + format: date-time + creator: + $ref: '#/components/schemas/UserDto' + internal_name: + type: string + example: air_quality + is_public: + type: boolean + example: true + initial_view: + type: boolean + description: True if it is the default view for the database + example: true + last_modified: + type: string + format: date-time + ViewCreateDto: + required: + - is_public + - name + - query + type: object + properties: + name: + type: string + example: Air Quality + query: + type: string + example: SELECT `id` FROM `air_quality` + is_public: + type: boolean + example: true + TableCsvDto: + required: + - data + type: object + properties: + data: + type: object + additionalProperties: + type: object + ImportDto: + required: + - location + - separator + type: object + properties: + location: + type: string + example: /tmp/file.csv + separator: + type: string + example: "," + quote: + type: string + example: '"' + skip_lines: + minimum: 0 + type: integer + format: int64 + false_element: + type: string + true_element: + type: string + null_element: + type: string + example: NA + ExecuteStatementDto: + required: + - statement + type: object + properties: + statement: + type: string + example: SELECT `id` FROM `air_quality` + timestamp: + type: string + description: Execute query for data at this timestamp + format: date-time + ViewDto: + required: + - created + - creator + - database + - id + - internalName + - name + - query + - vdbid + type: object + properties: + id: + type: integer + format: int64 + vdbid: + type: integer + format: int64 + database: + $ref: '#/components/schemas/DatabaseDto' + name: + type: string + example: Air Quality + internalName: + type: string + example: air_quality + query: + type: string + example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC + created: + type: string + format: date-time + creator: + $ref: '#/components/schemas/UserDto' + is_public: + type: boolean + example: true + initial_view: + type: boolean + description: True if it is the default view for the database + example: true + last_modified: + type: string + format: date-time + CreatorBriefDto: + required: + - firstname + - lastname + type: object + properties: + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + IdentifierBriefDto: + required: + - container id + - creators + - database id + - id + - publication_year + - title + - type + type: object + properties: + id: + type: integer + format: int64 + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + type: + type: string + enum: + - database + - subset + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + creators: + type: array + items: + $ref: '#/components/schemas/CreatorBriefDto' + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + publication_year: + type: integer + format: int32 + example: 2022 + QueryBriefDto: + required: + - cid + - created + - creator + - dbid + - id + - query + - query_hash + type: object + properties: + id: + type: integer + format: int64 + cid: + type: integer + format: int64 + dbid: + type: integer + format: int64 + creator: + $ref: '#/components/schemas/UserDto' + execution: + type: string + format: date-time + query: + type: string + example: SELECT `id` FROM `air_quality` + type: + type: string + example: query + enum: + - query + - view + identifier: + $ref: '#/components/schemas/IdentifierBriefDto' + created: + type: string + format: date-time + query_normalized: + type: string + example: SELECT `id` FROM `air_quality` + query_hash: + type: string + example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 + result_hash: + type: string + example: 17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 + result_number: + type: integer + format: int64 + example: 1 + last_modified: + type: string + format: date-time + TableCsvDeleteDto: + required: + - keys + type: object + properties: + keys: + type: object + additionalProperties: + type: object + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT diff --git a/.docs/.swagger/api-semantics.yaml b/.docs/.swagger/api-semantics.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c001c6d7bb3539f64f83b76b093d90ac679ce30b --- /dev/null +++ b/.docs/.swagger/api-semantics.yaml @@ -0,0 +1,685 @@ +openapi: 3.0.1 +info: + title: Database Repository Semantic Service API + description: Service that manages the tables + contact: + name: Prof. Andreas Rauber + email: andreas.rauber@tuwien.ac.at + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0 + version: 1.2.0 +externalDocs: + description: Sourcecode Documentation + url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services +servers: +- url: http://localhost:9097 + description: Generated server url +- url: https://dbrepo2.tuwien.ac.at + description: Sandbox +paths: + /api/semantic/ontology/{id}: + get: + tags: + - ontology-endpoint + summary: Find one ontology + operationId: find + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "200": + description: Find one ontology + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyDto' + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + put: + tags: + - ontology-endpoint + summary: Update an ontology + operationId: update + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyModifyDto' + required: true + responses: + "202": + description: Updated ontology successfully + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyDto' + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + delete: + tags: + - ontology-endpoint + summary: Delete an ontology + operationId: delete + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "202": + description: Deleted ontology successfully + content: + application/json: {} + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/semantic/unit: + get: + tags: + - semantics-endpoint + summary: List semantic units + operationId: findAllUnits + responses: + "200": + description: Find all semantic units + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UnitDto' + post: + tags: + - semantics-endpoint + summary: Save a semantic unit + operationId: saveUnit + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UnitSaveDto' + required: true + responses: + "202": + description: Saved a semantic unit + content: + application/json: + schema: + $ref: '#/components/schemas/UnitDto' + security: + - bearerAuth: [] + /api/semantic/ontology: + get: + tags: + - ontology-endpoint + summary: List all ontologies + operationId: findAll + responses: + "200": + description: List all ontologies + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/OntologyDto' + post: + tags: + - ontology-endpoint + summary: Register a new ontology + operationId: create + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyCreateDto' + required: true + responses: + "201": + description: Registered ontology successfully + content: + application/json: + schema: + $ref: '#/components/schemas/OntologyDto' + security: + - bearerAuth: [] + /api/semantic/concept: + get: + tags: + - semantics-endpoint + summary: List semantic concepts + operationId: findAllConcepts + responses: + "200": + description: Find all semantic concepts + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ConceptDto' + post: + tags: + - semantics-endpoint + summary: Create or update a semantic concept + operationId: saveUnit_1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ConceptSaveDto' + required: true + responses: + "202": + description: Saved a semantic concept + content: + application/json: + schema: + $ref: '#/components/schemas/ConceptDto' + security: + - bearerAuth: [] + /api/semantic/ontology/{id}/entity: + get: + tags: + - query-endpoint + summary: Find entities + operationId: find_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: label + in: query + required: false + schema: + type: string + - name: uri + in: query + required: false + schema: + type: string + responses: + "200": + description: Found entities + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/EntityDto' + "417": + description: Generated query or uri is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Could not find ontology + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Filter params are invalid + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/semantic/database/{databaseId}/table/{tableId}: + get: + tags: + - table-endpoint + summary: Suggest table semantics + operationId: analyseTable + parameters: + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "417": + description: Generated query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Could not find the table + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Suggested table semantics successfully + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TableColumnEntityDto' + security: + - bearerAuth: [] + /api/semantic/database/{databaseId}/table/{tableId}/column/{columnId}: + get: + tags: + - table-endpoint + summary: Suggest table column semantics + operationId: analyseTableColumn + parameters: + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + - name: columnId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "417": + description: Generated query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Suggested table column semantics successfully + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TableColumnEntityDto' + "404": + description: Could not find the table column + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] +components: + schemas: + OntologyModifyDto: + required: + - prefix + - uri + type: object + properties: + uri: + type: string + example: Ontology URI + prefix: + type: string + example: Ontology prefix + sparql_endpoint: + type: string + example: Ontology SPARQL endpoint + OntologyDto: + required: + - created + - id + - prefix + - rdf + - sparql + - uri + type: object + properties: + id: + type: integer + format: int64 + uri: + type: string + example: Ontology URI + prefix: + type: string + example: Ontology prefix + sparql: + type: boolean + example: true + rdf: + type: boolean + example: true + creator: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + sparql_endpoint: + type: string + example: Ontology SPARQL endpoint + UserBriefDto: + required: + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code + UnitSaveDto: + required: + - description + - name + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + ColumnBriefDto: + required: + - column_type + - database_id + - id + - internal_name + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: + type: string + example: mdb_date + column_type: + type: string + example: date + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob + UnitDto: + required: + - columns + - created + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + OntologyCreateDto: + required: + - prefix + - uri + type: object + properties: + uri: + type: string + example: Ontology URI + prefix: + type: string + example: Ontology prefix + sparql_endpoint: + type: string + example: Ontology SPARQL endpoint + ConceptSaveDto: + required: + - description + - name + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + ConceptDto: + required: + - columns + - created + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + EntityDto: + required: + - label + - uri + type: object + properties: + uri: + type: string + example: https://www.wikidata.org/entity/Q1686799 + label: + type: string + example: Apache Jena + description: + type: string + example: open source semantic web framework for Java + TableColumnEntityDto: + required: + - columnId + - databaseId + - tableId + - uri + type: object + properties: + databaseId: + type: integer + format: int64 + example: 1 + tableId: + type: integer + format: int64 + example: 1 + columnId: + type: integer + format: int64 + example: 1 + uri: + type: string + example: https://www.wikidata.org/entity/Q1686799 + label: + type: string + example: Apache Jena + description: + type: string + example: open source semantic web framework for Java + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT diff --git a/.docs/.swagger/api-table.yaml b/.docs/.swagger/api-table.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9639c5fc4e24d730136b88d16a7b5a526dc469d4 --- /dev/null +++ b/.docs/.swagger/api-table.yaml @@ -0,0 +1,860 @@ +openapi: 3.0.1 +info: + title: Database Repository Table Service API + description: Service that manages the tables + contact: + name: Prof. Andreas Rauber + email: andreas.rauber@tuwien.ac.at + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0 + version: 1.2.0 +externalDocs: + description: Sourcecode Documentation + url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services +servers: +- url: http://localhost:9094 + description: Generated server url +- url: https://dbrepo2.tuwien.ac.at + description: Sandbox +paths: + /api/container/{id}/database/{databaseId}/table/{tableId}/column/{columnId}: + put: + tags: + - table-column-endpoint + summary: Update a table column semantic mapping + operationId: update + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + - name: columnId + in: path + required: true + schema: + type: integer + format: int64 + - name: Authorization + in: header + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ColumnSemanticsUpdateDto' + required: true + responses: + "404": + description: "Table, database, semantic concept, unit of measurement or\ + \ container could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Updated column semantics successfully + content: + application/json: + schema: + $ref: '#/components/schemas/ColumnDto' + "403": + description: Access to the database is forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Update semantic concept query is malformed or update unit of + measurement query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Update column semantics not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ColumnDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/table: + get: + tags: + - table-endpoint + summary: List all tables + operationId: list + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "404": + description: Database could not be found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: List tables not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: List tables + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TableBriefDto' + security: + - bearerAuth: [] + post: + tags: + - table-endpoint + summary: Create a table + operationId: create + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TableCreateDto' + required: true + responses: + "501": + description: Image is not supported + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "504": + description: Broker service failed to create queue + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: "Database, container or user could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "409": + description: Create table conflicts with existing table name + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Create table not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "201": + description: Created a new table + content: + application/json: + schema: + $ref: '#/components/schemas/TableBriefDto' + "400": + description: Create table query is malformed + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/container/{id}/database/{databaseId}/table/{tableId}: + get: + tags: + - table-endpoint + summary: Get information about table + operationId: findById + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "405": + description: Find table not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Find table successfully + content: + application/json: + schema: + $ref: '#/components/schemas/TableDto' + "403": + description: Access to the database is forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: "Table, database or container could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + delete: + tags: + - table-endpoint + summary: Delete a table + operationId: delete + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + - name: databaseId + in: path + required: true + schema: + type: integer + format: int64 + - name: tableId + in: path + required: true + schema: + type: integer + format: int64 + responses: + "501": + description: Image is not supported + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Delete table successfully + content: + application/json: + schema: + $ref: '#/components/schemas/TableDto' + "405": + description: Delete table not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "423": + description: Delete table resulted in an invalid state + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "400": + description: Delete table query resulted in an invalid query statement + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "403": + description: Access to the database is forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: "Table, database or container could not be found" + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] +components: + schemas: + ColumnSemanticsUpdateDto: + type: object + properties: + concept_uri: + type: string + unit_uri: + type: string + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code + ColumnBriefDto: + required: + - column_type + - database_id + - id + - internal_name + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: + type: string + example: mdb_date + column_type: + type: string + example: date + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob + ColumnDto: + required: + - auto_generated + - column_type + - id + - internal_name + - is_null_allowed + - is_primary_key + - is_public + - name + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Date + length: + type: integer + format: int32 + example: 255 + concept: + $ref: '#/components/schemas/ConceptDto' + unit: + $ref: '#/components/schemas/UnitDto' + internal_name: + type: string + example: mdb_date + date_format: + $ref: '#/components/schemas/ImageDateDto' + auto_generated: + type: boolean + example: false + is_primary_key: + type: boolean + example: true + index_length: + type: integer + format: int32 + column_type: + type: string + example: string + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob + is_public: + type: boolean + example: true + is_null_allowed: + type: boolean + example: false + enum_values: + type: array + items: + type: string + ConceptDto: + required: + - columns + - created + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + ImageDateDto: + required: + - database_format + - example + - has_time + - id + - unix_format + type: object + properties: + id: + type: integer + format: int64 + example: + type: string + example: 30.01.2022 + database_format: + type: string + example: '%d.%c.%Y' + unix_format: + type: string + example: dd.MM.YYYY + has_time: + type: boolean + example: false + created_at: + type: string + format: date-time + UnitDto: + required: + - columns + - created + - uri + type: object + properties: + uri: + type: string + name: + type: string + description: + type: string + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + ColumnCreateDto: + required: + - name + - null_allowed + - primary_key + - type + type: object + properties: + name: + type: string + example: Date + type: + type: string + example: string + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob + length: + type: integer + format: int32 + example: 255 + dfid: + type: integer + description: date format id + format: int64 + primary_key: + type: boolean + example: false + index_length: + type: integer + format: int32 + null_allowed: + type: boolean + example: true + enum_values: + type: array + description: "enum values, only considered when type = ENUM" + items: + type: string + description: "enum values, only considered when type = ENUM" + ConstraintsCreateDto: + type: object + properties: + uniques: + type: array + items: + type: array + items: + type: string + checks: + type: array + items: + type: string + foreign_keys: + type: array + items: + $ref: '#/components/schemas/ForeignKeyCreateDto' + ForeignKeyCreateDto: + type: object + properties: + columns: + type: array + items: + type: string + referenced_table: + type: string + referenced_columns: + type: array + items: + type: string + on_update: + type: string + enum: + - restrict + - cascade + - set_null + - no_action + - set_default + on_delete: + type: string + enum: + - restrict + - cascade + - set_null + - no_action + - set_default + TableCreateDto: + required: + - columns + - description + - name + type: object + properties: + name: + type: string + example: Air Quality + description: + type: string + example: Air Quality in Austria + columns: + type: array + items: + $ref: '#/components/schemas/ColumnCreateDto' + constraints: + $ref: '#/components/schemas/ConstraintsCreateDto' + TableBriefDto: + required: + - columns + - description + - id + - internal_name + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + description: + type: string + example: Air Quality in Austria + owner: + $ref: '#/components/schemas/UserBriefDto' + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + internal_name: + type: string + example: air_quality + UserBriefDto: + required: + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + ConstraintsDto: + type: object + properties: + uniques: + type: array + items: + type: array + items: + $ref: '#/components/schemas/ColumnDto' + checks: + type: array + items: + type: string + foreign_keys: + type: array + items: + $ref: '#/components/schemas/ForeignKeyDto' + ForeignKeyDto: + type: object + properties: + columns: + type: array + items: + $ref: '#/components/schemas/ColumnDto' + referenced_table: + $ref: '#/components/schemas/TableBriefDto' + referenced_columns: + type: array + items: + $ref: '#/components/schemas/ColumnDto' + on_update: + type: string + enum: + - restrict + - cascade + - set_null + - no_action + - set_default + on_delete: + type: string + enum: + - restrict + - cascade + - set_null + - no_action + - set_default + TableDto: + required: + - columns + - creator + - description + - id + - internal_name + - is_public + - name + - owner + - queue_name + - routing_key + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + creator: + $ref: '#/components/schemas/UserBriefDto' + owner: + $ref: '#/components/schemas/UserBriefDto' + description: + type: string + example: Air Quality in Austria + created: + type: string + format: date-time + columns: + type: array + items: + $ref: '#/components/schemas/ColumnDto' + constraints: + $ref: '#/components/schemas/ConstraintsDto' + internal_name: + type: string + example: air_quality + queue_name: + type: string + example: dbrepo/air_quality/air_quality + routing_key: + type: string + example: dbrepo/air_quality/air_quality/1 + is_public: + type: boolean + example: true + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT diff --git a/.docs/.swagger/api-user.yaml b/.docs/.swagger/api-user.yaml new file mode 100644 index 0000000000000000000000000000000000000000..56bd25f5380528b7f08b44b29c83363103d9bd93 --- /dev/null +++ b/.docs/.swagger/api-user.yaml @@ -0,0 +1,1521 @@ +openapi: 3.0.1 +info: + title: Database Repository User Service API + description: Service that manages the users + contact: + name: Prof. Andreas Rauber + email: andreas.rauber@tuwien.ac.at + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0 + version: 1.2.0 +externalDocs: + description: Wiki Documentation + url: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/wikis +servers: +- url: http://localhost:9098 + description: Generated server url +paths: + /api/user/{id}: + get: + tags: + - user-endpoint + summary: Get a user info + operationId: find + parameters: + - name: id + in: path + required: true + schema: + type: string + responses: + "404": + description: User was not found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Find user is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "200": + description: Found user + content: + application/json: + schema: + $ref: '#/components/schemas/UserDto' + security: + - bearerAuth: [] + put: + tags: + - user-endpoint + summary: Modify user information + operationId: modify + parameters: + - name: id + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserUpdateDto' + required: true + responses: + "202": + description: Modified user information + content: + application/json: + schema: + $ref: '#/components/schemas/UserDto' + "405": + description: Modify user is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: User attribute was not found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + security: + - bearerAuth: [] + /api/user/{id}/theme: + put: + tags: + - user-endpoint + summary: Modify user theme + operationId: theme + parameters: + - name: id + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserThemeSetDto' + required: true + responses: + "405": + description: Modify user is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: User or user attribute was not found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Modified user theme + content: + application/json: + schema: + $ref: '#/components/schemas/UserDto' + security: + - bearerAuth: [] + /api/user/{id}/password: + put: + tags: + - user-endpoint + summary: Modify user password + operationId: password + parameters: + - name: id + in: path + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserPasswordDto' + required: true + responses: + "404": + description: User was not found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "405": + description: Modify user is not permitted + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "202": + description: Modified user password + content: + application/json: + schema: + $ref: '#/components/schemas/UserDto' + security: + - bearerAuth: [] + /api/maintenance/message/{id}: + get: + tags: + - maintenance-endpoint + summary: Find one maintenance message + operationId: find_1 + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "200": + description: Get messages + content: + application/json: + schema: + $ref: '#/components/schemas/BannerMessageDto' + put: + tags: + - maintenance-endpoint + summary: Update maintenance message + operationId: update + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BannerMessageUpdateDto' + required: true + responses: + "404": + description: Could not find message + content: + application/json: + schema: + $ref: '#/components/schemas/BannerMessageNotFoundException' + "202": + description: Updated message + content: + application/json: + schema: + $ref: '#/components/schemas/BannerMessageBriefDto' + delete: + tags: + - maintenance-endpoint + summary: Delete maintenance message + operationId: delete + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "202": + description: Deleted message + content: + application/json: {} + "404": + description: Could not find message + content: + application/json: + schema: + $ref: '#/components/schemas/BannerMessageNotFoundException' + /api/user: + get: + tags: + - user-endpoint + summary: Find all users + operationId: findAll + responses: + "200": + description: List users + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UserBriefDto' + post: + tags: + - user-endpoint + summary: Create user + operationId: create + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SignupRequestDto' + required: true + responses: + "409": + description: User with username already exists + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "404": + description: Realm or default role not found + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + "201": + description: Created user + content: + application/json: + schema: + $ref: '#/components/schemas/UserBriefDto' + "417": + description: User with e-mail already exists + content: + application/json: + schema: + $ref: '#/components/schemas/ApiErrorDto' + /api/maintenance/message: + get: + tags: + - maintenance-endpoint + summary: Find maintenance messages + operationId: list + responses: + "200": + description: List messages + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BannerMessageDto' + post: + tags: + - maintenance-endpoint + summary: Create maintenance message + operationId: create_1 + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/BannerMessageCreateDto' + required: true + responses: + "201": + description: Created message + content: + application/json: + schema: + $ref: '#/components/schemas/BannerMessageBriefDto' + /api/maintenance/message/active: + get: + tags: + - maintenance-endpoint + summary: Find active maintenance messages + operationId: active + responses: + "200": + description: List messages + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BannerMessageBriefDto' +components: + schemas: + UserUpdateDto: + type: object + properties: + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Brown University + orcid: + type: string + example: 0000-0002-1825-0097 + ColumnBriefDto: + required: + - column_type + - database_id + - id + - internal_name + - name + - table_id + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: date + database_id: + type: integer + format: int64 + table_id: + type: integer + format: int64 + internal_name: + type: string + example: mdb_date + column_type: + type: string + example: date + enum: + - enum + - number + - decimal + - string + - text + - boolean + - date + - timestamp + - blob + ContainerDto: + required: + - created + - hash + - id + - internal_name + - name + - running + type: object + properties: + id: + type: integer + format: int64 + hash: + type: string + example: f829dd8a884182d0da846f365dee1221fd16610a14c81b8f9f295ff162749e50 + name: + type: string + example: Air Quality + state: + type: string + example: running + enum: + - created + - restarting + - running + - paused + - exited + - dead + database: + $ref: '#/components/schemas/DatabaseDto' + running: + type: boolean + example: true + image: + $ref: '#/components/schemas/ImageBriefDto' + port: + type: integer + format: int32 + owner: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + internal_name: + type: string + example: air-quality + ip_address: + type: string + CreatorDto: + required: + - firstname + - id + - lastname + type: object + properties: + id: + type: integer + format: int64 + firstname: + type: string + example: Josiah + lastname: + type: string + example: Carberry + affiliation: + type: string + example: Wesleyan University + orcid: + type: string + example: 0000-0002-1825-0097 + DatabaseAccessDto: + required: + - type + - user + type: object + properties: + user: + $ref: '#/components/schemas/UserDto' + type: + type: string + enum: + - read + - write_own + - write_all + created: + type: string + format: date-time + DatabaseDto: + required: + - creator + - exchange_name + - id + - internal_name + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + identifier: + $ref: '#/components/schemas/IdentifierDto' + description: + type: string + example: Weather Australia 2009-2021 + tables: + type: array + items: + $ref: '#/components/schemas/TableBriefDto' + views: + type: array + items: + $ref: '#/components/schemas/ViewBriefDto' + image: + $ref: '#/components/schemas/ImageDto' + container: + $ref: '#/components/schemas/ContainerDto' + accesses: + type: array + items: + $ref: '#/components/schemas/DatabaseAccessDto' + creator: + $ref: '#/components/schemas/UserBriefDto' + owner: + $ref: '#/components/schemas/UserBriefDto' + created: + type: string + format: date-time + exchange_name: + type: string + example: dbrepo/air_quality + internal_name: + type: string + example: weather_australia + is_public: + type: boolean + example: true + IdentifierDto: + required: + - container id + - creators + - database id + - execution + - publication_year + - query + - query_hash + - query_normalized + - result_hash + - result_number + - title + - type + - visibility + type: object + properties: + id: + type: integer + format: int64 + type: + type: string + enum: + - database + - subset + title: + type: string + example: "Airquality Stephansplatz, Vienna, Austria" + description: + type: string + example: "Air quality reports at Stephansplatz, Vienna" + query: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + execution: + type: string + format: date-time + visibility: + type: string + example: everyone + enum: + - everyone + - self + doi: + type: string + example: 10.1038/nphys1170 + publisher: + type: string + example: TU Wien + language: + type: string + enum: + - ab + - aa + - af + - ak + - sq + - am + - ar + - an + - hy + - as + - av + - ae + - ay + - az + - bm + - ba + - eu + - be + - bn + - bh + - bi + - bs + - br + - bg + - my + - ca + - km + - ch + - ce + - ny + - zh + - cu + - cv + - kw + - co + - cr + - hr + - cs + - da + - dv + - nl + - dz + - en + - eo + - et + - ee + - fo + - fj + - fi + - fr + - ff + - gd + - gl + - lg + - ka + - de + - ki + - el + - kl + - gn + - gu + - ht + - ha + - he + - hz + - hi + - ho + - hu + - is + - io + - ig + - id + - ia + - ie + - iu + - ik + - ga + - it + - ja + - jv + - kn + - kr + - ks + - kk + - rw + - kv + - kg + - ko + - kj + - ku + - ky + - lo + - la + - lv + - lb + - li + - ln + - lt + - lu + - mk + - mg + - ms + - ml + - mt + - gv + - mi + - mr + - mh + - ro + - mn + - na + - nv + - nd + - ng + - ne + - se + - "no" + - nb + - nn + - ii + - oc + - oj + - or + - om + - os + - pi + - pa + - ps + - fa + - pl + - pt + - qu + - rm + - rn + - ru + - sm + - sg + - sa + - sc + - sr + - sn + - sd + - si + - sk + - sl + - so + - st + - nr + - es + - su + - sw + - ss + - sv + - tl + - ty + - tg + - ta + - tt + - te + - th + - bo + - ti + - to + - ts + - tn + - tr + - tk + - tw + - ug + - uk + - ur + - uz + - ve + - vi + - vo + - wa + - cy + - fy + - wo + - xh + - yi + - yo + - za + - zu + license: + $ref: '#/components/schemas/LicenseDto' + creators: + type: array + items: + $ref: '#/components/schemas/CreatorDto' + created: + type: string + format: date-time + container id: + type: integer + format: int64 + example: 1 + database id: + type: integer + format: int64 + example: 1 + query id: + type: integer + format: int64 + example: 1 + query_normalized: + type: string + example: "SELECT `id`, `value`, `location` FROM `air_quality` WHERE `location`\ + \ = \"09:STEF\"" + related: + type: array + items: + $ref: '#/components/schemas/RelatedIdentifierDto' + query_hash: + type: string + description: query hash in sha512 + result_hash: + type: string + result_number: + type: integer + format: int64 + example: 1 + publication_day: + type: integer + format: int32 + example: 15 + publication_month: + type: integer + format: int32 + example: 12 + publication_year: + type: integer + format: int32 + example: 2022 + last_modified: + type: string + format: date-time + ImageBriefDto: + required: + - id + - registry + - repository + - tag + type: object + properties: + id: + type: integer + format: int64 + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + ImageDateDto: + required: + - database_format + - example + - has_time + - id + - unix_format + type: object + properties: + id: + type: integer + format: int64 + example: + type: string + example: 30.01.2022 + database_format: + type: string + example: '%d.%c.%Y' + unix_format: + type: string + example: dd.MM.YYYY + has_time: + type: boolean + example: false + created_at: + type: string + format: date-time + ImageDto: + required: + - default_port + - dialect + - driver_class + - id + - jdbc_method + - registry + - repository + - tag + type: object + properties: + id: + type: integer + format: int64 + registry: + type: string + example: docker.io/library + repository: + type: string + example: mariadb + tag: + type: string + example: "10.5" + dialect: + type: string + example: org.hibernate.dialect.MariaDBDialect + hash: + type: string + example: sha256:c5ec7353d87dfc35067e7bffeb25d6a0d52dad41e8b7357213e3b12d6e7ff78e + compiled: + type: string + format: date-time + example: 2021-03-12T15:26:21.678396092Z + size: + type: integer + example: 314295447 + driver_class: + type: string + example: org.mariadb.jdbc.Driver + date_formats: + type: array + items: + $ref: '#/components/schemas/ImageDateDto' + jdbc_method: + type: string + example: mariadb + default_port: + type: integer + format: int32 + example: 3306 + LicenseDto: + required: + - identifier + - uri + type: object + properties: + identifier: + type: string + example: MIT + uri: + type: string + example: https://opensource.org/licenses/MIT + RelatedIdentifierDto: + required: + - created + - id + - value + type: object + properties: + id: + type: integer + format: int64 + value: + type: string + example: 10.70124/dc4zh-9ce78 + type: + type: string + example: DOI + enum: + - DOI + - URL + - URN + - ARK + - arXiv + - bibcode + - EAN13 + - EISSN + - Handle + - IGSN + - ISBN + - ISTC + - LISSN + - LSID + - PMID + - PURL + - UPC + - w3id + relation: + type: string + example: Cites + enum: + - IsCitedBy + - Cites + - IsSupplementTo + - IsSupplementedBy + - IsContinuedBy + - Continues + - IsDescribedBy + - Describes + - HasMetadata + - IsMetadataFor + - HasVersion + - IsVersionOf + - IsNewVersionOf + - IsPreviousVersionOf + - IsPartOf + - HasPart + - IsPublishedIn + - IsReferencedBy + - References + - IsDocumentedBy + - Documents + - IsCompiledBy + - Compiles + - IsVariantFormOf + - IsOriginalFormOf + - IsIdenticalTo + - IsReviewedBy + - Reviews + - IsDerivedFrom + - IsSourceOf + - IsRequiredBy + - Requires + - IsObsoletedBy + - Obsoletes + created: + type: string + format: date-time + last_modified: + type: string + format: date-time + TableBriefDto: + required: + - columns + - description + - id + - internal_name + - name + - owner + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + example: Air Quality + description: + type: string + example: Air Quality in Austria + owner: + $ref: '#/components/schemas/UserBriefDto' + columns: + type: array + items: + $ref: '#/components/schemas/ColumnBriefDto' + internal_name: + type: string + example: air_quality + UserAttributeDto: + type: object + properties: + name: + type: string + example: theme_dark + value: + type: string + example: "true" + UserBriefDto: + required: + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + UserDto: + required: + - email + - email_verified + - id + - username + type: object + properties: + id: + type: string + format: uuid + example: 1ffc7b0e-9aeb-4e8b-b8f1-68f3936155b4 + username: + type: string + description: Only contains lowercase characters + example: jcarberry + name: + type: string + example: Josiah Carberry + orcid: + type: string + example: 0000-0002-1825-0097 + attributes: + type: array + items: + $ref: '#/components/schemas/UserAttributeDto' + containers: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + databases: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + identifiers: + type: array + items: + $ref: '#/components/schemas/ContainerDto' + email: + type: string + example: jcarberry@brown.edu + given_name: + type: string + example: Josiah + family_name: + type: string + example: Carberry + email_verified: + type: boolean + example: true + ViewBriefDto: + required: + - created + - creator + - id + - internal_name + - name + - query + - vdbid + type: object + properties: + id: + type: integer + format: int64 + vdbid: + type: integer + format: int64 + name: + type: string + example: Air Quality + query: + type: string + example: SELECT `id` FROM `air_quality` ORDER BY `value` DESC + created: + type: string + format: date-time + creator: + $ref: '#/components/schemas/UserDto' + internal_name: + type: string + example: air_quality + is_public: + type: boolean + example: true + initial_view: + type: boolean + description: True if it is the default view for the database + example: true + last_modified: + type: string + format: date-time + ApiErrorDto: + required: + - code + - message + - status + type: object + properties: + status: + type: string + example: STATUS + enum: + - 100 CONTINUE + - 101 SWITCHING_PROTOCOLS + - 102 PROCESSING + - 103 EARLY_HINTS + - 103 CHECKPOINT + - 200 OK + - 201 CREATED + - 202 ACCEPTED + - 203 NON_AUTHORITATIVE_INFORMATION + - 204 NO_CONTENT + - 205 RESET_CONTENT + - 206 PARTIAL_CONTENT + - 207 MULTI_STATUS + - 208 ALREADY_REPORTED + - 226 IM_USED + - 300 MULTIPLE_CHOICES + - 301 MOVED_PERMANENTLY + - 302 FOUND + - 302 MOVED_TEMPORARILY + - 303 SEE_OTHER + - 304 NOT_MODIFIED + - 305 USE_PROXY + - 307 TEMPORARY_REDIRECT + - 308 PERMANENT_REDIRECT + - 400 BAD_REQUEST + - 401 UNAUTHORIZED + - 402 PAYMENT_REQUIRED + - 403 FORBIDDEN + - 404 NOT_FOUND + - 405 METHOD_NOT_ALLOWED + - 406 NOT_ACCEPTABLE + - 407 PROXY_AUTHENTICATION_REQUIRED + - 408 REQUEST_TIMEOUT + - 409 CONFLICT + - 410 GONE + - 411 LENGTH_REQUIRED + - 412 PRECONDITION_FAILED + - 413 PAYLOAD_TOO_LARGE + - 413 REQUEST_ENTITY_TOO_LARGE + - 414 URI_TOO_LONG + - 414 REQUEST_URI_TOO_LONG + - 415 UNSUPPORTED_MEDIA_TYPE + - 416 REQUESTED_RANGE_NOT_SATISFIABLE + - 417 EXPECTATION_FAILED + - 418 I_AM_A_TEAPOT + - 419 INSUFFICIENT_SPACE_ON_RESOURCE + - 420 METHOD_FAILURE + - 421 DESTINATION_LOCKED + - 422 UNPROCESSABLE_ENTITY + - 423 LOCKED + - 424 FAILED_DEPENDENCY + - 425 TOO_EARLY + - 426 UPGRADE_REQUIRED + - 428 PRECONDITION_REQUIRED + - 429 TOO_MANY_REQUESTS + - 431 REQUEST_HEADER_FIELDS_TOO_LARGE + - 451 UNAVAILABLE_FOR_LEGAL_REASONS + - 500 INTERNAL_SERVER_ERROR + - 501 NOT_IMPLEMENTED + - 502 BAD_GATEWAY + - 503 SERVICE_UNAVAILABLE + - 504 GATEWAY_TIMEOUT + - 505 HTTP_VERSION_NOT_SUPPORTED + - 506 VARIANT_ALSO_NEGOTIATES + - 507 INSUFFICIENT_STORAGE + - 508 LOOP_DETECTED + - 509 BANDWIDTH_LIMIT_EXCEEDED + - 510 NOT_EXTENDED + - 511 NETWORK_AUTHENTICATION_REQUIRED + message: + type: string + example: Error message + code: + type: string + example: error.service.code + UserThemeSetDto: + required: + - theme_dark + type: object + properties: + theme_dark: + type: boolean + example: true + UserPasswordDto: + required: + - password + type: object + properties: + password: + type: string + BannerMessageUpdateDto: + required: + - message + - type + type: object + properties: + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More + display_start: + type: string + format: date-time + display_end: + type: string + format: date-time + BannerMessageNotFoundException: + type: object + properties: + cause: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + suppressed: + type: array + items: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + localizedMessage: + type: string + localizedMessage: + type: string + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + suppressed: + type: array + items: + type: object + properties: + stackTrace: + type: array + items: + type: object + properties: + classLoaderName: + type: string + moduleName: + type: string + moduleVersion: + type: string + methodName: + type: string + fileName: + type: string + lineNumber: + type: integer + format: int32 + nativeMethod: + type: boolean + className: + type: string + message: + type: string + localizedMessage: + type: string + localizedMessage: + type: string + BannerMessageBriefDto: + required: + - message + - type + type: object + properties: + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More + SignupRequestDto: + required: + - email + - password + - username + type: object + properties: + username: + pattern: "^[a-z0-9]{3,}$" + type: string + example: user + email: + type: string + example: user@example.com + password: + type: string + BannerMessageCreateDto: + required: + - message + - type + type: object + properties: + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More + display_start: + type: string + format: date-time + display_end: + type: string + format: date-time + BannerMessageDto: + required: + - id + - message + - type + type: object + properties: + id: + type: integer + format: int64 + type: + type: string + enum: + - error + - warning + - info + message: + type: string + example: Maintenance starts on 8am on Monday + link: + type: string + example: https://example.com + link_text: + type: string + example: More + display_start: + type: string + format: date-time + display_end: + type: string + format: date-time + securitySchemes: + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT diff --git a/.docs/customization.md b/.docs/customization.md new file mode 100644 index 0000000000000000000000000000000000000000..af996d9c644c2964a92961c94bbc3b0e72c17404 --- /dev/null +++ b/.docs/customization.md @@ -0,0 +1,56 @@ +--- +author: Martin Weise +hide: +- navigation +--- + +# Customization + +!!! info "Abstract" + + On this page, we showcase the customization capabilities of DBRepo to e.g. whitelabel your deployment. + +## Custom Title + +The default title is "Database Repository" and can be replaced by changing the `TITLE` environment variable. + +## Custom Logo + +The default placeholder logo consists of the two universities that developed this software. You can replace it by +mounting your own logo with a volume. + +```console +docker run -v /path/to/your_logo.png:/logo.png ... +``` + +In case your logo is not in PNG format, you need to change the environment variable `LOGO` accordingly, e.g. for a logo +in JPEG format, set `LOGO: "/logo.JPEG"` in the `.env` file and start the container with a volume. + +```console +docker run -v /path/to/your_logo.JPEG:/logo.JPEG ... +``` + +<figure markdown> + +<figcaption>Custom logo which replaces the default placeholder logo</figcaption> +</figure> + +## Custom Icon + +The default placeholder icon can be replaced by mounting your own icon with a volume. + +```console +docker run -v /path/to/your_logo.ico:/favicon.ico ... +``` + +<figure markdown> + +<figcaption>Custom icon which replaces the default placeholder icon</figcaption> +</figure> + +In case your icon is not in ICO format, you need to change the environment variable `ICON` accordingly, e.g. for an icon +in GIF format, set `ICON: "/favicon.GIF"` in the `.env` file and start the container with a volume. + +```console +docker run -v /path/to/favicon.GIF:/favicon.GIF ... +``` diff --git a/.docs/deployment.md b/.docs/deployment.md new file mode 100644 index 0000000000000000000000000000000000000000..b3a35b8525f2a644b569f6d959cc9c38cba443dd --- /dev/null +++ b/.docs/deployment.md @@ -0,0 +1,76 @@ +--- +author: Martin Weise +hide: +- navigation +--- + +# Deployment + +!!! info "Abstract" + + We modified some services and exchanged them with reviewed, open-source implementations that extend the functionality + even more from version 1.2 onwards. On this page, some of the configuration possible is summarized. + +## Authentication Service + +## Broker Service + +### Authentication + +The RabbitMQ client can be authenticated through plain (username, password) and OAuth2 mechanisms. Note that the access +token already contains a field `client_id=foo`, so the username is optional in `PlainCredentials()`. + +=== "Plain" + + ``` py + import pika + + credentials = pika.credentials.PlainCredentials("foo", "bar") + parameters = pika.ConnectionParameters('localhost', 5672, '/', credentials) + connection = pika.BlockingConnection(parameters) + channel = connection.channel() + channel.queue_declare(queue='test', durable=True) + channel.basic_publish(exchange='', + routing_key='test', + body=b'Hello World!') + print(" [x] Sent 'Hello World!'") + connection.close() + ``` + +=== "OAuth2" + + ``` py + import pika + + credentials = pika.credentials.PlainCredentials("", "THE_ACCESS_TOKEN") + parameters = pika.ConnectionParameters('localhost', 5672, '/', credentials) + connection = pika.BlockingConnection(parameters) + channel = connection.channel() + channel.queue_declare(queue='test', durable=True) + channel.basic_publish(exchange='', + routing_key='test', + body=b'Hello World!') + print(" [x] Sent 'Hello World!'") + connection.close() + ``` + +## Identifier Service + +From version 1.2 onwards there are two modes for the Identifier Service: + +1. Persistent Identifier (PID) +2. Digital Object Identifier (DOI) + +By default, the URI mode is used, creating a PID for databases or subsets. If starting the Identifier Service in DOI mode, +a DOI is minted for persistent identification of databases or subsets. Using the DOI system is entirely *optional* and +should not be done for test-deployments. + +<figure markdown> + +<figcaption>Minting a test-DOI for a subset</figcaption> +</figure> + +## Gateway Service + +From version 1.2 onwards we use both HTTP and HTTPS to serve the API, especially for the Authentication Service. The Discovery +Service lists both the non-secure and secure ports. diff --git a/.docs/get-started.md b/.docs/get-started.md new file mode 100644 index 0000000000000000000000000000000000000000..eecbd290c004609a88bad70c2d29f0a47f5b6903 --- /dev/null +++ b/.docs/get-started.md @@ -0,0 +1,152 @@ +--- +author: Martin Weise +hide: + +- navigation + +--- + +# Get Started + +!!! info "Abstract" + + In this short getting started guide we show the dependencies to run the database repository and perform a small, + local, test deployment for quickly trying out the features that the repository offers. + +## Requirements + +### Hardware + +For this small, local, test deployment any modern hardware would suffice, we recommend a dedicated virtual machine with +the following settings. Note that most of the CPU and RAM resources will be needed for starting the infrastructure, +this is because of Docker. + +- 8 CPU cores +- 16GB RAM memory +- 100GB SSD memory available + +### Software + +Install Docker Engine for your operating system. There are excellent guides available for Linux, we highly recommend +to use a stable distribution such as [Debian](https://docs.docker.com/desktop/install/debian/). In the following guide +we only consider Debian. + +## Deployment + +### Docker Compose + +We maintain a rapid prototype deployment option through Docker Compose (v2.17.0 and newer). This deployment creates the +core infrastructure and a single Docker container for all user-generated databases. + +Download the +latest [`docker-compose.yml`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/docker-compose.prod.yml), +nginx reverse proxy +conf [`dbrepo.conf`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/dbrepo.conf) +and [`.env`](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.env.unix.example): + + curl -o docker-compose.yml https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/docker-compose.prod.yml + curl -o dbrepo.conf https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/dbrepo.conf + curl -o .env https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/.env.unix.example + +Increase the virtual memory max swap limit for OpenSearch to at least 262144 on the *host machine* according +to [the official manual](https://opensearch.org/docs/1.0/opensearch/install/important-settings/), you need *sudo* +permissions for this (check first with `cat /proc/sys/vm/max_map_count`): + + echo "vm.max_map_count=262144" >> /etc/sysctl.conf + sysctl -p + +Start the services: + + docker compose pull + docker compose up -d + +View the logs: + + docker compose logs -f + +The Metadata Database still needs to know that the Docker container that holds all user-generated databases exists, we +need to insert it: + + mariadb -h 127.0.0.1 -D fda -u root -pdbrepo -e "INSERT INTO `fda`.`mdb_containers` \ + (name, internal_name, image_id, host, port, privileged_username, privileged_password) \ + VALUES ('MariaDB 10.5', 'mariadb_10_5', 1, 'user-db', 3306, 'root', 'dbrepo')" + +You should now be able to view the front end at <a href="http://127.0.0.1:80" target="_blank">http://127.0.0.1:80</a> + +Please be warned that the default configuration is not intended for public deployments. It is only intended to have a +running system within minutes to play around within the system and explore features. + +!!! warning "Known security issues with the default configuration" + + The system is auto-configured for a small, local, test deployment and is *not* secure! You need to make modifications + in various places to make it secure: + + * **Authentication Service**: + + a. You need to use your own instance or configure a secure instance using a (self-signed) certificate. + Additionally, when serving from a non-default Authentication Service, you need to put it into the + `JWT_ISSUER` environment variable (`.env`). + + b. You need to change the default admin user `fda` password in Realm + master > Users > fda > Credentials > Reset password. + + c. You need to change the client secrets for the clients `dbrepo-client` and `broker-client`. Do this in Realm + dbrepo > Clients > dbrepo-client > Credentials > Client secret > Regenerate. Do the same for the + broker-client. + + d. You need to regenerate the public key of the `RS256` algorithm which is shared with all services to verify + the signature of JWT tokens. Add your securely generated private key in Realm + dbrepo > Realm settings > Keys > Providers > Add provider > rsa. + + * **Broker Service**: by default, this service is configured with an administrative user that has major privileges. + You need to change the password of the user *fda* in Admin > Update this user > Password. We found this + [simple guide](https://onlinehelp.coveo.com/en/ces/7.0/administrator/changing_the_rabbitmq_administrator_password.htm) + to be very useful. + + * **Search Database**: by default, this service is configured to require authentication with an administrative user + that is allowed to write into the indizes. Following + this [simple guide](https://www.elastic.co/guide/en/elasticsearch/reference/8.7/reset-password.html), this can be + achieved using the command line. + + * **Gateway Service**: by default, no HTTPS is used that protects the services behind. You need to provide a trusted + SSL/TLS certificate in the configuration file or use your own proxy in front of the Gateway Service. See this + [simple guide](http://nginx.org/en/docs/http/configuring_https_servers.html) on how to install a SSL/TLS + certificate on NGINX. + +##### Migration from 1.2 to 1.3 + +In case you have a previous deployment from version 1.2, shut down the containers and back them up manually. You can do +this by using the `busybox` image. Replace `deadbeef` with your container name or hash: + +```console +export NAME=dbrepo-userdb-xyz +docker run --rm --volumes-from $NAME -v /home/$USER/backup:/backup busybox tar pcvfz /backup/$NAME.tar.gz /var/lib/mysql +``` + +!!! danger "Wipe all traces of DBRepo from your system" + + To erase all traces of DBRepo from your computer or virtual machine, the following commands delete all containers, + volumes and networks that are present, execute the following **dangerous** command. It will **wipe** all information + about DBRepo from your system (excluding the images). + + ```console + docker container stop $(docker container ls -aq -f name=^/dbrepo-.*) || true + docker container rm $(docker container ls -aq -f name=^/dbrepo-.*) || true + docker volume rm $(docker volume ls -q -f name=^dbrepo-.*) || true + docker network rm $(docker network ls -q -f name=^dbrepo-.*) || true + ``` + +You can restore the volume *after* downloading the new 1.3 images and creating the infrastructure: + +```console +export NAME=dbrepo-userdb-xyz +export PORT=12345 +docker container create -h $NAME --name $NAME -p $PORT:3306 -e MARIADB_ROOT_PASSWORD=mariadb --network userdb -v /backup mariadb:10.5 +docker run --rm --volumes-from $NAME -v /home/$USER/backup/.tar.gz:/backup/$NAME.tar.gz busybox sh -c 'cd /backup && tar xvfz /backup/$NAME.tar.gz && cp -r /backup/var/lib/mysql/* /var/lib/mysql' +``` + +Future releases will be backwards compatible and will come with migration scripts. + +### Kubernetes + +We maintain a RKE2 Kubernetes deployment from version 1.3 onwards. More on that when the release date is fixed. diff --git a/.docs/images/architecture.png b/.docs/images/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..f2353af4120193e1d777f1c1eaf8fad95a5c761c Binary files /dev/null and b/.docs/images/architecture.png differ diff --git a/.docs/redirect.html b/.docs/redirect.html index ac283ba4bf85f95d1f54bf97001ffda7c92889a4..a5d576a99eec1af1450a9bc1c4edac0a70de953f 100644 --- a/.docs/redirect.html +++ b/.docs/redirect.html @@ -3,16 +3,16 @@ <head> <meta charset="UTF-8"> <title>Redirect Notice</title> - <meta http-equiv="Refresh" content="0; url='https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.3/'" /> + <meta http-equiv="Refresh" content="0; url='https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4/'" /> </head> <body> <h1>Redirect Notice</h1> <p> - This page should automatically open the documentation for version 1.3. In case this page does not load the site is + This page should automatically open the documentation for version 1.4. In case this page does not load the site is available at: </p> <p> - <a href="https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.3/">https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.3/</a> + <a href="https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4/">https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4/</a> </p> </body> </html> diff --git a/.docs/requirements.txt b/.docs/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..1df697b8b2fc6e9019545dffdb813e149bbf823f --- /dev/null +++ b/.docs/requirements.txt @@ -0,0 +1,7 @@ +mkdocs==1.4.3 +mkdocs-material==9.1.17 +mkdocs-with-pdf==0.9.3 +mkdocs-material-extensions>=1.0.3 +requests>=2.27.0 +py-dotenv>=0.1 +python-dotenv==1.0.0 diff --git a/.docs/system-databases-search.md b/.docs/system-databases-search.md index ecabcaf6f18f770546a496ccc6aad117f68e090a..ce9965ee12e33c66f25639c79bb8109aff19b10d 100644 --- a/.docs/system-databases-search.md +++ b/.docs/system-databases-search.md @@ -8,7 +8,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`dbrepo/search-db:latest`](https://hub.docker.com/r/dbrepo/search-db) + Image: [`dbrepo/search-db:1.4`](https://hub.docker.com/r/dbrepo/search-db) * Ports: 9200/tcp * Indexes: `http://:9200/_all` diff --git a/.docs/system-other-ui.md b/.docs/system-other-ui.md index 0e8c72ad228c0bda6ee568c4e672af2a03e2f2ab..6ea29369f743f6a806c3135f04f8116cc59dc5e6 100644 --- a/.docs/system-other-ui.md +++ b/.docs/system-other-ui.md @@ -8,7 +8,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`dbrepo/ui:latest`](https://hub.docker.com/r/dbrepo/ui) + Image: [`dbrepo/ui:1.4`](https://hub.docker.com/r/dbrepo/ui) * Ports: 3000/tcp, 9100/tcp * Prometheus: `http://:9100/metrics` diff --git a/.docs/system-services-analyse.md b/.docs/system-services-analyse.md index 5a9e08be36e64d95da663ebcac1a63d5e87e2a99..93b188279e47e9e1ad5c85b66057737493e91365 100644 --- a/.docs/system-services-analyse.md +++ b/.docs/system-services-analyse.md @@ -8,7 +8,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`dbrepo/analyse-service:latest`](https://hub.docker.com/r/dbrepo/analyse-service) + Image: [`dbrepo/analyse-service:1.4`](https://hub.docker.com/r/dbrepo/analyse-service) * Ports: 5000/tcp * Prometheus: `http://<hostname>:5000/metrics` diff --git a/.docs/system-services-authentication.md b/.docs/system-services-authentication.md index a1d25539fa3bcc8732a5e4c49517c27d27e1404b..1eec90ea7703bb865c1be8ef3d65f7b78fa0ff9a 100644 --- a/.docs/system-services-authentication.md +++ b/.docs/system-services-authentication.md @@ -8,7 +8,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`dbrepo/authentication-service:latest`](https://hub.docker.com/r/dbrepo/authentication-service) + Image: [`dbrepo/authentication-service:1.4`](https://hub.docker.com/r/dbrepo/authentication-service) * Ports: 8080/tcp * Admin Console: `http://<hostname>:8080/api/auth/admin/` diff --git a/.docs/system-services-data.md b/.docs/system-services-data.md index b0d0e38e20139702a54937b2142528b6169c9246..698fc3bbb4a044b47092888c7e44c82c644367f7 100644 --- a/.docs/system-services-data.md +++ b/.docs/system-services-data.md @@ -8,7 +8,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`dbrepo/data-service:latest`](https://hub.docker.com/r/dbrepo/data-service) + Image: [`dbrepo/data-service:1.4`](https://hub.docker.com/r/dbrepo/data-service) * Ports: 9093/tcp * Info: `http://<hostname>:9093/actuator/info` diff --git a/.docs/system-services-metadata.md b/.docs/system-services-metadata.md index d020c9b0cd775226e3e9f324d69cace44b721921..a44316cc07954d2b24e73bedfcb6d1dfa0a08376 100644 --- a/.docs/system-services-metadata.md +++ b/.docs/system-services-metadata.md @@ -8,7 +8,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`dbrepo/metadata-service:latest`](https://hub.docker.com/r/dbrepo/metadata-service) + Image: [`dbrepo/metadata-service:1.4`](https://hub.docker.com/r/dbrepo/metadata-service) * Ports: 9099/tcp * Info: `http://9093:9099/actuator/info` diff --git a/.docs/system-services-mirror.md b/.docs/system-services-mirror.md index 94cd66f723fbd39e4ea958d0928759b7fcb0f97d..ab1052ddd8c667b7619fad2ff435664afe1f82a6 100644 --- a/.docs/system-services-mirror.md +++ b/.docs/system-services-mirror.md @@ -8,7 +8,7 @@ author: Martin Weise !!! debug "Debug Information" - Image: [`dbrepo/mirror-service:latest`](https://hub.docker.com/r/dbrepo/mirror-service) + Image: [`dbrepo/mirror-service:1.4`](https://hub.docker.com/r/dbrepo/mirror-service) * Ports: 9050/tcp * Info: `http://<hostname>:9050/actuator/info` diff --git a/.gitignore b/.gitignore index 847adcd1c55258dd97719d3b87e4ed9a3226b357..4785a0ee84c0ef772980a177e57eed473c4eeca7 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,9 @@ site/ .pytest_cache/ __pycache__/ +# docs +site/ + # Previous directories fda-analyse-service/ fda-authentication-service/ @@ -40,6 +43,9 @@ fda-ui/ # demo .demo +# Generated +ready + # crt *.crt *.key diff --git a/.gitlab/issue_templates/bug_report.md b/.gitlab/issue_templates/bug_report.md new file mode 100644 index 0000000000000000000000000000000000000000..7277144c09beeb03ed3ae3b4db8ba6969318a149 --- /dev/null +++ b/.gitlab/issue_templates/bug_report.md @@ -0,0 +1,32 @@ +### Describe the bug + +A clear and concise description of what the bug is. + +### Is this a regression? + +Yes/No. + +### To Reproduce + +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +### Expected behavior + +A clear and concise description of what you expected to happen. + +### Screenshots + +If applicable, add screenshots to help explain your problem. + +### Environment + + - Browser [e.g. firefox, chrome] + - Damap version [e.g. 2.1.0] + +### Additional context + +Add any other context about the problem here. diff --git a/.gitlab/issue_templates/change_request.md b/.gitlab/issue_templates/change_request.md new file mode 100644 index 0000000000000000000000000000000000000000..ab04ad8141aae11d9194a108b5d0d33be2634223 --- /dev/null +++ b/.gitlab/issue_templates/change_request.md @@ -0,0 +1,19 @@ +### Changes + +Add a description of the task and describe what the task should include. + +### Additional notes + +List any notes you collected that support the original task and include a screenshot if applicable. + +### Assumptions + +List any assumptions that you are aware of but still need to be reviewed. + +### Acceptance Criteria + +Describe how you think a completed task would look like or how it should work. + +### Risks? (optional) + +Potential risks and how to best mitigate them. diff --git a/.gitlab/issue_templates/feature_request.md b/.gitlab/issue_templates/feature_request.md new file mode 100644 index 0000000000000000000000000000000000000000..036713740ba03c615275c1c0ee7e4e76f7a658cc --- /dev/null +++ b/.gitlab/issue_templates/feature_request.md @@ -0,0 +1,17 @@ +### Description + +A clear and concise description of what you're missing. + +### Describe the solution you'd like + +A clear and concise description of what you want to happen. + +### Describe alternatives you've considered + +A clear and concise description of any alternative solutions or features you've considered. + +### Additional context + +Add any other context or screenshots about the feature request here. + +_If this issue requests multiple changes consider using checkboxes or lists._ diff --git a/.gitlab/issue_templates/question.md b/.gitlab/issue_templates/question.md new file mode 100644 index 0000000000000000000000000000000000000000..c14b666d005270bb710e1e0ebbb493e1165aba39 --- /dev/null +++ b/.gitlab/issue_templates/question.md @@ -0,0 +1,2 @@ +### Description + diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index dc78aa0ea7fde3dc3d21473ddb8038bff128f925..c61e0d6c11a6f69e21991783b9254be656ad8bf4 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,5 +1,5 @@ - # INFO: This compose file deploys the official Docker images from a stable, tested master branch -# MODIFIED: 2023-06-01 +# INFO: This compose file deploys the official Docker images from a stable, tested master branch +# MODIFIED: 2024-01-07 # MAINTAINER: Martin Weise <martin.weise@tuwien.ac.at> version: "3.6" @@ -18,7 +18,7 @@ services: restart: "no" container_name: dbrepo-metadata-db hostname: metadata-db - image: docker.io/dbrepo/metadata-db:0.1.4 + image: docker.io/dbrepo/metadata-db:1.4 volumes: - metadata-db-data:/bitnami/mariadb - ./dist/setup-schema_local.sql:/docker-entrypoint-initdb.d/setup-schema_local.sql @@ -80,7 +80,7 @@ services: restart: "no" container_name: dbrepo-authentication-service hostname: authentication-service - image: docker.io/dbrepo/authentication-service:0.1.4 + image: docker.io/dbrepo/authentication-service:1.4 ports: - "8443:8443" - "8080:8080" @@ -105,7 +105,7 @@ services: restart: "no" container_name: dbrepo-metadata-service hostname: metadata-service - image: docker.io/dbrepo/metadata-service:0.1.4 + image: docker.io/dbrepo/metadata-service:1.4 volumes: - "${SHARED_FILESYSTEM:-/tmp}:/tmp" ports: @@ -178,7 +178,7 @@ services: restart: "no" container_name: dbrepo-analyse-service hostname: analyse-service - image: docker.io/dbrepo/analyse-service:0.1.4 + image: docker.io/dbrepo/analyse-service:1.4 ports: - "5000:5000" environment: @@ -222,7 +222,7 @@ services: restart: "no" container_name: dbrepo-search-db hostname: search-db - image: docker.io/dbrepo/search-db:0.1.4 + image: docker.io/dbrepo/search-db:1.4 ports: - "9200:9200" healthcheck: @@ -246,7 +246,7 @@ services: restart: "no" container_name: dbrepo-search-service hostname: search-service - image: docker.io/dbrepo/search-service:0.1.4 + image: docker.io/dbrepo/search-service:1.4 ports: - "4000:4000" environment: @@ -258,7 +258,7 @@ services: restart: "no" container_name: dbrepo-data-db-sidecar hostname: data-db-sidecar - image: docker.io/dbrepo/data-db-sidecar:0.1.4 + image: docker.io/dbrepo/data-db-sidecar:1.4 ports: - "3305:3305" environment: @@ -278,7 +278,7 @@ services: restart: "no" container_name: dbrepo-ui hostname: ui - image: docker.io/dbrepo/ui:0.1.4 + image: docker.io/dbrepo/ui:1.4 volumes: - ./dist/dbrepo.config.json:/app/dbrepo.config.json depends_on: @@ -334,7 +334,7 @@ services: restart: "no" container_name: dbrepo-search-db-init hostname: search-db-init - image: docker.io/dbrepo/search-db-init:0.1.4 + image: docker.io/dbrepo/search-db-init:1.4 environment: OPENSEARCH_HOST: ${SEARCH_DB_HOST:-http://search-db:9200} CURL_EXTRA_ARGS: ${SEARCH_DB_EXTRA_ARGS:-} @@ -367,7 +367,7 @@ services: restart: "no" container_name: dbrepo-storage-service-init hostname: storage-service-init - image: docker.io/dbrepo/storage-service-init:0.1.4 + image: docker.io/dbrepo/storage-service-init:1.4 environment: SEAWEEDFS_ENDPOINT: "${STORAGE_SEAWEEDFS_ENDPOINT:-storage-service:9333}" depends_on: @@ -406,7 +406,7 @@ services: restart: "no" container_name: dbrepo-data-service hostname: data-service - image: docker.io/dbrepo/data-service:0.1.4 + image: docker.io/dbrepo/data-service:1.4 ports: - "9093:9093" environment: diff --git a/docker-compose.yml b/docker-compose.yml index 5054767e93a477fc4eb35c3b6d26ac1f3b8603a2..60823a8153f3498495bebf173e0f3e0452c9154d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,5 @@ - # INFO: This compose file deploys the official Docker images from a stable, tested master branch -# MODIFIED: 2023-06-01 +# INFO: This compose file deploys the official Docker images from a stable, tested master branch +# MODIFIED: 2024-01-07 # MAINTAINER: Martin Weise <martin.weise@tuwien.ac.at> version: "3.6"