feat(follow-location): init
All checks were successful
/ build (map[dockerfile:./services/watchers/Dockerfile name:watchers]) (push) Successful in 2m23s
/ build (map[dockerfile:./services/hasura/Dockerfile name:hasura]) (push) Successful in 1m10s
/ build (map[dockerfile:./services/app/Dockerfile name:app]) (push) Successful in 1m0s
/ build (map[dockerfile:./services/web/Dockerfile name:web]) (push) Successful in 1m27s
/ build (map[dockerfile:./services/files/Dockerfile name:files]) (push) Successful in 2m40s
/ build (map[dockerfile:./services/tasks/Dockerfile name:tasks]) (push) Successful in 2m33s
/ build (map[dockerfile:./services/api/Dockerfile name:api]) (push) Successful in 2m50s
/ deploy (push) Successful in 15s

This commit is contained in:
devthejo 2025-05-25 09:25:04 +02:00
parent 85bc0683a8
commit 91d3258533
10 changed files with 93 additions and 2 deletions

View file

@ -30,6 +30,7 @@ module.exports = function () {
callEmergency,
notifyAround,
notifyRelatives,
followLocation,
level,
subject,
accuracy,
@ -54,8 +55,8 @@ module.exports = function () {
let alertId
await sql.begin(async () => {
const [{ id }] = await sql`
INSERT INTO "alert" ("uuid", "device_id", "user_id", "call_emergency", "notify_around", "notify_relatives", "level", "subject", "location", "accuracy", "altitude", "altitude_accuracy", "heading", "speed", "code", "access_code")
VALUES (${uuid}, ${deviceId}, ${userId}, ${callEmergency}, ${notifyAround}, ${notifyRelatives}, ${level}, ${subject}, ST_GeomFromGeoJSON (${locationJSON}), ${accuracy}, ${altitude}, ${altitudeAccuracy}, ${heading}, ${speed}, ${code}, ${accessCode})
INSERT INTO "alert" ("uuid", "device_id", "user_id", "call_emergency", "notify_around", "notify_relatives", "follow_location", "level", "subject", "location", "initial_location", "accuracy", "altitude", "altitude_accuracy", "heading", "speed", "code", "access_code")
VALUES (${uuid}, ${deviceId}, ${userId}, ${callEmergency}, ${notifyAround}, ${notifyRelatives}, ${followLocation}, ${level}, ${subject}, ST_GeomFromGeoJSON (${locationJSON}), ST_GeomFromGeoJSON (${locationJSON}), ${accuracy}, ${altitude}, ${altitudeAccuracy}, ${heading}, ${speed}, ${code}, ${accessCode})
ON CONFLICT ("uuid")
DO UPDATE SET
"uuid" = EXCLUDED. "uuid"

View file

@ -14,6 +14,8 @@ requestBody:
type: boolean
notifyRelatives:
type: boolean
followLocation:
type: boolean
uuid:
type: string
format: uuid

View file

@ -33,6 +33,12 @@ configuration:
custom_name: deviceId
emergency_calling_notification_sent:
custom_name: emergencyCallingNotificationSent
follow_location:
custom_name: followLocation
follow_location_ran:
custom_name: followLocationRan
initial_location:
custom_name: initialLocation
keep_open_at:
custom_name: keepOpenAt
nearest_place:
@ -71,6 +77,9 @@ configuration:
created_at: createdAt
device_id: deviceId
emergency_calling_notification_sent: emergencyCallingNotificationSent
follow_location: followLocation
follow_location_ran: followLocationRan
initial_location: initialLocation
keep_open_at: keepOpenAt
nearest_place: nearestPlace
notified_count: notifiedCount
@ -128,8 +137,11 @@ select_permissions:
- closed_at
- code
- created_at
- follow_location
- follow_location_ran
- heading
- id
- initial_location
- keep_open_at
- level
- location
@ -166,8 +178,11 @@ select_permissions:
- closed_at
- code
- created_at
- follow_location
- follow_location_ran
- heading
- id
- initial_location
- keep_open_at
- level
- location
@ -193,6 +208,7 @@ update_permissions:
permission:
columns:
- alert_tag
- follow_location
- level
- subject
filter:

View file

@ -0,0 +1,4 @@
-- Could not auto-generate a down migration.
-- Please write an appropriate down migration for the SQL below:
-- alter table "public"."alert" add column "initial_location" geography
-- null;

View file

@ -0,0 +1,2 @@
alter table "public"."alert" add column "initial_location" geography
null;

View file

@ -0,0 +1,4 @@
-- Could not auto-generate a down migration.
-- Please write an appropriate down migration for the SQL below:
-- alter table "public"."alert" add column "follow_location" boolean
-- not null default 'false';

View file

@ -0,0 +1,2 @@
alter table "public"."alert" add column "follow_location" boolean
not null default 'false';

View file

@ -0,0 +1,4 @@
-- Could not auto-generate a down migration.
-- Please write an appropriate down migration for the SQL below:
-- alter table "public"."alert" add column "follow_location_ran" boolean
-- not null default 'false';

View file

@ -0,0 +1,2 @@
alter table "public"."alert" add column "follow_location_ran" boolean
not null default 'false';

View file

@ -0,0 +1,54 @@
const async = require("async")
const { gql } = require("@apollo/client/core")
const { ctx } = require("@modjo/core")
// const watcherCtx = require("modjo-plugins/core/ctx/watcher")
// const tasks = require("~/tasks")
const ALERT_FOLLOW_LOCATION_SUBSCRIPTION = gql`
subscription onAlertFollowLocation($limit: Int) {
selectManyAlert(
where: { _and: { state: { _eq: "open" }, followLocation: { _eq: true } } }
limit: $limit
order_by: { id: asc }
) {
id
}
}
`
module.exports = async function () {
const logger = ctx.require("logger")
const apolloClient = ctx.require("apolloClient")
// const { addTask } = ctx.require("amqp")
// const QUEUE_BATCH_SIZE = null
const QUEUE_BATCH_SIZE = 1000
return async function alertTableFollowLocation() {
logger.info("watcher alertTableFollowLocation: daemon started")
const observable = apolloClient.subscribe({
query: ALERT_FOLLOW_LOCATION_SUBSCRIPTION,
variables: {
limit: QUEUE_BATCH_SIZE,
},
})
observable.subscribe({
next: async ({ data }) => {
const { selectManyAlert } = data
await async.eachOf(selectManyAlert, async ({ id: _id }) => {
// TODO
})
},
error: (error) => {
logger.error(
{ error, watcher: "alertTableFollowLocation" },
`subscription error`
)
throw error
},
})
}
}