Move user upsert code to auth.ts

Pretty ugly to do it this way but otherwise server won't run
and don't feel like setting ts paths for ts-node
This commit is contained in:
Kalle (Sendou)
2021-12-18 12:33:09 +02:00
parent 862061243f
commit acdbc34223
3 changed files with 52 additions and 96 deletions

View File

@@ -1,43 +0,0 @@
import { db } from "~/utils/db.server";
export function upsert({
discordId,
discordName,
discordDiscriminator,
discordAvatar,
discordRefreshToken,
connections,
}: {
discordId: string;
discordName: string;
discordDiscriminator: string;
discordAvatar: string | null;
discordRefreshToken: string;
connections: {
twitch?: string;
twitter?: string;
youtubeId?: string;
youtubeName?: string;
} | null;
}) {
return db.user.upsert({
create: {
discordId,
discordName,
discordDiscriminator,
discordAvatar,
discordRefreshToken,
...connections,
},
update: {
discordName,
discordDiscriminator,
discordAvatar,
discordRefreshToken,
...connections,
},
where: {
discordId,
},
});
}

View File

@@ -1,53 +1,3 @@
import type { Strategy as DiscordStrategy } from "passport-discord";
import * as TrustRelationship from "~/models/TrustRelationship";
import * as User from "~/models/User";
export async function upsertUser({
loggedInUser,
refreshToken,
}: {
loggedInUser: DiscordStrategy.Profile;
refreshToken: string;
}) {
return User.upsert({
discordId: loggedInUser.id,
discordName: loggedInUser.username,
discordDiscriminator: loggedInUser.discriminator,
discordAvatar: loggedInUser.avatar,
discordRefreshToken: refreshToken,
connections: parseConnections(),
});
function parseConnections() {
if (!loggedInUser.connections) return null;
const result: {
twitch?: string;
twitter?: string;
youtubeId?: string;
youtubeName?: string;
} = {};
for (const connection of loggedInUser.connections) {
if (connection.visibility !== 1 || !connection.verified) continue;
switch (connection.type) {
case "twitch":
result.twitch = connection.name;
break;
case "twitter":
result.twitter = connection.name;
break;
case "youtube":
result.youtubeId = connection.id;
result.youtubeName = connection.name;
}
}
return result;
}
}
export function getTrustingUsers(userId: string) {
return TrustRelationship.findManyByTrustReceiverId(userId);
}
export const getTrustingUsers = TrustRelationship.findManyByTrustReceiverId;

View File

@@ -4,7 +4,7 @@ import session from "express-session";
import cookieParser from "cookie-parser";
import passport from "passport";
import { Strategy as DiscordStrategy } from "passport-discord";
import { upsertUser } from "../app/services/user";
import { db } from "../app/utils/db.server";
export function setUpAuth(app: Express): void {
invariant(
@@ -30,7 +30,27 @@ export function setUpAuth(app: Express): void {
scope: ["identify", "connections"],
},
function (_accessToken, refreshToken, loggedInUser, cb) {
upsertUser({ loggedInUser, refreshToken })
db.user
.upsert({
create: {
discordId: loggedInUser.id,
discordName: loggedInUser.username,
discordDiscriminator: loggedInUser.discriminator,
discordAvatar: loggedInUser.avatar,
discordRefreshToken: refreshToken,
...parseConnections(),
},
update: {
discordName: loggedInUser.username,
discordDiscriminator: loggedInUser.discriminator,
discordAvatar: loggedInUser.avatar,
discordRefreshToken: refreshToken,
...parseConnections(),
},
where: {
discordId: loggedInUser.id,
},
})
.then((user) => {
return cb(null, {
id: user.id,
@@ -39,6 +59,35 @@ export function setUpAuth(app: Express): void {
});
})
.catch((err) => cb(err));
function parseConnections() {
if (!loggedInUser.connections) return null;
const result: {
twitch?: string;
twitter?: string;
youtubeId?: string;
youtubeName?: string;
} = {};
for (const connection of loggedInUser.connections) {
if (connection.visibility !== 1 || !connection.verified) continue;
switch (connection.type) {
case "twitch":
result.twitch = connection.name;
break;
case "twitter":
result.twitter = connection.name;
break;
case "youtube":
result.youtubeId = connection.id;
result.youtubeName = connection.name;
}
}
return result;
}
}
)
);