2 lines
6.2 KiB
JavaScript
2 lines
6.2 KiB
JavaScript
import{_ as P,G as l,L as f}from"./index-b0561d74.js";import{fetchMatchingUserIds as S,applyEmbeddedUserSearch as v,applySupabaseFilter as D,applySupabasePagination as E,formatTableResult as T}from"./supabaseTableQuery-8ab5665d.js";function R(t,e,i=(n,a)=>n[a]){const n=[...t],{sort:a,order:s}=e;if(a!=null&&a.key){const c=a.order==="asc";return n.sort((r,u)=>{const p=i(r,a.key),d=i(u,a.key);return p<d?c?-1:1:p>d?c?1:-1:0}),n}if(s){const c=!s.startsWith("-"),r=s.replace(/^[-+]/,"");return n.sort((u,p)=>{const d=i(u,r),o=i(p,r);return d<o?c?-1:1:d>o?c?1:-1:0}),n}return n}function q(t,e){return Math.max(0,Math.round(t*(1-(e||0)/100)))}async function H(t){const{TableEngineRequest:e}=await P(()=>import("./buildSupabaseQuery-09e09955.js"),["assets/buildSupabaseQuery-09e09955.js","assets/index-b0561d74.js","assets/index-a54d32f7.css","assets/supabaseTableQuery-8ab5665d.js"]),i={...t};!i.sort&&!i.order&&(i.order="-sort_order");const n=await e(i,"subscription_plans");if(Array.isArray(n==null?void 0:n.rows)){const a=n.rows.map((s,c)=>({...s,index:c,final_price:q(Number(s.price),Number(s.discount_percent||0))}));return{...n,rows:a}}return n}const I=new Set(["plan_title","payment_status","status","final_price","expires_at","created_at","user_id","plan_id"]),k=["plan_title","payment_status","status"],L=new Set(["id","plan_title","final_price","payment_status","status","expires_at","created_at"]),U=new Set(["user_name","user_phone"]);function C(t){var n,a;const e=((n=t.sort)==null?void 0:n.key)||(t.order?String(t.order).replace(/^[-+]/,""):null);let i=!1;return(a=t.sort)!=null&&a.key?i=t.sort.order==="asc":t.order&&(i=!String(t.order).startsWith("-")),{sortKey:e||null,ascending:i}}function y(t){const e=Array.isArray(t.users)?t.users[0]:t.users;let i="نامشخص";return e!=null&&e.name?i=e.name:e!=null&&e.first_name||e!=null&&e.last_name?i=`${e.first_name||""} ${e.last_name||""}`.trim():e!=null&&e.phone&&(i=e.phone),{...t,user_name:i,user_phone:(e==null?void 0:e.phone)||""}}async function $(t){const{limit:e=20,page:i=1,search:n,filters:a}=t,{sortKey:s,ascending:c}=C(t);let r=l.from("subscription_purchases").select("*, users(name, phone, first_name, last_name)",{count:"exact"});if(n!=null&&n.trim()){const o=await S(l,n);r=v(r,n,k,o)}if(a!=null&&a.length){for(const o of a)if(!(o.hidden||!o.field)){if(o.field==="user_name"||o.field==="user_phone"){if(["eq","has","like"].includes(o.op)){const _=await S(l,String(o.value));_.length?r=r.in("user_id",_):r=r.eq("user_id","00000000-0000-0000-0000-000000000000")}continue}I.has(o.field)&&(r=D(r,o))}}if(s&&U.has(s)){r=r.order("created_at",{ascending:!1}).order("id",{ascending:!1}),r=r.range(0,4999);const{data:o,error:_,count:h}=await r;if(_)throw _;const w=(o||[]).map(y),g=R(w,{sort:{key:s,order:c?"asc":"desc"}}),m=(i-1)*e,b=h??g.length;return{rows:g.slice(m,m+e).map((x,A)=>({...x,index:m+A})),total:b,query:{...t,page:i,limit:e,total:b}}}s&&L.has(s)?r=r.order(s,{ascending:c,nullsFirst:!1}):r=r.order("created_at",{ascending:!1}),r=r.order("id",{ascending:!1}),r=E(r,i,e);const{data:u,error:p,count:d}=await r;if(p)throw p;return T(u,d,t,y)}async function K(t){const{data:e,error:i}=await l.from("subscription_plans").insert([{title:t.title,description:t.description||null,image_url:t.image_url,price:t.price,discount_percent:t.discount_percent??0,duration_days:t.duration_days,is_active:t.is_active??!0,sort_order:t.sort_order??0}]).select().single();if(i)throw i;return e}async function N(t,e){const{data:i,error:n}=await l.from("subscription_plans").update({title:e.title,description:e.description||null,image_url:e.image_url,price:e.price,discount_percent:e.discount_percent??0,duration_days:e.duration_days,is_active:e.is_active??!0,sort_order:e.sort_order??0,updated_at:new Date().toISOString()}).eq("id",t).select();if(n)throw n;return i}async function B(t){const{error:e}=await l.from("subscription_plans").delete().eq("id",t);if(e)throw e}async function G(t,e){const{data:i,error:n}=await l.from("subscription_plans").update({is_active:e,updated_at:new Date().toISOString()}).eq("id",t).select();if(n)throw n;return i}async function V(t){if(!t)return{isActive:!1,label:"کاربر متصل نیست",planTitle:null,expiresAt:null,remainingDays:0};const e=new Date,i=e.toISOString(),{data:n,error:a}=await l.from("subscription_purchases").select("plan_title, status, payment_status, expires_at").eq("user_id",t).eq("payment_status","paid").eq("status","active").gt("expires_at",i).order("expires_at",{ascending:!1}).limit(1).maybeSingle();if(a)throw a;if(n!=null&&n.expires_at){const r=new Date(n.expires_at).getTime(),u=Math.max(1,Math.ceil((r-e.getTime())/(1e3*60*60*24))),p=u.toLocaleString("fa-IR");return{isActive:!0,label:u===1?"فعال — ۱ روز باقیمانده":`فعال — ${p} روز باقیمانده`,planTitle:n.plan_title||null,expiresAt:n.expires_at,remainingDays:u}}const{data:s,error:c}=await l.from("subscription_purchases").select("plan_title, status, payment_status, expires_at").eq("user_id",t).order("created_at",{ascending:!1}).limit(1).maybeSingle();if(c)throw c;return s?s.payment_status==="pending"||s.status==="pending"?{isActive:!1,label:"در انتظار پرداخت",planTitle:s.plan_title||null,expiresAt:s.expires_at||null,remainingDays:0}:s.status==="cancelled"||s.payment_status==="cancelled"?{isActive:!1,label:"لغو شده",planTitle:s.plan_title||null,expiresAt:s.expires_at||null,remainingDays:0}:{isActive:!1,label:"منقضی شده",planTitle:s.plan_title||null,expiresAt:s.expires_at||null,remainingDays:0}:{isActive:!1,label:"بدون اشتراک",planTitle:null,expiresAt:null,remainingDays:0}}async function W(){const{data:t,error:e}=await l.from("subscription_plans").select("id, title, duration_days, price, discount_percent, is_active").order("sort_order",{ascending:!1}).order("id",{ascending:!1});if(e)throw e;return t||[]}async function j(){return await f.post("/admin/subscription/reconcile-pending")}async function z(t){return await f.post("/admin/subscription/grant",t)}async function J(t){return await f.post("/admin/subscription/extend",t)}async function Q(t){return await f.post(`/admin/subscription/${t}/cancel`,{mode:"cancel"})}async function X(t){return await f.delete(`/admin/subscription/${t}`)}export{z as a,J as b,q as c,H as d,$ as e,K as f,W as g,B as h,j as i,Q as j,X as k,V as l,G as t,N as u};
|