feat: implement internal auth user creation and update related functionalities
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import { createServiceRoleClient } from "@/lib/supabase/admin";
|
||||
|
||||
type InternalAuthUserRole = "freelancer" | "client";
|
||||
|
||||
type CreateInternalAuthUserInput = {
|
||||
email: string;
|
||||
password: string;
|
||||
role: InternalAuthUserRole;
|
||||
reason: string;
|
||||
};
|
||||
|
||||
export async function createInternalAuthUser({
|
||||
email,
|
||||
password,
|
||||
role,
|
||||
reason,
|
||||
}: CreateInternalAuthUserInput) {
|
||||
const admin = createServiceRoleClient();
|
||||
const normalizedEmail = email.trim().toLowerCase();
|
||||
|
||||
if (!normalizedEmail || !password) {
|
||||
throw new Error("E-posta ve şifre zorunludur.");
|
||||
}
|
||||
|
||||
const { error: guardError } = await admin.rpc(
|
||||
"request_internal_auth_creation",
|
||||
{
|
||||
target_email: normalizedEmail,
|
||||
target_reason: reason,
|
||||
},
|
||||
);
|
||||
|
||||
if (guardError) {
|
||||
throw new Error(
|
||||
`Kullanıcı oluşturma hazırlığı tamamlanamadı: ${guardError.message}`,
|
||||
);
|
||||
}
|
||||
|
||||
const { data, error } = await admin.auth.admin.createUser({
|
||||
email: normalizedEmail,
|
||||
password,
|
||||
email_confirm: true,
|
||||
app_metadata: {
|
||||
internal_created: true,
|
||||
role,
|
||||
},
|
||||
user_metadata: {
|
||||
role,
|
||||
},
|
||||
});
|
||||
|
||||
if (error) {
|
||||
throw new Error(error.message);
|
||||
}
|
||||
|
||||
if (!data.user?.id) {
|
||||
throw new Error("Kullanıcı oluşturuldu fakat kullanıcı kimliği alınamadı.");
|
||||
}
|
||||
|
||||
return {
|
||||
admin,
|
||||
user: data.user,
|
||||
userId: data.user.id,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user