From 3758c742e5d938780b4e565f78319fa9ac361301 Mon Sep 17 00:00:00 2001
From: clauspeterhuebner
Date: Tue, 26 Nov 2024 01:50:42 +0100
Subject: [PATCH] add query userLocation
---
.../src/graphql/model/UserLocationResult.ts | 12 ++++++++++
backend/src/graphql/resolver/UserResolver.ts | 22 +++++++++++++++++--
backend/src/seeds/graphql/queries.ts | 9 ++++++++
3 files changed, 41 insertions(+), 2 deletions(-)
create mode 100644 backend/src/graphql/model/UserLocationResult.ts
diff --git a/backend/src/graphql/model/UserLocationResult.ts b/backend/src/graphql/model/UserLocationResult.ts
new file mode 100644
index 000000000..5f51b53ab
--- /dev/null
+++ b/backend/src/graphql/model/UserLocationResult.ts
@@ -0,0 +1,12 @@
+import { Field, ObjectType } from 'type-graphql'
+
+import { Location } from './Location'
+
+@ObjectType()
+export class UserLocationResult {
+ @Field(() => Location)
+ userLocation: Location
+
+ @Field(() => Location)
+ communityLocation: Location
+}
diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts
index 79217328f..267cf626c 100644
--- a/backend/src/graphql/resolver/UserResolver.ts
+++ b/backend/src/graphql/resolver/UserResolver.ts
@@ -2,7 +2,7 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
/* eslint-disable @typescript-eslint/restrict-template-expressions */
-import { getConnection, In } from '@dbTools/typeorm'
+import { getConnection, In, Point } from '@dbTools/typeorm'
import { ContributionLink as DbContributionLink } from '@entity/ContributionLink'
import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink'
import { User as DbUser } from '@entity/User'
@@ -29,6 +29,7 @@ import { SearchAdminUsersResult } from '@model/AdminUser'
import { GmsUserAuthenticationResult } from '@model/GmsUserAuthenticationResult'
import { User } from '@model/User'
import { UserAdmin, SearchUsersResult } from '@model/UserAdmin'
+import { UserLocationResult } from '@model/UserLocationResult'
import { updateGmsUser } from '@/apis/gms/GmsClient'
import { GmsUser } from '@/apis/gms/model/GmsUser'
@@ -81,7 +82,7 @@ import { getUserCreations } from './util/creations'
import { findUserByIdentifier } from './util/findUserByIdentifier'
import { findUsers } from './util/findUsers'
import { getKlicktippState } from './util/getKlicktippState'
-import { Location2Point } from './util/Location2Point'
+import { Location2Point, Point2Location } from './util/Location2Point'
import { setUserRole, deleteUserRole } from './util/modifyUserRole'
import { sendUserToGms } from './util/sendUserToGms'
import { syncHumhub } from './util/syncHumhub'
@@ -744,6 +745,23 @@ export class UserResolver {
return result
}
+ @Authorized([RIGHTS.GMS_USER_PLAYGROUND])
+ @Query(() => UserLocationResult)
+ async userLocation(@Ctx() context: Context): Promise {
+ logger.info(`userLocation()...`)
+ const dbUser = getUser(context)
+ const result = new UserLocationResult()
+ if (context.token) {
+ const homeCom = await getHomeCommunity()
+ result.communityLocation = Point2Location(homeCom.location as Point)
+ result.userLocation = Point2Location(dbUser.location as Point)
+ logger.info('userLocation=', result)
+ } else {
+ throw new LogError('userLocation missing valid user login-token')
+ }
+ return result
+ }
+
@Authorized([RIGHTS.HUMHUB_AUTO_LOGIN])
@Query(() => String)
async authenticateHumhubAutoLogin(@Ctx() context: Context): Promise {
diff --git a/backend/src/seeds/graphql/queries.ts b/backend/src/seeds/graphql/queries.ts
index b097a2710..0365f07a4 100644
--- a/backend/src/seeds/graphql/queries.ts
+++ b/backend/src/seeds/graphql/queries.ts
@@ -24,6 +24,15 @@ export const authenticateGmsUserSearch = gql`
}
`
+export const userLocationQuery = gql`
+ query {
+ userLocation {
+ userLocation
+ communityLocation
+ }
+ }
+`
+
export const queryOptIn = gql`
query ($optIn: String!) {
queryOptIn(optIn: $optIn)