refactor(backend): RemoteResource-systeem dat vervangen werd door TanStack verwijderd.
This commit is contained in:
parent
be78e7f44d
commit
a33ec6c452
9 changed files with 0 additions and 193 deletions
|
|
@ -1,41 +0,0 @@
|
||||||
<script setup lang="ts" generic="T">
|
|
||||||
import {RemoteResource} from "@/services/api-client/remote-resource.ts";
|
|
||||||
import {computed} from "vue";
|
|
||||||
import {useI18n} from "vue-i18n";
|
|
||||||
|
|
||||||
const props = defineProps<{
|
|
||||||
resource: RemoteResource<T>
|
|
||||||
}>()
|
|
||||||
|
|
||||||
const { t } = useI18n();
|
|
||||||
|
|
||||||
const isLoading = computed(() => props.resource.state.type === 'loading');
|
|
||||||
const isError = computed(() => props.resource.state.type === 'error');
|
|
||||||
const data = computed(() => props.resource.state.type === 'success' ? props.resource.state.data : null);
|
|
||||||
|
|
||||||
const error = computed(() => props.resource.state.type === "error" ? props.resource.state : null);
|
|
||||||
const errorMessage = computed(() =>
|
|
||||||
error.value?.error.message ? error.value.error.message : JSON.stringify(error.value?.error)
|
|
||||||
);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div class="loading-div" v-if="isLoading">
|
|
||||||
<v-progress-circular indeterminate></v-progress-circular>
|
|
||||||
</div>
|
|
||||||
<div v-if="isError">
|
|
||||||
<v-empty-state
|
|
||||||
icon="mdi-alert-circle-outline"
|
|
||||||
:text="errorMessage"
|
|
||||||
:title="t('error_title')"
|
|
||||||
></v-empty-state>
|
|
||||||
</div>
|
|
||||||
<slot v-if="data" :data="data!"></slot>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
.loading-div {
|
|
||||||
padding: 20px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
import {type Params, RestEndpoint} from "@/services/api-client/endpoints/rest-endpoint.ts";
|
|
||||||
|
|
||||||
export class DeleteEndpoint<PP extends Params, QP extends Params, R> extends RestEndpoint<PP, QP, undefined, R> {
|
|
||||||
readonly method = "GET";
|
|
||||||
|
|
||||||
public delete(pathParams: PP, queryParams: QP): Promise<R> {
|
|
||||||
return super.request(pathParams, queryParams, undefined);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
import {type Params, RestEndpoint} from "@/services/api-client/endpoints/rest-endpoint.ts";
|
|
||||||
|
|
||||||
export class GetEndpoint<PP extends Params, QP extends Params, R> extends RestEndpoint<PP, QP, undefined, R> {
|
|
||||||
readonly method = "GET";
|
|
||||||
|
|
||||||
public get(pathParams: PP, queryParams: QP): Promise<R> {
|
|
||||||
return super.request(pathParams, queryParams, undefined);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
import {type Params, RestEndpoint} from "@/services/api-client/endpoints/rest-endpoint.ts";
|
|
||||||
|
|
||||||
export class GetHtmlEndpoint<PP extends Params, QP extends Params> extends RestEndpoint<PP, QP, undefined, Document> {
|
|
||||||
readonly method: "GET" | "POST" | "PUT" | "DELETE" = "GET";
|
|
||||||
|
|
||||||
public get(pathParams: PP, queryParams: QP): Promise<Document> {
|
|
||||||
return super.request(pathParams, queryParams, undefined, "document");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
import {type Params, RestEndpoint} from "@/services/api-client/endpoints/rest-endpoint.ts";
|
|
||||||
|
|
||||||
export class PostEndpoint<PP extends Params, QP extends Params, B, R> extends RestEndpoint<PP, QP, B, R> {
|
|
||||||
readonly method = "POST";
|
|
||||||
|
|
||||||
public post(pathParams: PP, queryParams: QP, body: B): Promise<R> {
|
|
||||||
return super.request(pathParams, queryParams, body);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
import apiClient from "@/services/api-client/api-client.ts";
|
|
||||||
import {HttpErrorStatusException} from "@/services/api-client/api-exceptions.ts";
|
|
||||||
import type {ResponseType} from "axios";
|
|
||||||
|
|
||||||
export abstract class RestEndpoint<PP extends Params, QP extends Params, B, R> {
|
|
||||||
public abstract readonly method: "GET" | "POST" | "PUT" | "DELETE";
|
|
||||||
constructor(public readonly url: string) {
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async request(pathParams: PP, queryParams: QP, body: B, responseType?: ResponseType): Promise<R> {
|
|
||||||
let urlFilledIn = this.url.replace(/:(\w+)(\/|$)/g, (_, key, after) =>
|
|
||||||
(pathParams[key] ? encodeURIComponent(pathParams[key]) : `:${key}`) + after
|
|
||||||
);
|
|
||||||
const response = await apiClient.request<R>({
|
|
||||||
url: urlFilledIn,
|
|
||||||
method: this.method,
|
|
||||||
params: queryParams,
|
|
||||||
data: body,
|
|
||||||
responseType: responseType || 'json'
|
|
||||||
});
|
|
||||||
if (response.status / 100 !== 2) {
|
|
||||||
throw new HttpErrorStatusException(response);
|
|
||||||
}
|
|
||||||
return response.data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export type Params = {[key: string]: string | number | boolean | undefined};
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
import {type ShallowReactive, shallowReactive} from "vue";
|
|
||||||
|
|
||||||
export type NotLoadedState = {
|
|
||||||
type: "notLoaded"
|
|
||||||
};
|
|
||||||
export type LoadingState = {
|
|
||||||
type: "loading"
|
|
||||||
};
|
|
||||||
export type ErrorState = {
|
|
||||||
type: "error",
|
|
||||||
error: any
|
|
||||||
};
|
|
||||||
export type SuccessState<T> = {
|
|
||||||
type: "success",
|
|
||||||
data: T
|
|
||||||
};
|
|
||||||
export type RemoteResourceState<T> = NotLoadedState | LoadingState | ErrorState | SuccessState<T>;
|
|
||||||
|
|
||||||
export type RemoteResource<T> = ShallowReactive<{
|
|
||||||
state: RemoteResourceState<T>
|
|
||||||
}>;
|
|
||||||
|
|
||||||
export function remoteResource<T>(): RemoteResource<T> {
|
|
||||||
return shallowReactive({
|
|
||||||
state: {
|
|
||||||
type: "notLoaded"
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function loadResource<T>(resource: RemoteResource<T>, promise: Promise<T>): void {
|
|
||||||
resource.state = { type: "loading" }
|
|
||||||
promise.then(
|
|
||||||
data => resource.state = { type: "success", data },
|
|
||||||
error => resource.state = { type: "error", error }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
import {GetEndpoint} from "@/services/api-client/endpoints/get-endpoint.ts";
|
|
||||||
import type {LearningObject} from "@/data-objects/learning-object.ts";
|
|
||||||
import type {Language} from "@/data-objects/language.ts";
|
|
||||||
import {GetHtmlEndpoint} from "@/services/api-client/endpoints/get-html-endpoint.ts";
|
|
||||||
|
|
||||||
const getLearningObjectMetadataEndpoint = new GetEndpoint<{hruid: string}, {language: Language, version: number}, LearningObject>(
|
|
||||||
"/learningObject/:hruid"
|
|
||||||
);
|
|
||||||
|
|
||||||
const getLearningObjectHtmlEndpoint = new GetHtmlEndpoint<{hruid: string}, {language: Language, version: number}>(
|
|
||||||
"/learningObject/:hruid/html"
|
|
||||||
);
|
|
||||||
|
|
||||||
export function getLearningObjectMetadata(
|
|
||||||
hruid: string,
|
|
||||||
language: Language,
|
|
||||||
version: number
|
|
||||||
): Promise<LearningObject> {
|
|
||||||
return getLearningObjectMetadataEndpoint.get({hruid}, {language, version});
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getLearningObjectHTML(
|
|
||||||
hruid: string,
|
|
||||||
language: Language,
|
|
||||||
version: number
|
|
||||||
): Promise<Document> {
|
|
||||||
return getLearningObjectHtmlEndpoint.get({hruid}, {language, version});
|
|
||||||
}
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
import {GetEndpoint} from "@/services/api-client/endpoints/get-endpoint.ts";
|
|
||||||
import {LearningPath, type LearningPathDTO} from "@/data-objects/learning-path.ts";
|
|
||||||
import type {Language} from "@/data-objects/language.ts";
|
|
||||||
import {single} from "@/utils/response-assertions.ts";
|
|
||||||
|
|
||||||
const learningPathEndpoint = new GetEndpoint<
|
|
||||||
{},
|
|
||||||
{search?: string, hruid?: string, language?: Language, forGroup?: string, forStudent?: string},
|
|
||||||
LearningPathDTO[]
|
|
||||||
>("/learningPath");
|
|
||||||
|
|
||||||
export async function searchLearningPaths(query: string): Promise<LearningPath[]> {
|
|
||||||
let dtos = await learningPathEndpoint.get({}, {search: query})
|
|
||||||
return dtos.map(dto => LearningPath.fromDTO(dto));
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getLearningPath(hruid: string, language: Language, options?: {forGroup?: string, forStudent?: string}): Promise<LearningPath> {
|
|
||||||
let dtos = await learningPathEndpoint.get(
|
|
||||||
{},
|
|
||||||
{hruid, language, forGroup: options?.forGroup, forStudent: options?.forStudent}
|
|
||||||
);
|
|
||||||
return LearningPath.fromDTO(single(dtos));
|
|
||||||
}
|
|
||||||
Reference in a new issue