feat: improve user init setup (#643)

This commit is contained in:
Meier Lukas
2024-06-08 23:35:48 +02:00
committed by GitHub
parent bac09d8be5
commit 3a3a8251bd

View File

@@ -4,7 +4,7 @@ import { observable } from "@trpc/server/observable";
import { createSaltAsync, hashPasswordAsync } from "@homarr/auth"; import { createSaltAsync, hashPasswordAsync } from "@homarr/auth";
import type { Database } from "@homarr/db"; import type { Database } from "@homarr/db";
import { and, createId, eq, schema } from "@homarr/db"; import { and, createId, eq, schema } from "@homarr/db";
import { invites, users } from "@homarr/db/schema/sqlite"; import { groupMembers, groupPermissions, groups, invites, users } from "@homarr/db/schema/sqlite";
import { exampleChannel } from "@homarr/redis"; import { exampleChannel } from "@homarr/redis";
import { validation, z } from "@homarr/validation"; import { validation, z } from "@homarr/validation";
@@ -25,7 +25,21 @@ export const userRouter = createTRPCRouter({
}); });
} }
await createUserAsync(ctx.db, input); const userId = await createUserAsync(ctx.db, input);
const groupId = createId();
await ctx.db.insert(groups).values({
id: groupId,
name: "admin",
ownerId: userId,
});
await ctx.db.insert(groupPermissions).values({
groupId,
permission: "admin",
});
await ctx.db.insert(groupMembers).values({
groupId,
userId,
});
}), }),
register: publicProcedure.input(validation.user.registrationApi).mutation(async ({ ctx, input }) => { register: publicProcedure.input(validation.user.registrationApi).mutation(async ({ ctx, input }) => {
const inviteWhere = and(eq(invites.id, input.inviteId), eq(invites.token, input.token)); const inviteWhere = and(eq(invites.id, input.inviteId), eq(invites.token, input.token));
@@ -244,6 +258,7 @@ const createUserAsync = async (db: Database, input: z.infer<typeof validation.us
password: hashedPassword, password: hashedPassword,
salt, salt,
}); });
return userId;
}; };
const checkUsernameAlreadyTakenAndThrowAsync = async (db: Database, username: string, ignoreId?: string) => { const checkUsernameAlreadyTakenAndThrowAsync = async (db: Database, username: string, ignoreId?: string) => {