Skip to content
This repository has been archived by the owner on Aug 11, 2024. It is now read-only.

Commit

Permalink
Rename locale to variant name
Browse files Browse the repository at this point in the history
  • Loading branch information
wpf500 committed Feb 23, 2024
1 parent 1f8af7e commit 8a3b4d1
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 20 deletions.
4 changes: 2 additions & 2 deletions src/api/dto/CalloutDto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export class GetCalloutOptsDto extends GetExportQuery {

@IsOptional()
@IsString()
locale?: string;
variant?: string;

// This property can only be set internally, not via query params
@Equals(false)
Expand All @@ -65,7 +65,7 @@ export class ListCalloutsDto extends GetPaginatedQuery {

@IsOptional()
@IsString()
locale?: string;
variant?: string;

@IsIn(["title", "starts", "expires"])
sort?: string;
Expand Down
2 changes: 1 addition & 1 deletion src/api/dto/CalloutVariantDto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { IsString, IsOptional, IsUrl } from "class-validator";

export class CalloutVariantDto implements CalloutVariantData {
@IsString()
locale!: string;
name!: string;

@IsString()
title!: string;
Expand Down
23 changes: 12 additions & 11 deletions src/api/transformers/CalloutTransformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ import {
PaginatedQuery
} from "@beabee/beabee-common";
import { TransformPlainToInstance } from "class-transformer";
import { BadRequestError, UnauthorizedError } from "routing-controllers";
import {
BadRequestError,
NotFoundError,
UnauthorizedError
} from "routing-controllers";
import { SelectQueryBuilder } from "typeorm";

import { createQueryBuilder } from "@core/database";
Expand All @@ -25,10 +29,10 @@ import { mergeRules, statusFilterHandler } from "@api/utils/rules";
import Contact from "@models/Contact";
import Callout from "@models/Callout";
import CalloutResponse from "@models/CalloutResponse";
import CalloutVariant from "@models/CalloutVariant";

import { AuthInfo } from "@type/auth-info";
import { FilterHandlers } from "@type/filter-handlers";
import CalloutVariant from "@models/CalloutVariant";

class CalloutTransformer extends BaseTransformer<
Callout,
Expand Down Expand Up @@ -80,14 +84,14 @@ class CalloutTransformer extends BaseTransformer<
convert(callout: Callout, opts?: GetCalloutOptsDto): GetCalloutDto {
const variants = Object.fromEntries(
callout.variants.map((variant) => [
variant.locale,
variant.name,
CalloutVariantTransformer.convert(variant)
])
);

const variant = variants[opts?.locale || "default"];
const variant = variants[opts?.variant || "default"];
if (!variant) {
throw new BadRequestError("No variant found for locale");
throw new NotFoundError(`Variant ${opts?.variant} not found`);
}

return {
Expand Down Expand Up @@ -186,12 +190,9 @@ class CalloutTransformer extends BaseTransformer<
}

// Always load a variant for filtering and sorting
qb.leftJoinAndSelect(
`${fieldPrefix}variants`,
"cvd",
"cvd.locale = :locale",
{ locale: query.locale || "default" }
);
qb.leftJoinAndSelect(`${fieldPrefix}variants`, "cvd", "cvd.name = :name", {
name: query.variant || "default"
});

if (query.sort === "title") {
qb.orderBy("cvd.title", query.order || "ASC");
Expand Down
2 changes: 1 addition & 1 deletion src/api/transformers/CalloutVariantTransformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class CalloutVariantTransformer extends BaseTransformer<
@TransformPlainToInstance(CalloutVariantDto)
convert(variant: CalloutVariant): CalloutVariantDto {
return {
locale: variant.locale,
name: variant.name,
title: variant.title,
excerpt: variant.excerpt,
intro: variant.intro,
Expand Down
2 changes: 1 addition & 1 deletion src/apps/share/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ async function getCalloutShareSettings(
.getOne();

if (callout) {
const variant = callout.variants.find((v) => v.locale === locale);
const variant = callout.variants.find((v) => v.name === locale);
if (!variant) {
throw new Error(
`No variant found for callout ${callout.slug} and locale ${locale}`
Expand Down
4 changes: 2 additions & 2 deletions src/core/services/CalloutsService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -349,10 +349,10 @@ class CalloutsService {
responderName: string
): Promise<void> {
const variant =
callout.variants.find((v) => v.locale === "default") ||
callout.variants.find((v) => v.name === "default") ||
(await getRepository(CalloutVariant).findOneBy({
calloutId: callout.id,
locale: "default"
name: "default"
}));

await EmailService.sendTemplateToAdmin("new-callout-response", {
Expand Down
31 changes: 31 additions & 0 deletions src/migrations/1708688873027-ChangeVariantLocaleToName.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { MigrationInterface, QueryRunner } from "typeorm";

export class ChangeVariantLocaleToName1708688873027
implements MigrationInterface
{
name = "ChangeVariantLocaleToName1708688873027";

public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "callout_variant" DROP CONSTRAINT "FK_59870aea0a069e0beadd31b5853"`
);
await queryRunner.query(
`ALTER TABLE "callout_variant" RENAME COLUMN "locale" TO "name"`
);
await queryRunner.query(
`ALTER TABLE "callout_variant" ADD CONSTRAINT "FK_0b3fcedbb2f66d24718bbe58d41" FOREIGN KEY ("calloutId") REFERENCES "callout"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`
);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "callout_variant" DROP CONSTRAINT "FK_0b3fcedbb2f66d24718bbe58d41"`
);
await queryRunner.query(
`ALTER TABLE "callout_variant" RENAME COLUMN "name" TO "locale"`
);
await queryRunner.query(
`ALTER TABLE "callout_variant" ADD CONSTRAINT "FK_59870aea0a069e0beadd31b5853" FOREIGN KEY ("calloutId") REFERENCES "callout"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`
);
}
}
2 changes: 1 addition & 1 deletion src/models/CalloutVariant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export default class CalloutVariant {
callout!: Callout;

@PrimaryColumn()
locale!: string;
name!: string;

@Column()
title!: string;
Expand Down
2 changes: 1 addition & 1 deletion src/type/callout-variant-data.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export interface CalloutVariantData {
locale: string;
name: string;
title: string;
excerpt: string;
intro: string;
Expand Down

0 comments on commit 8a3b4d1

Please sign in to comment.