Files
quiz-test/chunk-GMUETU5N.js
2025-12-29 22:23:30 +02:00

2 lines
4.5 KiB
JavaScript

import{a as D}from"./chunk-3GOV5KJM.js";import{a as S}from"./chunk-TPLZKWZ7.js";import{a as b}from"./chunk-GPI43RSU.js";import{a as f}from"./chunk-52JZ5I3Y.js";import{n as m}from"./chunk-COFYR5MX.js";import{D as s,Ec as y,Q as C,W as i,_ as v,a as g,b as h,da as o,n as d,o as p,r as u,ta as n}from"./chunk-2MUIW2M6.js";var E=class l{http=o(m);toastService=o(f);authService=o(S);guestService=o(b);API_URL=`${D.apiUrl}/categories`;CACHE_TTL=3600*1e3;categoriesState=n([]);selectedCategoryState=n(null);loadingState=n(!1);errorState=n(null);categoriesCache=null;categoryDetailsCache=new Map;categories=this.categoriesState.asReadonly();selectedCategory=this.selectedCategoryState.asReadonly();isLoading=this.loadingState.asReadonly();error=this.errorState.asReadonly();filteredCategories=y(()=>{let t=this.categoriesState();return this.guestService.guestState().isGuest,t});categoriesByDisplayOrder=y(()=>[...this.filteredCategories()].sort((t,e)=>{let a=t.displayOrder??999,r=e.displayOrder??999;return a!==r?a-r:t.name.localeCompare(e.name)}));getCategories(t=!1){return!t&&this.categoriesCache&&this.isCacheValid(this.categoriesCache.timestamp)?(this.categoriesState.set(this.categoriesCache.data),d(this.categoriesCache.data)):(this.loadingState.set(!0),this.errorState.set(null),this.http.get(this.API_URL).pipe(u(e=>e.data),i(e=>{this.categoriesCache={data:e,timestamp:Date.now()},console.log(e),this.categoriesState.set(e),this.loadingState.set(!1)}),s(e=>this.handleError(e,"Failed to load categories")),C(1)))}getCategoryById(t,e=!1){let a=this.categoryDetailsCache.get(t);return!e&&a&&this.isCacheValid(a.timestamp)?(this.selectedCategoryState.set(a.data),d(a.data)):(this.loadingState.set(!0),this.errorState.set(null),this.http.get(`${this.API_URL}/${t}`).pipe(u(r=>{let{category:R,questionPreview:w,stats:c}=r.data;return h(g({},R),{questionPreview:w,stats:h(g({},c),{averageScore:c.averageAccuracy}),difficultyBreakdown:c.questionsByDifficulty})}),i(r=>{this.categoryDetailsCache.set(t,{data:r,timestamp:Date.now()}),this.selectedCategoryState.set(r),this.loadingState.set(!1)}),s(r=>r.status===404?this.handleError(r,"Category not found"):r.status===403?this.handleError(r,"This category is not accessible in guest mode"):this.handleError(r,"Failed to load category details")),C(1)))}createCategory(t){return this.loadingState.set(!0),this.errorState.set(null),this.http.post(this.API_URL,t).pipe(i(e=>{this.toastService.success("Category created successfully"),this.invalidateCategoriesCache(),this.loadingState.set(!1)}),s(e=>e.status===401||e.status===403?this.handleError(e,"You do not have permission to create categories"):this.handleError(e,"Failed to create category")))}updateCategory(t,e){return this.loadingState.set(!0),this.errorState.set(null),this.http.put(`${this.API_URL}/${t}`,e).pipe(i(a=>{this.toastService.success("Category updated successfully"),this.invalidateCategoriesCache(),this.categoryDetailsCache.delete(t),this.loadingState.set(!1)}),s(a=>a.status===404?this.handleError(a,"Category not found"):a.status===401||a.status===403?this.handleError(a,"You do not have permission to update categories"):this.handleError(a,"Failed to update category")))}deleteCategory(t){return this.loadingState.set(!0),this.errorState.set(null),this.http.delete(`${this.API_URL}/${t}`).pipe(i(()=>{this.toastService.success("Category deleted successfully"),this.invalidateCategoriesCache(),this.categoryDetailsCache.delete(t);let e=this.categoriesState();this.categoriesState.set(e.filter(a=>a.id!==t)),this.loadingState.set(!1)}),s(e=>e.status===404?this.handleError(e,"Category not found"):e.status===401||e.status===403?this.handleError(e,"You do not have permission to delete categories"):this.handleError(e,"Failed to delete category")))}searchCategories(t){if(!t.trim())return this.filteredCategories();let e=t.toLowerCase();return this.filteredCategories().filter(a=>a.name.toLowerCase().includes(e)||a.description.toLowerCase().includes(e))}clearSelectedCategory(){this.selectedCategoryState.set(null)}invalidateCategoriesCache(){this.categoriesCache=null}invalidateCategoryCache(t){this.categoryDetailsCache.delete(t)}clearAllCaches(){this.categoriesCache=null,this.categoryDetailsCache.clear()}isCacheValid(t){return Date.now()-t<this.CACHE_TTL}handleError(t,e){console.error("CategoryService Error:",t);let a=t.error?.message||e;return this.errorState.set(a),this.loadingState.set(!1),this.toastService.error(a),p(()=>t)}static \u0275fac=function(e){return new(e||l)};static \u0275prov=v({token:l,factory:l.\u0275fac,providedIn:"root"})};export{E as a};