49 lines
14 KiB
JavaScript
49 lines
14 KiB
JavaScript
import{G as l}from"./index-4dccb174.js";import{f as k,M as A,d as v}from"./supabaseTableQuery-95762ff3.js";import{e as g}from"./convert-2ad76038.js";function E(e){if(Array.isArray(e))return e.map(String).filter(Boolean);if(typeof e=="string")try{const t=JSON.parse(e);if(Array.isArray(t))return t.map(String).filter(Boolean)}catch{return e.trim()?[e]:[]}return[]}function M(e){return{...e,duration_minutes:Math.round((Number(e.duration_seconds)||0)/60),kodoblu_voice_url:g(e.kodoblu_voice_url)||"",audio_section_url:g(e.audio_section_url)||"",step_images:E(e.step_images).map(t=>g(t)||t)}}function x(e,t,r){var a,c,s,i,n;return{challenge_id:e,step_order:r,description:t.description||"",duration_seconds:Math.max(0,Math.round(Number(t.duration_minutes)*60)||0),aparat_embed_code:((a=t.aparat_embed_code)==null?void 0:a.trim())||null,kodoblu_voice_url:g((c=t.kodoblu_voice_url)==null?void 0:c.trim())||null,step_images:(t.step_images||[]).map(o=>g(o)||o).filter(Boolean),is_final_step:!!t.is_final_step,enable_feedback_text:!!t.enable_feedback_text,require_feedback_text:!!t.require_feedback_text,feedback_text_title:((s=t.feedback_text_title)==null?void 0:s.trim())||null,feedback_text_placeholder:((i=t.feedback_text_placeholder)==null?void 0:i.trim())||null,enable_photo_upload:!!t.enable_photo_upload,require_photo_upload:!!t.enable_photo_upload&&!!t.require_photo_upload,enable_voice_upload:!!t.enable_voice_upload,require_voice_upload:!!t.require_voice_upload,enable_mcq:!!t.enable_mcq,require_mcq:!!t.require_mcq,mcq_question:t.mcq_question||null,mcq_options:(t.mcq_options||[]).filter(o=>o.trim()),mcq_correct_index:t.enable_mcq?Number(t.mcq_correct_index??0):null,enable_audio_section:!!t.enable_audio_section,audio_section_url:g((n=t.audio_section_url)==null?void 0:n.trim())||null,punishment_description:t.punishment_description||"",requires_photo_upload:!!t.enable_photo_upload&&!!t.require_photo_upload,updated_at:new Date().toISOString()}}function N(e,t){return t.map((r,a)=>x(e,r,a+1))}async function U(e){const{data:t,error:r}=await l.from("step_challenges").select("*").eq("id",e).single();if(r)throw r;const{data:a,error:c}=await l.from("step_challenge_steps").select("*").eq("challenge_id",e).order("step_order",{ascending:!0});if(c)throw c;return{...t,steps:(a||[]).map(s=>M(s))}}async function B(e,t){const r={title:e.title,character_image_url:e.character_image_url,show:e.show??!1,access_type:e.access_type??"free",sort_order:e.sort_order??0,completion_points:Number(e.completion_points)||50,chapter_id:e.chapter_id??null};t&&(r.owner_id=t);const{data:a,error:c}=await l.from("step_challenges").insert([r]).select().single();if(c)throw c;const s=N(a.id,e.steps),{error:i}=await l.from("step_challenge_steps").insert(s);if(i)throw i;return a}async function L(e,t){const{error:r}=await l.from("step_challenges").update({title:t.title,character_image_url:t.character_image_url,show:t.show??!1,access_type:t.access_type??"free",sort_order:t.sort_order??0,completion_points:Number(t.completion_points)||50,chapter_id:t.chapter_id??null,updated_at:new Date().toISOString()}).eq("id",e);if(r)throw r;const{data:a,error:c}=await l.from("step_challenge_steps").select("id").eq("challenge_id",e);if(c)throw c;const s=new Set((a||[]).map(o=>o.id)),i=t.steps.map(o=>o.id).filter(o=>typeof o=="number"&&s.has(o)),n=[...s].filter(o=>!i.includes(o));if(n.length){const{error:o}=await l.from("user_step_challenge_steps").delete().in("step_id",n);if(o)throw o;const{error:_}=await l.from("step_challenge_steps").delete().in("id",n);if(_)throw _}for(const o of i){const{error:_}=await l.from("step_challenge_steps").update({step_order:-o,updated_at:new Date().toISOString()}).eq("id",o);if(_)throw _}for(let o=0;o<t.steps.length;o++){const _=t.steps[o],m=x(e,_,o+1);if(_.id&&s.has(_.id)){const{error:u}=await l.from("step_challenge_steps").update(m).eq("id",_.id);if(u)throw u;continue}const{error:h}=await l.from("step_challenge_steps").insert(m);if(h)throw h}return{id:e}}async function $(e){const{data:t,error:r}=await l.from("user_step_challenges").select("id").eq("challenge_id",e);if(r)throw r;const a=(t||[]).map(i=>i.id);if(a.length){const{error:i}=await l.from("user_step_challenge_steps").delete().in("user_challenge_id",a);if(i)throw i;const{error:n}=await l.from("user_step_challenges").delete().eq("challenge_id",e);if(n)throw n}const{error:c}=await l.from("user_step_challenge_unlocks").delete().eq("challenge_id",e);if(c)throw c;const{error:s}=await l.from("step_challenges").delete().eq("id",e);if(s)throw s}async function z(){const{data:e,error:t}=await l.from("step_challenge_chapters").select("*").order("sort_order",{ascending:!0}).order("id",{ascending:!0});if(t)throw t;return e||[]}async function W(e){var a,c;const{data:t,error:r}=await l.from("step_challenge_chapters").insert([{title:e.title,subtitle:((a=e.subtitle)==null?void 0:a.trim())||null,theme_key:e.theme_key||"meadow",cover_image_url:((c=e.cover_image_url)==null?void 0:c.trim())||null,sort_order:Number(e.sort_order)||0,show:e.show??!0}]).select().single();if(r)throw r;return t}async function I(e,t){const{data:r,error:a}=await l.from("step_challenge_chapters").update({...t,updated_at:new Date().toISOString()}).eq("id",e).select().single();if(a)throw a;return r}async function Q(e){const{error:t}=await l.from("step_challenge_chapters").delete().eq("id",e);if(t)throw t}async function R(e){const{count:t,error:r}=await l.from("step_challenges").select("id",{count:"exact",head:!0}).eq("chapter_id",e);if(r)throw r;return t||0}async function J(e){const{data:t,error:r}=await l.from("step_challenges").select("id, title, show, sort_order, chapter_id, character_image_url, access_type, completion_points").eq("chapter_id",e).order("sort_order",{ascending:!0}).order("id",{ascending:!0});if(r)throw r;return t||[]}function w(e){if(!e)return{user_name:"نامشخص",user_phone:""};let t="نامشخص";return e!=null&&e.name?t=e.name:e!=null&&e.first_name||e!=null&&e.last_name?t=`${e.first_name||""} ${e.last_name||""}`.trim():e!=null&&e.phone&&(t=e.phone),{user_name:t,user_phone:(e==null?void 0:e.phone)||""}}function S(e,t,r){const a=r.trim().toLowerCase();return a?e.toLowerCase().includes(a)||t.toLowerCase().includes(a):!0}function P(e){if(Array.isArray(e))return e.map(String);if(typeof e=="string")try{const t=JSON.parse(e);if(Array.isArray(t))return t.map(String)}catch{return[]}return[]}async function T(){const{data:e,error:t}=await l.from("step_challenges").select("id, title, character_image_url, sort_order, show, chapter_id").order("sort_order",{ascending:!0}).order("id",{ascending:!1});if(t)throw t;const{data:r,error:a}=await l.from("user_step_challenges").select("challenge_id, user_id");if(a)throw a;const c={};for(const s of r||[]){const i=Number(s.challenge_id);c[i]||(c[i]={uniqueUsers:new Set,timesPerformed:0}),c[i].timesPerformed+=1,s.user_id&&c[i].uniqueUsers.add(String(s.user_id))}return(e||[]).map(s=>{const i=c[s.id];return{id:s.id,title:s.title,character_image_url:s.character_image_url,sort_order:s.sort_order,show:s.show,chapter_id:s.chapter_id??null,unique_users_count:i?i.uniqueUsers.size:0,times_performed:i?i.timesPerformed:0}})}async function j(e){const{data:t,error:r}=await l.from("step_challenges").select("id, title").eq("id",e).single();if(r)throw r;return t}async function G(e){const{data:t,error:r}=await l.from("step_challenge_steps").select(`
|
|
id,
|
|
step_order,
|
|
description,
|
|
is_final_step,
|
|
enable_feedback_text,
|
|
enable_photo_upload,
|
|
enable_voice_upload,
|
|
enable_mcq,
|
|
requires_photo_upload
|
|
`).eq("challenge_id",e).order("step_order",{ascending:!0});if(r)throw r;return(t||[]).map(a=>({id:a.id,step_order:a.step_order,description:(a.description||"").trim(),is_final_step:!!a.is_final_step,enable_feedback_text:!!a.enable_feedback_text,enable_photo_upload:!!(a.enable_photo_upload||a.requires_photo_upload),enable_voice_upload:!!a.enable_voice_upload,enable_mcq:!!a.enable_mcq,label:`مرحله ${a.step_order}`}))}async function H(e,t="",r){const a=[];let c=l.from("user_step_challenge_steps").select(`
|
|
id,
|
|
step_id,
|
|
feedback_text,
|
|
created_at,
|
|
user_step_challenges!inner (
|
|
challenge_id,
|
|
users (name, phone, first_name, last_name)
|
|
)
|
|
`).eq("user_step_challenges.challenge_id",e).not("feedback_text","is",null);r&&(c=c.eq("step_id",r));const{data:s,error:i}=await c;if(i)throw i;for(const n of s||[]){const o=String(n.feedback_text||"").trim();if(!o)continue;const _=Array.isArray(n.user_step_challenges)?n.user_step_challenges[0]:n.user_step_challenges,m=Array.isArray(_==null?void 0:_.users)?_.users[0]:_==null?void 0:_.users,{user_name:h,user_phone:u}=w(m);!S(h,u,t)&&!o.toLowerCase().includes(t.trim().toLowerCase())||a.push({id:`step-${n.id}`,user_name:h,user_phone:u,feedback_text:o,source:"step",step_id:n.step_id,created_at:n.created_at})}return a.sort((n,o)=>String(o.created_at||"").localeCompare(String(n.created_at||""))),a.map((n,o)=>({...n,index:o+1}))}async function V(e,t=""){const{data:r,error:a}=await l.from("user_step_challenges").select("id, completion_feedback, completed_at, created_at, users(name, phone, first_name, last_name)").eq("challenge_id",e).not("completion_feedback","is",null);if(a)throw a;const c=(r||[]).map(s=>{const i=String(s.completion_feedback||"").trim();if(!i)return null;const n=Array.isArray(s.users)?s.users[0]:s.users,{user_name:o,user_phone:_}=w(n);return!S(o,_,t)&&!i.toLowerCase().includes(t.trim().toLowerCase())?null:{id:`completion-${s.id}`,user_name:o,user_phone:_,feedback_text:i,created_at:s.completed_at||s.created_at}}).filter(Boolean);return c.sort((s,i)=>String(i.created_at||"").localeCompare(String(s.created_at||""))),c.map((s,i)=>({...s,index:i+1}))}async function X(e,t="",r,a=1,c=12){const s=Math.max(1,a||1),i=Math.min(48,Math.max(1,c||12));let n=l.from("user_step_challenge_steps").select(`
|
|
id,
|
|
step_id,
|
|
photo_url,
|
|
created_at,
|
|
user_step_challenges!inner (
|
|
challenge_id,
|
|
user_id,
|
|
users (name, phone, first_name, last_name)
|
|
)
|
|
`,{count:"exact"}).eq("user_step_challenges.challenge_id",e).not("photo_url","is",null).neq("photo_url","");if(r&&(n=n.eq("step_id",r)),t.trim()){const u=await k(l,t);if(!u.length)return{rows:[],total:0,page:s,pageSize:i};n=n.in("user_step_challenges.user_id",u.slice(0,A))}n=n.order("created_at",{ascending:!1}),n=v(n,s,i);const{data:o,error:_,count:m}=await n;if(_)throw _;return{rows:(o||[]).map(u=>{const b=String(u.photo_url||"").trim();if(!b)return null;const d=Array.isArray(u.user_step_challenges)?u.user_step_challenges[0]:u.user_step_challenges,p=Array.isArray(d==null?void 0:d.users)?d.users[0]:d==null?void 0:d.users,{user_name:f,user_phone:q}=w(p);return{id:u.id,step_id:u.step_id,photo_url:b,user_name:f,user_phone:q,created_at:u.created_at}}).filter(Boolean),total:m??0,page:s,pageSize:i}}async function K(e,t="",r){let a=l.from("user_step_challenge_steps").select(`
|
|
id,
|
|
step_id,
|
|
voice_url,
|
|
created_at,
|
|
user_step_challenges!inner (
|
|
challenge_id,
|
|
users (name, phone, first_name, last_name)
|
|
)
|
|
`).eq("user_step_challenges.challenge_id",e).not("voice_url","is",null);r&&(a=a.eq("step_id",r));const{data:c,error:s}=await a;if(s)throw s;const i=(c||[]).map(n=>{const o=String(n.voice_url||"").trim();if(!o)return null;const _=Array.isArray(n.user_step_challenges)?n.user_step_challenges[0]:n.user_step_challenges,m=Array.isArray(_==null?void 0:_.users)?_.users[0]:_==null?void 0:_.users,{user_name:h,user_phone:u}=w(m);return S(h,u,t)?{id:n.id,step_id:n.step_id,voice_url:o,user_name:h,user_phone:u,created_at:n.created_at}:null}).filter(Boolean);return i.sort((n,o)=>String(o.created_at||"").localeCompare(String(n.created_at||""))),i.map((n,o)=>({...n,index:o+1}))}async function Y(e,t="",r){let a=l.from("step_challenge_steps").select("id, step_order, mcq_question, mcq_options, mcq_correct_index, enable_mcq").eq("challenge_id",e).eq("enable_mcq",!0).order("step_order",{ascending:!0});r&&(a=a.eq("id",r));const{data:c,error:s}=await a;if(s)throw s;let i=l.from("user_step_challenge_steps").select(`
|
|
id,
|
|
step_id,
|
|
mcq_answer,
|
|
created_at,
|
|
user_step_challenges!inner (
|
|
challenge_id,
|
|
users (name, phone, first_name, last_name)
|
|
)
|
|
`).eq("user_step_challenges.challenge_id",e).not("mcq_answer","is",null);r&&(i=i.eq("step_id",r));const{data:n,error:o}=await i;if(o)throw o;return(c||[]).map(_=>{const m=P(_.mcq_options),h=(n||[]).filter(d=>d.step_id===_.id&&d.mcq_answer!==null&&d.mcq_answer!==void 0).map(d=>{const p=Array.isArray(d.user_step_challenges)?d.user_step_challenges[0]:d.user_step_challenges,f=Array.isArray(p==null?void 0:p.users)?p.users[0]:p==null?void 0:p.users,{user_name:q,user_phone:y}=w(f),C=Number(d.mcq_answer);return{id:d.id,user_name:q,user_phone:y,mcq_answer:C,answer_label:m[C]||`گزینه ${C+1}`,created_at:d.created_at}}).filter(d=>S(d.user_name,d.user_phone,t)).sort((d,p)=>String(p.created_at||"").localeCompare(String(d.created_at||""))).map((d,p)=>({...d,index:p+1})),u=h.length,b=m.map((d,p)=>{const f=h.filter(y=>y.mcq_answer===p).length,q=u>0?Math.round(f/u*1e3)/10:0;return{optionIndex:p,label:d,count:f,percent:q}});return{step_id:_.id,step_order:_.step_order,question:_.mcq_question||`سوال مرحله ${_.step_order}`,options:m,correct_index:_.mcq_correct_index,answers:h,option_stats:b,total_answers:u}})}async function Z(){const{data:e,error:t}=await l.from("step_challenge_config").select("*").eq("id",1).maybeSingle();if(t)throw t;return e||{id:1,rules_aparat_embed_code:null}}async function ee(e){const{data:t,error:r}=await l.from("step_challenge_config").upsert({id:1,rules_aparat_embed_code:e.rules_aparat_embed_code||null,updated_at:new Date().toISOString()}).select().single();if(r)throw r;return t}export{J as a,W as b,R as c,T as d,Z as e,L as f,z as g,B as h,Q as i,$ as j,U as k,H as l,K as m,Y as n,V as o,j as p,G as q,X as r,ee as s,I as u};
|