driver to user id
This commit is contained in:
98
core/identity/domain/entities/Company.ts
Normal file
98
core/identity/domain/entities/Company.ts
Normal file
@@ -0,0 +1,98 @@
|
||||
import { UserId } from '../value-objects/UserId';
|
||||
|
||||
export interface CompanyProps {
|
||||
id: string;
|
||||
name: string;
|
||||
ownerUserId: UserId;
|
||||
contactEmail: string | undefined;
|
||||
createdAt: Date;
|
||||
}
|
||||
|
||||
export class Company {
|
||||
private readonly id: string;
|
||||
private readonly name: string;
|
||||
private readonly ownerUserId: UserId;
|
||||
private readonly contactEmail: string | undefined;
|
||||
private readonly createdAt: Date;
|
||||
|
||||
private constructor(props: CompanyProps) {
|
||||
this.validateName(props.name);
|
||||
|
||||
this.id = props.id;
|
||||
this.name = props.name;
|
||||
this.ownerUserId = props.ownerUserId;
|
||||
this.contactEmail = props.contactEmail;
|
||||
this.createdAt = props.createdAt;
|
||||
}
|
||||
|
||||
private validateName(name: string): void {
|
||||
const trimmed = name?.trim();
|
||||
|
||||
if (!trimmed) {
|
||||
throw new Error('Company name cannot be empty');
|
||||
}
|
||||
|
||||
if (trimmed.length < 2) {
|
||||
throw new Error('Company name must be at least 2 characters long');
|
||||
}
|
||||
|
||||
if (trimmed.length > 100) {
|
||||
throw new Error('Company name must be no more than 100 characters');
|
||||
}
|
||||
}
|
||||
|
||||
public static create(props: {
|
||||
name: string;
|
||||
ownerUserId: UserId;
|
||||
contactEmail?: string;
|
||||
}): Company {
|
||||
return new Company({
|
||||
id: this.generateId(),
|
||||
name: props.name,
|
||||
ownerUserId: props.ownerUserId,
|
||||
contactEmail: props.contactEmail,
|
||||
createdAt: new Date(),
|
||||
});
|
||||
}
|
||||
|
||||
public static rehydrate(props: {
|
||||
id: string;
|
||||
name: string;
|
||||
ownerUserId: string;
|
||||
contactEmail?: string;
|
||||
createdAt: Date;
|
||||
}): Company {
|
||||
return new Company({
|
||||
id: props.id,
|
||||
name: props.name,
|
||||
ownerUserId: UserId.fromString(props.ownerUserId),
|
||||
contactEmail: props.contactEmail,
|
||||
createdAt: props.createdAt,
|
||||
});
|
||||
}
|
||||
|
||||
private static generateId(): string {
|
||||
// Simple UUID-like generation for now
|
||||
return `comp_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
||||
}
|
||||
|
||||
public getId(): string {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public getName(): string {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public getOwnerUserId(): UserId {
|
||||
return this.ownerUserId;
|
||||
}
|
||||
|
||||
public getContactEmail(): string | undefined {
|
||||
return this.contactEmail;
|
||||
}
|
||||
|
||||
public getCreatedAt(): Date {
|
||||
return this.createdAt;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user