Skip to content

Commit 49f59de

Browse files
authored
fix: save schedule time
Maaf, ketinggalan file waktu update
1 parent bf00fbb commit 49f59de

1 file changed

Lines changed: 79 additions & 26 deletions

File tree

app.js

Lines changed: 79 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1694,21 +1694,44 @@ app.post('/api/streams', isAuthenticated, [
16941694
use_advanced_settings: req.body.useAdvancedSettings === 'true' || req.body.useAdvancedSettings === true,
16951695
user_id: req.session.userId
16961696
};
1697-
if (req.body.scheduleTime) {
1698-
const scheduleDate = new Date(req.body.scheduleTime);
1697+
const serverTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
1698+
1699+
function parseLocalDateTime(dateTimeString) {
1700+
const [datePart, timePart] = dateTimeString.split('T');
1701+
const [year, month, day] = datePart.split('-').map(Number);
1702+
const [hours, minutes] = timePart.split(':').map(Number);
16991703

1700-
const serverTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
1701-
console.log(`[CREATE STREAM] Server timezone: ${serverTimezone}`);
1702-
console.log(`[CREATE STREAM] Input time: ${req.body.scheduleTime}`);
1703-
console.log(`[CREATE STREAM] Parsed time: ${scheduleDate.toISOString()}`);
1704-
console.log(`[CREATE STREAM] Local display: ${scheduleDate.toLocaleString('en-US', { timeZone: serverTimezone })}`);
1704+
return new Date(year, month - 1, day, hours, minutes);
1705+
}
1706+
1707+
if (req.body.scheduleStartTime) {
1708+
const scheduleStartDate = parseLocalDateTime(req.body.scheduleStartTime);
1709+
streamData.schedule_time = scheduleStartDate.toISOString();
1710+
streamData.status = 'scheduled';
17051711

1706-
streamData.schedule_time = scheduleDate.toISOString();
1712+
if (req.body.scheduleEndTime) {
1713+
const scheduleEndDate = parseLocalDateTime(req.body.scheduleEndTime);
1714+
1715+
if (scheduleEndDate <= scheduleStartDate) {
1716+
return res.status(400).json({
1717+
success: false,
1718+
error: 'End time must be after start time'
1719+
});
1720+
}
1721+
1722+
streamData.end_time = scheduleEndDate.toISOString();
1723+
const durationMs = scheduleEndDate - scheduleStartDate;
1724+
const durationMinutes = Math.round(durationMs / (1000 * 60));
1725+
streamData.duration = durationMinutes > 0 ? durationMinutes : null;
1726+
}
1727+
} else if (req.body.scheduleEndTime) {
1728+
const scheduleEndDate = parseLocalDateTime(req.body.scheduleEndTime);
1729+
streamData.end_time = scheduleEndDate.toISOString();
17071730
}
1708-
if (req.body.duration) {
1709-
streamData.duration = parseInt(req.body.duration);
1731+
1732+
if (!streamData.status) {
1733+
streamData.status = 'offline';
17101734
}
1711-
streamData.status = req.body.scheduleTime ? 'scheduled' : 'offline';
17121735
const stream = await Stream.create(streamData);
17131736
res.json({ success: true, stream });
17141737
} catch (error) {
@@ -1786,26 +1809,56 @@ app.put('/api/streams/:id', isAuthenticated, async (req, res) => {
17861809
if (req.body.useAdvancedSettings !== undefined) {
17871810
updateData.use_advanced_settings = req.body.useAdvancedSettings === 'true' || req.body.useAdvancedSettings === true;
17881811
}
1789-
if (req.body.duration !== undefined && req.body.duration !== null && req.body.duration !== '') {
1790-
updateData.duration = parseInt(req.body.duration);
1791-
} else if ('duration' in req.body && !req.body.duration) {
1792-
updateData.duration = null;
1793-
}
1812+
const serverTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
17941813

1795-
if (req.body.scheduleTime) {
1796-
const scheduleDate = new Date(req.body.scheduleTime);
1797-
1798-
const serverTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
1799-
console.log(`[UPDATE STREAM] Server timezone: ${serverTimezone}`);
1800-
console.log(`[UPDATE STREAM] Input time: ${req.body.scheduleTime}`);
1801-
console.log(`[UPDATE STREAM] Parsed time: ${scheduleDate.toISOString()}`);
1802-
console.log(`[UPDATE STREAM] Local display: ${scheduleDate.toLocaleString('en-US', { timeZone: serverTimezone })}`);
1814+
function parseLocalDateTime(dateTimeString) {
1815+
const [datePart, timePart] = dateTimeString.split('T');
1816+
const [year, month, day] = datePart.split('-').map(Number);
1817+
const [hours, minutes] = timePart.split(':').map(Number);
18031818

1804-
updateData.schedule_time = scheduleDate.toISOString();
1819+
return new Date(year, month - 1, day, hours, minutes);
1820+
}
1821+
1822+
if (req.body.scheduleStartTime) {
1823+
const scheduleStartDate = parseLocalDateTime(req.body.scheduleStartTime);
1824+
updateData.schedule_time = scheduleStartDate.toISOString();
18051825
updateData.status = 'scheduled';
1806-
} else if ('scheduleTime' in req.body && !req.body.scheduleTime) {
1826+
1827+
if (req.body.scheduleEndTime) {
1828+
const scheduleEndDate = parseLocalDateTime(req.body.scheduleEndTime);
1829+
1830+
if (scheduleEndDate <= scheduleStartDate) {
1831+
return res.status(400).json({
1832+
success: false,
1833+
error: 'End time must be after start time'
1834+
});
1835+
}
1836+
1837+
updateData.end_time = scheduleEndDate.toISOString();
1838+
const durationMs = scheduleEndDate - scheduleStartDate;
1839+
const durationMinutes = Math.round(durationMs / (1000 * 60));
1840+
updateData.duration = durationMinutes > 0 ? durationMinutes : null;
1841+
} else if ('scheduleEndTime' in req.body && req.body.scheduleEndTime === '') {
1842+
updateData.end_time = null;
1843+
updateData.duration = null;
1844+
}
1845+
} else if ('scheduleStartTime' in req.body && !req.body.scheduleStartTime) {
18071846
updateData.schedule_time = null;
18081847
updateData.status = 'offline';
1848+
1849+
if (req.body.scheduleEndTime) {
1850+
const scheduleEndDate = parseLocalDateTime(req.body.scheduleEndTime);
1851+
updateData.end_time = scheduleEndDate.toISOString();
1852+
} else if ('scheduleEndTime' in req.body && req.body.scheduleEndTime === '') {
1853+
updateData.end_time = null;
1854+
updateData.duration = null;
1855+
}
1856+
} else if (req.body.scheduleEndTime) {
1857+
const scheduleEndDate = parseLocalDateTime(req.body.scheduleEndTime);
1858+
updateData.end_time = scheduleEndDate.toISOString();
1859+
} else if ('scheduleEndTime' in req.body && req.body.scheduleEndTime === '') {
1860+
updateData.end_time = null;
1861+
updateData.duration = null;
18091862
}
18101863

18111864
const updatedStream = await Stream.update(req.params.id, updateData);

0 commit comments

Comments
 (0)