Edit: /tmp/tsx-0/17887-fa7bbc3445cc689e6d7d1d6fe3c6ed1a71dcc3d1 (30270B)
{"code":"__filename=\"/opt/canhelp/apps/api/src/routes/specialist-cards.ts\";(()=>{\n\"use strict\";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __name=(target,value)=>__defProp(target,\"name\",{value,configurable:true});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from===\"object\"||typeof from===\"function\"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},\"__esModule\",{value:true}),mod);var specialist_cards_exports={};__export(specialist_cards_exports,{default:()=>specialist_cards_default});module.exports=__toCommonJS(specialist_cards_exports);var import_hono=require(\"hono\");var import_zod=require(\"zod\");var import_drizzle_orm=require(\"drizzle-orm\");var import_db=require(\"../db.js\");var import_db2=require(\"@canhelp/db\");var import_auth=require(\"../middleware/auth.js\");var import_translate=require(\"../translate.js\");var import_telegram=require(\"../lib/telegram.js\");const app=new import_hono.Hono;const DEFAULT_MAX_CARDS=1;async function getMaxCards(user){if(user.role===\"admin\")return null;const[dbUser]=await import_db.db.select({planId:import_db2.users.planId}).from(import_db2.users).where((0,import_drizzle_orm.eq)(import_db2.users.id,user.id));const planId=dbUser?.planId;if(!planId)return DEFAULT_MAX_CARDS;const[plan]=await import_db.db.select().from(import_db2.plans).where((0,import_drizzle_orm.eq)(import_db2.plans.id,planId));if(!plan)return DEFAULT_MAX_CARDS;return plan.maxCards??null}__name(getMaxCards,\"getMaxCards\");const DEFAULT_MAX_SKILLS=5;async function getMaxSkills(user){if(user.role===\"admin\")return null;const[dbUser]=await import_db.db.select({planId:import_db2.users.planId}).from(import_db2.users).where((0,import_drizzle_orm.eq)(import_db2.users.id,user.id));const planId=dbUser?.planId;if(!planId)return DEFAULT_MAX_SKILLS;const[plan]=await import_db.db.select().from(import_db2.plans).where((0,import_drizzle_orm.eq)(import_db2.plans.id,planId));if(!plan)return DEFAULT_MAX_SKILLS;return plan.maxSkills??null}__name(getMaxSkills,\"getMaxSkills\");app.get(\"/my\",import_auth.requireAuth,async c=>{const user=c.get(\"user\");const locale=normalizeLocale(c.req.query(\"locale\"));const cards=await import_db.db.select().from(import_db2.specialistCards).where((0,import_drizzle_orm.eq)(import_db2.specialistCards.specialistId,user.id)).orderBy((0,import_drizzle_orm.asc)(import_db2.specialistCards.order),(0,import_drizzle_orm.asc)(import_db2.specialistCards.createdAt));const allPortfolio=await import_db.db.select().from(import_db2.portfolioItems).where((0,import_drizzle_orm.eq)(import_db2.portfolioItems.specialistId,user.id)).orderBy((0,import_drizzle_orm.asc)(import_db2.portfolioItems.order),(0,import_drizzle_orm.asc)(import_db2.portfolioItems.createdAt));const maxCards=await getMaxCards(user);const result=await Promise.all(cards.map(async card=>({...await localizeCardPublicFields(card,locale),portfolio:allPortfolio.filter(p=>p.cardId===card.id)})));return c.json({cards:result,maxCards})});function buildDescriptionFields(data,originalLocale){const fallback=data.description??null;return{descriptionEl:data.descriptionEl??(originalLocale===\"el\"?fallback:null),descriptionEn:data.descriptionEn??(originalLocale===\"en\"?fallback:null),descriptionRu:data.descriptionRu??(originalLocale===\"ru\"?fallback:null),descriptionUk:data.descriptionUk??(originalLocale===\"uk\"?fallback:null)}}__name(buildDescriptionFields,\"buildDescriptionFields\");function normalizeLocale(input){if(input===\"el\"||input===\"en\"||input===\"ru\"||input===\"uk\")return input;return\"el\"}__name(normalizeLocale,\"normalizeLocale\");function pickStoredDescriptionByLocale(card,locale){if(locale===\"el\")return card.descriptionEl??null;if(locale===\"en\")return card.descriptionEn??null;if(locale===\"ru\")return card.descriptionRu??null;return card.descriptionUk??null}__name(pickStoredDescriptionByLocale,\"pickStoredDescriptionByLocale\");async function localizeCardPublicFields(card,locale){const sourceLocale=normalizeLocale(card.originalLocale);const storedDescription=pickStoredDescriptionByLocale(card,locale);const fallbackDescription=card.description??storedDescription??null;const localTitlePromise=locale===sourceLocale||!card.title?Promise.resolve(card.title):(0,import_translate.translateString)(card.title,sourceLocale,locale).then(t=>t||card.title).catch(()=>card.title);const localDescriptionPromise=storedDescription!=null?Promise.resolve(storedDescription):!card.description||locale===sourceLocale?Promise.resolve(fallbackDescription):(0,import_translate.translateString)(card.description,sourceLocale,locale).then(t=>t||fallbackDescription).catch(()=>fallbackDescription);const localSkillsPromise=locale===sourceLocale||!Array.isArray(card.skills)||card.skills.length===0?Promise.resolve(card.skills):Promise.all(card.skills.map(skill=>(0,import_translate.translateString)(skill,sourceLocale,locale).then(t=>t||skill).catch(()=>skill)));const[title,description,skills]=await Promise.all([localTitlePromise,localDescriptionPromise,localSkillsPromise]);return{...card,title,description,skills}}__name(localizeCardPublicFields,\"localizeCardPublicFields\");const createSchema=import_zod.z.object({title:import_zod.z.string().min(1).max(200),description:import_zod.z.string().max(2e3).optional().nullable(),descriptionEl:import_zod.z.string().max(2e3).optional().nullable(),descriptionEn:import_zod.z.string().max(2e3).optional().nullable(),descriptionRu:import_zod.z.string().max(2e3).optional().nullable(),descriptionUk:import_zod.z.string().max(2e3).optional().nullable(),descriptionLocale:import_zod.z.enum([\"el\",\"en\",\"ru\",\"uk\"]).optional(),skills:import_zod.z.array(import_zod.z.string().max(100)).max(20).optional().default([]),categories:import_zod.z.array(import_zod.z.string()).max(30).optional().default([]),locations:import_zod.z.array(import_zod.z.string()).max(50).optional().default([])});const generateDescriptionSchema=import_zod.z.object({categories:import_zod.z.array(import_zod.z.string().trim().min(1).max(100)).min(1).max(30),locale:import_zod.z.enum([\"el\",\"en\",\"ru\",\"uk\"])});function limitDescriptionWords(description,maxWords=500){let wordCount=0;let result=\"\";for(const part of description.split(/(\\s+)/)){if(/^\\s+$/.test(part)){result+=part;continue}if(wordCount>=maxWords)break;result+=part;wordCount++}return result.trim()}__name(limitDescriptionWords,\"limitDescriptionWords\");app.post(\"/generate-description\",import_auth.requireAuth,async c=>{const parsed=generateDescriptionSchema.safeParse(await c.req.json());if(!parsed.success)return c.json({error:\"Invalid data\",details:parsed.error.issues},400);const description=await(0,import_translate.generateSpecialistDescription)(parsed.data.categories,parsed.data.locale);if(!description)return c.json({error:\"Description generation is unavailable\"},503);return c.json({description:limitDescriptionWords(description)})});app.post(\"/\",import_auth.requireAuth,async c=>{const user=c.get(\"user\");const maxCards=await getMaxCards(user);const[{count}]=await import_db.db.select({count:import_drizzle_orm.sql`cast(count(*) as int)`}).from(import_db2.specialistCards).where((0,import_drizzle_orm.eq)(import_db2.specialistCards.specialistId,user.id));if(maxCards!==null&&count>=maxCards){return c.json({error:`Your plan allows maximum ${maxCards} specialist card(s)`,code:\"LIMIT_REACHED\",maxCards},403)}const body=await c.req.json();const parsed=createSchema.safeParse(body);if(!parsed.success)return c.json({error:\"Invalid data\",details:parsed.error.issues},400);const maxSkills=await getMaxSkills(user);if(maxSkills!==null&&parsed.data.skills.length>maxSkills){return c.json({error:`Your plan allows maximum ${maxSkills} skill(s) per card`,code:\"SKILLS_LIMIT\",maxSkills},403)}const[card]=await import_db.db.insert(import_db2.specialistCards).values({specialistId:user.id,title:parsed.data.title,description:parsed.data.description??null,publicationStatus:\"inactive\",isActive:false,...buildDescriptionFields(parsed.data,parsed.data.descriptionLocale??user.locale??\"el\"),originalLocale:parsed.data.descriptionLocale??user.locale??\"el\",skills:parsed.data.skills,categories:parsed.data.categories,locations:parsed.data.locations,order:count}).returning();return c.json({...card,portfolio:[]},201)});const updateSchema=import_zod.z.object({title:import_zod.z.string().min(1).max(200).optional(),description:import_zod.z.string().max(2e3).optional().nullable(),descriptionEl:import_zod.z.string().max(2e3).optional().nullable(),descriptionEn:import_zod.z.string().max(2e3).optional().nullable(),descriptionRu:import_zod.z.string().max(2e3).optional().nullable(),descriptionUk:import_zod.z.string().max(2e3).optional().nullable(),descriptionLocale:import_zod.z.enum([\"el\",\"en\",\"ru\",\"uk\"]).optional(),autoTranslate:import_zod.z.boolean().optional(),publicationStatus:import_zod.z.enum([\"pending\",\"active\",\"inactive\"]).optional(),skills:import_zod.z.array(import_zod.z.string().max(100)).max(20).optional(),categories:import_zod.z.array(import_zod.z.string()).max(30).optional(),locations:import_zod.z.array(import_zod.z.string()).max(50).optional(),isActive:import_zod.z.boolean().optional(),order:import_zod.z.number().int().min(0).optional()});app.patch(\"/:id\",import_auth.requireAuth,async c=>{const user=c.get(\"user\");const id=c.req.param(\"id\");const[card]=await import_db.db.select().from(import_db2.specialistCards).where((0,import_drizzle_orm.eq)(import_db2.specialistCards.id,id));if(!card)return c.json({error:\"Not found\"},404);if(card.specialistId!==user.id&&user.role!==\"admin\")return c.json({error:\"Forbidden\"},403);const body=await c.req.json();const parsed=updateSchema.safeParse(body);if(!parsed.success)return c.json({error:\"Invalid data\",details:parsed.error.issues},400);if(parsed.data.skills){const maxSkills=await getMaxSkills(user);if(maxSkills!==null&&parsed.data.skills.length>maxSkills){return c.json({error:`Your plan allows maximum ${maxSkills} skill(s) per card`,code:\"SKILLS_LIMIT\",maxSkills},403)}}const updates={updatedAt:new Date};if(\"title\"in parsed.data)updates.title=parsed.data.title;if(\"description\"in parsed.data)updates.description=parsed.data.description;if(\"descriptionEl\"in parsed.data)updates.descriptionEl=parsed.data.descriptionEl;if(\"descriptionEn\"in parsed.data)updates.descriptionEn=parsed.data.descriptionEn;if(\"descriptionRu\"in parsed.data)updates.descriptionRu=parsed.data.descriptionRu;if(\"descriptionUk\"in parsed.data)updates.descriptionUk=parsed.data.descriptionUk;if(\"publicationStatus\"in parsed.data){updates.publicationStatus=parsed.data.publicationStatus;updates.isActive=parsed.data.publicationStatus===\"active\"}if(\"skills\"in parsed.data)updates.skills=parsed.data.skills;if(\"categories\"in parsed.data)updates.categories=parsed.data.categories;if(\"locations\"in parsed.data)updates.locations=parsed.data.locations;if(\"isActive\"in parsed.data){updates.isActive=parsed.data.isActive;if(!(\"publicationStatus\"in parsed.data)){updates.publicationStatus=parsed.data.isActive?\"active\":\"inactive\"}}if(\"order\"in parsed.data)updates.order=parsed.data.order;if(parsed.data.descriptionLocale){updates.originalLocale=parsed.data.descriptionLocale;if(\"description\"in parsed.data){const cap=parsed.data.descriptionLocale.charAt(0).toUpperCase()+parsed.data.descriptionLocale.slice(1);updates[`description${cap}`]=parsed.data.description}if(\"title\"in parsed.data){const cap=parsed.data.descriptionLocale.charAt(0).toUpperCase()+parsed.data.descriptionLocale.slice(1);updates[`title${cap}`]=parsed.data.title;if(parsed.data.autoTranslate){const targets=[\"el\",\"en\",\"ru\",\"uk\"].filter(locale=>locale!==parsed.data.descriptionLocale);const results=await Promise.all(targets.map(async to=>({to,text:await(0,import_translate.translateString)(parsed.data.title,parsed.data.descriptionLocale,to)})));for(const result of results){const targetCap=result.to.charAt(0).toUpperCase()+result.to.slice(1);updates[`title${targetCap}`]=result.text||parsed.data.title}}}}const[updated]=await import_db.db.update(import_db2.specialistCards).set(updates).where((0,import_drizzle_orm.eq)(import_db2.specialistCards.id,id)).returning();const nextPublicationStatus=updates.publicationStatus??card.publicationStatus??(card.isActive?\"active\":\"inactive\");if(card.publicationStatus!==\"pending\"&&nextPublicationStatus===\"pending\"){(0,import_telegram.notifyAdmin)(`\\u{1F4DD}
\\u041A\\u0430\\u0440\\u0442\\u043E\\u0447\\u043A\\u0430 \\u043E\\u0442\\u043F\\u0440\\u0430\\u0432\\u043B\\u0435\\u043D\\u0430 \\u043D\\u0430 \\u043F\\u0440\\u043E\\u0432\\u0435\\u0440\\u043A\\u0443\n\\u{1F464} ${user.firstName||user.name||user.email}\n\\u{1F4E7} ${user.email}\n\\u{1F3F7} ${updated.title}\n\\u{1F194} ${updated.id}`).catch(err=>{console.error(\"[specialist-cards] telegram notify ERROR:\",err)})}const srcLocale=parsed.data.descriptionLocale;if(parsed.data.autoTranslate&&srcLocale){const descKey=`description${srcLocale.charAt(0).toUpperCase()}${srcLocale.slice(1)}`;const srcText=updates[descKey];if(srcText){const targets=[\"el\",\"en\",\"ru\",\"uk\"].filter(l=>l!==srcLocale);Promise.allSettled(targets.map(to=>(0,import_translate.translateString)(srcText,srcLocale,to).then(t=>({to,t})))).then(async results=>{const translationUpdates={};for(const r of results){if(r.status===\"fulfilled\"&&r.value.t){const cap=r.value.to.charAt(0).toUpperCase()+r.value.to.slice(1);translationUpdates[`description${cap}`]=r.value.t}}if(Object.keys(translationUpdates).length>0){await import_db.db.update(import_db2.specialistCards).set({...translationUpdates,updatedAt:new Date}).where((0,import_drizzle_orm.eq)(import_db2.specialistCards.id,id))}}).catch(e=>console.error(\"[card-translate]\",e))}}return c.json(updated)});const categorySuggestionSchema=import_zod.z.object({name:import_zod.z.string().trim().min(2).max(100),locale:import_zod.z.enum([\"el\",\"en\",\"ru\",\"uk\"])});app.post(\"/:id/category-suggestions\",import_auth.requireAuth,async c=>{const user=c.get(\"user\");const cardId=c.req.param(\"id\");const[card]=await import_db.db.select().from(import_db2.specialistCards).where((0,import_drizzle_orm.eq)(import_db2.specialistCards.id,cardId));if(!card)return c.json({error:\"Not found\"},404);if(card.specialistId!==user.id&&user.role!==\"admin\")return c.json({error:\"Forbidden\"},403);const parsed=categorySuggestionSchema.safeParse(await c.req.json());if(!parsed.success)return c.json({error:\"Invalid data\",details:parsed.error.issues},400);const[existing]=await import_db.db.select().from(import_db2.categorySuggestions).where((0,import_drizzle_orm.and)((0,import_drizzle_orm.eq)(import_db2.categorySuggestions.cardId,cardId),(0,import_drizzle_orm.eq)(import_db2.categorySuggestions.name,parsed.data.name),(0,import_drizzle_orm.eq)(import_db2.categorySuggestions.status,\"pending\")));if(existing)return c.json(existing);const[suggestion]=await import_db.db.insert(import_db2.categorySuggestions).values({cardId,specialistId:card.specialistId,name:parsed.data.name,locale:parsed.data.locale}).returning();(0,import_telegram.notifyAdmin)(`\\u{1F3F7}
\\u041D\\u043E\\u0432\\u0430\\u044F \\u0437\\u0430\\u044F\\u0432\\u043A\\u0430 \\u043D\\u0430 \\u043A\\u0430\\u0442\\u0435\\u0433\\u043E\\u0440\\u0438\\u044E\n\\u041A\\u0430\\u0440\\u0442\\u043E\\u0447\\u043A\\u0430: ${card.title}\n\\u041A\\u0430\\u0442\\u0435\\u0433\\u043E\\u0440\\u0438\\u044F: ${suggestion.name}\n\\u{1F194} ${card.id}`).catch(err=>console.error(\"[specialist-cards] category suggestion notify ERROR:\",err));return c.json(suggestion,201)});app.delete(\"/:id\",import_auth.requireAuth,async c=>{const user=c.get(\"user\");const id=c.req.param(\"id\");const[card]=await import_db.db.select().from(import_db2.specialistCards).where((0,import_drizzle_orm.eq)(import_db2.specialistCards.id,id));if(!card)return c.json({error:\"Not found\"},404);if(card.specialistId!==user.id&&user.role!==\"admin\")return c.json({error:\"Forbidden\"},403);await import_db.db.delete(import_db2.specialistCards).where((0,import_drizzle_orm.eq)(import_db2.specialistCards.id,id));return c.json({ok:true})});app.get(\"/user/:userId\",async c=>{const userId=c.req.param(\"userId\");const locale=normalizeLocale(c.req.query(\"locale\"));const cards=await import_db.db.select().from(import_db2.specialistCards).where((0,import_drizzle_orm.eq)(import_db2.specialistCards.specialistId,userId)).orderBy((0,import_drizzle_orm.asc)(import_db2.specialistCards.order),(0,import_drizzle_orm.asc)(import_db2.specialistCards.createdAt));const activeCards=cards.filter(c2=>(c2.publicationStatus??(c2.isActive?\"active\":\"inactive\"))===\"active\");const allPortfolio=await import_db.db.select({id:import_db2.portfolioItems.id,cardId:import_db2.portfolioItems.cardId,imageUrl:import_db2.portfolioItems.imageUrl,title:import_db2.portfolioItems.title,description:import_db2.portfolioItems.description,order:import_db2.portfolioItems.order,createdAt:import_db2.portfolioItems.createdAt}).from(import_db2.portfolioItems).where((0,import_drizzle_orm.eq)(import_db2.portfolioItems.specialistId,userId)).orderBy((0,import_drizzle_orm.asc)(import_db2.portfolioItems.order),(0,import_drizzle_orm.asc)(import_db2.portfolioItems.createdAt));const result=await Promise.all(activeCards.map(async card=>{const localized=await localizeCardPublicFields(card,locale);return{...localized,portfolio:allPortfolio.filter(p=>p.cardId===card.id)}}));return c.json(result)});var specialist_cards_default=app;\n})()\n","warnings":[],"map":{"version":3,"mappings":"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","names":["import_db","c"],"ignoreList":[],"sources":["/opt/canhelp/apps/api/src/routes/specialist-cards.ts"],"sourcesContent":[null]}}