mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2026-01-16 19:42:26 +01:00
feat: introduce feed management for individual and professor modules across frontend and backend services.
This commit is contained in:
@@ -44,6 +44,37 @@ export async function createIndividualFeed(modules: Module[]): Promise<string> {
|
||||
}
|
||||
}
|
||||
|
||||
export async function createProfessorFeed(modules: Module[]): Promise<string> {
|
||||
if (import.meta.env.SSR) {
|
||||
return "";
|
||||
}
|
||||
try {
|
||||
// Dynamic import to avoid circular dependencies or issues if pb is not initialized
|
||||
const { pb } = await import("../service/pocketbase");
|
||||
|
||||
const response = await fetch("/api/professor/feed", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": pb.authStore.token,
|
||||
},
|
||||
body: JSON.stringify(modules),
|
||||
});
|
||||
|
||||
if (
|
||||
response.status === 429 ||
|
||||
response.status === 500 ||
|
||||
response.status != 200
|
||||
) {
|
||||
return Promise.reject(response.statusText);
|
||||
}
|
||||
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
return Promise.reject(error);
|
||||
}
|
||||
}
|
||||
|
||||
interface FeedResponse {
|
||||
modules: FeedModule[];
|
||||
collectionId: string;
|
||||
|
||||
@@ -20,6 +20,7 @@ import { defineStore } from "pinia";
|
||||
const moduleStore = defineStore("moduleStore", {
|
||||
state: () => ({
|
||||
modules: new Map<string, Module>(),
|
||||
isProfessorFeed: false,
|
||||
}),
|
||||
actions: {
|
||||
addModule(module: Module) {
|
||||
@@ -55,6 +56,9 @@ const moduleStore = defineStore("moduleStore", {
|
||||
containsModule(module: Module): boolean {
|
||||
return this.modules.has(module.uuid);
|
||||
},
|
||||
setProfessorFeed(isProf: boolean) {
|
||||
this.isProfessorFeed = isProf;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
<script setup lang="ts">
|
||||
import moduleStore from "@/store/moduleStore.ts";
|
||||
import { createIndividualFeed } from "@/api/createFeed.ts";
|
||||
import { createIndividualFeed, createProfessorFeed } from "@/api/createFeed.ts";
|
||||
import { router } from "@/main";
|
||||
import tokenStore from "@/store/tokenStore.ts";
|
||||
import { Ref, computed, inject, ref, onMounted } from "vue";
|
||||
@@ -57,9 +57,14 @@ const requestIsPending = ref(false);
|
||||
|
||||
async function finalStep() {
|
||||
requestIsPending.value = true;
|
||||
const createFeed: Promise<string> = createIndividualFeed(
|
||||
store.getAllModules(),
|
||||
);
|
||||
|
||||
let createFeed: Promise<string>;
|
||||
|
||||
if (store.isProfessorFeed) {
|
||||
createFeed = createProfessorFeed(store.getAllModules());
|
||||
} else {
|
||||
createFeed = createIndividualFeed(store.getAllModules());
|
||||
}
|
||||
|
||||
// Check if createFeed Promise is resolved
|
||||
createFeed.then(async (token: string) => {
|
||||
|
||||
@@ -114,6 +114,7 @@ const createCalendar = () => {
|
||||
import("../../store/moduleStore").then(({ default: useModuleStore }) => {
|
||||
const store = useModuleStore();
|
||||
store.removeAllModules();
|
||||
store.setProfessorFeed(true);
|
||||
selectedModules.value.forEach((m) => store.addModule(m));
|
||||
router.push("/rename-modules");
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user