auto commit

This commit is contained in:
bangdk 2024-11-19 06:56:09 +09:00
parent 1419114d1e
commit a9af1bf315

View File

@ -6,41 +6,79 @@ class SensorDataModel {
async initialize() {
await this.pool.query(`
CREATE TABLE IF NOT EXISTS sensor_data (
time TIMESTAMPTZ NOT NULL,
company_id UUID NOT NULL,
device_id VARCHAR(50) NOT NULL,
data_type VARCHAR(50) NOT NULL,
value DOUBLE PRECISION NOT NULL,
metadata JSONB,
CONSTRAINT sensor_data_pk PRIMARY KEY (time, company_id, device_id)
);
SELECT create_hypertable('sensor_data', 'time',
chunk_time_interval => INTERVAL '1 day',
if_not_exists => TRUE
);
CREATE INDEX IF NOT EXISTS idx_sensor_company_device
ON sensor_data (company_id, device_id, time DESC);
`);
CREATE TABLE IF NOT EXISTS sensor_data (
time TIMESTAMPTZ NOT NULL,
companyId UUID NOT NULL,
branchId UUID NOT NULL,
deviceId VARCHAR(50) NOT NULL,
data_type VARCHAR(50) NOT NULL,
value DOUBLE PRECISION NOT NULL,
metadata JSONB,
CONSTRAINT sensor_data_pk PRIMARY KEY (time, companyId, branchId, deviceId)
);
SELECT create_hypertable('sensor_data', 'time',
chunk_time_interval => INTERVAL '1 day',
if_not_exists => TRUE
);
CREATE INDEX IF NOT EXISTS idx_sensor_company_branch_device
ON sensor_data (companyId, branchId, deviceId, time DESC);
`);
}
async insert(data) {
const query = `
INSERT INTO sensor_data (time, company_id, device_id, data_type, value, metadata)
VALUES ($1, $2, $3, $4, $5, $6)
`;
INSERT INTO sensor_data (time, companyId, branchId, deviceId, data_type, value, metadata)
VALUES ($1, $2, $3, $4, $5, $6, $7)
`;
// 매개변수 개수를 7개로 수정
await this.pool.query(query, [
data.time,
data.companyId,
data.branchId,
data.deviceId,
data.dataType,
data.value,
data.metadata,
]);
}
// 데이터 조회 메서드 추가
async getLatestByDevice(companyId, branchId, deviceId) {
const query = `
SELECT * FROM sensor_data
WHERE companyId = $1 AND branchId = $2 AND deviceId = $3
ORDER BY time DESC
LIMIT 1
`;
const result = await this.pool.query(query, [
companyId,
branchId,
deviceId,
]);
return result.rows[0];
}
// 기간별 데이터 조회
async getDataByTimeRange(companyId, branchId, deviceId, startTime, endTime) {
const query = `
SELECT * FROM sensor_data
WHERE companyId = $1
AND branchId = $2
AND deviceId = $3
AND time BETWEEN $4 AND $5
ORDER BY time DESC
`;
const result = await this.pool.query(query, [
companyId,
branchId,
deviceId,
startTime,
endTime,
]);
return result.rows;
}
}
module.exports = SensorDataModel;