-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathCreateVariant.ts
More file actions
41 lines (35 loc) · 1.26 KB
/
Copy pathCreateVariant.ts
File metadata and controls
41 lines (35 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import { GuildVariant } from "../domain/GuildVariant";
import { VariantRepository } from "../repository/VariantRepository";
export type CreateVariantParams = {
guildId: string;
variantName: string;
displayName?: string;
hostname?: string;
defaultCfgs?: Record<string, string>;
admins?: string[];
image?: string;
}
export class CreateVariant {
constructor(private readonly dependencies: {
variantRepository: VariantRepository;
}) {}
async execute(params: CreateVariantParams): Promise<GuildVariant> {
const existingVariant = await this.dependencies.variantRepository.findByGuildIdAndName({
guildId: params.guildId,
variantName: params.variantName,
});
if (existingVariant) {
throw new Error(`Variant ${params.variantName} already exists for this guild`);
}
const variant: GuildVariant = {
guildId: params.guildId,
variantName: params.variantName,
displayName: params.displayName,
hostname: params.hostname,
defaultCfgs: params.defaultCfgs,
admins: params.admins,
image: params.image,
};
return await this.dependencies.variantRepository.create({ variant });
}
}