Edit: /tmp/tsx-0/17887-94d8130eb9a99a090af7bdd7949ad4ee068bd984 (11916B)
{"code":"__filename=\"/opt/canhelp/apps/api/src/routes/availability.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 availability_exports={};__export(availability_exports,{default:()=>availability_default});module.exports=__toCommonJS(availability_exports);var import_hono=require(\"hono\");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_google_oauth=require(\"../lib/google-oauth.js\");var import_helper_capability=require(\"../lib/helper-capability.js\");const app=new import_hono.Hono;function monthRange(month){const[year,mon]=month.split(\"-\").map(Number);const from=`${year}-${String(mon).padStart(2,\"0\")}-01`;const lastDay=new Date(year,mon,0).getDate();const to=`${year}-${String(mon).padStart(2,\"0\")}-${String(lastDay).padStart(2,\"0\")}`;return{from,to}}__name(monthRange,\"monthRange\");app.get(\"/my\",import_auth.requireAuth,async c=>{const user=c.get(\"user\");const month=c.req.query(\"month\")||new Date().toISOString().slice(0,7);const{from,to}=monthRange(month);const rows=await import_db.db.select().from(import_db2.specialistAvailability).where((0,import_drizzle_orm.and)((0,import_drizzle_orm.eq)(import_db2.specialistAvailability.specialistId,user.id),(0,import_drizzle_orm.gte)(import_db2.specialistAvailability.date,from),(0,import_drizzle_orm.lte)(import_db2.specialistAvailability.date,to)));return c.json(rows)});app.post(\"/set\",import_auth.requireAuth,async c=>{const user=c.get(\"user\");const{date,status,note}=await c.req.json();if(!date||!/^\\d{4}-\\d{2}-\\d{2}$/.test(date)){return c.json({error:\"Invalid date\"},400)}if(status!==null&&status!==\"available\"&&status!==\"busy\"){return c.json({error:\"Invalid status\"},400)}const today=new Date().toISOString().slice(0,10);if(date
{});return c.json({ok:true,date,status:null})}const existing=await import_db.db.select().from(import_db2.specialistAvailability).where((0,import_drizzle_orm.and)((0,import_drizzle_orm.eq)(import_db2.specialistAvailability.specialistId,user.id),(0,import_drizzle_orm.eq)(import_db2.specialistAvailability.date,date))).limit(1);if(existing.length>0){const[updated]=await import_db.db.update(import_db2.specialistAvailability).set({status,note:note??null,updatedAt:new Date}).where((0,import_drizzle_orm.and)((0,import_drizzle_orm.eq)(import_db2.specialistAvailability.specialistId,user.id),(0,import_drizzle_orm.eq)(import_db2.specialistAvailability.date,date))).returning();(0,import_google_oauth.pushAvailabilityChange)(user.id,date,status).catch(err=>console.error(\"[gcal] push error:\",err));return c.json(updated)}const[created]=await import_db.db.insert(import_db2.specialistAvailability).values({specialistId:user.id,date,status,note:note??null}).returning();(0,import_google_oauth.pushAvailabilityChange)(user.id,date,status).catch(err=>console.error(\"[gcal] push error:\",err));return c.json(created,201)});app.post(\"/set-range\",import_auth.requireAuth,async c=>{const user=c.get(\"user\");const{from,to,status,note}=await c.req.json();if(!from||!to||!/^\\d{4}-\\d{2}-\\d{2}$/.test(from)||!/^\\d{4}-\\d{2}-\\d{2}$/.test(to)){return c.json({error:\"Invalid date range\"},400)}if(from>to)return c.json({error:\"from must be <= to\"},400);const today=new Date().toISOString().slice(0,10);const dates=[];const cur=new Date(from);const end=new Date(to);while(cur<=end){const d=cur.toISOString().slice(0,10);if(d>=today)dates.push(d);cur.setDate(cur.getDate()+1)}if(dates.length===0)return c.json({ok:true,count:0});if(dates.length>366)return c.json({error:\"Range too large\"},400);if(status===null){for(const date of dates){await import_db.db.delete(import_db2.specialistAvailability).where((0,import_drizzle_orm.and)((0,import_drizzle_orm.eq)(import_db2.specialistAvailability.specialistId,user.id),(0,import_drizzle_orm.eq)(import_db2.specialistAvailability.date,date)))}for(const date of dates){(0,import_google_oauth.pushAvailabilityChange)(user.id,date,null).catch(()=>{})}return c.json({ok:true,count:dates.length})}for(const date of dates){const existing=await import_db.db.select({id:import_db2.specialistAvailability.id}).from(import_db2.specialistAvailability).where((0,import_drizzle_orm.and)((0,import_drizzle_orm.eq)(import_db2.specialistAvailability.specialistId,user.id),(0,import_drizzle_orm.eq)(import_db2.specialistAvailability.date,date))).limit(1);if(existing.length>0){await import_db.db.update(import_db2.specialistAvailability).set({status,note:note??null,updatedAt:new Date}).where((0,import_drizzle_orm.and)((0,import_drizzle_orm.eq)(import_db2.specialistAvailability.specialistId,user.id),(0,import_drizzle_orm.eq)(import_db2.specialistAvailability.date,date)))}else{await import_db.db.insert(import_db2.specialistAvailability).values({specialistId:user.id,date,status,note:note??null})}}for(const date of dates){(0,import_google_oauth.pushAvailabilityChange)(user.id,date,status).catch(()=>{})}return c.json({ok:true,count:dates.length})});app.get(\"/user/:userId\",async c=>{const{userId}=c.req.param();const month=c.req.query(\"month\")||new Date().toISOString().slice(0,7);const{from,to}=monthRange(month);const[targetUser]=await import_db.db.select({id:import_db2.users.id}).from(import_db2.users).where((0,import_drizzle_orm.eq)(import_db2.users.id,userId)).limit(1);if(!targetUser||!await(0,import_helper_capability.getHelperCapability)(userId)){return c.json([])}const rows=await import_db.db.select({date:import_db2.specialistAvailability.date,status:import_db2.specialistAvailability.status}).from(import_db2.specialistAvailability).where((0,import_drizzle_orm.and)((0,import_drizzle_orm.eq)(import_db2.specialistAvailability.specialistId,userId),(0,import_drizzle_orm.gte)(import_db2.specialistAvailability.date,from),(0,import_drizzle_orm.lte)(import_db2.specialistAvailability.date,to)));return c.json(rows)});var availability_default=app;\n})()\n","warnings":[],"map":{"version":3,"mappings":"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","names":["import_db"],"ignoreList":[],"sources":["/opt/canhelp/apps/api/src/routes/availability.ts"],"sourcesContent":[null]}}