Files
carmanagement/apps/api/src/modules/auth/auth.company.repo.ts
T
root 00d01bdaf4
Build & Deploy / Build & Push Docker Image (push) Successful in 3m8s
Test / Type Check (all packages) (push) Successful in 55s
Build & Deploy / Deploy to VPS (push) Successful in 3s
Test / API Unit Tests (push) Successful in 48s
Test / Homepage Unit Tests (push) Successful in 42s
Test / Carplace Unit Tests (push) Successful in 42s
Test / Admin Unit Tests (push) Successful in 40s
Test / Dashboard Unit Tests (push) Successful in 40s
Test / API Integration Tests (push) Successful in 1m0s
fix company login issue
2026-07-02 19:23:26 -04:00

148 lines
4.2 KiB
TypeScript

import { prisma } from '../../lib/prisma'
type DbClient = Pick<typeof prisma, 'company' | 'brandSettings' | 'contractSettings' | 'subscription' | 'employee'>
type CompanySignupInput = {
companyName: string
legalName: string
slug: string
ownerEmail: string
companyEmail: string
companyPhone: string
streetAddress: string
city: string
country: string
zipCode: string
legalForm: string
managerName: string
iceNumber: string
taxId: string
operatingLicenseNumber: string
operatingLicenseIssuedAt: string
operatingLicenseIssuedBy: string
fax?: string
yearsActive: string
representativeName?: string
representativeTitle?: string
responsibleName: string
responsibleRole: string
responsibleIdentityNumber: string
responsibleQualification?: string
responsiblePhone: string
responsibleEmail: string
currency: 'MAD'
registrationNumber: string
plan: 'STARTER' | 'GROWTH' | 'PRO'
billingPeriod: 'MONTHLY' | 'ANNUAL'
preferredLanguage: 'en' | 'fr' | 'ar'
firstName: string
lastName: string
passwordHash: string
now: Date
trialEndAt: Date
}
export function findCompanyBySlug(slug: string) {
return prisma.company.findUnique({ where: { slug } })
}
export function findCompanyByEmail(email: string) {
return prisma.company.findUnique({ where: { email } })
}
export function findEmployeeByEmail(email: string) {
return prisma.employee.findFirst({ where: { email } })
}
export async function createCompanySignup(db: DbClient, input: CompanySignupInput) {
const company = await db.company.create({
data: {
name: input.companyName,
slug: input.slug,
email: input.companyEmail,
phone: input.companyPhone,
address: {
streetAddress: input.streetAddress,
city: input.city,
country: input.country,
zipCode: input.zipCode,
legalName: input.legalName,
legalForm: input.legalForm,
companyEmail: input.companyEmail,
managerName: input.managerName,
iceNumber: input.iceNumber,
operatingLicenseNumber: input.operatingLicenseNumber,
operatingLicenseIssuedAt: input.operatingLicenseIssuedAt,
operatingLicenseIssuedBy: input.operatingLicenseIssuedBy,
fax: input.fax || null,
yearsActive: input.yearsActive,
representativeName: input.representativeName || null,
representativeTitle: input.representativeTitle || null,
responsibleName: input.responsibleName,
responsibleRole: input.responsibleRole,
responsibleIdentityNumber: input.responsibleIdentityNumber,
responsibleQualification: input.responsibleQualification || null,
responsiblePhone: input.responsiblePhone,
responsibleEmail: input.responsibleEmail,
},
status: 'TRIALING',
},
})
await db.brandSettings.create({
data: {
companyId: company.id,
displayName: input.companyName,
subdomain: input.slug,
publicEmail: input.companyEmail,
publicPhone: input.companyPhone,
publicAddress: input.streetAddress,
publicCity: input.city,
publicCountry: input.country,
defaultLocale: input.preferredLanguage,
defaultCurrency: input.currency,
},
})
await db.contractSettings.create({
data: {
companyId: company.id,
legalName: input.legalName,
registrationNumber: input.registrationNumber,
taxId: input.taxId,
},
})
await db.subscription.create({
data: {
companyId: company.id,
plan: input.plan,
billingPeriod: input.billingPeriod,
currency: input.currency,
status: 'TRIALING',
trialStartAt: input.now,
trialEndAt: input.trialEndAt,
currentPeriodStart: input.now,
currentPeriodEnd: input.trialEndAt,
},
})
const employee = await db.employee.create({
data: {
companyId: company.id,
clerkUserId: `local_owner_${company.id}`,
firstName: input.firstName,
lastName: input.lastName,
email: input.ownerEmail,
phone: input.companyPhone,
passwordHash: input.passwordHash,
emailVerified: input.now,
role: 'OWNER',
preferredLanguage: input.preferredLanguage,
isActive: true,
},
})
return { company, employee }
}