diff --git a/db/schedule.db.js b/db/schedule.db.js index 814d5f7..436c02d 100644 --- a/db/schedule.db.js +++ b/db/schedule.db.js @@ -1,5 +1,5 @@ const pool = require("../config"); -// const formattedDate = require("../utils/date"); +const { formattedDate } = require("../utils/date"); // Get all schedules const getAllScheduleDb = async (searchParams = {}) => { @@ -40,12 +40,12 @@ const getAllScheduleDb = async (searchParams = {}) => { `; const result = await pool.query(queryText, queryParams); - const total = - result?.recordset?.length > 0 - ? parseInt(result.recordset[0].total_data, 10) - : 0; - - return { data: result.recordset, total }; + const total = + result?.recordset?.length > 0 + ? parseInt(result.recordset[0].total_data, 10) + : 0; + + return { data: result.recordset, total }; }; const getScheduleByIdDb = async (id) => { @@ -60,16 +60,36 @@ const getScheduleByIdDb = async (id) => { WHERE a.schedule_id = $1 AND a.deleted_at IS NULL `; const result = await pool.query(queryText, [id]); - return result.recordset?.[0] || null; }; const insertScheduleDb = async (store) => { - const { query: queryText, values } = pool.buildDynamicInsert("schedule", store); - const result = await pool.query(queryText, values); - const insertedId = result.recordset?.[0]?.inserted_id; + const nextDays = Number(store.next_day ?? 0); + const insertedRecords = []; - return insertedId ? await getScheduleByIdDb(insertedId) : null; + for (let i = 0; i <= nextDays; i++) { + const nextDate = new Date(store.schedule_date); + nextDate.setDate(nextDate.getDate() + i); + + const formatted = formattedDate(nextDate); + + const newStore = { + ...store, + schedule_date: formatted, + }; + delete newStore.next_day; + + const { query: queryText, values } = pool.buildDynamicInsert("schedule", newStore); + const result = await pool.query(queryText, values); + const insertedId = result.recordset?.[0]?.inserted_id; + + if (insertedId) { + const record = await getScheduleByIdDb(insertedId); + insertedRecords.push(record); + } + } + + return insertedRecords; }; const updateScheduleDb = async (id, data) => { @@ -77,7 +97,7 @@ const updateScheduleDb = async (id, data) => { const whereData = { schedule_id: id }; const { query: queryText, values } = pool.buildDynamicUpdate( - "schedule", + "schedule", store, whereData ); diff --git a/validate/schedule.schema.js b/validate/schedule.schema.js index 5252030..ee0e37d 100644 --- a/validate/schedule.schema.js +++ b/validate/schedule.schema.js @@ -12,6 +12,7 @@ const insertScheduleSchema = Joi.object({ }), is_active: Joi.boolean().required(), shift_id: Joi.number(), + next_day: Joi.number().required(), }); const updateScheduleSchema = Joi.object({