From 31c590010f265ea4571e854dd199d2281432f8ec Mon Sep 17 00:00:00 2001
From: Kalle <38327916+Sendouc@users.noreply.github.com>
Date: Thu, 2 May 2024 20:21:34 +0300
Subject: [PATCH] Remove trusted users Closes #1640
---
.../QSettingsRepository.server.ts | 33 +++++++
.../q-settings-schemas.server.ts | 5 +
.../sendouq-settings/routes/q.settings.tsx | 95 ++++++++++++++++++-
locales/en/q.json | 5 +
4 files changed, 136 insertions(+), 2 deletions(-)
diff --git a/app/features/sendouq-settings/QSettingsRepository.server.ts b/app/features/sendouq-settings/QSettingsRepository.server.ts
index ac0a06540..c44ae3f72 100644
--- a/app/features/sendouq-settings/QSettingsRepository.server.ts
+++ b/app/features/sendouq-settings/QSettingsRepository.server.ts
@@ -1,6 +1,7 @@
import { db } from "~/db/sql";
import type { Tables, UserMapModePreferences } from "~/db/tables";
import { modesShort, type MainWeaponId } from "~/modules/in-game-lists";
+import { COMMON_USER_FIELDS } from "~/utils/kysely.server";
export async function settingsByUserId(userId: number) {
const preferences = await db
@@ -100,3 +101,35 @@ export function updateNoScreen({
.where("User.id", "=", userId)
.execute();
}
+
+export function currentTeamByUserId(userId: number) {
+ return db
+ .selectFrom("TeamMember")
+ .innerJoin("Team", "Team.id", "TeamMember.teamId")
+ .select(["Team.name"])
+ .where("TeamMember.userId", "=", userId)
+ .executeTakeFirst();
+}
+
+export function findTrustedUsersByGiverId(trustGiverUserId: number) {
+ return db
+ .selectFrom("TrustRelationship")
+ .innerJoin("User", "User.id", "TrustRelationship.trustReceiverUserId")
+ .select(COMMON_USER_FIELDS)
+ .where("TrustRelationship.trustGiverUserId", "=", trustGiverUserId)
+ .execute();
+}
+
+export function deleteTrustedUser({
+ trustGiverUserId,
+ trustReceiverUserId,
+}: {
+ trustGiverUserId: number;
+ trustReceiverUserId: number;
+}) {
+ return db
+ .deleteFrom("TrustRelationship")
+ .where("TrustRelationship.trustGiverUserId", "=", trustGiverUserId)
+ .where("TrustRelationship.trustReceiverUserId", "=", trustReceiverUserId)
+ .execute();
+}
diff --git a/app/features/sendouq-settings/q-settings-schemas.server.ts b/app/features/sendouq-settings/q-settings-schemas.server.ts
index a772cbd28..4179b21e3 100644
--- a/app/features/sendouq-settings/q-settings-schemas.server.ts
+++ b/app/features/sendouq-settings/q-settings-schemas.server.ts
@@ -3,6 +3,7 @@ import { languagesUnified } from "~/modules/i18n/config";
import {
_action,
checkboxValueToBoolean,
+ id,
modeShort,
noDuplicates,
safeJSONParse,
@@ -73,4 +74,8 @@ export const settingsActionSchema = z.union([
_action: _action("UPDATE_NO_SCREEN"),
noScreen: z.preprocess(checkboxValueToBoolean, z.boolean()),
}),
+ z.object({
+ _action: _action("REMOVE_TRUST"),
+ userToRemoveTrustFromId: id,
+ }),
]);
diff --git a/app/features/sendouq-settings/routes/q.settings.tsx b/app/features/sendouq-settings/routes/q.settings.tsx
index 9f3b652d2..3134bcf0a 100644
--- a/app/features/sendouq-settings/routes/q.settings.tsx
+++ b/app/features/sendouq-settings/routes/q.settings.tsx
@@ -44,6 +44,11 @@ import {
SENDOUQ_WEAPON_POOL_MAX_SIZE,
} from "../q-settings-constants";
import { settingsActionSchema } from "../q-settings-schemas.server";
+import { FormMessage } from "~/components/FormMessage";
+import { UsersIcon } from "~/components/icons/Users";
+import { Avatar } from "~/components/Avatar";
+import { FormWithConfirm } from "~/components/FormWithConfirm";
+import { Trans } from "react-i18next";
import "../q-settings.css";
@@ -100,6 +105,13 @@ export const action = async ({ request }: ActionFunctionArgs) => {
});
break;
}
+ case "REMOVE_TRUST": {
+ await QSettingsRepository.deleteTrustedUser({
+ trustGiverUserId: user.id,
+ trustReceiverUserId: data.userToRemoveTrustFromId,
+ });
+ break;
+ }
default: {
assertUnreachable(data);
}
@@ -113,6 +125,8 @@ export const loader = async ({ request }: LoaderFunctionArgs) => {
return {
settings: await QSettingsRepository.settingsByUserId(user.id),
+ trusted: await QSettingsRepository.findTrustedUsersByGiverId(user.id),
+ team: await QSettingsRepository.currentTeamByUserId(user.id),
};
};
@@ -124,6 +138,7 @@ export default function SendouQSettingsPage() {