-
Notifications
You must be signed in to change notification settings - Fork 41
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
start migration to drizzle and postgres
- Loading branch information
Showing
28 changed files
with
1,005 additions
and
107 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,12 @@ | ||
version: "3.9" | ||
|
||
volumes: | ||
mongo-data: | ||
|
||
services: | ||
db: | ||
image: mongo:5 | ||
container_name: osem-dev-mongo | ||
image: timescale/timescaledb-ha:pg15-latest | ||
command: | ||
- -cshared_preload_libraries=timescaledb,pg_cron | ||
restart: always | ||
environment: | ||
- POSTGRES_USER=postgres | ||
- POSTGRES_PASSWORD=postgres | ||
- POSTGRES_DB=opensensemap | ||
ports: | ||
- "27017:27017" | ||
volumes: | ||
- mongo-data:/data/db | ||
# - ./dumps/boxes:/exports/boxes | ||
# - ./dumps/measurements:/exports/measurements | ||
- ./.scripts/mongodb/osem_admin.sh:/docker-entrypoint-initdb.d/osem_admin.sh | ||
# - ./.scripts/mongodb/osem_seed_boxes.sh:/docker-entrypoint-initdb.d/osem_seed_boxes.sh | ||
# - ./.scripts/mongodb/osem_seed_measurements.sh:/docker-entrypoint-initdb.d/osem_seed_measurements.sh | ||
- 5432:5432 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -15,6 +15,7 @@ const { User } = require('@sensebox/opensensemap-api-models'), | |
refreshJwt, | ||
invalidateToken, | ||
} = require('../helpers/jwtHelpers'); | ||
const { createUser, findUserByNameOrEmail, checkPassword } = require('@sensebox/opensensemap-api-models/src/user/user'); | ||
|
||
/** | ||
* define for nested user parameter for box creation request | ||
|
@@ -53,10 +54,11 @@ const { User } = require('@sensebox/opensensemap-api-models'), | |
* @apiSuccess (Created 201) {Object} data `{ "user": {"name":"fullname","email":"[email protected]","role":"user","language":"en_US","boxes":[],"emailIsConfirmed":false} }` | ||
*/ | ||
const registerUser = async function registerUser (req, res) { | ||
const { email, password, language, name, integrations } = req._userParams; | ||
const { email, password, language, name } = req._userParams; | ||
|
||
try { | ||
const newUser = await new User({ name, email, password, language, integrations }).save(); | ||
const newUser = await createUser(name, email, password, language); | ||
|
||
postToMattermost( | ||
`New User: ${newUser.name} (${redactEmail(newUser.email)})` | ||
); | ||
|
@@ -101,18 +103,15 @@ const signIn = async function signIn (req, res) { | |
const { email: emailOrName, password } = req._userParams; | ||
|
||
try { | ||
// lowercase for email | ||
const user = await User.findOne({ | ||
$or: [{ email: emailOrName.toLowerCase() }, { name: emailOrName }], | ||
}).exec(); | ||
const user = await findUserByNameOrEmail(emailOrName); | ||
|
||
if (!user) { | ||
return Promise.reject( | ||
new ForbiddenError('User and or password not valid!') | ||
); | ||
} | ||
|
||
if (await user.checkPassword(password)) { | ||
if (await checkPassword(password, user.password)) { | ||
const { token, refreshToken } = await createToken(user); | ||
|
||
res.send(200, { | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
'use strict'; | ||
|
||
const config = require('config'); | ||
|
||
config.util.setModuleDefaults('opensensemap-migrations', { | ||
db: { | ||
host: 'localhost', | ||
port: 5432, | ||
user: 'postgres', | ||
userpass: 'postgres', | ||
db: 'opensensemap', | ||
database_url: '' | ||
}, | ||
}); | ||
|
||
const getDBUri = function getDBUri () { | ||
// get uri from config | ||
const uri = config.get('opensensemap-migrations.db.database_url'); | ||
if (uri) { | ||
return uri; | ||
} | ||
|
||
// otherwise build uri from config supplied values | ||
const { user, userpass, host, port, db } = config.get('opensensemap-migrations.db'); | ||
|
||
return `postgresql://${user}:${userpass}@${host}:${port}/${db}`; | ||
}; | ||
|
||
/** @type { import("drizzle-kit").Config } */ | ||
module.exports = { | ||
schema: './schema/*', | ||
out: './migrations', | ||
dialect: 'postgresql', | ||
dbCredentials: { | ||
url: getDBUri() | ||
} | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
'use strict'; | ||
|
||
const { pgEnum } = require('drizzle-orm/pg-core'); | ||
|
||
const deviceModel = pgEnum('model', [ | ||
'HOME_V2_LORA' | ||
]); | ||
|
||
const exposure = pgEnum('exposure', [ | ||
'indoor', | ||
'outdoor', | ||
'mobile', | ||
'unknown' | ||
]); | ||
|
||
const status = pgEnum('status', [ | ||
'active', | ||
'inactive', | ||
'old' | ||
]); | ||
|
||
module.exports = { | ||
deviceModel, | ||
exposure, | ||
status | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
'use strict'; | ||
|
||
const { pgTable, text, timestamp, doublePrecision, unique, pgMaterializedView, integer } = require('drizzle-orm/pg-core'); | ||
|
||
/** | ||
* Table definition | ||
*/ | ||
const measurement = pgTable('measurement', { | ||
sensorId: text('sensor_id').notNull(), | ||
time: timestamp('time', { precision: 3, withTimezone: true }).defaultNow() | ||
.notNull(), | ||
value: doublePrecision('value') | ||
}, (t) => ({ | ||
unq: unique().on(t.sensorId, t.time) | ||
})); | ||
|
||
/** | ||
* Views | ||
*/ | ||
const measurement10minView = pgMaterializedView('measurement_10min', { | ||
sensorId: text('sensor_id'), | ||
time: timestamp('time', { precision: 3, withTimezone: true }), | ||
value: doublePrecision('avg_value'), | ||
total_values: integer('total_values'), | ||
min_value: doublePrecision('min_value'), | ||
max_value: doublePrecision('max_value') | ||
}).existing(); | ||
|
||
const measurements1hourView = pgMaterializedView('measurement_1hour', { | ||
sensorId: text('sensor_id'), | ||
time: timestamp('time', { precision: 3, withTimezone: true }), | ||
value: doublePrecision('avg_value'), | ||
total_values: integer('total_values'), | ||
min_value: doublePrecision('min_value'), | ||
max_value: doublePrecision('max_value') | ||
}).existing(); | ||
|
||
const measurements1dayView = pgMaterializedView('measurement_1day', { | ||
sensorId: text('sensor_id'), | ||
time: timestamp('time', { precision: 3, withTimezone: true }), | ||
value: doublePrecision('avg_value'), | ||
total_values: integer('total_values'), | ||
min_value: doublePrecision('min_value'), | ||
max_value: doublePrecision('max_value') | ||
}).existing(); | ||
|
||
const measurements1monthView = pgMaterializedView('measurement_1month', { | ||
sensorId: text('sensor_id'), | ||
time: timestamp('time', { precision: 3, withTimezone: true }), | ||
value: doublePrecision('avg_value'), | ||
total_values: integer('total_values'), | ||
min_value: doublePrecision('min_value'), | ||
max_value: doublePrecision('max_value') | ||
}).existing(); | ||
|
||
const measurements1yearView = pgMaterializedView('measurement_1year', { | ||
sensorId: text('sensor_id'), | ||
time: timestamp('time', { precision: 3, withTimezone: true }), | ||
value: doublePrecision('avg_value'), | ||
total_values: integer('total_values'), | ||
min_value: doublePrecision('min_value'), | ||
max_value: doublePrecision('max_value') | ||
}).existing(); | ||
|
||
|
||
module.exports = { | ||
table: measurement, | ||
views: { | ||
measurement10minView, | ||
measurements1hourView, | ||
measurements1dayView, | ||
measurements1monthView, | ||
measurements1yearView | ||
} | ||
}; |
Oops, something went wrong.