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